Unified AI Video Generation API Hub

AI Video Generation API for Developers

Access four text-to-video routes—Seedance 2.5 (bytedance/seedance-2-5), Kling 3.0 (kling-3.0/video), Wan 2.5 (wan/2-5-text-to-video), and Wan 2.7 (wan/2-7-text-to-video)—through https://api.uniroute.app/v1/media with one Bearer API key. Query the authenticated catalog for input_fields, fetch a current quote in data.quoted_usd, submit an idempotent task with max_cost_usd, verify settlement via data.billing.state, and download signed output URLs.

Quote & settlement rules: Default retail quotes vs. settled charges: prices displayed on this page are current default retail whole-task quotes (option_quote_usd) from the public catalog snapshot, not guaranteed final charges. At runtime, call POST /v1/media/quote for your current authenticated data.quoted_usd, pass it as max_cost_usd when creating a task, and read data.billing.charged_usd once data.billing.state === "charged" as the authoritative settled charge.
AI video generation API illustration: one key connects an API card to mountain, cat and teapot video frames

Illustration — conceptual API workflow, not model-generated output

Four Text-to-Video Routes & Current Default Retail Whole-Task Quotes

Values below are current default retail whole-task quotes (option_quote_usd) read from the validated public media snapshot—never computed by multiplying per-second rates. Operational input_fields for your key are defined by GET https://api.uniroute.app/v1/media/catalog.

Default retail quote snapshot:
Snapshot hash: sha256:ca535a03789f9121…
ByteDance

Seedance 2.5

Default retail quote (480p:5)
$0.875 USD

Text-to-Video · Resolutions: 480p, 720p, 1080p · Durations: 5s, 10s

ByteDance Seedance 2.5 (bytedance/seedance-2-5) is a text-to-video route that includes a 480p resolution tier alongside 720p and 1080p for both 5-second and 10-second clips.

API model: bytedance/seedance-2-5Resolutions / tiers: 480p, 720p, 1080pDurations: 5s, 10s
Supported option keys & current default retail whole-task quotes
480p:5$0.875
480p:10$1.75
720p:5$1.96875
720p:10$3.9375
1080p:5$4.9375
1080p:10$9.875

Supported option values: 480p:5, 480p:10, 720p:5, 720p:10, 1080p:5, and 1080p:10.

  • API model value: bytedance/seedance-2-5 (text-to-video)
  • Only route among the four on this page with 480p:5 and 480p:10 options
  • Supports six resolution:duration option keys across 480p, 720p, and 1080p
Kuaishou

Kling 3.0

Default retail quote (std:5)
$0.4375 USD

Text-to-Video · Tiers: 720p (std), 1080p (pro) · Durations: 5s, 10s

Kuaishou Kling 3.0 (kling-3.0/video) is a text-to-video route that selects output resolution by mode tier: Standard (std, 720p) and Pro (pro, 1080p), each in 5-second and 10-second durations.

API model: kling-3.0/videoResolutions / tiers: 720p (std), 1080p (pro)Durations: 5s, 10s
Supported option keys & current default retail whole-task quotes
std:5$0.4375
std:10$0.875
pro:5$0.5625
pro:10$1.125

Supported option values: std:5, std:10 (720p Standard) and pro:5, pro:10 (1080p Pro).

  • API model value: kling-3.0/video (text-to-video)
  • Uses tier-duration option keys: std:5, std:10, pro:5, pro:10
  • std maps to 720p and pro maps to 1080p across 5s and 10s durations
Alibaba

Wan 2.5

Default retail quote (720p:5)
$0.375 USD

Text-to-Video · Resolutions: 720p, 1080p · Durations: 5s, 10s

Alibaba Wan 2.5 (wan/2-5-text-to-video) is a text-to-video route supporting 720p and 1080p resolutions across 5-second and 10-second durations.

API model: wan/2-5-text-to-videoResolutions / tiers: 720p, 1080pDurations: 5s, 10s
Supported option keys & current default retail whole-task quotes
720p:5$0.375
720p:10$0.75
1080p:5$0.625
1080p:10$1.25

Supported option values: 720p:5, 720p:10, 1080p:5, and 1080p:10.

  • API model value: wan/2-5-text-to-video (text-to-video)
  • Accepts four resolution:duration options: 720p:5, 720p:10, 1080p:5, 1080p:10
  • Check the live option_quote_usd values above to compare 720p and 1080p quotes against Wan 2.7
Alibaba

Wan 2.7

Default retail quote (720p:5)
$0.5 USD

Text-to-Video · Resolutions: 720p, 1080p · Durations: 5s, 10s

Alibaba Wan 2.7 (wan/2-7-text-to-video) is a text-to-video route that shares the same 720p/1080p and 5s/10s option key schema as Wan 2.5 with its own per-option quotes in the catalog.

