Team Format returns 403 workspace_key_required: which key to mint
A personal key on a team Format gets 403 workspace_key_required. details.workspace_id names the workspace. Create the key there. Other keys see 404.

403 workspace_key_required means you called a team Format with a personal API key. Create a key in the team workspace named in error.details.workspace_id and call again. Team membership alone is not enough: the run bills the team wallet and counts against the team's generation concurrency, so the key must come from that workspace.
What the error looks like
The body is a normal error envelope with code: workspace_key_required and a message that says to create a key in that workspace. details.workspace_id holds the org id. The status class is the first branch and the code is the second, so a script can switch on the code.
Which answer you get
The answer depends on who you are and what key you used. The table is from the Create a run docs, as of 2026-10-09.
| Caller | Result |
|---|---|
| Member, personal key | 403 workspace_key_required |
| Member, team key from that workspace | Run starts (needs formats:write) |
| Team key from another workspace with an accepted grant | Run starts, billed to the caller's workspace |
| Team key from another workspace, no grant or grant pending | 404 format_not_found |
| Not a member, any personal key | 404 format_not_found |
| Key without the scope | 403 insufficient_scope, never a 404 |
Steps to fix it
Follow these in order.
- Open the team workspace's dashboard and create an API key there. Scopes are fixed when a key is minted, so a key made before the Formats API will lack
formats:readandformats:write; make a new one. - Use the key for the same
POST /v1/formats/{handle}/{slug}/runscall. Keep the team handle in the path. - Do not use a service-account key for run creation: it fails with
403 insufficient_scopeanddetails.reasonset toservice_account_format_runs_unsupported. - Keep personal Formats on personal keys; they stay correct there.
Why the 404 exists
A Format that someone else owns answers 404 by design, so the API does not show that the Format exists at that address. For that reason, a 403 workspace_key_required always means the right team and the wrong key.
Why the rule is the way it is
The docs explain the reason. A team Format's runs bill the team wallet, count against the team's generation concurrency and read their media back through the team workspace. A personal key can split those three, and in the past a personal key produced runs that made a real video and then reported output_schema_unsatisfied with nothing harvested. The 403 stops that case at the door.
A practical habit: keep one key per workspace and name them so you can tell them apart in your secret store, for example by the team handle. Rotate by creating the new key first, switching your service, and then revoking the old one. Reads follow the same rule: a team key lists the Formats of that workspace for every member and never your personal Formats.
If you are not sure which workspace a key belongs to, call a read such as GET /v1/formats with it and look at which Formats come back. A team key lists that workspace's Formats, and a personal key lists your personal ones. That is a quick test before you spend time on a run, and it costs nothing.
Sources
Related posts
More in Formats
- Ready-made Formats for product video: the Sume Format catalog
Sume ships ready-made Formats for product and UGC-style video and images, each callable from your backend with one HTTP request at the reserved sume handle.
- What is a Sume Format? Turn an agent thread into one API call
A Sume Format is a saved video recipe your backend calls by handle and slug. One POST runs it in a fresh sandbox and returns media plus optional typed JSON.
- How to embed AI video generation in your product with Sume Formats
To embed AI video generation, your server holds one Sume API key and runs a Format per customer, with a derived Idempotency-Key, spend cap, and webhook.
- Sume Format bulk runs: queue up to 100 renders in one request
A Sume bulk request queues 1 to 100 ordinary Format runs on the server and keeps 1 to 16 in flight. Poll one queue URL; read each child as a normal run.
Written by Sume