How to get an AI video generation API key: Sume steps and gotchas
Create a workspace API key in the Sume dashboard, send it as one header, check it with GET /v1/me, and keep it on your server. Scopes are fixed at creation.

To get a Sume API key, create one in the API Keys dashboard, keep it in a server-side environment variable, and send it as either a Bearer token or an x-api-key header, but not both. Check it with GET /v1/me before you build anything on it.
Autocomplete for the query 'ai video generation api' offered completions such as key, key free and pricing when fetched on 2026-10-03, so this post answers the key question directly.
Steps
- Create a key in the dashboard. Keys are workspace-scoped.
- Store it as
SUME_API_KEYin your server environment. - Call
GET https://api.sume.com/v1/meto confirm it works. - Submit work to a generation endpoint with an
Idempotency-Keyheader.
Sending the key
Both forms below are accepted by the current API. Use one consistently in each integration.
export SUME_API_KEY="sume_live_..."
curl https://api.sume.com/v1/me \
-H "Authorization: Bearer $SUME_API_KEY"
# or
curl https://api.sume.com/v1/me \
-H "x-api-key: $SUME_API_KEY"Gotchas from the docs
| Gotcha | What happens |
|---|---|
| Sending both headers | 401 unauthorized with the message 'Send only one API key credential.' Neither header wins. |
| Scopes added later | Not possible. Scopes are fixed at creation; there is no API to patch them onto an existing key. |
| Old key, newer feature | A key created before a scope existed returns 403 insufficient_scope, not a 404. |
| Workspace fields in bodies | Do not send workspace_id or user_id; the key resolves them. |
| Full secret in responses | Never returned; responses show id, name, prefix, scopes and last-used time. |
Keep the key off the client
Browser and mobile apps should call your own backend, and your backend should attach the key. The docs show a server route that forwards the body to a Sume endpoint with the key and a fresh Idempotency-Key, after you validate input and enforce your own authorization.
Do not put the key in a prompt or a chat. If one appears in a log or a transcript, rotate it.
What happens on the first paid request
A valid submit is accepted as a durable job and returns an id. It may start at once or wait in queued until a concurrency slot opens. Balance is reserved at accept time. If it cannot be reserved the submit fails with 402 insufficient_credits before any provider work starts.
Then poll GET /v1/jobs/:id/status or take a signed webhook, and fetch the result when it is ready. A client timeout does not cancel the job.
Sources
Related posts
More in Developers
- How to read what one agent run cost on Sume with the usage API
Pass a run id to GET /v1/usage and Sume sums every ledger row the run caused. A short Python script prints debited, held and refunded dollars.
- A Hurl file for a Sume job: submit, poll until terminal, fetch
A plain-text Hurl file chains submit, a retrying status poll on data.terminal, and the result read. Run it in CI with hurl --variable and an Idempotency-Key.
- Idempotency keys for a SKU catalog: SKU, asset, version
A fresh uuid per request makes Sume's Idempotency-Key decorative. Build it from SKU, asset and version so a retried holiday batch is not charged twice.
- Idempotency keys for batch TTS: derive them from what you render
A retry loop that mints random keys pays twice. Hash the sentence, voice, model and settings into the key, and re-running a script returns the first job.
Written by Sume