Settings → API keys.
Create a scoped key and an external agent can drive the studio — "have my agent produce this week's product video."
### Agents talk to the Director, not the graph
This is the important design decision. Exposing graph operations directly as REST would be simpler and wrong: every safety property lives in the Director's plan-then-approve loop — cost estimates before spending, cascade impact before regenerating, the storyboard gate, moderation.
An agent driving primitives directly bypasses all of it, and would eventually cascade a regeneration across four hundred shots because it misread a dependency.
So the direct tool takes a note in plain language and returns a plan with a cost estimate and the shots it would touch. Nothing runs until approve_plan.
### Keys
Stored as a SHA-256 hash. The plaintext is shown once, at creation, and cannot be recovered — a key you can read back out of a settings page is a key in every backup and every screenshot.
Every key carries a spend cap enforced server-side, outside the agent. An agent that has been talked into spending more cannot, because the thing counting its credits is not a thing it can talk to. A key with the generate scope must have a cap above zero; "unlimited" on an autonomous agent's key is an incident waiting for a retry loop.
Keys can be restricted to a single project, and a key whose owner is banned or suspended stops working.
### The manifest
GET /api/v1/agent/manifest is public and describes every tool, its required scope and whether it spends credits. Point a Claude-class agent at it and it can work out how to drive the studio without documentation.
### Everything else is unchanged
API-driven generation passes the same moderation pipeline and the same billing paths as the web app.