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
- Instagram Reels API: a 100-posts-per-24-hours publish budget
The Instagram content publishing API limits an account to 100 API-published posts per moving 24 hours. A tested Python queue that spreads batch output under it.
- Keep your Sora-style create_video() call: map it onto Sume
Sora's seconds, size and input_reference become duration, resolution plus aspect_ratio, and a first frame. Here is that map as a Python wrapper over Sume.
- Luma callback_url or polling: which Sume job mode matches
Luma's API docs list keyframes, loop and callback_url for ray-2. On Sume the equivalent choice is job mode: async, sync up to 30 s, subscribe or webhook.
- Luma API callback_url vs Sume callback_url: signing and retries
Luma's video API takes a callback_url, and so does Sume's /v1/videos. What Sume's callback is signed with, how often it retries, and a Python verifier.
Written by Sume