API model: wan/2-7-text-to-videoResolutions / tiers: 720p, 1080pDurations: 5s, 10s
Supported option keys & current default retail whole-task quotes
720p:5$0.5
720p:10$1
1080p:5$0.75
1080p:10$1.5

Supported option values: 720p:5, 720p:10, 1080p:5, and 1080p:10.

  • API model value: wan/2-7-text-to-video (text-to-video)
  • Shares the exact option key set (720p:5, 720p:10, 1080p:5, 1080p:10) with Wan 2.5
  • Review live option_quote_usd quotes above for current 720p and 1080p retail quotes

Side-by-Side Text-to-Video Parameter & Default Retail Quote Matrix

Choose among the four text-to-video routes solely by runtime model identifier, option encoding (resolution vs. std/pro tier), clip duration (5s or 10s), and current default retail whole-task quotes.

ModelAPI model valueResolutions / TiersDurationsRepresentative Default QuoteSupported option keys & default retail quotes
Seedance 2.5
ByteDance
bytedance/seedance-2-5480p, 720p, 1080p5s, 10s$0.875 (480p:5)
480p:5:$0.875480p:10:$1.75720p:5:$1.96875720p:10:$3.93751080p:5:$4.93751080p:10:$9.875
Kling 3.0
Kuaishou
kling-3.0/video720p (std), 1080p (pro)5s, 10s$0.4375 (std:5)
std:5:$0.4375std:10:$0.875pro:5:$0.5625pro:10:$1.125
Wan 2.5
Alibaba
wan/2-5-text-to-video720p, 1080p5s, 10s$0.375 (720p:5)
720p:5:$0.375720p:10:$0.751080p:5:$0.6251080p:10:$1.25
Wan 2.7
Alibaba
wan/2-7-text-to-video720p, 1080p5s, 10s$0.5 (720p:5)
720p:5:$0.5720p:10:$11080p:5:$0.751080p:10:$1.5

External Media Video API Flow (Catalog → Quote → Create → Poll → Download)

All programmatic calls use https://api.uniroute.app/v1/media with your Bearer API key. The compact snippets below illustrate the contract; see the Media API Docs for complete schemas and error handling.

01POSThttps://api.uniroute.app/v1/media/quote

Inspect catalog input_fields & quote current data.quoted_usd

Use authenticated GET /v1/media/catalog to inspect available models, options, and operational input_fields. Then call POST /v1/media/quote with model and option to read the exact decimal string in data.quoted_usd.

# Optional: inspect operational input_fields and options for your key
curl -sS https://api.uniroute.app/v1/media/catalog \
  -H "Authorization: Bearer $UNIROUTE_API_KEY"

# Request current authenticated quote and save exact data.quoted_usd string
CURRENT_QUOTED_USD="$(curl -sS -X POST https://api.uniroute.app/v1/media/quote \
  -H "Authorization: Bearer $UNIROUTE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"bytedance/seedance-2-5","option":"480p:5"}' | jq -r '.data.quoted_usd')"
02POSThttps://api.uniroute.app/v1/media/tasks

Persist Idempotency-Key & create task with max_cost_usd

Save your request payload and a unique Idempotency-Key before calling POST /v1/media/tasks. Pass media_type: "video", model, option, prompt, and max_cost_usd set to the current data.quoted_usd string. HTTP 202 returns data.task_id; persist data.task_id immediately.

# Persist SAVED_IDEMPOTENCY_KEY and request state before sending POST
curl -sS -X POST https://api.uniroute.app/v1/media/tasks \
  -H "Authorization: Bearer $UNIROUTE_API_KEY" \
  -H "Idempotency-Key: $SAVED_IDEMPOTENCY_KEY" \
  -H "Content-Type: application/json" \
  -d "{
    \"media_type\": \"video\",
    \"model\": \"bytedance/seedance-2-5\",
    \"option\": \"480p:5\",
    \"prompt\": \"Wide tracking shot of a red tram gliding through a rainy street at dusk\",
    \"max_cost_usd\": \"$CURRENT_QUOTED_USD\"
  }"
# HTTP 202 -> persist data.task_id
03GEThttps://api.uniroute.app/v1/media/tasks/{task_id}

Poll with bounded retries until status is success & charged

Query GET /v1/media/tasks/{task_id} with bounded retries and check HTTP/envelope status. Treat the task as complete only when data.status === "success" AND data.billing.state === "charged". Read data.billing.charged_usd for the authoritative settled charge.

curl -sS "https://api.uniroute.app/v1/media/tasks/$SAVED_TASK_ID" \
  -H "Authorization: Bearer $UNIROUTE_API_KEY"
