# Why Sora Isn't Working: The Sora Shutdown and Old moderation_blocked Errors

> The Sora app ended April 26, 2026, and OpenAI removed the Sora API on September 24, 2026. Skip moderation fixes: save what you still can and switch models.

- Source: https://www.aifreeapi.com/en/posts/sora-2-api-self-harm-error-fix
- Language: en
- Published: 2026-01-29
- Updated: 2026-10-01
- Publisher: AI Free API (https://www.aifreeapi.com)

Sora has been discontinued, and that changes what a `moderation_blocked` or `sentinel_block` error is worth. OpenAI ended the Sora app and web experiences on April 26, 2026, and set September 24, 2026 as the shutdown date for the Sora API in its [Sora discontinuation notice](https://help.openai.com/en/articles/20001152-what-to-know-about-the-sora-discontinuation). That date has passed. The [API deprecations page](https://developers.openai.com/api/docs/deprecations#2026-03-24-sora-2-video-generation-models-and-videos-api) lists the removal on September 24, 2026 and says it covers the Videos API and the `sora-2`, `sora-2-pro`, `sora-2-2025-10-06`, `sora-2-2025-12-08` and `sora-2-pro-2025-10-06` models, and it names no replacement model.

A prompt rewrite cannot bring the OpenAI endpoint back, and on Azure it only buys time until October 15, 2026. The useful work is different: get your finished videos and prompts out, stop the code that keeps calling Sora, and send new generation to a model that has a future.

| If you used | Status | What you can still retrieve | Next step |
| --- | --- | --- | --- |
| Sora app or web | Discontinued April 26, 2026 | Your own content through the export at sora.chatgpt.com/sunset | Export now; OpenAI permanently deletes Sora data after any final export window |
| OpenAI API (`/videos`, `sora-2`, `sora-2-pro`) | Removed from the API on September 24, 2026 | Not documented: OpenAI does not say whether completed-job downloads through `GET /videos/{video_id}/content` still answer | Try one download pass for completed jobs and their prompts, keep whatever it returns, then remove Sora calls |
| Azure OpenAI `sora-2` (2025-12-08) | Preview; Microsoft lists retirement on October 15, 2026 | Jobs for up to 24 hours after creation | Treat it as a short bridge, not a production base |

For new video generation, choose a live model with [The AI Video Models That Matter in 2026—and How to Choose One](/en/posts/ai-video-models-comprehensive-comparison-2025), which compares Seedance 2.5, MiniMax H3, Wan 2.7, Kling 3.0, Veo 3.1, Runway Gen-4.5 and Luma Ray3.2 and treats Sora 2 as a migration case.

## Check the Sora shutdown date before you touch the prompt

The error message matters less than two facts: which Sora you call, and whether its shutdown date has passed. For OpenAI's own API it has. Work through these in order.

![Three-column decision map: Sora app or web goes to the export page, the OpenAI API splits into before and after September 24, 2026, and Azure sora-2 2025-12-08 runs until its October 15, 2026 retirement](https://www.aifreeapi.com/posts/en/sora-2-api-self-harm-error-fix/img/which-sora-decision-map.webp)

1. **Confirm which service your code calls.** Requests to `api.openai.com/v1/videos` go to the API OpenAI removed on September 24, 2026. Requests to an `*.openai.azure.com` endpoint follow Microsoft's separate schedule, covered further down. A consumer error in the Sora app is a third case.
2. **September 24, 2026 has passed, so stop diagnosing OpenAI API failures.** Any failure from the OpenAI Videos API now should be read as the shutdown, not as moderation, load or a bad key. OpenAI's deprecations page does not document which HTTP status or error body the removed endpoints return, so don't match on a specific code; treat every failure from those endpoints as permanent.
3. **Try retrieval once.** Whether listing and completed-job downloads still answer after the removal is not documented. Run the script in the next section one time, keep what it saves, and do not loop on failures. On Azure, where the retirement date has not passed, downloading completed jobs is worth more than getting one more prompt through moderation.
4. **Remove retries and backoff around `videos.create`.** A retry loop that once smoothed over moderation blocks now keeps hitting a dead endpoint and hides the real cause in your logs.
5. **Don't route around the shutdown.** As of September 23, 2026, at least one third-party API gateway still listed Sora 2 among its video models with no discontinuation notice. A model name on a reseller's list does not extend OpenAI's own lifecycle for that model.

## Save completed Sora API videos and prompts

OpenAI's [video generation guide](https://developers.openai.com/api/docs/guides/video-generation) describes `GET /videos` for listing your jobs and `GET /videos/{video_id}/content` for streaming the finished MP4. The same guide says download URLs are valid for a maximum of 1 hour after generation and tells you to copy files to your own storage promptly. Jobs from before the removal may therefore return nothing. There is no documented answer to whether listing or completed-job downloads still work now that September 24, 2026 has passed, so the only way to know is to run the script once.

The script below lists every video on the API key's project, downloads completed ones and writes a manifest that keeps each prompt, model, size, duration and error. The prompts are the part you will reuse on a new model; the error codes are your historical record of what moderation refused.

```python
# save_sora_outputs.py
# Requires: pip install "openai>=2.0" and OPENAI_API_KEY in the environment.
import json
import pathlib

import openai
from openai import OpenAI

client = OpenAI()
out_dir = pathlib.Path("sora_archive")
out_dir.mkdir(exist_ok=True)
manifest = []

try:
    for video in client.videos.list():  # the SDK pages through all results
        record = {
            "id": video.id,
            "model": video.model,
            "status": video.status,
            "prompt": video.prompt,
            "size": video.size,
            "seconds": video.seconds,
            "created_at": video.created_at,
            "error": video.error.model_dump() if video.error else None,
            "saved": False,
        }
        if video.status == "completed":
            try:
                content = client.videos.download_content(video.id, variant="video")
                content.write_to_file(out_dir / f"{video.id}.mp4")
                record["saved"] = True
            except openai.APIStatusError as exc:
                record["download_error"] = f"HTTP {exc.status_code}: {exc.message}"
        manifest.append(record)
except openai.APIStatusError as exc:
    # Stop instead of retrying in a loop; keep whatever was already saved.
    print(f"Listing stopped with HTTP {exc.status_code}. Keeping what was saved.")

(out_dir / "manifest.json").write_text(json.dumps(manifest, indent=2))
saved = sum(1 for r in manifest if r["saved"])
print(f"Saved {saved} MP4 files; recorded {len(manifest)} jobs in manifest.json")
```

The method names and fields match version 2.24.0 of the official `openai` Python package (`videos.list`, `videos.download_content`, and the `prompt`, `error` and `status` fields on each video). The script has not been run against a live account, so check the first few files by hand. It makes only read calls, with no generation requests.

Success looks like an `.mp4` for every job whose status is `completed`, plus a `manifest.json` in which failed jobs carry an `error` object with a `code` such as `moderation_blocked`. If a download fails with an error, record it and move on; hammering the same `video_id` won't change an expired or removed file. For a curl version and the storage checklist, see [Sora 2 Video Downloader Without Watermark: What Still Works After the Sora Shutdown](/en/posts/sora-2-video-downloader-without-watermark).

## What moderation_blocked and sentinel_block meant

Both codes are refusals from Sora's safety checks for that specific job. Neither points to an outage, a quota problem or a broken key. That distinction still helps when you read old logs, because it tells you which prompts will need a different brief on the next model rather than a simple rerun.

OpenAI's video guide lists what the Sora API rejects, and Microsoft's [Sora 2 overview](https://learn.microsoft.com/en-us/azure/ai-foundry/openai/concepts/video-generation) carries the same list for Azure:

- content not suitable for audiences under 18
- copyrighted characters and copyrighted music
- real people, including public figures
- input images that contain human faces

The guide also says character uploads that depict human likeness are blocked by default. If a job in your manifest failed with `moderation_blocked`, one of these rules is the likely cause. The public guide does not document how `sentinel_block` differs from `moderation_blocked` or at which stage each one fired, so don't build migration decisions on that distinction.

One developer report from the moderation era matters for accounting. In an [OpenAI developer forum thread about moderation blocks](https://community.openai.com/t/blocked-for-moderation-sora-2-api/1390057), a community member reported that jobs blocked at the output stage were still charged. OpenAI Support replied by suggesting a pre-check with the free moderation endpoint. That charging claim is a user report, not documented billing behavior, so use your own usage records if you need to reconcile costs.

## "Unable to process request" in the Sora app: why Sora isn't working

This message belongs to the consumer app, not the API. In March 2026, users on the OpenAI forum and r/SoraAi reported "Unable to generate" and "Unable to process request" on simple prompts, remixes and extensions. One Reddit commenter said it replaced the earlier "We're under heavy load" notice. OpenAI announced the Sora shutdown on March 24, 2026. The timing overlaps, but no OpenAI statement links the two, so treat it as coincidence in time rather than a proven cause.

The app question is closed either way: the web and app experiences ended on April 26, 2026. As of September 23, 2026, [sora.chatgpt.com/sunset](https://sora.chatgpt.com/sunset) showed "Sora is no longer available. You can export your data at any time." with an Export button. OpenAI's notice says you request the export there and get an email when it is ready. If OpenAI offers a final export window, it notifies users by email, and after that window Sora data is permanently deleted. OpenAI recommends exporting as soon as possible. Page wording can change, and one page view does not prove that every account can still export.

## If you run Sora 2 on Azure OpenAI

Azure deployments do not follow OpenAI's date. Microsoft's [model retirement schedule](https://learn.microsoft.com/en-us/azure/foundry/openai/concepts/model-retirement-schedule) lists:

| Azure model version | Lifecycle | Retirement | Replacement |
| --- | --- | --- | --- |
| `sora-2` 2025-10-06 | Preview | July 15, 2026 (retired) | `sora-2` 2025-12-08 |
| `sora-2` 2025-12-08 | Preview | October 15, 2026 | None listed |

Under Microsoft's [model lifecycle policy](https://learn.microsoft.com/en-us/azure/ai-foundry/openai/concepts/model-retirements), inference calls to a retired model return `410 Gone`, and preview models are not recommended for production. Before retirement, Azure keeps Sora 2 jobs for up to 24 hours after creation, so download each result the day you generate it.

If you already have a working 2025-12-08 deployment, it can finish work in progress until the listed retirement date. If you don't have one, don't start: it is a preview model with a published retirement date and no successor. The same four content restrictions apply on Azure, and a job that fails there carries a `failure_reason` field you can log.

## Move new video generation to a live model

Replacing Sora is a model choice, not a code patch. Start with [The AI Video Models That Matter in 2026—and How to Choose One](/en/posts/ai-video-models-comprehensive-comparison-2025) to narrow the field by what your videos need: reference images, native audio, duration, or deployment terms. If you have already settled on Seedance, [Seedance Video Models in 2026: When to Use 2.5, 2.0, Fast, or Mini](/en/posts/seedance-video-models-2026) picks the variant. If you are split between two live options, [Veo 3.1 vs Seedance 2.0: Which Should You Test First?](/en/posts/veo-3-1-vs-seedance-2-0) gives a same-brief test plan.

Your Sora archive is the input for that test. Take a handful of accepted prompts from `manifest.json`, the matching MP4s as a quality reference, and a few prompts that Sora refused. Run them on the candidate model. Content rules differ by provider, and the refused prompts show you early whether the new model's rules fit your use case. A refusal is cheaper to find in a test than in production.

![Three-step flow: save MP4 files and manifest.json from Sora, rerun accepted and refused prompts on a live model, then remove Sora retry wrappers and the sora-2 and sora-2-pro model strings](https://www.aifreeapi.com/posts/en/sora-2-api-self-harm-error-fix/img/sora-archive-migration-flow.webp)

On the code side, put the video provider behind one interface, delete the Sora-specific retry and polling wrappers, and remove the `sora-2` and `sora-2-pro` model strings from configuration so nothing calls them by accident after the shutdown date.

## FAQ

### Does the Sora 2 API still work?

Not on OpenAI. The deprecations page lists the Videos API and every `sora-2` and `sora-2-pro` model as removed from the API on September 24, 2026, with no replacement named. Treat any failure from those endpoints as the shutdown. On Azure, Microsoft lists the `sora-2` 2025-12-08 preview until October 15, 2026.

### What error will the Sora API return after the shutdown?

OpenAI has not documented the status code or error body. Don't write code that waits for a specific error. Remove the Sora calls instead. On Azure, Microsoft documents `410 Gone` for retired models.

### Should I still rewrite prompts to avoid moderation_blocked?

No. OpenAI's endpoint has been removed, and on Azure a rewrite only works until the October 15, 2026 retirement. Keep the refused prompts as test cases for the model you move to.

### Is there an official replacement for Sora 2?

No. OpenAI's deprecation entry names no replacement model for the Videos API or the Sora 2 models, and Microsoft lists none for Azure `sora-2` 2025-12-08.

### What happens to Sora app credits and subscriptions?

OpenAI's discontinuation notice sends refund requests through the ChatGPT subscription refund process and says purchased ChatGPT or Sora credits can still be used for Codex. It does not spell out who qualifies for a refund.
