Sora 2 API shutdown: moving video generation calls

OpenAI shut down its Videos API and Sora 2 models on 2026-09-24. How the old fields map to Sume's POST /v1/videos, and why the model id must change.

5 min readSume
All posts

OpenAI shut down its Videos API and the Sora 2 models, sora-2 and sora-2-pro among them, on September 24, 2026, and its deprecations page lists no replacement. To move those calls to Sume, send your prompt to POST https://api.sume.com/v1/videos with a model id from Sume's video catalog or sume/auto. Sume has no Sora model, so the model id always changes.

This is a dated note. The shutdown facts come from OpenAI's Deprecations page and the old field names from its Videos API reference, both read on 2026-09-27. The Sume side comes from the Video Generation docs, the OpenAPI schema, and Sume's catalog code. Sume's own retiring Video 1.0 route is covered in moving to sume/auto.

What did OpenAI shut down, and when?

OpenAI notified developers on March 24, 2026. Its Videos API reference is now kept for historical reference only and says no one-to-one replacement API is available.

From OpenAI's Deprecations page, read 2026-09-27.
Shutdown dateModel or systemReplacement listed
2026-09-24Videos APINone
2026-09-24sora-2None
2026-09-24sora-2-proNone
2026-09-24sora-2-2025-10-06None
2026-09-24sora-2-2025-12-08None
2026-09-24sora-2-pro-2025-10-06None

Does Sume have a Sora model?

No. The ids Sume's video catalog lists are seedance-2.5, seedance-2-mini, seedance-2, seedance-2-fast, kling-3, wan-3.0, grok-imagine-video-1.5, minimax-h3, minimax-h3-max, gemini-omni-flash-1.1; none is a Sora model. You can also send sume/auto and let Sume pick: the response echoes sume/auto, and Sume never discloses which family ran.

Each model publishes its own supported_durations, supported_resolutions, and supported_aspect_ratios on GET /v1/videos/models, so check the model before you carry old settings over. Listing video models walks through those fields.

How do the old Videos API fields map to POST /v1/videos?

Sume does not take the old request body as is. Its OpenAPI schema for POST /v1/videos has no seconds or input_reference field and refuses fields it does not list, so rename each field:

From OpenAI's Videos API reference, Sume's Video Generation docs, and the Sume OpenAPI reference, read 2026-09-27.
OpenAI Videos APISume POST /v1/videosWhat to change
POST /videosPOST https://api.sume.com/v1/videosSend a JSON body with Content-Type: application/json.
model, such as sora-2modelRequired: a catalog id or sume/auto.
promptpromptSame field.
seconds, a string such as "8"durationAn integer number of seconds from the model's supported_durations.
size, such as 720x1280resolution and aspect_ratio, such as 720p and 9:16Every v1 model reports supported_sizes: null, so size returns 400 unsupported_parameter.
input_reference (image_url or file_id)frame_images or input_referencesA first_frame entry opens the clip; input_references guide it. Entries carry a public HTTPS URL, so a file id or data URL must become a hosted image first.
GET /videos/{video_id}GET /v1/videos/{id}Statuses are pending (the old queued), in_progress, completed, failed, and cancelled.
GET /videos/{video_id}/contentGET /v1/videos/{id}/content?index=0Send your API key. unsigned_urls[0] on a completed poll points here.

What does the migrated request look like?

This is the docs' sume/auto request with an idempotency key added. Swap in a catalog id to pin a model.

curl -X POST "https://api.sume.com/v1/videos" \
  -H "Authorization: Bearer $SUME_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: clip-001" \
  -d '{
    "model": "sume/auto",
    "prompt": "A vertical UGC-style product clip on a desk, natural light",
    "aspect_ratio": "9:16",
    "duration": 5
  }'

What else changes when I switch?

The request shape is not the only difference. Plan for these on day one:

  • Auth is Authorization: Bearer $SUME_API_KEY, sent from your server.
  • Send an Idempotency-Key so a retried submit returns the original job instead of a second one.
  • For push instead of polling, pass an HTTPS callback_url. Sume posts its own job webhook envelope, signed with x-sume-webhook-signature.
  • The same job is also visible at GET /v1/jobs/{id}/status and GET /v1/jobs/{id}/result.
  • Billing draws on your workspace USD balance, and usage.cost on the poll response is the billable amount. Each model's pricing_skus are on GET /v1/videos/models.

Sources

Related posts

More in Models

All Models posts

Written by Sume