OpenAI gave 184 days to leave the Videos API: a CI catalog check
Notice March 24, removal September 24, 2026, no replacement listed. An 18-line Python check fails CI when a video model id or duration leaves Sume's catalog.

OpenAI's deprecations page says that on March 24, 2026 it notified developers that the Videos API and the Sora 2 model aliases and snapshots would be removed on September 24, 2026. That is 184 days. The page lists the Videos API, sora-2, sora-2-pro and three dated snapshots, and it names no recommended replacement (https://developers.openai.com/api/docs/deprecations, read 2026-10-05).
If your product depended on that API, you now know what a half-year window feels like: long enough to plan, short enough to miss. The lesson for the next vendor is not to avoid vendors. It is to make a vendor change fail loudly in a place you already look, instead of in a customer's render.
One check that would have caught it
Sume's catalog is machine-readable. GET /v1/videos/models returns every id with its supported_durations, so a script can compare what you actually request with what is currently offered. The script below lists your model ids and the longest clip you ask each for, fetches the catalog and exits 1 when an id disappears or a duration is no longer listed. It was run against a local stand-in catalog: with all three ids present it exited 0, and with a 1-second wan-3.0 request it printed the failure and exited 1.
import json, os, sys, urllib.request
USED = {"seedance-2.5": 8, "kling-3": 5, "wan-3.0": 2} # model id -> longest clip you request
BASE = os.environ.get("SUME_API_BASE", "https://api.sume.com")
req = urllib.request.Request(f"{BASE}/v1/videos/models",
headers={"Authorization": f"Bearer {os.environ['SUME_API_KEY']}"})
catalog = {m["id"]: m for m in json.load(urllib.request.urlopen(req))["data"]}
problems = []
for model_id, seconds in USED.items():
entry = catalog.get(model_id)
if entry is None:
problems.append(f"{model_id}: gone from the catalog")
elif seconds not in entry["supported_durations"]:
problems.append(f"{model_id}: {seconds}s no longer listed")
for line in problems:
print("FAIL", line)
sys.exit(1 if problems else 0)Where to run it
Run it nightly and on every deploy. A nightly run finds a catalog change within a day, long before a notice period ends, and a deploy-time run stops you from shipping a new prompt template that asks for a length the model does not take.
- Keep the
USEDdictionary next to the code that builds requests, and generate it from your config rather than typing it twice. - Print the failure with the model id in the first words, so an alert is readable on a phone.
- Treat a missing id as an incident, not a warning: the API answers an unknown
modelwith 404model_not_found. - Add the checks you care about, for example
supported_resolutionsorgenerate_audio, with one moreelif.
What stays stable
Sume's video ids are bare names such as seedance-2.5, kling-3, wan-3.0, minimax-h3 and gemini-omni-flash-1.1, and one request shape covers all of them. Switching a model is a one-string change, which is what makes a check like this cheap to act on. It does not make the vendors' own schedules go away: a provider can still retire a model, and what you get is notice in your pipeline.
| Item | Value |
|---|---|
| Notice date | March 24, 2026 |
| Shutdown date | September 24, 2026 |
| Days between | 184 |
| Replacement listed | None |
Sources
Related posts
More in Developers
- OpenRouter puts an idempotency key on video webhooks; Sume uses job_id
OpenRouter's video guide adds an idempotency key header to each delivery. Sume dedupes on job_id and takes Idempotency-Key on submit. Which key goes where.
- OpenRouter video callbacks vs Sume job webhooks: what differs
OpenRouter video callback_url reports completed, failed, cancelled, expired. Sume job webhooks send completed, failed, canceled, signed with HMAC-SHA256.
- Submit 60 Gemini Omni 4K jobs on a Pro plan: pace in waves of 24
A Pro workspace holds 24 accepted generation jobs (4 running, 20 queued). Pace 60 Omni 4K submits in waves with asyncio and retry queue_full safely.
- Perl HTTP::Tiny: submit a MiniMax H3 video job and save it
A 23-line Perl script with core modules only: POST /v1/videos for minimax-h3, poll, download. A 5-second 768p clip is $0.375; 480p is $0.3125.
Written by Sume