A plump raccoon wearing a tiny translucent yellow rain poncho with the hood up stands at a flooded brick alley intersection at blue hour. Puddles cover the cobblestones. Several folded paper boats float in the largest puddle like tiny vehicles. The raccoon holds one autumn maple leaf as a conductor baton and directs the paper boats: first pointing left, then sweeping right, as if managing puddle traffic. Tiny raindrops tap the poncho. Camera: one continuous five-second waist-height lateral tracking shot moving left to right, staying parallel to the raccoon, gentle handheld sway, no cuts. Synchronized audio: steady rain on puddles, raccoon chitters, one distant bicycle bell. No readable text, letters, numbers, captions, labels, logos, brands, watermarks, advertisements, posters, UI screens, or product packaging. No people.
Wan 3.0 Text-to-Video API
alibaba/wan-3.0/text-to-videoWan 3.0 (Text-to-Video) transforms text prompts into 480p to 1080p high-definition video, supporting 2 to 30 second continuous generation, native audiovisual synchronization, and flexible aspect ratios. It preserves lifelike facial micro-expressions and camera trajectory while creating seamless sound effects and atmospheric audio.
Input
Output
ReadyContinue with
Examples
REST API Reference
Quick Start
Submit a text-to-video request using your API key and retrieve the video at your selected resolution.
Step 1: Set up authentication
Generate an API Key in the dashboard and attach it as Authorization: Bearer <API_KEY> on all HTTP requests.
- Submit Endpoint
- POST
https://api.vidgo.ai/api/generate/submit - Authorization Header
- Authorization: Bearer VIDGO_API_KEY
Step 2: Submit a text-to-video task
Send a POST request to /api/generate/submit specifying alibaba/wan-3.0/text-to-video and your input parameters.
REQUEST_BODY=$(cat <<'JSON'
{
"model": "alibaba/wan-3.0/text-to-video",
"input": {
"prompt": "A plump raccoon wearing a tiny translucent yellow rain poncho with the hood up stands at a flooded brick alley intersection at blue hour. Puddles cover the cobblestones. Several folded paper boats float in the largest puddle like tiny vehicles. The raccoon holds one autumn maple leaf as a conductor baton and directs the paper boats: first pointing left, then sweeping right, as if managing puddle traffic. Tiny raindrops tap the poncho. Camera: one continuous five-second waist-height lateral tracking shot moving left to right, staying parallel to the raccoon, gentle handheld sway, no cuts. Synchronized audio: steady rain on puddles, raccoon chitters, one distant bicycle bell. No readable text, letters, numbers, captions, labels, logos, brands, watermarks, advertisements, posters, UI screens, or product packaging. No people.",
"duration": 5,
"resolution": "720p",
"aspect_ratio": "16:9",
"audio": true,
"enable_safety_checker": true
}
}
JSON
)
RESPONSE=$(curl --silent --show-error --fail-with-body \
--request POST \
--url "https://api.vidgo.ai/api/generate/submit" \
--header "Authorization: Bearer $VIDGO_API_KEY" \
--header "Content-Type: application/json" \
--data "$REQUEST_BODY")
CODE=$(printf '%s' "$RESPONSE" | jq -r '.code // empty')
if [ "$CODE" != "0" ] && [ "$CODE" != "200" ]; then
printf 'API error: %s
' "$RESPONSE" >&2
exit 1
fi
printf '%s
' "$RESPONSE"Step 3: Poll for completion
Poll with task_id while status is not_started or running, and stop at finished or failed. On success, read data.files[].file_url; on failure, read data.error_message.
Status Endpoint
GET https://api.vidgo.ai/api/generate/status/{task_id}Poll with task_id while status is not_started or running, and stop at finished or failed. On success, read data.files[].file_url; on failure, read data.error_message.
not_startedrunningfinishedfailed{
"code": 200,
"data": {
"task_id": "task-wan30-t2v-987214",
"status": "running",
"created_time": "2026-09-16T08:30:00Z"
}
}{
"code": 200,
"data": {
"task_id": "task-unified-...",
"status": "finished",
"files": [
{
"file_url": "https://storage.vidgo.ai/generated/video.mp4",
"file_type": "video"
}
],
"created_time": "2026-08-22T10:00:00Z",
"progress": 100,
"error_message": null
}
}Complete executable script
Expand to review an end-to-end script with automatic polling, error handling, and timeout safeguards.
set -euo pipefail
: "${VIDGO_API_KEY:?Set VIDGO_API_KEY in your environment}"
REQUEST_BODY=$(cat <<'JSON'
{
"model": "alibaba/wan-3.0/text-to-video",
"input": {
"prompt": "A plump raccoon wearing a tiny translucent yellow rain poncho with the hood up stands at a flooded brick alley intersection at blue hour. Puddles cover the cobblestones. Several folded paper boats float in the largest puddle like tiny vehicles. The raccoon holds one autumn maple leaf as a conductor baton and directs the paper boats: first pointing left, then sweeping right, as if managing puddle traffic. Tiny raindrops tap the poncho. Camera: one continuous five-second waist-height lateral tracking shot moving left to right, staying parallel to the raccoon, gentle handheld sway, no cuts. Synchronized audio: steady rain on puddles, raccoon chitters, one distant bicycle bell. No readable text, letters, numbers, captions, labels, logos, brands, watermarks, advertisements, posters, UI screens, or product packaging. No people.",
"duration": 5,
"resolution": "720p",
"aspect_ratio": "16:9",
"audio": true,
"enable_safety_checker": true
}
}
JSON
)
SUBMIT_RESPONSE=$(curl --silent --show-error --fail-with-body \
--request POST \
--url "https://api.vidgo.ai/api/generate/submit" \
--header "Authorization: Bearer $VIDGO_API_KEY" \
--header "Content-Type: application/json" \
--data "$REQUEST_BODY")
TASK_ID=$(printf '%s' "$SUBMIT_RESPONSE" | jq -r '.data.task_id // .task_id // empty')
BUSINESS_CODE=$(printf '%s' "$SUBMIT_RESPONSE" | jq -r '.code // empty')
if [ "$BUSINESS_CODE" != "0" ] && [ "$BUSINESS_CODE" != "200" ]; then
printf 'Submit failed:
%s
' "$SUBMIT_RESPONSE" >&2
exit 1
fi
if [ -z "$TASK_ID" ]; then
printf 'Submit response did not include task_id:
%s
' "$SUBMIT_RESPONSE" >&2
exit 1
fi
START_TIME=$(date +%s)
POLL_DELAY=2
while true; do
if [ $(( $(date +%s) - START_TIME )) -ge 600 ]; then
printf 'Timed out after 600 seconds
' >&2
exit 1
fi
STATUS_RESPONSE=$(curl --silent --show-error --fail-with-body \
--url "https://api.vidgo.ai/api/generate/status/$TASK_ID" \
--header "Authorization: Bearer $VIDGO_API_KEY")
STATUS=$(printf '%s' "$STATUS_RESPONSE" | jq -r '.data.status // .status // empty')
BUSINESS_CODE=$(printf '%s' "$STATUS_RESPONSE" | jq -r '.code // empty')
if [ "$BUSINESS_CODE" != "0" ] && [ "$BUSINESS_CODE" != "200" ]; then
printf 'Status request failed:
%s
' "$STATUS_RESPONSE" >&2
exit 1
fi
case "$STATUS" in
finished)
printf '%s' "$STATUS_RESPONSE" | jq -r '(.data.files // .files // [])[]?.file_url'
break
;;
failed)
printf '%s' "$STATUS_RESPONSE" | jq -r '.data.error_message // .error_message // "Generation failed"' >&2
exit 1
;;
not_started|running)
sleep "$POLL_DELAY"
if [ "$POLL_DELAY" -lt 10 ]; then POLL_DELAY=$((POLL_DELAY + 1)); fi
;;
*)
printf 'Unexpected task status: %s
' "$STATUS" >&2
exit 1
;;
esac
doneRequest Parameters (input object)
Supported generation parameters inside the input object when submitting to /api/generate/submit:
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
| prompt | string | Yes | - | Text prompt detailing scenes, actions, lighting, and sound; supports 1 to 20,000 characters. |
| duration | integer | No | 5 | Output video duration in whole seconds between 2 and 30. |
| resolution | string | No | 720p | Resolution tier: 480p, 720p, or 1080p. |
| aspect_ratio | string | No | adaptive | Aspect ratio: adaptive, 16:9, 4:3, 1:1, 3:4, or 9:16. |
| audio | boolean | No | true | Whether to generate a synchronized native audio track; billed at the same rate as silent output. |
| seed | integer | No | - | Seed value (0–2,147,483,647) for reproducible generation. |
| enable_safety_checker | boolean | No | true | Enables content compliance and safety checking. |
Response Fields (Status Query)
Details returned by GET /api/generate/status/{task_id}:
| Field | Type | Description |
|---|---|---|
| code | integer | HTTP/business response status code (200 indicates success). |
| data.task_id | string | Globally unique task identifier. |
| data.status | string | Task lifecycle state: not_started, running, finished, or failed. |
| data.files | array | Array of output assets containing file_url and file_type upon completion. |
| data.error_message | string | null | Error diagnostic details if the task status is failed. |
Task Lifecycle
Clients should poll status until reaching either the finished or failed terminal state:
not_startedTask queued successfully and awaiting GPU compute resource allocation.
runningThe Diffusion Transformer model is actively synthesizing video frames and audio.
finishedVideo generation completed and stored; download URL available in data.files[0].file_url.
failedTask stopped due to parameter validation failure or safety moderation.
Polling & Error Handling
- Polling frequencyStart polling with a 2 to 3-second interval, gradually increasing to 5 seconds for extended takes.
- Network resiliencyTransient 5xx responses or timeouts do not signify task failure; retry status requests after a short backoff.
- Webhook callbacksProvide a top-level callback_url in your submission payload to receive completion notifications automatically.
Specifications
| Specification | Value | Description |
|---|---|---|
| Model identifier | alibaba/wan-3.0/text-to-video | API route identifier passed in the request body model field. |
| Input mode | Text prompt | A prompt describes subjects, actions, camera motion, lighting, and sound design. |
| Output format | 30 fps / MP4 (H.264) | High-compatibility MP4 container with native AAC audio. |
| Duration | 2–30 seconds | Configurable in whole seconds from 2 to 30 seconds per task. |
| Resolution | 480p / 720p / 1080p | Three native resolution tiers; 720p is the default. |
Related Models
Wan 3.0 Text-to-Video API — Frequently Asked Questions
What is the Wan 3.0 Text-to-Video API?
Wan 3.0 Text-to-Video is an Alibaba Tongyi Lab model for generating video from text. It creates high-definition videos up to 30 seconds at up to 1080p resolution with native synchronized audio directly from natural language prompts, supporting professional cinematographic movement and flexible aspect ratios. Built on Diffusion Transformer and Flow Matching architectures, it maintains stable facial micro-expressions and complex camera trajectories while naturally aligning movement beats with ambient acoustics. You can call it programmatically or try it from the playground above.
Can Wan 3.0 Text-to-Video generate 30-second clips in a single call?
Yes. The model supports specifying any integer duration between 2 and 30 seconds (the playground defaults to 5 seconds). Throughout an uninterrupted 30-second take, it maintains facial identity and spatial coherence while unfolding multi-stage dramatic choreography.
Is Wan 3.0 Text-to-Video audio synthesized natively alongside the video?
Yes, it is generated natively. Audio tracks are denoised alongside video latents directly within the underlying diffusion transformer rather than spliced via external post-production. With audio enabled by default, the model generates synchronized ambient soundscapes, footsteps, and physical interactions derived from your text description.
Does Wan 3.0 Text-to-Video support generating silent video?
Yes. If your workflow requires silent video footage for external dubbing or editing, set the audio parameter explicitly to false. Toggling audio off does not affect rendering speed or credit pricing.
How can I maintain facial consistency during long takes in Wan 3.0 Text-to-Video?
Structure multi-beat scene choreography with chronological markers (such as first, next, finally) and describe character appearance details separately from camera motion. Avoiding contradictory actions in a single sentence helps the model maintain stable facial geometry and bodily proportions over extended durations.
How does the adaptive aspect ratio work in Wan 3.0 Text-to-Video?
When aspect_ratio is set to adaptive (default), the model intelligently determines the most harmonious composition framing based on the scene and camera descriptors in your prompt. You can also explicitly select 16:9, 4:3, 1:1, 3:4, or 9:16 to target widescreen cinema or mobile vertical feeds directly.
Are additional parameters required to output 1080p in Wan 3.0 Text-to-Video?
No extra parameters are needed. Simply select 1080p in the resolution setting (alongside 480p and 720p). Native 1080p resolution renders fine hair strands, water reflections, and architectural textures with exceptional fidelity for production delivery.















