Sora 2 API
OpenAI shut the Sora 2 API down on September 24, 2026. What Sora 2 and Sora 2 Pro cost per second, the Kling 3.0, Veo 3.1 and Seedance 2.5 models that do the same work priced live next to it, and how to move a Sora request over field by field.
Sora 2 API vs Kling 3.0, Veo 3.1 and Seedance 2.5: price
| Model | Per second, 720p, with audio | 4 s clip | 8 s clip | 12 s clip |
|---|---|---|---|---|
| Sora 2 (shut down) | $0.10 | $0.40 | $0.80 | $1.20 |
| Sora 2 Pro (shut down) | $0.30 | $1.20 | $2.40 | $3.60 |
| Kling O3 Standard | $0.0813 | $0.33 | $0.65 | $0.98 |
| Kling 3.0 Standard | $0.2438 | $0.98 | $1.95 | $2.93 |
| Kling 3.0 Pro | $0.3063 | $1.23 | $2.45 | $3.68 |
| Veo 3.1 Lite | $0.03 | 8 s only | $0.24 | 8 s only |
| Veo 3.1 Fast | $0.06 | 8 s only | $0.48 | 8 s only |
| Veo 3.1 | $0.24 | 8 s only | $1.92 | 8 s only |
| Seedance 2.5 | $1.26 | $5.04 | $10.08 | $15.12 |
USD. Sora rows are OpenAI’s last prices (its Sora 2 model page, read 2026-10-20). Every other row is live from GET /v1/catalog/media: Kling with sound on, Veo 3.1 as its 8-second clip price divided by 8 (a text prompt on Veo 3.1), Seedance 2.5 at 720p.
Sora 2 was $0.10 a second. 3 of the 7 replacements in the table are under that today at 720p with sound, and Kling O3 Standard is $0.0813 a second with sound and $0.0625 without. Sora 2 Pro was $0.30 a second at 720p and $0.70 at 1080p. Veo 3.1 Fast makes the same 8 seconds at 1080p for $0.58 and at 4K for $1.20.
Seedance 2.5 is the premium row: $0.56 a second at 480p, $1.26 at 720p and $2.28 at 1080p. It is the one to pick for length, up to 30 seconds in one clip, and for 21:9 or a reference audio track. Seedance 2, at a lower price per second, is on the Seedance pricing guide. Prices here are read from the catalog when the page is built, at most five minutes old, and a top-up locks your rate for 30 days.
What happened to the Sora API
OpenAI's video generation guide now opens with the notice: the Sora 2 models and the Videos API were shut down on September 24, 2026, and no one-to-one replacement API is available. The Sora 2 model page is marked deprecated, and the guide stays up for historical reference (both read 2026-10-20).
That leaves code that sends sora-2 or sora-2-pro to /v1/videos with nothing to call, and no model of OpenAI's to switch it to. The way forward is a different developer's video model, and the work is in three parts: pick the model for the clip, map Sora's settings onto it, and change the endpoint.
Move a Sora request to Kling, Veo or Seedance
| Sora 2 field | Kling 3.0 / O3 | Veo 3.1 | Seedance 2.5 |
|---|---|---|---|
model | kling-o3-standard | veo-3.1-fast | seedance-2.5 |
prompt | prompt | prompt | prompt |
seconds | duration, 3 to 15 s, required | duration, 8 s | duration, 4 to 30 s, required |
size | aspect_ratio: 1:1, 16:9, 9:16 | aspect_ratio: 16:9, 9:16; resolution: 720p, 1080p, 4k | aspect_ratio: auto, 21:9, 16:9, 4:3, 1:1, 3:4, 9:16; resolution: 480p, 720p, 1080p, required |
input_reference | image_urls | image_urls (Fast and Veo 3.1; Lite takes text only) | image_urls |
| audio (always on) | sound: true, required | always on | generate_audio: true |
Settings read from each model at GET /v1/catalog/media when the page was built. Sora’s fields from OpenAI’s video generation guide.
Sora's size carried both the shape and the resolution. 1280x720 is aspect_ratio 16:9 and 720x1280 is 9:16. Where a model takes a resolution, 720p matches Sora 2, and 1080p matches Sora 2 Pro's 1920x1080. Sora's input_reference was the first frame, and image_urls is the same thing as a URL.
# What a Sora 2 call looked like (OpenAI Videos API, shut down September 24, 2026):
curl https://api.openai.com/v1/videos \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-F model="sora-2" \
-F prompt="A paper boat drifting down a rain-filled gutter at dusk, neon reflected in the water" \
-F size="1280x720" \
-F seconds="8" \
-F input_reference="@first_frame.jpg;type=image/jpeg"The same clip on Seedance 2.5, sent to POST /v1/generations. The answer comes back at once, 202, with the generation id and the price.
curl https://api.uplinkswitch.com/v1/generations \
-H "Authorization: Bearer $UPLINK_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2.5",
"input": {
"prompt": "A paper boat drifting down a rain-filled gutter at dusk, neon reflected in the water",
"duration": 8,
"resolution": "720p",
"aspect_ratio": "16:9",
"generate_audio": true,
"image_urls": ["https://example.com/first_frame.jpg"]
}
}'
# 202 with the generation id and the price already set, 8 units of a second:
# {"id": "gen_...", "status": "queued", "model": "seedance-2.5", "charge": {"amount_usd": "...", "units": 8, "unit": "second"}}Poll the generation until its status is succeeded or failed. Sora's GET /v1/videos/{id} and its /content download become one call here: the finished clip's URL is in outputs.
curl https://api.uplinkswitch.com/v1/generations/gen_... \
-H "Authorization: Bearer $UPLINK_API_KEY"
# "status" moves queued -> running -> finalizing -> succeeded (or failed, which is refunded);
# the finished clip is the first entry in "outputs":
# {"id": "gen_...", "status": "succeeded", "outputs": [{"url": "https://api.uplinkswitch.com/v1/files/media/...", "content_type": "video/mp4", "bytes": 9876543}]}Which Sora 2 replacement to pick
- Kling O3 Standard to keep Sora 2's budget: $0.0813 a second with sound, clips of 3 to 15 seconds, a first frame and reference images. Kling 3.0 Standard ($0.2438) and Pro ($0.3063) are the versions without reference images. The Kling API guide covers elements and multi-shot.
- Veo 3.1 Fast for the 8-second shot Sora was used for most: native audio, a first frame or reference images, and 720p, 1080p or 4K at $0.48, $0.58 and $1.20 a clip. Veo 3.1 Lite is $0.24 for a text-only 8 seconds, and Veo 3.1 is $1.92 for Google's top tier.
- Seedance 2.5 for scenes longer than Sora allowed, up to 30 seconds, with reference images and a reference audio track, at $1.26 a second at 720p.
Run one Sora prompt on all three in Python
The quickest way to choose is to send the same prompt to each and watch the clips. This script starts all three at once, prints what each was charged, then reads each generation back until it is done.
import os, time, requests
BASE = "https://api.uplinkswitch.com/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['UPLINK_API_KEY']}"}
PROMPT = "A paper boat drifting down a rain-filled gutter at dusk, neon reflected in the water"
# One Sora prompt on three replacements, each with the settings that stand in for
# Sora's seconds, size and always-on audio.
jobs = {
"kling-o3-standard": {"duration": 8, "sound": True, "multi_shots": False, "aspect_ratio": "16:9"},
"veo-3.1-fast": {"duration": 8, "resolution": "720p", "aspect_ratio": "16:9"},
"seedance-2.5": {"duration": 8, "resolution": "720p", "aspect_ratio": "16:9", "generate_audio": True},
}
gens = {}
for model, settings in jobs.items():
gen = requests.post(
f"{BASE}/generations",
headers=HEADERS,
json={"model": model, "input": {"prompt": PROMPT, **settings}},
).json()
print(model, "charged", gen["charge"]["amount_usd"])
gens[model] = gen
for model, gen in gens.items():
while gen["status"] not in ("succeeded", "failed"):
time.sleep(5)
gen = requests.get(f"{BASE}/generations/{gen['id']}", headers=HEADERS).json()
print(model, gen["status"], gen["outputs"][0]["url"] if gen["status"] == "succeeded" else "refunded")At today's prices the three 8-second clips together cost $11.21, against $0.80 for one 8-second Sora 2 clip. The media guide has the endpoint in full, including the hourly sweep that finishes clips nobody polls.
What a month of Sora-style clips costs
| Clips | Sora 2 (was) | Kling O3 Standard | Veo 3.1 Fast | Veo 3.1 Lite | Seedance 2.5 |
|---|---|---|---|---|---|
| 10 x 8 s | $8.00 | $6.50 | $4.80 | $2.40 | $100.80 |
| 100 x 8 s | $80.00 | $65.04 | $48.00 | $24.00 | $1,008.00 |
| 1,000 x 8 s | $800.00 | $650.40 | $480.00 | $240.00 | $10,080.00 |
USD, 720p with audio, our live price times the count. Sora 2 at OpenAI’s last $0.10 a second.
A $10 top-up is 15 8-second clips with sound on Kling O3 Standard, 20 on Veo 3.1 Fast, or 0 on Seedance 2.5. On Sora 2 the same $10 was 12 clips. Google lists Veo 3.1 Fast at $0.80 for the same clip on its own API; the Veo 3.1 pricing guide has every Veo tier next to Google's rate.
Get a key
- Sign in to the console and add credit, from $10. There is no subscription and the credit does not expire on a timer.
- Create a key. It calls every model in the tables, every other video, image, speech and 3D model, and every chat model.
- Send the model and its settings to
POST /v1/generationson our base URL.
export UPLINK_API_KEY="sk-uplink-live-..."
# one base URL for Kling, Veo, Seedance and every other model on the list:
# https://api.uplinkswitch.com/v1Timing and errors
POST /v1/generationsanswers at once with the price set. A short clip is usually ready within a few minutes; poll every five seconds or so. Long Seedance clips and 4K Veo clips take longer, as Sora's 20-second and 1080p jobs did.- A request without a required setting (
duration,soundandmulti_shotson Kling;durationandresolutionon Seedance 2.5), or with a duration outside the model's range, is refused with a 400 before anything runs. - 401 is a missing or revoked key. 402 is an empty balance or a key at its monthly spend limit. 429 is the key's rate limit, or a busy model; the response says which.
- A clip that fails is refunded in full, and one still unfinished after 6 hours is marked failed and refunded. The file is an .mp4 on
api.uplinkswitch.com, kept 30 days.
Billing, receipts and the daily check
The price is charged when the request is accepted and refunded in full if the clip fails. Every charge sits on a signed receipt and a monthly statement you can check at /statements/verify. Whether each video model answered today is public at /proof, which calls every model on the list once a day. The text-to-video list has every video model on the key, Wan, Runway Gen-4.5 and Grok Imagine included.
Questions
- Is the Sora 2 API still available?
- Not from OpenAI. Its video generation guide says the Sora 2 models and the Videos API were shut down on September 24, 2026 and are no longer available, with no one-to-one replacement API (read 2026-10-20). The model ids sora-2 and sora-2-pro and the /v1/videos endpoint no longer answer. Microsoft listed Sora 2 in Azure AI Foundry as a preview (Microsoft Learn, updated 2026-03-18); its docs are the place to check whether that deployment still runs.
- Does the Sora 2 API still work through resellers?
- Resold Sora 2 APIs ran on OpenAI’s, so they stopped with it. We tested one on 2026-10-20 and it answered “model not found”. Pages that still advertise a Sora 2 API are worth one small test call before you build on them.
- What is a good replacement for the Sora 2 API?
- For Sora 2’s price with sound: Kling O3 Standard at $0.0813 a second with sound, against Sora 2’s $0.10. For 8-second clips with native audio up to 4K: Veo 3.1 Fast at $0.48 a clip at 720p. For clips longer than Sora’s 20 seconds: Seedance 2.5, 4 to 30 seconds at $1.26 a second at 720p. All three take a first frame, as Sora’s input_reference did, and all three run on one key.
- How much did the Sora 2 API cost?
- Sora 2 was $0.10 a second at 1280x720, so $0.40 for 4 seconds and $1.20 for 12. Sora 2 Pro was $0.30 a second at 720p, $0.50 at 1024p and $0.70 at 1080p, so a 12-second 1080p clip was $8.40 (OpenAI’s Sora 2 model page, read 2026-10-20).
- Was the Sora 2 API free?
- No. OpenAI billed every second of video, at the rates above, from API credit. The replacements here bill the same way, per second or per clip, from prepaid credit with no subscription; a clip that fails is refunded.
- Can I still use Sora 2?
- Not through OpenAI’s API: the Videos API is gone, and OpenAI’s Sora 2 announcement now reads that the Sora product is no longer available. Prompts written for Sora carry over, since every replacement on this page takes a plain text prompt and a first frame. What changes is the setting names, mapped in the table above.
- Which replacement makes sound like Sora 2?
- All three. Veo 3.1 makes native audio on every clip with no setting. Kling 3.0 and O3 take sound, true or false, and it picks the price. Seedance 2.5 takes generate_audio and its price does not change with it.
- How long can the clips be?
- Sora 2 went up to 20 seconds. Seedance 2.5 takes 4 to 30 seconds, Kling 3.0 and O3 3 to 15, and Veo 3.1 makes one 8-second clip per request. A 20-second Sora scene is one Seedance 2.5 request, or two Kling clips of 10 seconds.
- Is there a Sora 2 API key I can still get?
- No. OpenAI keys still work for its other models, but none of them reaches Sora. A key here calls Kling, Veo, Seedance and every other video, image, speech and chat model on the list, from $10 of prepaid credit.
- What if a clip fails?
- It is refunded in full, automatically, and one still unfinished after 6 hours is marked failed and refunded. A request with a setting the model does not take is refused with a 400 before anything runs, and nothing is charged.