Sora 2 API Alternatives Compared, With Code: Seedance 2.5, Omni Flash, MiniMax H3, Kling v3

9 min read • September 21, 2026

Table of contents

  1. Introduction
  2. What is actually being removed
  3. The four replacements
  4. Pricing
  5. Getting the video back
  6. Step 1: one character, reused everywhere
  7. Step 2: a start frame per model
  8. Step 3: the farewell clip, on Sora 2 itself
  9. Step 4: one clip per replacement
  10. What changes when you move off Sora 2
  11. What it cost
  12. Run it yourself
  13. Frequently asked questions
  14. Conclusion

Introduction

OpenAI removes sora-2, sora-2-pro and the whole Videos API on September 24, 2026, and its deprecation table names no replacement — so the migration is to another vendor, and through the useapi.net APIs the same six-second shot costs between $0.08 and $1.80 depending on which one you pick.

The most expensive of the four costs 22 times the cheapest — $1.80 against $0.08 — from the same brief, the same character and the same framing. At any real volume that gap, not the output quality, is what decides the choice.

So the comparison is not just a table, the same scene was shot five times with one character: a neon-sign maker retires a SORA 2 sign, then presents each replacement in turn. Every clip was generated by the model whose name is on the sign, so what you are watching is each model describing itself, at its own price:

The result — 31 seconds, five models, one character
$3.68 in total, all five clips · watch on YouTube

What is actually being removed

On March 24, 2026 OpenAI notified developers that the Videos API and every Sora 2 alias and snapshot — sora-2, sora-2-pro, sora-2-2025-10-06, sora-2-2025-12-08, sora-2-pro-2025-10-06 — would be removed on September 24, 2026. The Sora consumer app had already closed on April 26, 2026. After the removal date the endpoints stop answering, and OpenAI says it will permanently delete the data associated with your use of Sora once any final export window closes — so anything you still need has to come down before then.

The detail that decides the migration is the shape of the deprecations table itself. Most rows name a recommended replacement. The Sora 2 and Videos API rows leave that column empty, because OpenAI has no other video model to move you to. There is no in-house upgrade path — the only question is which vendor you go to instead.

The four replacements

Each of these generates video from a start frame with synchronised speech, which is the capability most Sora 2 pipelines were using. Prices are for a six-second clip at each model’s nearest tier to 720p, on the best per-credit rate of each route.

Model Vendor Route Six seconds Notes
Omni 1.1 Flash Google Google Flow API $0.08 generates at 360p or 720p, free upscale to 1080p
Kling v3 Kuaishou Kling API $0.44 up to 4K, derives aspect from the frame
MiniMax H3 MiniMax PixVerse API $0.72 768p or 1440p, no 720p tier
Seedance 2.5 ByteDance PixVerse API $1.80 reference audio and video, via create-fusion

MiniMax H3 is also the only one of the four whose weights are public, which matters if you are thinking about self-hosting. The FAQ covers what the licence actually allows.

Pricing

Every route here is flat-fee. You bring your own vendor account and add a flat $15/month to useapi.net for API access, with no per-generation surcharge from us — the credits above are the vendor’s own, spent on your own plan.

The figures use the best per-credit rate on each route, on monthly billing: PixVerse Premium at $0.00400 per credit, Google AI Ultra $199 at roughly $0.008 per Flow credit, and Kling Ultra monthly at $0.00615. These are the lowest per-credit rates, not the cheapest plans — Premium is $60 a month and Ultra $199 is Google’s top tier. Yearly billing is cheaper again on all three. Full per-model, per-plan tables are on the PixVerse overview, the Google Flow overview and the Kling overview, and the numbers move when vendors change their promotions, so treat them as current-as-of-publication rather than contractual.

Route matters as much as plan. MiniMax H3 also runs on our own MiniMax API at 7 credits per second, about $0.32 for the same six seconds against $0.72 on PixVerse. Both PixVerse clips here were kept on one account for convenience, not because it was the cheapest way to buy them. The model matrix lists every API that carries a given model.

Getting the video back

Every create call below is asynchronous — it returns an id, not a file. All of them authenticate the same way, with your useapi.net token as Authorization: Bearer user:1234-… (see Setup), and that one token reaches all four vendors.

