Sora API alternatives for video generation after the shutdown
The Sora API shut down on September 24, 2026. Compare Runway, Kling, fal, Replicate and Sume by models, audio, price unit, API shape and limits.

It depends on which model you want to move to and how you want to buy it. OpenAI shut the Sora API down on September 24, 2026 and lists no replacement, so the alternative is another video API, chosen by five things: the model family, whether you need native audio, clip length and resolution, the API shape (one vendor's own API or a multi-model host), and the price unit and limits. Runway's API, Kling's API, fal, Replicate and Sume all run video as an asynchronous job, but they serve different models and bill in different units.
If you are weighing Google's Veo 3.1, Kling 3.0, Runway Gen-4.5 or Seedance 2.0, the table below shows where each one can be called. Veo is not in Sume's catalog, and neither is Sora. The shutdown dates come from OpenAI's help center and Deprecations page, each vendor's facts from its own pages, and the Sume side from the Video Generation docs and catalog code, all read on 2026-09-29. For hosts only, see alternatives to fal.ai and Replicate for video.
What did OpenAI shut down, and when?
OpenAI's help center dates the end of the Sora web and app experiences to April 26, 2026, and the Sora API to September 24, 2026. OpenAI notified developers on March 24, 2026. Its Videos API reference now says the models and the API are no longer available, that no one-to-one replacement API is available, and that the page is kept for historical reference.
Sora 2 API pricing lists the retired model ids and what each clip cost, and Seedance vs Sora 2 sets the old specs beside the Seedance ids.
What should you check before picking a Sora API alternative?
Start from what your Sora integration relied on. Its create call took 4, 8 or 12 seconds and four sizes up to 1792x1024, so check each option on these points:
- **Models:** does the API serve the model family you want, or only its own?
- **Audio:** does the model generate a sound track with the video, and does that change the price?
- **Length and resolution:** the clip lengths and resolutions each model accepts.
- **API shape:** async submit and poll, a webhook, idempotent retries, and one request body across models or one per model.
- **Price unit and limits:** per second, per video, per credit or per GPU second, plus concurrency caps and how long results stay downloadable.
What are the alternatives to the Sora API?
Five video APIs, in alphabetical order. Each row uses only that company's own pages; prices are examples of the unit, not a full price list.
| Option | Models | Price unit (example) | API shape | Limits |
|---|---|---|---|---|
| fal | A gallery of hosted models; its pricing page lists Kling 3.0, Veo 3.1, Seedance 2.0 and 2.5 | Per second of output or per video, by model. Kling 2.5 Turbo Pro: $0.07 per second | A queue: poll for status, or pass a webhook_url | New accounts start at 2 concurrent requests, self-serve up to 40; extra requests wait in the queue |
| Kling API | Kling's own: Kling 3.0 Turbo, 3.0, 3.0 Omni, O1, 2.6, 2.5 Turbo | Units per second. Kling 3.0 at 720p: 0.6 Units ($0.084) /s with no native audio, 0.9 Units ($0.126) /s with native audio | Async tasks; a callback_url is notified when the status changes | Kling 3.0: 3~15s, 720P to 4K; results are cleared after 30 days |
| Replicate | Public models, including kwaivgi/kling-v3-video, google/veo-3.1, runwayml/gen-4.5 and bytedance/seedance-2.0 | By hardware time or by input and output, per model. One image-to-video model: $0.09 / second of output video | Async by default with a prediction id; a webhook URL on create | 600 prediction creates per minute; API inputs and outputs are deleted after an hour |
| Runway API | gen4.5, veo3.1, seedance2 and other listed models; a Model Router can pick one for you | Credits at $0.01 each. gen4.5: 12 credits per second; veo3.1 with audio: 40 credits per second | Async: POST /v1/text_to_video and similar, then poll GET /v1/tasks/{id} | Concurrency and daily caps per model by usage tier; tasks over the cap wait as THROTTLED |
| Sume | Catalog ids such as kling-3, seedance-2.5, or sume/auto, through one POST /v1/videos contract | Per second or per 1,000 video tokens, by model, at provider list × 1.25: from $0.0125 to about $1.43 per second, plus a 5.5% agent fee by default | Async: poll GET /v1/videos/{id}, or pass an HTTPS callback_url; Idempotency-Key on submit | Per-model durations and resolutions on GET /v1/videos/models; 429 rate_limited or queue_full when full |
Where can you call Veo, Kling, Runway and Seedance models?
Most Sora replacements are a model family first and a vendor second. This table shows which of the five APIs list each family on the pages read. A dash means the page read did not list it.
| Model family | Runway API | Kling API | fal | Replicate | Sume |
|---|---|---|---|---|---|
| Veo 3.1 | veo3.1, veo3.1_fast | — | Listed | google/veo-3.1 | Not in the catalog |
| Kling 3.0 | — | Kling 3.0, 3.0 Omni, 3.0 Turbo | Listed | kwaivgi/kling-v3-video | kling-3 |
| Runway Gen-4.5 | gen4.5 | — | — | runwayml/gen-4.5 | Not in the catalog |
| Seedance 2.x | seedance2, seedance2_fast, seedance2_mini, seedance2_5 | — | Listed | bytedance/seedance-2.0 | seedance-2.5, seedance-2-mini, seedance-2, seedance-2-fast |
Which alternative fits which job?
Start from the model and audio you need, then from how you want to be billed. Web apps and editors are a separate choice; every option here is an API.
- **Runway's API** if you want
gen4.5or Veo 3.1 behind one key. Request bodies differ per model there, so the validratioanddurationdepend on the model you pick. Its Model Router saves a routing configuration so you don't hardcode a model id. - **Kling's API** if Kling models are all you need, including what its capability map lists per model: multi-shot generation, native audio, first and last frames, and 4K on Kling 3.0.
- **fal or Replicate** if you want one account for many hosted models, including Veo 3.1, or to run your own weights: fal prices GPUs for custom deployments, and Replicate documents deploying custom models.
- **Sume** if you want one request body, idempotent submits, and one USD balance across the Kling, Seedance and other families in its catalog. One API for Kling, Seedance and other video models covers that setup.
- **Not Sume** if you need Veo, Runway's
gen4.5, a Sora model, clips over 30 seconds, or your own weights.
Where does Sume fit, and does it have a Sora model?
Sume has no Sora or Veo model. The ids its video catalog lists are seedance-2.5, seedance-2-mini, seedance-2, seedance-2-fast, kling-3, wan-3.0, grok-imagine-video-1.5, minimax-h3, minimax-h3-max, gemini-omni-flash-1.1, h3-max-recast. You can also send sume/auto and let Sume pick: the response echoes sume/auto, and Sume never discloses which family ran.
Limits are per model. seedance-2.5 and wan-3.0 accept up to 30 seconds and gemini-omni-flash-1.1 3 to 10 seconds, and the others top out at 15 seconds. gemini-omni-flash-1.1 lists 4K, and seedance-2.5 and seedance-2 offer 1080p. generate_audio asks for a sound track on models that can make one; minimax-h3-max and gemini-omni-flash-1.1 document native audio.
Prices come from each model's pricing_skus on GET /v1/videos/models. As one example, kling-3 is billed per second: $0.14 silent, $0.21 with sound, plus a 5.5% agent fee by default. How much an AI video costs has every model's rate, and listing video models walks through the capability fields.
How do the old Videos API fields map to POST /v1/videos?
Sume does not take the old request body as is. Its OpenAPI schema for POST /v1/videos has no seconds or input_reference field and refuses fields it does not list, so rename each field:
| OpenAI Videos API | Sume POST /v1/videos | What to change |
|---|---|---|
POST /videos | POST https://api.sume.com/v1/videos | Send a JSON body with Content-Type: application/json. |
model, such as sora-2 | model | Required: a catalog id or sume/auto. |
prompt | prompt | Same field. |
seconds, a string such as "8" | duration | An integer number of seconds from the model's supported_durations. |
size, such as 720x1280 | resolution and aspect_ratio, such as 720p and 9:16 | Every v1 model reports supported_sizes: null, so size returns 400 unsupported_parameter. |
input_reference (image_url or file_id) | frame_images or input_references | A first_frame entry opens the clip; input_references guide it. Entries carry a public HTTPS URL, so a file id or data URL must become a hosted image first. |
GET /videos/{video_id} | GET /v1/videos/{id} | Statuses are pending (the old queued), in_progress, completed, failed, and cancelled. |
GET /videos/{video_id}/content | GET /v1/videos/{id}/content?index=0 | Send your API key. unsigned_urls[0] on a completed poll points here. |
What does the migrated request look like?
This is the docs' sume/auto request with an idempotency key added. Swap in a catalog id to pin a model.
curl -X POST "https://api.sume.com/v1/videos" \
-H "Authorization: Bearer $SUME_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: clip-001" \
-d '{
"model": "sume/auto",
"prompt": "A vertical UGC-style product clip on a desk, natural light",
"aspect_ratio": "9:16",
"duration": 5
}'What else changes when I switch?
The request shape is not the only difference. Plan for these on day one:
- Auth is
Authorization: Bearer $SUME_API_KEY, sent from your server. - Send an
Idempotency-Key: a replay with the same key and the same body returns the original job instead of a second one. - For push instead of polling, pass an HTTPS
callback_url. Sume posts its own job webhook envelope, signed withx-sume-webhook-signature. - The same job is also visible at
GET /v1/jobs/{id}/statusandGET /v1/jobs/{id}/result. - Downloads from
GET /v1/videos/{id}/contentneed your API key and answer with a redirect to the file, so usecurl -L. - On
429, back off and useretry-afterwhen present.queue_fullmeans the workspace can't take another paid job until a queued or running one finishes or is canceled. - Billing draws on your workspace USD balance, reserved on submit, and
usage.coston the poll response is the billable amount.
Sources
- OpenAI Help Center: What to know about the Sora discontinuation (read 2026-09-29)
- OpenAI API: Deprecations (read 2026-09-29)
- OpenAI API reference: Create a video (read 2026-09-29)
- OpenAI API reference: Retrieve a video (read 2026-09-29)
- OpenAI API reference: Retrieve video content (read 2026-09-29)
- Runway Dev: API Pricing & Costs (read 2026-09-29)
- Runway Dev: context primer (read 2026-09-29)
- Kling API: Video pricing (read 2026-09-29)
- Kling API: Video capability map (read 2026-09-29)
- Kling API: Callback protocol (read 2026-09-29)
- fal: Pricing (read 2026-09-29)
- fal docs: Queue (read 2026-09-29)
- Replicate: Pricing (read 2026-09-29)
- Replicate: Generate videos collection (read 2026-09-29)
- Replicate docs: Create a prediction (read 2026-09-29)
- Replicate docs: Webhooks (read 2026-09-29)
- Replicate docs: Deploy a custom model (read 2026-09-29)
- Video Generation
- API reference
- Sume API reference
- Authentication
- Errors and rate limits
- Runway Dev: API Usage Tiers & Limits (read 2026-09-29)
- fal docs: Concurrency Limits (read 2026-09-29)
- Replicate docs: Rate limits (read 2026-09-29)
Related posts
More in Models
- What is an AI video seed? How to repeat a result without one
A seed fixes a generator's random starting point. Sume's video models take none and refuse the field. How to keep a clip or a look without one.
- AI cartoon video generator from text: how to set the style
Name the cartoon or anime look in your prompt, or draw a styled still first and animate it as the first frame. Sume's video API has no style field.
- AI image prompt examples: a template and 8 prompts to copy
A good AI image prompt names the subject, setting, style, light, and framing in a sentence or two. A template, 8 examples, and what goes in settings.
- AI photo editing prompts: change one thing, keep the rest
An AI photo editing prompt says what to change and lists what to keep. The pattern, plus examples for background, light, color, style, and cleanup.
Written by Sume