2–30 second videos
Create 2–30 second videos from text, a first frame, or first-and-last frames.
WAN · VIDEO API
Build with WAN 3.0 API: videos up to 30 seconds, up to ten reference images, and native dialogue, music and sound effects.
PRICING
Compare four models by resolution and price per second.
| Model | 480p | 720p | 1080p | Audio |
|---|---|---|---|---|
WAN 3.0wan-3.0 | $0.047 | $0.094 | $0.188 | On / off · same price |
WAN 3.0 Primewan-3.0-prime | $0.067 | $0.138 | $0.273 | On / off · same price |
WAN 2.7 T2Vwan-2.7-t2v | — | $0.094 | $0.146 | Included (always on) |
WAN 2.7 I2Vwan-2.7-i2v | — | $0.098 | $0.164 | Included (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-09Choose model, resolution, duration and clips.
Output-only estimate; reference inputs may add fees
WAN 3.0 · 480p · Estimate at the selected settings
| Balance credit | You pay | Discount | Video seconds · estimate | Top up |
|---|---|---|---|---|
| $5.00First top-up | $3.00 | $2.00 | ≈ 106 s | Top up → |
| $50.00 | $48.00 | $2.00 | ≈ 1,063 s | Top up → |
| $100.00 | $95.00 | $5.00 | ≈ 2,127 s | Top up → |
| $200.00 | $185.00 | $15.00 | ≈ 4,255 s | Top up → |
| $500.00 | $450.00 | $50.00 | ≈ 10,638 s | Top up → |
First-top-up and tier offers are separate. Checkout confirms the applicable offer. Available methods are confirmed at checkout.
Use WAN 3.0 or Prime for references and 30-second clips; use WAN 2.7 for a fixed text or image workflow.
Create 2–30 second videos from text, a first frame, or first-and-last frames.
Use up to ten reference images to guide subjects and style.
Combine image, video, and audio references to guide motion, style, and sound.
Generate dialogue, music, and sound effects with optional audio on WAN 3.0 and Prime.
Create at 480p, 720p, or 1080p in landscape, portrait, square, or ultrawide formats.
Choose the vendor’s high-speed Prime variant or WAN 2.7’s dedicated text-to-video and image-to-video workflows.
VIDEO MODELS
Seedance, Kling, MiniMax H3 and WAN, from one balance. Use the same key for text and image models too.
For clips up to 30 seconds and 30 reference images.
For six custom shots with their own prompts and durations.
For 2K reference-led video with native audio.
For reference-led clips up to 30 seconds.
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
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.
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.mp4Adapt operation, audio and media when switching SKUs. WAN 2.7 I2V needs your own accessible first-frame URL.
| Parameter | Value & limits |
|---|---|
model / operation | wan-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.resolution | WAN 3: 480p / 720p / 1080p. WAN 2.7: 720p / 1080p. |
output.aspect_ratio | WAN 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. |
audio | WAN 3/Prime: {mode:"on"} or {mode:"off"}, same price. WAN 2.7: omit audio or use provider_default. |
media · WAN 3 | Each 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.7 | I2V: 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. |
prompt | Describe shots, motion and sound in natural language. No structured shots parameter. |
FAQ
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 examplesWAN 3.0 output starts at $0.047/s at 480p. Compare all four SKUs and resolutions above. Video references add input-second charges at the same resolution rate; output-only estimates exclude them. Audio on/off does not change WAN 3.0/Prime pricing.
View API examplesSign up or sign in to BetterToken, prepare or reuse your API key in Workspace, add balance and call the API from your own application. This is a BetterToken relay key; access depends on permissions and funds. We do not issue Alibaba console keys.
View API examplesWAN 3.0/Prime: 2–30 s, 480p/720p/1080p. With video input, input plus output must fit 30 s. WAN 2.7: 2–15 s, 720p/1080p. No WAN 4K output is offered here.
View API examplesWAN 3.0 and Prime support on/off at the same price. WAN 2.7 generates synchronized sound by default; omit audio or use provider_default, with no on/off switch.
View API examplesUse video and audio references to guide motion, style, and sound. WAN 3.0/Prime: up to 10 images and 5 audio clips; video/audio each 1–15 s and at most 15 s per type, 20 files overall. Frames cannot mix with free references. WAN 2.7 T2V uses text; I2V needs a first frame and optionally a last frame. Each 2.7 SKU allows one driving_audio clip, not free multimodal references.
View API examplesConfirmed failed generations are not charged. Confirmed failure or cancellation releases or refunds the original funding source through financial processing; task status alone does not prove a refund is committed. Uncertain acceptance must be reconciled. Delivery failure or an expired file after successful generation is a separate case.
View API examplesPay by card through Stripe or with USDT. Available methods are confirmed at checkout.
View API examplesBETTERTOKEN · WAN API
First top-up: pay $3.00, get $5.00 balance