WAN · VIDEO API

WAN API

Build with WAN 3.0 API: videos up to 30 seconds, up to ten reference images, and native dialogue, music and sound effects.

WAN 3.016:9
One key: 4 video models + text & images
Pay as you go, no subscription
Failed generations are not charged
Stripe + USDT
First top-up: pay $3.00, get $5.00 balance

PRICING

WAN API pricing: 3.0, Prime & 2.7

Compare four models by resolution and price per second.

per output second · USD
Model480p720p1080pAudio
WAN 3.0wan-3.0$0.047$0.094$0.188On / off · same price
WAN 3.0 Primewan-3.0-prime$0.067$0.138$0.273On / off · same price
WAN 2.7 T2Vwan-2.7-t2v—$0.094$0.146Included (always on)
WAN 2.7 I2Vwan-2.7-i2v—$0.098$0.164Included (always on)

Billed on actual output seconds; video references use the selected resolution rate.

WAN 3.0 / Prime · WAN 2.7 T2V / I2V

Price snapshot · 2026-11-09

Estimate your WAN API cost

Choose model, resolution, duration and clips.

Model
Resolution
Native audio

Estimated monthly cost$23.50
Per clip
$0.235
Output seconds / month
500
Get API key →

Output-only estimate; reference inputs may add fees

Top-up tiers & offers

WAN 3.0 · 480p · Estimate at the selected settings

Balance creditYou payDiscountVideo seconds · estimateTop up
$5.00First top-up$3.00$2.00≈ 106 sTop up →
$50.00$48.00$2.00≈ 1,063 sTop up →
$100.00$95.00$5.00≈ 2,127 sTop up →
$200.00$185.00$15.00≈ 4,255 sTop up →
$500.00$450.00$50.00≈ 10,638 sTop up →

First-top-up and tier offers are separate. Checkout confirms the applicable offer. Available methods are confirmed at checkout.

Create with WAN 3.0. Choose your workflow.

Use WAN 3.0 or Prime for references and 30-second clips; use WAN 2.7 for a fixed text or image workflow.

2–30 second videos

Create 2–30 second videos from text, a first frame, or first-and-last frames.

Up to ten reference images

Use up to ten reference images to guide subjects and style.

Image, video and audio together

Combine image, video, and audio references to guide motion, style, and sound.

Native sound, with a switch

Generate dialogue, music, and sound effects with optional audio on WAN 3.0 and Prime.

Three resolutions. Seven ratios.

Create at 480p, 720p, or 1080p in landscape, portrait, square, or ultrawide formats.

Prime or fixed 2.7 workflows

Choose the vendor’s high-speed Prime variant or WAN 2.7’s dedicated text-to-video and image-to-video workflows.

VIDEO MODELS

One API key. Four video models.

Seedance, Kling, MiniMax H3 and WAN, from one balance. Use the same key for text and image models too.

View all video models →

Seedance 2.5

Seedance 2.516:9

For clips up to 30 seconds and 30 reference images.

From · 480p
$0.176 / s
Max. duration
30 s
Top resolution
1080p
Explore API →

Kling 3.0

Kling 3.016:9

For six custom shots with their own prompts and durations.

From · Standard 720p · Audio off
$0.099 / s
Max. duration
15 s
Top resolution
4K
Explore API →

MiniMax H3

MiniMax H316:9

For 2K reference-led video with native audio.

From · 768p
$0.050 / s
Max. duration
15 s
Top resolution
2K
Explore API →

WAN 3.0

On this page
WAN 3.016:9

For reference-led clips up to 30 seconds.

From · 480p
$0.047 / s
Max. duration
30 s
Top resolution
1080p
Explore API →
Shared prompt

English original · generation prompt

Night city street after rain, seen from a slow forward dolly shot at low height: wet asphalt reflecting colorful lights, light trails from passing cars, soft steam rising from a street grate, light drizzle. Generic modern architecture. No people, no readable text, signs, logos, license plates, flags or recognizable landmarks. Cinematic, realistic.

Same async API: quote → create → poll → download. Switch the model and use its supported parameters.

DEVELOPER QUICKSTART

Get a WAN API key and make your first call

Quote → create → poll → download.202 means accepted, not completed. Keep the same idempotency key and body after uncertain acceptance. Download only after completed.These are minimal examples — in production, persist the Idempotency-Key and task ID so you can resume after a restart.