Route Poll Finished when The file
PixVerse GET /videos/{video_id} video_status_final: true url
Google Flow GET /jobs/{jobId} status: "completed" fifeUrl on the returned media
Kling GET /tasks/{task_id} status_final: true works[0].resource.resource

Any create call also accepts replyUrl, which calls you back when the job finishes instead of making you poll.

Step 1: one character, reused everywhere

Everything starts from a single generated portrait. Images are free on Google Flow — Nano Banana Pro is billed at $0.134 an image on the official Gemini API and included here — so this stage costs nothing however many times you run it. It is passed as reference_1 to every later image request, which is what keeps the same face, the same room and the same bench across five clips made by four different vendors. Nothing else carries identity between them.

The character is invented rather than photographed. In our runs Google’s moderation was markedly stricter with real, identifiable people, and a generated reference sidesteps that entirely.

curlPOST /images — the character, free on the Google Flow API
curl --location 'https://api.useapi.net/v1/google-flow/images' \
--header 'Authorization: Bearer user:1234-…' \
--form 'email="[email protected]"' \
--form 'model="nano-banana-pro"' \
--form 'aspectRatio="9:16"' \
--form 'count="4"' \
--form 'prompt="Photoreal vertical phone video still, handheld, mid-shot from the waist up. A man in his late twenties stands behind a brushed steel workbench in a neon sign workshop: short black hair, thin glasses, plain black t-shirt. Bare pale wall behind him, nothing else in the room. He looks straight into the lens, mouth closed, expression flat. Natural phone-camera look, slight sensor noise, no colour grade."'
The generated character used across all five clips: a neon-sign maker behind a steel workbench, reused as the reference for the Seedance 2.5, Omni 1.1 Flash, MiniMax H3 and Kling v3 start frames
The character — Nano Banana Pro
0 credits

Step 2: a start frame per model

One image request per clip, each passing the character as reference_1 and changing only the sign’s text and colour. Holding the wording identical — “Same man, same room, same framing as the reference image … change only the sign” — is what keeps the framing stable enough that the five clips cut together.

Text on a generated sign is the fragile part. Twelve characters (SEEDANCE 2.5) rendered cleanly here, but that is close to where image models start mangling glyphs, so check every frame before spending a credit on video. Pick the variant where the whole sign sits inside the frame, not one that runs off the edge — once the clip animates, anything near the border clips out of shot.

curlPOST /images — a start frame, free on the Google Flow API
curl --location 'https://api.useapi.net/v1/google-flow/images' \
--header 'Authorization: Bearer user:1234-…' \
--form 'email="[email protected]"' \
--form 'model="nano-banana-pro"' \
--form 'aspectRatio="9:16"' \
--form 'count="4"' \
--form 'reference_1="user:1234-email:…-image:168caede-…"' \
--form 'prompt="Same man, same room, same framing as the reference image: he stands behind the brushed steel workbench, both hands resting on the top edge of a large upright neon sign standing on the bench in front of him. Change only the sign: it now reads \"SEEDANCE 2.5\" in bright pink neon tubing on a clear acrylic backing, spanning the width of the bench, reflecting in the steel. He looks straight into the lens, mouth closed, expression flat. Photoreal vertical phone video still, natural phone-camera look, slight sensor noise, no colour grade."'

reference_1 is the character from Step 1.

Seedance 2.5 start frame: the sign maker behind a pink SEEDANCE 2.5 neon sign, the ByteDance Sora 2 replacement
Seedance 2.5
Omni 1.1 Flash start frame: the sign maker behind an amber OMNI FLASH neon sign, the Google Sora 2 replacement
Omni 1.1 Flash
MiniMax H3 start frame: the sign maker behind a cyan MINIMAX H3 neon sign, the MiniMax Sora 2 replacement
MiniMax H3
Kling v3 start frame: the sign maker behind a green KLING V3 neon sign, the Kuaishou Sora 2 replacement
Kling v3

The start frames live in Google Flow, and the video calls below are on three different vendors. Omni 1.1 Flash takes the Flow mediaGenerationId directly. For the others, download the frame with GET /assets/{mediaGenerationId}, then upload the file to POST /files for PixVerse and use the returned path, or to POST /assets for Kling and use the returned URL.