# Terminal success requires BOTH:
#   data.status === "success" && data.billing.state === "charged"
# Authoritative settled charge: data.billing.charged_usd
04GETdata.urls[].url (Signed HTTPS URL)

Download output URLs without Authorization header

Download each URL in data.urls[].url as a separate HTTPS request without sending your UniRoute Authorization: Bearer header.

# Separate HTTPS request to data.urls[].url WITHOUT Bearer header
curl -fL "$SIGNED_OUTPUT_URL" -o video.mp4

Durable State & Unknown POST Outcome Reconciliation

Persist your request parameters and a unique Idempotency-Key in durable storage before sending POST /v1/media/tasks, and persist the returned data.task_id immediately after receiving an HTTP 202 accepted response. If POST /v1/media/tasks has an unknown network outcome: when task_id is known, only query that existing task via GET /v1/media/tasks/{task_id}; when no task_id was received, inspect the task history for that same API key or contact support before creating a new task (there is no endpoint to query tasks by Idempotency-Key).

Quotes, Reservations, Settlement & Key/Wallet Boundaries

  • Public retail quote vs. authenticated quote: option_quote_usd on this page shows the current default retail whole-task quote. Calling POST /v1/media/quote returns the current authenticated data.quoted_usd string to pass as max_cost_usd.
  • Reservation vs. final settlement: task creation places a hold/reservation, which is not the final settled charge. Once data.status === "success" and data.billing.state === "charged", data.billing.charged_usd is the authoritative settled amount. See /docs/media-billing-errors for terminal billing states.
  • Text-to-video scope & catalog input_fields: all four routes on this page are text-to-video routes accepting prompt + option. Always check authenticated GET /v1/media/catalog for the authoritative input_fields and options enabled for your key.
  • Unified API key allowance vs. USD wallet: a unified API key uses automatic channel routing by default and can carry its own spending allowance limit, which is enforced separately from your account USD wallet balance.

Video Scene Templates & Prompt Guides

Explore structured prompt templates and parameter presets connected to UniRoute video models.

Media API Documentation, Prompt Guide & Pricing Links

Jump directly to the official Media API specifications, authentication & idempotency rules, billing states, and prompt guides.

Frequently Asked Questions — AI Video Generation API

Factual answers on default retail quotes vs. settled charges, option keys, input_fields, and idempotent task recovery.

Are the prices on this page final settled charges or default retail quotes?

The prices shown on this page are current default retail whole-task quotes (option_quote_usd) from the public catalog snapshot, not guaranteed final settled charges. Before creating a task, call POST https://api.uniroute.app/v1/media/quote to read your current authenticated data.quoted_usd decimal string and pass it as max_cost_usd in POST /v1/media/tasks. Creation places a reservation; once data.status === "success" and data.billing.state === "charged", data.billing.charged_usd is the authoritative final settled charge.

How do option keys and input scope work across Seedance 2.5, Kling 3.0, Wan 2.5, and Wan 2.7?

All four routes on this page are text-to-video routes. bytedance/seedance-2-5 supports six resolution-duration options (480p:5, 480p:10, 720p:5, 720p:10, 1080p:5, 1080p:10). kling-3.0/video encodes mode tier and duration (std:5, std:10 for 720p Standard; pro:5, pro:10 for 1080p Pro). Both wan/2-5-text-to-video and wan/2-7-text-to-video accept 720p:5, 720p:10, 1080p:5, and 1080p:10. Always query authenticated GET https://api.uniroute.app/v1/media/catalog to inspect the authoritative input_fields and options for your key.

When is a video task complete, and how should I download the output file?

Poll GET https://api.uniroute.app/v1/media/tasks/{task_id} with bounded retries. Treat the task as complete only when data.status === "success" AND data.billing.state === "charged". Then download each URL in data.urls[].url as a separate HTTPS request without sending your Authorization: Bearer header.

How do API key allowances, wallet funds, and unknown POST timeouts interact?

A unified API key routes through automatic channels by default and may have a configured key spending allowance that is checked separately from your account USD wallet balance—both must cover the task reservation. Persist your request parameters and unique Idempotency-Key before calling POST /v1/media/tasks, and persist data.task_id immediately after an HTTP 202 accepted response. If the POST outcome is unknown and you have a task_id, only query GET /v1/media/tasks/{task_id} for that existing task; if no task_id was received, inspect the task history for that same API key or contact support before creating a new task (there is no endpoint to query tasks by Idempotency-Key). See /docs/media-billing-errors for full billing state and error recovery rules.

Start Integrating the Unified Video Generation API

Create a unified API key in the console, review the Media API Quickstart, and run your first quote-protected video task against https://api.uniroute.app/v1/media.