Sora's GET /videos and DELETE /videos/{id}: what Sume offers instead
Sora had list and delete routes. Sume lists your key's own jobs with GET /v1/jobs and documents no public delete, so plan retention in your own storage.

Sora's API listed videos with GET /videos and removed one with DELETE /videos/{video_id}. On Sume the list half exists as GET /v1/jobs, which returns the jobs your key's member created. There is no public job-delete route in the docs, so clean-up becomes a storage decision in your own system, not an API call.
Route by route
Check your application for the three places this matters: an admin page that lists a user's videos, a nightly clean-up job, and a user-facing delete button. Each one called an OpenAI route that no longer exists, so each needs a local data model before it needs any Sume call.
| Sora step (OpenAI guide) | Sume equivalent | Note |
|---|---|---|
| Create: POST /videos | POST /v1/videos | Returns 202 with id, polling_url, status, model |
| List: GET /videos | GET /v1/jobs | A key reads only its own member's jobs |
| Poll a job | GET /v1/videos/{id} | Statuses include cancelled |
| Download | GET /v1/videos/{id}/content?index=0 | Redirects to the artifact |
| Delete: DELETE /videos/{video_id} | None documented | Delete in your own storage |
| Remix | POST /v1/videos with video_url | gemini-omni-flash-1.1 edit mode |
Why you would have deleted
OpenAI's guide, read 2026-10-07, also says download URLs were valid for at most one hour. With the Videos API shut down on September 24, 2026, those links are gone, which is the practical reason to keep your own copy of every file you still need.
Listing
Page through GET /v1/jobs when you need an inventory: which jobs ran, which failed, what they cost. The pagination post shows the cursor loop. Treat the list as a reconciliation tool against your own table of job ids, not as your system of record.
Delete on your side
If your product had a delete button, keep it, but point it at your own row and file. A reasonable shape is a soft delete flag in your database, removal of your stored mp4, and no call to Sume at all.
For inventory, filter your own table by job id first and call GET /v1/jobs only to find jobs you never recorded, for example after a crash between submit and save. The cursor loop in the linked post pages newest first, which suits that reconciliation job.
- Store the job id, model and cost beside each file.
- Mark rows deleted instead of dropping them, so billing reconciles.
- Never expose the API key to the browser; delete through your server.
Where to check
The submit, poll and content routes are in the video generation docs, and the list route is described under jobs and results. If a documented delete appears later, those pages will say so before this post does.
Sources
Related posts
More in Developers
- Sora to Sume in Python: a 10% rollout flag with a spend guard
Move video traffic off a dead Sora call one slice at a time. A stable per-user percentage flag, one Sume call, and a cost guard that stops at your daily cap.
- Speaking rate in words per minute from Sume STT word times (Python)
Compute words per minute for a recording from the words[] start and end times Sume STT returns, plus a per-minute pacing table. Offline Python, no API call.
- Speech to text API in Go: transcribe audio with net/http
Transcribe audio in Go using only the standard library: submit to Sume STT, poll the job and print the text. A 30-line program at one cent per audio minute.
- Speech to text API in Node.js: transcribe audio with fetch
Transcribe audio in Node.js with built-in fetch: submit to Sume STT, poll the job and print sentence segments with timestamps. 30 lines, no dependencies.
Written by Sume