OpenAI named no Videos API replacement: build it swappable
OpenAI's deprecation page names no successor to the Sora Videos API. Put video behind one interface, discover models from the catalog, and keep ids out of code.

OpenAI's deprecations page lists sora-2, sora-2-pro, their dated snapshots and the Videos API with a 2026-09-24 shutdown and no recommended replacement. For the image models in the same page, OpenAI does name replacements. That difference is the lesson: when a vendor gives you no path, your code must supply one. Put video generation behind one interface, read model ids and limits from a catalog at runtime, and keep every vendor id in config.
What the page says, side by side
The same deprecations page treats video and image models differently, which is worth seeing before you plan work.
| Entry | Shutdown | Replacement named |
|---|---|---|
| Sora 2 models and Videos API | 2026-09-24 | None listed |
| gpt-image-1-mini, gpt-image-1.5, chatgpt-image-latest | 2026-12-01 | gpt-image-2.5-sunburst or gpt-image-2.5-flare |
| dall-e-2 and dall-e-3 | 2026-05-12 | gpt-image-2, gpt-image-1, or gpt-image-1-mini |
Three seams to cut
First, one function signature for your own app: prompt, duration, aspect ratio, optional first frame, returns a job handle. Second, a model registry in config that maps your product tiers to catalog ids. Third, a normalizer that turns each vendor's status words into your own four: pending, running, done, failed.
- Never branch on a model id outside the registry.
- Never hard-code a duration or resolution list; read it.
- Never store a vendor's temporary URL as the asset of record.
Discovery instead of hard-coding
Sume publishes GET /v1/videos/models, and each entry lists supported_resolutions, supported_aspect_ratios, supported_durations, supported_frame_images, supported_input_references, generate_audio and pricing_skus. The video generation docs say limits are not uniform across models, so your validator should read this list rather than assume one envelope. The Video Router docs describe the same catalog on the older route.
What this does and does not buy you
A swappable backend means a vendor exit costs a config change plus a regression pass, not a rewrite. It does not make outputs identical across models: prompts tuned for one model will read differently on another, so keep a small set of golden prompts and compare. For the wire details, the API reference points to the live OpenAPI document as the source of truth.
Sources
Related posts
More in Developers
- Mask file checklist for GPT Image 2.5: alpha, same size, under 50 MB
OpenAI says an edit mask must match the image in format and size, stay under 50 MB, and carry an alpha channel. Check your file before sending mask_url to Sume.
- OpenAI Python 3.23 turn artifacts: hand over a Sume render
OpenAI Python SDK 3.23.0 adds file staging and turn artifact downloads for agents. Sume job webhooks give you a public media.sume.com URL to hand over.
- OpenAI Realtime GA migration: drop the OpenAI-Beta header
Beta Realtime integrations must move to GA and stop sending OpenAI-Beta: realtime=v1. A short checklist, a code scan for the header, and where Sume jobs fit.
- OpenAI TTS: 13 built-in voices vs 9 legacy ones, pick the model first
OpenAI's guide lists gpt-4o-mini-tts with 13 built-in voices and legacy tts-1 and tts-1-hd with 9. Formats, custom voice consent and disclosure, as a checklist.
Written by Sume