Step 3: the farewell clip, on Sora 2 itself

The opening clip was generated on Sora 2 while it still answers, through PixVerse rather than OpenAI directly. The sign maker boxes the sign and ships it off. Sora 2 only accepts 4, 8 or 12 seconds — there is no six-second option — so this one is eight, trimmed back to six in the reel.

curlPOST /videos/create-v4 — Sora 2, via the PixVerse API
curl --location 'https://api.useapi.net/v2/pixverse/videos/create-v4' \
--header 'Authorization: Bearer user:1234-…' \
--form 'email="[email protected]"' \
--form 'model="sora-2"' \
--form 'quality="720p"' \
--form 'duration="8"' \
--form 'first_frame_path="upload/96c1035e-….jpeg"' \
--form 'prompt="He looks into the lens and says, flat: \"Sora 2'\''s done. Museum of useless AI shit.\" He drags an open cardboard box into frame from the right, lifts the neon sign off the bench and drops it in, folds the lid shut, then shoves the box out of frame to the right. Handheld phone camera, slight drift."'

first_frame_path comes from POST /files.

Sora 2 — 720p
$0.64 for eight seconds

Step 4: one clip per replacement

The same prompt shape drives all four, with only the model name and the closing line changed. Each names itself, gives a flat endorsement, then an honest catch.

curlPOST /videos/create-v4 — Seedance 2.5 and MiniMax H3, via the PixVerse API
curl --location 'https://api.useapi.net/v2/pixverse/videos/create-v4' \
--header 'Authorization: Bearer user:1234-…' \
--form 'email="[email protected]"' \
--form 'model="seedance-2.5"' \
--form 'quality="720p"' \
--form 'duration="6"' \
--form 'first_frame_path="upload/8bb69d77-….jpeg"' \
--form 'prompt="The man holds the neon sign on the bench with both hands. He looks into the lens and says, flat: \"Seedance two point five. Best model.\" He pauses. He says: \"Pricey as fuck.\" The neon sign flickers off and back on twice while he speaks. Handheld phone camera, slight drift."'

For MiniMax H3 change model to minimax-h3 and quality to 768p — it publishes no 720p tier. Neither model accepts an audio field — both generate native audio and reject the flag. Both also require duration and quality, which are optional only on PixVerse’s own models.

curlPOST /videos — Omni 1.1 Flash, via the Google Flow API
curl --location 'https://api.useapi.net/v1/google-flow/videos' \
--header 'Authorization: Bearer user:1234-…' \
--form 'email="[email protected]"' \
--form 'model="omni-flash"' \
--form 'aspectRatio="portrait"' \
--form 'resolution="720p"' \
--form 'duration="6"' \
--form 'startImage="user:1234-email:…-image:aeecdde7-…"' \
--form 'prompt="The man holds the neon sign on the bench with both hands. He looks into the lens and says, flat: \"Omni Flash. Google'\''s finest.\" He pauses. He says: \"Insane moderation. But real cheap.\" The neon sign flashes off and back on several times while he speaks. Handheld phone camera, slight drift."'

aspectRatio defaults to landscape here and the start frame does not override it — pass portrait explicitly or a 9:16 frame still returns a 16:9 clip.

curlPOST /videos/image2video-frames — Kling v3, via the Kling API
curl --location 'https://api.useapi.net/v1/kling/videos/image2video-frames' \
--header 'Authorization: Bearer user:1234-…' \
--form 'email="[email protected]"' \
--form 'model_name="kling-v3-0"' \
--form 'mode="pro"' \
--form 'duration="6"' \
--form 'image="https://s15-kling.klingai.com/kimg/…"' \
--form 'prompt="The green neon sign switches off completely, then back on. It does this twice. The man holds the sign on the bench with both hands and looks into the lens, his face blank and still. He says, flat: \"Kling V3. Kling is the King.\" He pauses. He says: \"Nuff said.\" Handheld phone camera, slight drift."'

image is a URL returned by POST /assets. Kling v3 rejects aspect_ratio and derives it from the frame, and audio is on by default.

Seedance 2.5
$1.80
Omni 1.1 Flash
$0.08
MiniMax H3
$0.72
Kling v3
$0.44

