Sora API replacement: four async video APIs and their job shapes

OpenAI's Videos API shut down 2026-09-24 with no replacement listed. OpenRouter, Luma, Runway and Sume all use submit-poll-download; here is each shape.

5 min readSume
All posts

If you ported a Sora client, the lowest-effort replacement is an API that keeps the submit, poll, download shape. OpenAI's deprecations page lists the Videos API and the sora-2 model ids as shut down on 2026-09-24 and names no replacement. Four other APIs use the same asynchronous pattern, and they differ in paths, polling helpers and status names.

The four shapes side by side

Each row comes from that vendor's own page, read 2026-10-09. Runway's docs show a Node and Python SDK that blocks on a helper; the raw task endpoints are not on the page I read, so that cell says so instead of guessing.

Async video job shape per vendor (read 2026-10-09)
APISubmitPollDownloadNotes
OpenRouterPOST /api/v1/videos (202)GET /api/v1/videos/{jobId}, 30 s suggestedGET .../contentstatuses pending, in_progress, completed, failed
Luma Agents APIPOST /v1/generationsGET /v1/generations/{generation_id}presigned URLsray-3.2 for video; one endpoint also serves images
Runway/v1/image_to_video, /v1/text_to_image, /v1/video_to_videoSDK wait_for_task_outputoutput URLs on the taskTaskFailedError on failure
SumePOST /v1/videosGET /v1/videos/{jobId}GET /v1/videos/{jobId}/contentpending, in_progress, completed, failed, cancelled

Which one needs the least change

Sume documents its /v1/videos surface as agreeing field for field with OpenRouter's, so a client built from OpenRouter's docs changes the base URL and key and nothing else, apart from the differences Sume lists (bare model ids such as seedance-2, no size field, no seed). The OpenRouter base-URL post walks through that change.

Luma and Runway need a new request body and, for Runway, a different task model, so they are a rewrite of the submit and poll code even though the pattern is the same.

What each replacement can run

The route is only half the choice. Sume lists seedance-2.5 (4 to 30 seconds), seedance-2, wan-3.0, minimax-h3, minimax-h3-max and gemini-omni-flash-1.1 on /v1/videos; it does not list Luma ray-3.2 or Runway's gen4.5. If the model matters more than the wire format, pick the model first and the route second. For per-duration picking, see the duration-cap guide.

A migration order that limits risk

Port in three steps. First, wrap your old Sora calls behind one function with the signature generate(prompt, seconds, size) -> bytes, so the vendor is a detail. Second, implement it for one replacement and run your 20 most used prompts through it. Third, keep the job-state handling generic: treat pending and in_progress as running, completed as success, and everything else as terminal.

OpenAI's page gives a shutdown date but no successor, so no vendor's model is a documented drop-in; expect to re-tune prompts whichever route you choose.

What I could not confirm

I did not read fal's or Replicate's pages for an equivalent video job API, so they are not in the table. OpenAI's page lists no replacement, and this post does not name one as official. All vendor figures were read on 2026-10-09 and are listed in the sources; Sume figures come from its public catalog and docs the same day.

Sources

Related posts

More in Comparisons

All Comparisons posts

Written by Sume