Wan3.0 Video Generation
Wan3.0 (wan3.0-video) is Alibaba Tongyi Wanxiang's Wan3.0 video generation model. It supports text-to-video, image-to-video (first frame / reference image), video reference and video editing, up to 30 seconds at 30fps. It uses the unified POST /v1/videos endpoint and returns an OpenAI Video style response (id / status / metadata.url), sharing the same task polling mechanism as other video models.
Billing
Wan3.0 is billed by actual generated duration (seconds), tied to the resolution tier (480P / 720P / 1080P have different unit prices). Exact unit prices and billing expressions are shown on the corresponding model card in the console "Model Plaza" (prices are intentionally omitted from this documentation).
Endpoints
- Create task:
POST $URL/v1/videos - Query task:
GET $URL/v1/videos/{task_id}
Compatible alias
An OpenAI Sora-style alias is also supported: POST $URL/v1/video/generations, GET $URL/v1/video/generations/{task_id} — equivalent to the above.
Supported Models
| Model name | Positioning | Resolutions |
|---|---|---|
wan3.0-video | Standard edition, all-in-one reference generation | 480P / 720P / 1080P |
wan3.0-video-prime | High-speed edition, significantly faster end-to-end, capability aligned with standard | 480P / 720P / 1080P |
Within the same model name, the resolution tier is selected via the
sizerequest parameter (see "Parameters" below).
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
model | string | yes | wan3.0-video / wan3.0-video-prime |
prompt | string | yes | Video description; recommend specifying subject, action, scene, and camera movement |
size | string | no | Resolution tier: 480p / 720p / 1080p, defaults to 1080P |
seconds | string | no | Output duration in seconds, e.g. "5", "10"; range 2–30 without video input, "-1" for smart duration |
image | string | no | Reference image URL (single, used as the first frame for image-to-video) |
images | array | no | Reference image URL array (multi-image reference) |
input_reference | string | no | Reference / to-be-edited video URL, for video reference generation or video editing |
metadata.resolution | string | no | Advanced override: directly specify upstream resolution 480P / 720P / 1080P |
metadata.duration | number | no | Override output duration (seconds) |
metadata.seed | integer | no | Random seed for reproducibility |
Reference material
Publicly accessible image/video URLs are supported (the upstream server fetches them; intranet or local addresses will fail). Wan3.0 does not provide a standalone asset library — pass reference material via URL.
Request Examples
Text-to-video
# 1. Create video task (720P, 5 seconds)
curl $URL/v1/videos \
-H "Authorization: Bearer $YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "wan3.0-video",
"prompt": "A cat wearing sunglasses walking down a neon street, cyberpunk style, camera slowly pushing in",
"seconds": "5",
"size": "720p"
}'
# 2. Query task status (replace {task_id} with the id returned above)
curl $URL/v1/videos/{task_id} \
-H "Authorization: Bearer $YOUR_API_KEY"import time
import requests
url = "$URL/v1/videos"
headers = {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
}
payload = {
"model": "wan3.0-video",
"prompt": "A cat wearing sunglasses walking down a neon street, cyberpunk style",
"seconds": "5",
"size": "720p",
}
task = requests.post(url, json=payload, headers=headers).json()
task_id = task["id"]
while True:
result = requests.get(f"{url}/{task_id}", headers=headers).json()
if result["status"] in ("completed", "failed"):
break
time.sleep(8)
print(result)Image-to-video (first frame)
curl $URL/v1/videos \
-H "Authorization: Bearer $YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "wan3.0-video",
"prompt": "Make the person in the frame turn and walk toward the camera",
"image": "https://example.com/ref.png",
"seconds": "5",
"size": "1080p"
}'Video reference / video editing
curl $URL/v1/videos \
-H "Authorization: Bearer $YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "wan3.0-video",
"prompt": "Convert the entire scene into a claymation style",
"input_reference": "https://example.com/clip.mp4",
"seconds": "5",
"size": "720p"
}'High-speed edition (prime)
Just change model to wan3.0-video-prime; all other parameters are identical:
curl $URL/v1/videos \
-H "Authorization: Bearer $YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "wan3.0-video-prime",
"prompt": "Waves crashing against rocks, slow motion, cinematic",
"seconds": "5",
"size": "1080p"
}'Response Fields
The create and query endpoints return the same structure (OpenAI Video style):
| Field | Type | Description |
|---|---|---|
id | string | Task ID |
status | string | Task status (see below) |
metadata.url | string | Video URL after generation (returned only when completed) |
progress | integer | Generation progress, 0~100 |
completed_at | integer | Completion timestamp (seconds, returned only when completed) |
error.message | string | Failure reason (returned only when failed) |
Task Status
| Status | Meaning | Suggested action |
|---|---|---|
queued | Queued | Keep polling |
in_progress | Generating | Keep polling |
completed | Success | Get video URL from metadata.url; download and store promptly |
failed | Failed | Check error.message |
Poll every 5~10 seconds
Download and store the video as soon as it completes: the URL is time-limited and becomes inaccessible after expiry.
Response Example
{
"id": "task_xxxxxxxx",
"status": "in_progress",
"progress": 30
}After completion:
{
"id": "task_xxxxxxxx",
"status": "completed",
"progress": 100,
"metadata": {
"url": "https://cdn.example.com/.../result.mp4"
},
"completed_at": 1786431715
}FAQ
Q: How to write better prompts?
Include four elements: subject (who/what), action (doing what), scene (where), camera (how shot, e.g. push-in / orbit / overhead). Avoid overly abstract descriptions.
Q: How long does a task take?
Depends on duration and resolution. 720P 5s typically finishes within 1~3 minutes; 1080P takes longer. Poll the query endpoint for the final status; tasks not finished within 20 minutes auto-fail.
Q: Do generated video links expire?
Yes. The video URL is time-limited — download and store it to your own storage promptly after completion.
Q: Is there an asset library?
Wan3.0 does not currently provide a standalone asset library. Use publicly accessible image/video URLs as reference frames or reference videos (see image / images / input_reference above).