What changes when you move off Sora 2

  • Duration grids differ, and a hard-coded value will not port. Sora 2 took 4, 8 or 12 seconds. Omni 1.1 Flash takes 4, 6, 8 or 10, MiniMax H3 5 to 15, Kling v3 3 to 15, and Seedance 2.5 anything from 4 to 30.
  • Resolution tiers are not uniform either. Omni 1.1 Flash generates at 360p or 720p, MiniMax H3 skips 720p entirely and jumps 768p to 1440p, Seedance 2.5 reaches 1080p and Kling v3 goes to 4K. Mixing them means conforming everything to the lowest common size, so pick that size before you shoot.
  • Quality varies more than the resolution numbers suggest. At the same nominal size the H3 clip came back at 1.3 Mbps against Seedance’s 6.5 Mbps, and it is visibly the softest of the set.
  • Voice is the one capability that does not port cleanly. Seedance 2.5 is the only one of the four that accepts an uploaded audio clip as a reference, and only through create-fusion. Omni 1.1 Flash offers Google’s preset voices through referenceAudio_1, and Kling can carry a voice on a character element. Each clip here uses its model’s own native voice, which is why they differ.
  • Prompts mostly carry over, with one habit worth adopting: give each physical action its own sentence and describe expressions positively. Trailing clauses and negations get dropped, unevenly, by all four.

What it cost

Step Model Credits Cost
Character portrait, 9:16 Nano Banana Pro 0 $0
Four start frames, 9:16 Nano Banana Pro 0 $0
Clip 1, Sora 2, 8s 720p, trimmed to 6s sora-2 160 $0.64
Clip 2, Seedance 2.5, 6s 720p seedance-2.5 450 $1.80
Clip 3, Omni 1.1 Flash, 6s 720p omni-flash 10 $0.08
Clip 4, MiniMax H3, 6s 768p minimax-h3 180 $0.72
Clip 5, Kling v3, 6s 1080p kling-v3-0 72 $0.44
Total     $3.68

Images cost nothing on Google Flow, so iterate on the character and the signs as long as you like before spending anything on video. All five clips together came to $3.68, and the cheapest of them is the $0.08 one.

Run it yourself

Every call on this page chains into two scripts. useapi/sora-2-alternatives holds them along with every prompt above in prompts.json: frames/ generates the character and a start frame per model, and clips/ sends each frame to the model named on its sign, then prints the credit cost the API returned.

The frame stage is free, so you can iterate on the character and the signs as long as you like before spending anything. One command does the cheap end of the comparison on its own:

node clips.mjs <API_TOKEN> omni

Frequently asked questions

  • When exactly does the Sora 2 API stop working? September 24, 2026. OpenAI announced it on March 24, 2026, covering the Videos API and every sora-2 alias and snapshot. After that date the endpoints stop answering and OpenAI permanently deletes the associated data once any final export window closes, so download anything you still need first.
  • What does OpenAI recommend migrating to? Nothing. The deprecations table leaves the recommended-replacement column empty for both rows, because OpenAI has no other video model in the API. Migration means another vendor.
  • Which alternative is closest to Sora 2 in capability? For the common case — a start frame plus synchronised speech — all four here do it. Seedance 2.5 is the most capable, taking up to 30 reference images plus 10 reference videos and 10 reference audios — 50 in total, through create-fusion — and it is also the most expensive at $1.80 per six seconds. Omni 1.1 Flash does the same core job for $0.08 with a 720p ceiling.
  • Is MiniMax H3 really open source? Its weights are public — MiniMax published them in early August 2026, 33B parameters, on Hugging Face. It is open-weight under a custom community licence whose territory clause requires an application form for the USA, EU, UK and South Korea, so “open source” is a loose description of it. The full repository runs to hundreds of gigabytes, though the smallest usable checkpoint is far smaller.
  • Do I pay useapi.net per generation? No. You bring your own vendor account and pay a flat $15/month for API access. The credits in the table are the vendor’s own, spent against your plan. See Pricing.

Conclusion

Visit our Discord Server or Telegram Channel for any support questions and concerns.

Check our GitHub repo with code examples.

Cross posted

Also published on dev.to, discussed on Reddit, and shared on Bluesky.