Sora Videos API replacement: seconds and size on Sume
OpenAI removed the Videos API on 2026-09-24. Map its seconds and size fields to Sume's duration, resolution and aspect_ratio; size returns 400 on Sume.

Rename seconds to duration (an integer), and replace size with resolution plus aspect_ratio. Sume's POST /v1/videos rejects size with 400 unsupported_parameter, so a Sora request body will not run unchanged.
OpenAI's deprecation page lists sora-2, sora-2-pro and dated snapshots with a 2026-09-24 shutdown and no recommended replacement. Its guide says no one-to-one replacement API is available. Sume facts are from Video generation; all pages read 2026-09-30.
How do the two request bodies map?
| Sora field (guide) | Sume field | Note |
|---|---|---|
seconds (e.g. "8") | duration | Integer, seconds |
size (e.g. "1280x720") | resolution + aspect_ratio | size returns 400 |
input_reference image | frame_images | First and last frames |
Webhook video.completed | callback_url | Sume job envelope |
Why does size fail on Sume?
The docs say every v1 model reports supported_sizes: null, so size returns 400 unsupported_parameter. They tell you to use resolution and aspect_ratio, for example 720p with 16:9. Each model lists the resolutions it accepts in supported_resolutions.
What does the converted request look like?
Pick a model id from the catalog; seedance-2.5 is the docs' example.
curl -X POST https://api.sume.com/v1/videos \
-H "Authorization: Bearer $SUME_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: sora-port-001" \
-d '{
"model": "seedance-2.5",
"prompt": "Slow dolly shot through a miniature paper city at blue hour",
"duration": 8,
"resolution": "720p",
"aspect_ratio": "16:9"
}'Is a retry safe?
Send Idempotency-Key: a replay returns the original job instead of creating a second one. See the Sora shutdown migration guide for model-level alternatives.
Sources
Related posts
More in Developers
- Speech to text custom vocabulary: Sume STT takes a language hint only
Gemini 3.5 Transcribe biases up to 1,000 custom terms. Sume STT has no vocabulary field, only a language_code hint, so fix names after transcription.
- Standard Webhooks headers vs Sume sume-v1: a header map
Sume does not send webhook-id, webhook-timestamp or webhook-signature. It sends x-sume-webhook-* headers with a sume-v1 hex signature. Use verifyWebhook.
- Stripe idempotency key length (255) and Sume's key rules
Stripe allows keys up to 255 characters. Sume generation keys are 1-255 printable ASCII and optional; crawl keys are required and capped at 200.
- Submitting 20 avatar videos at once: what each Sume plan accepts
Sume accepts as many paid jobs as concurrency plus queue allows: 6 on Free, 24 on Pro, 48 on Startup, 120 on Scale. Past that a submit returns 429 queue_full.
Written by Sume