TL;DR: Sora 2 is deprecated in two separate stages. OpenAI discontinued the Sora web and app experiences on April 26, 2026, and is scheduled to shut down the Sora 2 API and the Videos API on September 24, 2026. OpenAI names no replacement. The closest working substitutes are Veo 3.1, Gemini Omni Flash, Runway and Wan 2.7.
What does it mean that Sora 2 is deprecated?
It means two different things to two different groups of people, on two different dates. Conflating them is the single most common error on this topic, and it is the reason a lot of advice circulating right now is wrong.
The first event is finished. OpenAI's help article on the discontinuation states, in its own words: "The Sora web and app experiences were discontinued on April 26, 2026." That is the consumer product. The phone app, the feed, the web interface. It has been gone for four months.
The second event has not happened yet. The same article states: "The Sora API will be discontinued on September 24, 2026." OpenAI's deprecations page carries the detail. Developers were notified on March 24, 2026 that the Videos API and the Sora 2 model aliases and snapshots would be removed six months later. The table lists six things going away on the same day: the Videos API itself, sora-2, sora-2-pro, sora-2-2025-10-06, sora-2-2025-12-08, and sora-2-pro-2025-10-06.
So if you are a creator who used the app, your migration was due in April and your remaining task is data recovery. If you are a developer with POST /v1/videos in production, you have until September 24, 2026, and as of today that is 29 days away.
Is the Sora 2 API still working right now?
Yes, as far as OpenAI's published documentation shows on August 26, 2026. Both sora-2 and sora-2-pro are still listed in the models index, both still have live model pages carrying pricing and per-tier rate limits, and the Sora entry sits in the upcoming deprecations section of the deprecations page rather than the past section below it. The video generation guide is still published and still documents the full endpoint surface.
That gives you a real, if short, window. It also gives you a way to check the status yourself rather than trusting this article next month: if the Sora block has moved below the "Past deprecations" heading, the window has closed.
What the API still does today is worth writing down, because it sets the bar every replacement has to clear. Per OpenAI's video generation guide, sora-2 and sora-2-pro both support 16 and 20 second generations. sora-2-pro handles 1080p exports at 1920x1080 and 1080x1920. You can guide a generation with an image that becomes the first frame, reuse a non-human character across shots, and extend a completed clip by up to 20 seconds at a time, six times, for a maximum total length of 120 seconds.
Nothing in this list is exotic, but nothing else assembles it in quite the same shape either. That matters when you plan the port.
What happens to my Sora videos, credits and refunds?
This is the part people put off, and it is the part with an irreversible deadline attached.
Content. OpenAI's help article is direct: after Sora is discontinued, and after any final export window passes, "we will permanently delete any data associated with your use of Sora." It also says a final export window may or may not be offered, and that if one is offered you will be notified by email first. The article's own recommendation is to export "as soon as possible". Exports run from sora.chatgpt.com/sunset, where you click Export and wait for an email when the archive is ready. Note that some third-party guides point at a different export path. The path on OpenAI's page is /sunset.
Credits and refunds. The same article routes refund questions into the standard ChatGPT subscription refund process, and adds that any purchased ChatGPT or Sora credits can still be used for Codex if you want them to be. There is no separate blanket Sora refund published. That article was updated within hours of this post going out, so treat it as the live source rather than quoting me.
API-side assets. If you have generated videos sitting in OpenAI's storage against your API key, do not assume they survive the endpoint. The guide already warns that download URLs are valid for a maximum of one hour after generation and tells you to copy anything you want to keep into your own storage. Run a GET /v1/videos listing, pull everything you still care about, and store it somewhere you control.
What is OpenAI's recommended replacement for Sora 2?
There isn't one, and that is a finding rather than an omission on my part.
OpenAI's deprecations table has a "Recommended replacement" column, and it is populated for almost everything else on the page. Older GPT snapshots point at gpt-5.6-sol and gpt-5.6-terra. The older GPT Image models point at gpt-image-2. The Assistants API points at the Responses and Conversations APIs. For all six Sora rows, that column contains a dash.
Read that plainly. OpenAI is not moving you to a newer video model. It is exiting the endpoint. Your migration is a vendor migration, and it will cost you more than a changed model string.
One consolation: this was a full six-month notice, which matches the "generally available models" tier in OpenAI's own published notice policy of at least six months. You were not ambushed, even if it feels that way.
Which Sora 2 alternative should you migrate to?
There is no single answer, because Sora 2 bundled capabilities that its competitors split up. Here is what I could verify at each vendor's own documentation on August 26, 2026. Every figure below comes from the linked vendor's docs, not from a comparison site.
| Option | Model ID | Clip length | Resolution | Native audio | Verified at |
|---|---|---|---|---|---|
| Sora 2 (going away) | sora-2, sora-2-pro | 16s or 20s | 720p, 1080p on Pro | Yes, synced | OpenAI video generation guide |
| Veo 3.1 (Gemini API) | veo-3.1-generate-preview | 4s, 6s or 8s | 720p, 1080p, 4k (8s only) | Yes, always on | Gemini API Veo docs |
| Gemini Omni Flash | gemini-omni-flash-preview | Not published on that page | Not published on that page | Yes, generated by default | Gemini API Omni docs |
| Runway Gen-4.5 | gen4.5 | 2s to 10s, integer | 1280:720 or 720:1280 | Not stated in the primer | Runway API primer |
| Seedance 2 via Runway | seedance2 | 4s to 15s | 24 ratios, up to 4K | Not stated in the primer | Runway API primer |
| Wan 2.7 (Alibaba) | wan2.7-t2v | 2s to 15s, integer | 720P or 1080P | Yes, plus custom audio upload | Alibaba Cloud Model Studio |
| Luma Ray 3.2 | ray-3.2 | 5s or 10s | 360p to 1080p, HDR option | Not stated in that reference | Luma Agents API reference |
| Kling | Not verified | Not verified | Not verified | Not verified | See note below |
A few honest notes on that table.
Veo 3.1 is the closest philosophical match and the furthest from Sora on duration. It generates audio natively and always on, runs at 24fps, takes text or image input, and supports up to three reference images for style and content direction. But a single generation maxes out at 8 seconds, and 1080p or 4k output forces the duration to exactly 8. To get length you use extension: 7 seconds per extension, up to 20 times, for a combined output of up to 148 seconds. That is more total runway than Sora's 120 seconds, assembled very differently. Veo 3.1 is also still labelled Preview, and caps text input at 1,024 tokens.
Gemini Omni Flash is what Google's own API docs tell you to reach for first. The Gemini API video page carries the line "Use Gemini Omni Flash as your default model for video generation", and positions Veo 3.1 for scene extension, last-frame control and legacy pipelines. Scope that to the API docs, because Google's model card does not designate it a default anywhere else. Omni Flash is also in preview, does conversational multi-turn editing through the Interactions API, and explicitly does not support video extension, interpolation, voice editing, system instructions, temperature, top_p or negative prompt fields.
Runway is the pragmatic choice if you want to stop betting on one vendor. Its API now fronts a long list of models behind one contract, including gen4.5, seedance2 and its variants, hailuo3, veo3.1, veo3.1_fast, aleph2 and gemini_omni_flash. One integration, several suppliers, and a Model Router that picks by cost, latency or quality. If the whole lesson of the Sora shutdown is supplier risk, that is a rational response to it.
Wan 2.7 has the most generous prompt budget I found, at up to 5,000 characters, with a separate negative_prompt field of up to 500 characters and an optional audio_url so you can supply your own 2 to 30 second audio track.
Kling I could not verify. Its developer documentation renders client-side, so there is no server-side spec text to read and reader proxies do not resolve it. I am not going to publish numbers I could not see at a Kling-owned page. If you are evaluating Kling, get the current spec from Kling directly. Our Kling AI prompt format guide covers the prompt structure itself, which has not changed.
For a broader capability comparison that predates this shutdown, our Veo 3 vs Sora vs Kling breakdown still holds up on the creative differences, though the Sora column is now historical.
How do you port a Sora 2 prompt to each alternative?
Better than you would expect. OpenAI's guidance for Sora was to "describe shot type, subject, action, setting, and lighting", and every model below rewards exactly that. The creative substance ports nearly unchanged. What does not port is the packaging: character limits, negative prompt handling, timecode syntax and audio cueing are all different, and every duration and aspect ratio value is model-specific.
Here is one Sora-style prompt, ported five ways. Start from the original.
Wide shot of a barista pulling an espresso shot in a small corner cafe at 7am,
steam rising off the group head, warm morning light through the front window,
camera slowly pushes in. Ambient grinder noise and low chatter.
Port to Veo 3.1
Google's Veo prompt guide asks for named elements: subject, action, style, camera positioning and motion, composition, focus and lens effects, and ambiance. Audio gets its own treatment, with dialogue in quotes, sound effects described explicitly, and ambient noise described as a soundscape.
Subject: a barista in a grey canvas apron behind a chrome espresso machine.
Action: pulls a double shot, watches the crema build, wipes the group head.
Style: naturalistic documentary, subtle 35mm film grain.
Camera positioning and motion: eye-level, slow dolly push-in.
Composition: wide shot settling into a medium shot.
Focus and lens effects: shallow focus on the portafilter, soft bokeh behind.
Ambiance: warm morning light through the front window, cool shadow at the back.
Sound effects: grinder whirring, milk steaming, cups on saucers.
Ambient noise: low chatter, a door opening somewhere off-camera.
No dialogue.
{
"model": "veo-3.1-generate-preview",
"config": {
"aspectRatio": "16:9",
"durationSeconds": "8",
"resolution": "1080p",
"personGeneration": "allow_adult"
}
}
Remember that durationSeconds must be "8" when you ask for 1080p or 4k, or when you pass reference images. Our Veo 3 prompt structure guide goes deeper on the element ordering, and dialogue prompting in Veo covers speech and timing.
Port to Gemini Omni Flash
Omni Flash defaults to inventing multiple shots, so a single-take Sora prompt needs an explicit instruction to stay in one shot. It also accepts natural-language timing and a timecode syntax, and takes negatives inside the prompt because there is no negative prompt field.
In a single unbroken handheld shot, a barista in a grey apron pulls an espresso
shot on a chrome machine in a small corner cafe at 7am. Warm morning light rakes
through the front window. Slow push-in.
[0-3s] Wide: the barista locks in the portafilter and starts the shot.
[3-6s] Medium: crema builds, steam rises off the group head.
[6-8s] Close: a hand lifts the cup onto a saucer.
Audio: grinder whirring, milk steaming, low background chatter.
No dialogue. No extra sound effects. No scene cuts.
Port to Runway
Runway's gen4.5 takes a flat promptText of up to 1,000 characters, and requires both ratio and duration. Do not carry values across models here. Runway's own primer warns that the request body is a discriminated union keyed on model, so gemini_omni_flash on the same endpoint accepts a 4,000 character prompt and a 3 to 10 second duration, and requires neither field.
curl -X POST https://api.dev.runwayml.com/v1/text_to_video \
-H "Authorization: Bearer $RUNWAY_API_KEY" \
-H "X-Runway-Version: 2024-11-06" \
-H "Content-Type: application/json" \
-d '{
"model": "gen4.5",
"promptText": "Wide shot of a barista pulling an espresso shot in a small corner cafe at 7am, steam rising off the group head, warm morning light through the front window, slow dolly push-in, shallow focus on the portafilter, naturalistic documentary style.",
"ratio": "1280:720",
"duration": 8
}'
The X-Runway-Version header is required and requests fail without it.
Port to Wan 2.7
Wan takes multi-shot direction inline with bracketed timings, which is the closest thing on this list to a storyboard in a single string. It also gives you a real negative_prompt field.
{
"model": "wan2.7-t2v",
"input": {
"prompt": "Shot 1 [0-4 seconds] wide shot: a barista in a grey apron locks a portafilter into a chrome espresso machine in a small corner cafe at 7am, warm light through the front window. Shot 2 [4-8 seconds] medium shot: crema builds in the cup, steam rises off the group head, slow push-in. Shot 3 [8-10 seconds] close-up: a hand sets the cup on a saucer. Naturalistic documentary style, shallow focus, low chatter and grinder noise in the background.",
"negative_prompt": "text overlays, watermark, distorted hands, extra fingers, low quality"
},
"parameters": {
"resolution": "1080P",
"duration": 10,
"prompt_extend": true
}
}
Port to Luma Ray 3.2
Luma's current API exposes ray-3.2 for text-to-video, image-to-video and video-to-video editing, at 5 or 10 seconds.
{
"type": "video",
"model": "ray-3.2",
"prompt": "Wide shot of a barista pulling an espresso shot in a small corner cafe at 7am, steam rising off the group head, warm morning light through the front window, slow dolly push-in, naturalistic documentary style, shallow focus on the portafilter.",
"duration": "10s",
"resolution": "1080p",
"aspect_ratio": "16:9"
}
What breaks in your code, not just your prompt?
The job lifecycle survives. The field names do not. Every option here is still submit, poll, download, which means your queue logic and your retry logic mostly transfer. What changes is every identifier in between, and every retention window.
| Concern | Sora 2 Videos API | Veo 3.1 | Runway | Wan 2.7 |
|---|---|---|---|---|
| Submit | POST /v1/videos | generateVideos / predictLongRunning | POST /v1/text_to_video | DashScope async with X-DashScope-Async: enable |
| Poll | GET /v1/videos/{video_id} | long-running operation | GET /v1/tasks/{id} | task ID lookup |
| Fetch asset | GET /v1/videos/{video_id}/content | operation response video URI | output URLs on the task | result URL on the task |
| Asset lifetime | Download URLs valid max 1 hour | Videos stored 2 days | Output URLs temporary, download what you keep | Task ID valid 24 hours |
| Moderation failure | Failed generation | Safety filters, no charge when audio blocks a render | Task with status: "FAILED", billed the same as a success | Content filters apply |
| Watermark | Not stated in the guide | SynthID on every Veo output | Not stated in the primer | Optional, off by default |
Three things in that table catch teams out.
First, asset retention is short everywhere and shortest on Sora. If your current pipeline leans on OpenAI holding the file while a human reviews it, that assumption dies on every alternative. Download on completion, always.
Second, Runway bills moderated generations at full price and surfaces moderation as a FAILED task rather than an HTTP error, so a naive error handler will treat a policy rejection as a transient failure and retry it. Runway's docs warn that repeated moderated requests can suspend an account. Handle failureCode explicitly.
Third, watermarking is not uniform. Every Veo output carries SynthID, invisible but programmatically detectable. Wan's watermark is an optional text mark that is off by default. If you have a client contract that speaks to provenance, read this row before you pick.
A migration checklist you can run before September 24
Work it in this order. The irreversible items come first.
- Export your Sora app content from
sora.chatgpt.com/sunset. This has no undo and no published final date. - List and download API-side videos. Call
GET /v1/videos, then pull each asset withGET /v1/videos/{video_id}/contentinto your own storage. Grab the thumbnail and spritesheet variants too if your UI uses them. - Inventory your prompts. Pull every prompt string out of your codebase into one place. Most teams find they have between five and twenty real templates hiding behind a few hundred call sites.
- Pick two candidates, not one. Run the same three prompts through both. Duration ceilings and moderation behaviour will separate them faster than quality will.
- Rewrite the download step first. It is the piece most likely to silently lose footage, and it is independent of which model you land on.
- Move
durationandratiointo config. Every vendor uses different allowed values and different required fields. Hard-coding them is what made this migration painful the first time. - Diary a re-check. Preview models move. Put a calendar entry on the vendor's deprecations page, not on your memory.
If you want the shortest possible version: export today, port your prompts this week, and do not land on a preview model without a second option already tested.
Where Prompt Architects fits, and where it does not
Plainly: we do not generate video. We are not a Sora alternative and we will not pretend to be one. Veo, Runway, Wan, Luma and Kling generate the pixels. If you came here looking for a model, one of those is your answer.
What we do is the layer that made this migration annoying. Prompt Architects turns a rough description into a structured video prompt with the shot, subject, action, camera, lighting and audio elements named explicitly, stores it in a library you own, and lets you swap the vendor-specific wrapper without rewriting the creative brief. Global Variables handle the fields that differ per model. Built-in AI means no external API key on any plan, including the free one.
The teams that found this shutdown cheap were the ones whose prompts lived somewhere other than inside their API calls. That is the actual lesson, and it costs nothing to apply before the next one.
Stop rewriting prompts. Start shipping.
Works with ChatGPT, Claude, Gemini, Grok, Midjourney, Ideogram, Veo3 & Kling. 5.0★ on the Chrome Web Store.
Create An Account