Show the AI agent instructions
Integrate the BetterToken video API in the user's application.
Read BETTERTOKEN_API_KEY only from the environment; never log or send it to analytics.
Base: https://bettertoken.ai/v1
Request JSON (replace the I2V source with your own accessible image):
{
  "model": "wan-3.0",
  "operation": "text_to_video",
  "prompt": "A rainy city street at night, slow forward camera move",
  "duration": {
    "mode": "fixed",
    "seconds": 5
  },
  "output": {
    "format": "mp4",
    "resolution": "480p",
    "aspect_ratio": "16:9"
  },
  "audio": {
    "mode": "on"
  }
}
H3 and WAN 2.7 generate native audio by default with no on/off switch. When switching model, adapt resolution, operation, aspect ratio, media and audio. Kling uses provider_options.kling.mode, without output.resolution. H3 image_to_video requires adaptive; reference_to_video allows adaptive or a fixed ratio. WAN 2.7 I2V requires a first frame and omits aspect_ratio.
POST /videos/quote with the same JSON for a non-reserving estimate; requires authentication and may probe input media. It is not a public guest API.
BEFORE POST /videos persist an Idempotency-Key and exact body outside the process; load that saved state after a restart. Persist the task ID after acceptance and resume that task. After a timeout/503 or uncertain acceptance, reuse BOTH; never create a replacement task. Handle 409 video_idempotency_conflict / video_acceptance_pending, 402 balance and 422 validation errors.
202 means accepted only; response has root id/status. GET /videos/{id} every 5 seconds: queued, in_progress, completed, failed, canceled. Uncertain acceptance stays in_progress with stage=reconciliation. On 429 honor the full Retry-After seconds or HTTP date. Poll up to 360 times, waiting 5 seconds between requests; network delays and rate-limit backoff can extend the total observation time. Preserve the task ID when stopping; stopping does not cancel or recreate the task.
Only after completed, GET /videos/{id}/content with an authorized owner key. 410 video_artifact_expired is a delivery expiry, not a generation failure. Keep content private.
Inspect billing separately: confirmed failed/canceled generation releases/refunds the original funding source through financial processing; status alone does not prove the refund is committed. Uncertain acceptance and post-generation delivery failures need separate handling. Do not invent a public cancel endpoint.
# Minimal example: persist the Idempotency-Key and task ID in production.
# Requires curl, jq and BETTERTOKEN_API_KEY in your environment.
BASE=https://bettertoken.ai/v1
IDEM="$(uuidgen)"
cat > request.json <<'JSON'
{
  "model": "wan-3.0",
  "operation": "text_to_video",
  "prompt": "A rainy city street at night, slow forward camera move",
  "duration": {
    "mode": "fixed",
    "seconds": 5
  },
  "output": {
    "format": "mp4",
    "resolution": "480p",
    "aspect_ratio": "16:9"
  },
  "audio": {
    "mode": "on"
  }
}
JSON

curl --fail-with-body "$BASE/videos/quote" \
  -H "Authorization: Bearer $BETTERTOKEN_API_KEY" \
  -H 'Content-Type: application/json' --data-binary @request.json || exit 1

TASK=$(curl --fail-with-body "$BASE/videos" \
  -H "Authorization: Bearer $BETTERTOKEN_API_KEY" \
  -H "Idempotency-Key: $IDEM" \
  -H 'Content-Type: application/json' --data-binary @request.json) || exit 1
ID=$(printf '%s' "$TASK" | jq -er '.id') || exit 1
# Poll up to 360 times, waiting 5 seconds between requests.
# Network delays can extend the total time.
for attempt in $(seq 1 360); do
  TASK=$(curl --fail-with-body "$BASE/videos/$ID" \
    -H "Authorization: Bearer $BETTERTOKEN_API_KEY") || exit 1
  STATUS=$(printf '%s' "$TASK" | jq -r '.status')
  case "$STATUS" in
    completed) break ;;
    failed|canceled) printf '%s\n' "$TASK"; exit 1 ;;
  esac
  sleep 5
done
[ "$STATUS" = completed ] || { echo "Resume polling task: $ID"; exit 1; }
curl --fail-with-body "$BASE/videos/$ID/content" \
  -H "Authorization: Bearer $BETTERTOKEN_API_KEY" -o video.mp4

WAN API parameters & model IDs

Adapt operation, audio and media when switching SKUs. WAN 2.7 I2V needs your own accessible first-frame URL.

ParameterValue & limits
model / operationwan-3.0 / wan-3.0-prime: text_to_video, image_to_video, reference_to_video. wan-2.7-t2v: text_to_video only. wan-2.7-i2v: image_to_video only.
duration{mode:"fixed",seconds:N}. WAN 3: 2–30 integers; input video + output ≤30 s. WAN 2.7: 2–15 integers.
output.resolutionWAN 3: 480p / 720p / 1080p. WAN 2.7: 720p / 1080p.
output.aspect_ratioWAN 3: adaptive / 21:9 / 16:9 / 4:3 / 1:1 / 3:4 / 9:16. Frame inputs: prefer adaptive. 2.7 T2V: 16:9 / 9:16 / 1:1 / 4:3 / 3:4. 2.7 I2V: omit, follows image.
audioWAN 3/Prime: {mode:"on"} or {mode:"off"}, same price. WAN 2.7: omit audio or use provider_default.
media · WAN 3Each item must have a unique id and include type, role and source. first_frame (+last_frame) OR reference_*; ≤10 images, ≤5 videos (contract limit; full combinations not yet verified) and ≤5 audio; each video/audio 1–15 s, ≤15 s per type; ≤20 files total.
media · WAN 2.7I2V: first_frame required, optional last_frame. Both 2.7 SKUs allow one driving_audio, 2–30 s; output remains ≤15 s. Not free multimodal references.
promptDescribe shots, motion and sound in natural language. No structured shots parameter.

FAQ

WAN API questions

WAN 3.0 supports clips up to 30 seconds and multimodal references. WAN 3.0 Prime is the vendor’s high-speed variant, with the same supported creation modes; no measured speed multiple is promised. WAN 2.7 offers fixed text-to-video and image-to-video SKUs.

View API examples

BETTERTOKEN · WAN API

Build your first video with WAN API

First top-up: pay $3.00, get $5.00 balance