One shared key after Sora? Who can read which Sume job
Sume jobs belong to the member whose key created them. If a worker and a web app use different keys, one gets 404 on the other's job. Plan the key layout.

If a Sora integration shared one project key between a web app and a worker, every process could look up any video id. Sume scopes job reads by member. Per the jobs guide, a job belongs to its workspace and to the member whose key created it, and an API key reads only jobs its own member created. Anything else returns 404 not_found. If your web app submits with one key and your worker polls with another, the worker sees nothing.
The read rule in one table
The guide names the rule for the job reads: GET /v1/jobs/:id, /status, /result, /events and GET /v1/jobs.
| Caller | Can read | Otherwise |
|---|---|---|
| API key | Jobs its own member created in the key's workspace | 404 not_found |
| Studio Agent turn | Every job in the thread it runs on | 404 not_found elsewhere |
| Key from another workspace | Nothing | 404 not_found |
What breaks in a ported pipeline
Three patterns fail. A worker with its own key polls a web-created job and gets 404, which looks like a deleted job. A cancel from a second key fails because only the creating member can cancel. And a per-developer key used in a cron job ties the pipeline's read access to that one member, because jobs belong to the member who created them.
A layout that works
Pick one submitting identity per pipeline and use that key everywhere the pipeline reads or cancels. Keep it in a secret store as SUME_API_KEY, and give each environment its own key so staging jobs never mix with production. Store the returned job id in your database, as the Sora-era video id was, and carry it through every hop.
If a second system only needs the result, hand it the Sume media URL from the job result instead of the job id. The docs tell you to use the Sume media URLs from the result rather than raw provider URLs, so hand over those URLs and confirm in staging that the second system can fetch them without a key.
- One key per pipeline and environment.
- Submit, poll, cancel and redeliver with the same key.
- Use webhooks to push results to services that should not hold the key.
Test it before cutover
Submit one job with key A and read it with key B. Expect a 404 and fix the layout in staging, not on launch day. The webhook route covers the other direction: Sume sends the terminal event to your URL, so a receiving service needs the signing secret, not the API key. See the API reference for the account and key routes.
Sources
Related posts
More in Developers
- Shopify rejects file names ending in thumb, icon or large
Shopify file uploads reject names ending in pico, icon, thumb, testing, small, compact, medium, large or grande. A Python rename step for batch outputs.
- Shopify image limits: 20 MB, 25 megapixels vs Sume image outputs
Shopify accepts product images up to 20 MB and 25 megapixels in JPEG, PNG, WEBP, HEIC or GIF. How that lines up with Sume image model sizes and formats.
- Sign MCP requestState for paid render approvals: user, TTL, digest
MCP says requestState is attacker-controlled. For a paid render approval, bind it to the user, an expiry and an argument digest with an HMAC. Python included.
- Slow OAuth consent and MCP timeouts: Sume's Write toggle step
MCP Python SDK v2.3.0 stops counting interactive OAuth logins against request timeouts. Here is the consent step with Sume's Write toggle that benefits.
Written by Sume