TROUBLESHOOTING · ERROR FAQ
Sora 2 API Shut Down (2026-09-24): Errors You'll See & Migration Paths
OpenAI's Sora 2 API stopped serving on 2026-09-24. Existing integrations didn't get a graceful sunset — they got errors, and the error you see depends on where in the pipeline your code touches the service. This page identifies the failure signatures, lays out three migration paths by use case (volume generation, native-audio storytelling, multi-shot consistency), shows the code diff — smaller than most teams expect — and closes with a parameter-by-parameter comparison for the planning doc. The in-site deep-dive with worked migration examples lives at Sora 2 API alternatives & migration.
Shutdown timeline and what calls return now
The deprecation was announced with the 2026-09-24 cutoff; after that date, requests to the video endpoints fail. Signatures in the wild: HTTP 404 with a model-not-found body on the model list; 400/403 "model_decommissioned"-style codes on submit; and for clients with cached task IDs, polls returning not-found rather than a task state. If your integration suddenly logs one of these, it is not your key, your quota, or your parameters — the endpoint itself is gone.
Migration paths: pick by what Sora was doing for you
- High-volume short clips → Kling 3.0: strong physics and large motion at 5-second tiers; the workhorse for daily-volume pipelines.
- Native audio + storytelling → Veo 3.1: dialogue and sound baked into the 8-second output; the closest fit for narrative work that leaned on Sora's audio.
- Multi-shot consistency → Seedance 2.5: stable character continuity across shots; built for storyboards and serialized content.
The code migration diff
On a unified gateway the migration is a model-string change — the request shape (submit, poll, webhook) is shared across models, so auth and workflow code survive untouched. The essence, in Python:
- task = create_video(model="sora-2", prompt=prompt)
+ task = create_video(model="kling-3.0", # or "veo-3.1" / "seedance-2.5"
+ prompt=prompt)
# auth, polling, webhook handling: unchanged
# response parsing: unchanged (same task/output shape) Parameter and capability comparison
- Duration per clip: Kling 3.0 5s (audio optional), Veo 3.1 8s with audio, Seedance 2.5 5s at 480p today.
- Audio: native on Veo 3.1; optional track on Kling 3.0; plan a separate audio pass elsewhere for Seedance 2.5.
- Input modes: Kling 3.0 t2v and i2v; Veo 3.1 text-to-video; Seedance 2.5 multi-shot with character consistency.
- Failure policy: failed tasks are not charged across all three.
Migration-week checklist
Audit where the literal string "sora-2" appears in config, fixtures, and docs — stale references outlive the migration and confuse on-call later. Re-run your acceptance suite against the new model with a handful of real prompts; motion characteristics differ between models and a prompt tuned for one may need a light rewrite for another. Then update the quickstart-based smoke test to pin the new model name. Full worked examples: the migration page.