Sora to Sume pull request review: eight lines to check before merge
A reviewer's checklist for a Sora-to-Sume PR: duration and resolution types, status words, the 302 download, the webhook body, idempotency and removed fields.

When you review a pull request that moves a service from the OpenAI Videos API to Sume, check eight things: the endpoint, the duration type, the size fields, the status words, the download call, the webhook handling, the Idempotency-Key and the fields that Sume refuses. Each is a place where code that compiles still fails at runtime.
The OpenAI deprecations page, read 2026-10-08, dates the removal of the Videos API to September 24, 2026 and names no replacement, so a reviewer cannot treat this PR as a rename; it is a vendor change.
The checklist
Ask the author to point at the line for each row. If a row has no line, the migration is not finished.
| Check | Old Sora code | Sume code must have |
|---|---|---|
| 1. Endpoint | POST /videos | POST /v1/videos on https://api.sume.com, JSON body |
| 2. Duration | seconds as a string, "8" | duration as an integer, 8 |
| 3. Size | size "1280x720" | resolution and aspect_ratio; no size, since it returns 400 |
| 4. Status words | queued, in_progress, completed, failed | pending, in_progress, completed, failed, cancelled |
| 5. Download | download_content with variant | GET /v1/videos/{id}/content?index=0, 302, key sent |
| 6. Webhook | video.completed, video.failed | job.completed, job.failed, job.canceled; raw body; sume-v1 check |
| 7. Retries | none shown in the guide | Idempotency-Key from your own record id |
| 8. Dead fields | model sora-2, input_reference | no seed, no provider.options; frame_images for a first frame |
Why these eight
Rows 2 and 3 are the quiet ones: a string where an integer is wanted, or a size that Sume answers with 400 unsupported_parameter, only shows up when the code path runs. Row 4 matters because a loop that waits for queued will wait forever on pending. Row 5 is where tests that mock the client hide a missing API key on the content request.
Row 6 fails in production only: a framework that parses JSON before your handler runs gives you a body that no longer matches the signature. The signature is HMAC-SHA256 over the timestamp, a dot and the raw bytes, with a five minute tolerance.
Also ask for
Ask for a test that sends one request to Sume with a real key and a short prompt, and for the output of the scan for retired Sora ids attached to the PR. A clean scan plus the table above covers most of what goes wrong.
Do not let the PR also change the model or the prompts unless that is its stated purpose; compare outputs with the scorecard in a separate step so a regression has one cause.
Sources
Related posts
More in Developers
- Sora API gone: port to Sume with Python urllib, no extra packages
Replace the OpenAI videos calls with a stdlib-only Python script: submit to Sume /v1/videos, poll, then fetch the 302 artifact URL without sending your key.
- Speech-to-text for short voice notes: one request, sync mode
Send a voice note's public URL to Sume STT with mode sync and a 30-second wait. A cent per minute, plus the poll fallback when the job outlasts the wait.
- Streamlit Sora demo: switch to Sume and st.video, no double billing
Streamlit reruns your script on every click. Derive the Sume Idempotency-Key from the prompt so a rerun returns the first job, then show the clip with st.video.
- sume/auto and idempotent retries: same price, same route on replay
New video models land weekly. With model sume/auto and an Idempotency-Key, a retry of a Sume video submit gets the original job, price and route.
Written by Sume