Video API shutdown runbook: six steps from the Sora removal
A six-step runbook for the day a video vendor removes its API: find calls, freeze ids, pick a replacement, port, canary, and archive. Dates from OpenAI's page.

When a video vendor removes its API, do six things in order: inventory every call site, freeze new use of the old ids, choose a replacement per workload, port the client, canary a slice of traffic, and archive what the old service made. The OpenAI Sora shutdown is the current example, and each step below uses it.
OpenAI's deprecations page records that the Sora video models, including sora-2 and sora-2-pro and their dated snapshots, and the Videos API were announced for removal on 2026-03-24 and removed on 2026-09-24. The page names no replacement.
The dates and what they gave you
Six months passed between the announcement and the removal. That is the window in which an inventory, a port and a canary all fit comfortably. Teams that waited for the last week had to do all of it at once, with live traffic failing.
The lesson is not specific to one vendor. The warning period for the next removal may be shorter, so the runbook should be something you can run in days.
| Date | Event |
|---|---|
| 2026-03-24 | Removal announced for the Sora video models and the Videos API |
| 2026-09-24 | Models and Videos API removed |
| After removal | No replacement named by the vendor |
Steps one to three
Inventory: search code, config, prompts, CI and dashboards for the model ids. The stored scan post shows a short script for that. Freeze: stop adding new callers of the old ids the day the notice lands, and put a lint rule in CI. Choose: the replacement depends on length, aspect, audio and price. On Sume, Omni covers 3 to 10 seconds, Wan 3.0 covers 2 to 30 seconds and Seedance 2.5 covers 4 to 30 seconds, per the repo docs.
Pick per workload. A product teaser and a long ad do not need the same model.
Steps four to six
Port: replace the client with the submit, poll and download shape of the new API. On Sume, that is POST /v1/videos with an Idempotency-Key, polling until a terminal status, and downloading from unsigned_urls. Canary: send a small share of jobs to the new path and compare failures and cost. Archive: download everything the old service holds, while you can, and record the model id and prompt next to each file.
If the old service already removed the files, archive what you have in your own storage, and note the gap.
- Keep the model id in config, not in code.
- Write down which clips cannot be reproduced, because no seed is accepted on Sume's /v1/videos.
- Rehearse the runbook once a year against a fake deprecation.
What Sume gives the port
The Sume video endpoint is OpenRouter-shaped, with idempotent submits and one job id for each render. That does not remove the need for a fallback chain, but it makes the second vendor a config change. The linked posts show a fallback loop and a canary.
Sources
Related posts
More in Use cases
- Vet Clinic Vaccine Reminder as an AI Avatar Video: Script, Cost
Script a vet clinic vaccine reminder for an avatar video on Sume: three scenes, seconds math, request JSON, and cost on standard, plus and max.
- Vimeo's AI label vanishes in the embed when the title is hidden
Vimeo shows the AI label under the title and in the embedded player, but not when the title is hidden. What to do on a landing page that embeds an AI clip.
- Vimeo labels its own AI tools' output itself: what you control
Vimeo may apply an AI label you cannot remove when its own tools made the video. What that means for a clip you generate elsewhere, such as on Sume.
- VIP early access teaser: trim 6 seconds from the hero clip, add a card
Cut a 6-second VIP teaser from the sale hero clip with video trim ($0.02), then burn the early-access time as cues. The code stays out of the public cut.
Written by Sume