Synthesia needs a Legacy (v2) key; Sume keys carry scopes per call
Synthesia's quickstart warns an Interactive Avatars key will not create videos. Sume uses one bearer key whose scopes gate Formats, jobs and webhooks.

Synthesia's quickstart says video API requests need a Legacy (v2)-scoped key, not an Interactive Avatars-scoped one. Pick the wrong key type and the call can fail for a reason that is a product mix-up rather than a code bug. Sume has no such split: you send a bearer key, and its scopes decide what that key may do. Format calls, for example, need formats:write to create a run and formats:read to read one.
Synthesia source: API quickstart, read 2026-10-04. Sume source: Calling a Format.
The two models side by side
Synthesia ties the key to a product scope. Sume ties it to operations. In both cases the cure for a mysterious 401 or 403 is the same: check which key your server is actually sending.
| Topic | Synthesia | Sume |
|---|---|---|
| Key picks the product | Legacy (v2) vs Interactive Avatars | No; scopes pick the operations |
| Header | API key in the Authorization header | Authorization: Bearer $SUME_API_KEY |
| Create a Format run | Not applicable | Needs formats:write |
| Read a Format run | Not applicable | Needs formats:read |
| Wrong key or scope | Rejected by the product mismatch | 401 for a bad credential, 403 for a missing scope |
Debugging a rejected key on Sume
Check three things in order. First, the workspace: Sume keys are workspace-scoped, so confirm the key belongs to the workspace you expect. Second, the header: send one credential, not two. Third, the scope: a service-account key cannot create Format runs at all, per the Format docs, and a read-only key cannot start one.
- Log which workspace the key belongs to.
- Log only the last four characters of a key.
- Create separate keys per environment and name the variable by host, not by prefix.
Keep keys server-side
Never place either vendor's key in client code. For browser products, add an endpoint of your own that calls the vendor and returns only the job id or the finished URL. That endpoint is also the place to cap spend per customer, using generation_spend_cap_usd on a Format run.
Bottom line
If you are migrating from Synthesia, drop the idea of a per-product key and give each service its own Sume key with only the scopes it needs. The authentication page covers creating them.
Sources
Related posts
More in Developers
- Synthesia says 3 to 5 minutes per video; how to watch a Sume job
Synthesia's quickstart says videos usually finish in 3 to 5 minutes. Sume avatar jobs run async; read status, then the events endpoint for a slow render.
- Hourly synthetic monitor for an image API on a cheap Sume model
A scheduled script that makes one real image call, checks status, URL and latency, and exits non-zero on failure. Budget it from the endpoint's cost_usd.
- End-user id on jobs: OpenAI safety identifier vs Sume metadata
OpenAI's Realtime guide asks for an OpenAI-Safety-Identifier header. Sume stores caller metadata on the job but does not send it to the provider. Use both.
- Temporal Paygo starter: submit and poll a Sume job
Temporal's Paygo plan has a $0 monthly minimum. A first workflow can submit a Sume job in one Activity and poll its status in a second. Python code included.
Written by Sume