wan2.2-s2v generates videos of a person speaking, singing, or performing, with natural lip movements, expressions, and actions, from a single image and an audio file.
-
Audio-driven: An input audio file drives the character in a static image, synchronizing its lip movements, facial expressions, and body actions with the audio.
-
Rich scenarios: Supports three lip-sync scenarios: speaking, singing, and performing.
-
Diverse characters: Supports real people, including portraits, half-body, and full-body images, along with cartoon characters.
-
Output video resolution: Provides 480P and 720P resolution options.
This document applies only to the China (Beijing) region. To use the model, you must use an API key from the China (Beijing) region.
Model and pricing
|
Model |
Unit price |
Rate limiting (shared by Alibaba Cloud accounts and RAM users) |
|
|
Task submission RPS limit |
Concurrent tasks |
||
|
wan2.2-s2v |
480P: $0.071677/second 720P: $0.129018/second |
5 |
1 |
HTTP API
Prerequisites
-
Activate the service and get an API key.
Step 1: Create a task and get the task ID
POST https://dashscope.aliyuncs.com/api/v1/services/aigc/image2video/video-synthesis
-
Because this model call takes a long time, the task is created through an asynchronous invocation.
-
After the task is created, the system immediately returns a
task_id. In the next step, use this task_id to query the task result within 24 hours.
Request parameters
|
Field |
Type |
Passing method |
Required |
Description |
Example |
|
Content-Type |
String |
Header |
Yes |
The request type. Set the value to application/json. |
application/json |
|
Authorization |
String |
Header |
Yes |
The API key. The format is Bearer sk-xxx. |
Bearer sk-1a**2b |
|
X-DashScope-Async |
String |
Header |
Yes |
A static field set to `enable`, which indicates that an asynchronous invocation is used. |
enable |
|
model |
String |
Body |
Yes |
The model to call. |
wan2.2-s2v |
|
input.image_url |
String |
Body |
Yes |
The URL of the uploaded image.
|
http://aaa/bbb.jpg |
|
input.audio_url |
String |
Body |
Yes |
The URL of the uploaded audio file.
|
http://aaa/bbb.mp3 |
|
parameters.resolution |
String |
Body |
No |
The video resolution level. Valid values are 480P and 720P. The default value is 480P. The model tries to keep the aspect ratio of the output video the same as the input image. It adjusts the total pixels of the video to be close to the selected level while keeping the aspect ratio unchanged. |
480P |
Response parameters
|
Field |
Type |
Description |
Example |
|
output.task_id |
String |
The unique ID of the asynchronous task. |
a8532587-fa8c-4ef8-82be-0c46b17950d1 |
|
output.task_status |
String |
The status of the job after the asynchronous task is submitted. |
PENDING |
|
request_id |
String |
The unique ID of the request. |
7574ee8f-38a3-4b1e-9280-11c33ab46e51 |
Sample request
curl 'https://dashscope.aliyuncs.com/api/v1/services/aigc/image2video/video-synthesis/' \
--header 'X-DashScope-Async: enable' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
"model": "wan2.2-s2v",
"input": {
"image_url": "https://img.alicdn.com/imgextra/i3/O1CN011FObkp1T7Ttowoq4F_!!6000000002335-0-tps-1440-1797.jpg",
"audio_url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250825/iaqpio/input_audio.MP3"
},
"parameters": {
"resolution": "480P"
}
}'
Sample response
{
"output": {
"task_id": "a8532587-fa8c-4ef8-82be-xxxxxx",
"task_status": "PENDING"
},
"request_id": "7574ee8f-38a3-4b1e-9280-xxxxxx"
}
Step 2: Query the result by task ID
Send a GET request using the task_id from the previous step to query the task status and result. Replace {task_id} in the URL with the actual task ID.
GET https://dashscope.aliyuncs.com/api/v1/tasks/{task_id}
-
Video generation tasks can take 5 to 10 minutes to complete. You can use a polling mechanism and set a reasonable query interval, such as 15 seconds, to retrieve the result.
-
The
video_urlreturned for a successful task is valid for 24 hours. You should download and save the video promptly.
Request parameters
|
Field |
Type |
Passing method |
Required |
Description |
Example |
|
Authorization |
String |
Header |
Yes |
API key in the format Bearer sk-xxx. |
Bearer sk-xxx |
|
task_id |
String |
Url Path |
Yes |
Task ID to query. |
a8532587-fa8c-4ef8-82be-0c46b17950d1 |
Response parameters
|
Field |
Type |
Description |
Example |
|
output.task_id |
String |
Task ID. |
a8532587-fa8c-4ef8-82be-0c46b17950d1 |
|
output.task_status |
String |
Task status. Possible values:
|
SUCCEEDED |
|
output.submit_time |
String |
Task submission time. |
2025-09-01 09:37:27.468 |
|
output.scheduled_time |
String |
Task start time. |
2025-09-01 09:37:34.885 |
|
output.end_time |
String |
Task completion time. |
2025-09-01 09:40:20.734 |
|
output.results.video_url |
String |
Generated video URL (valid for 24 hours — please download promptly). |
https://xxx/1.mp4?Expires=xxx |
|
usage.duration |
Float |
Video duration in seconds (used for per-second billing). |
10.23 |
|
usage.video_count |
Integer |
Number of videos generated. |
1 |
|
usage.SR |
Integer |
Video resolution tier. |
480 |
|
usage.size |
String |
Video resolution. |
"size": "640*480" |
|
usage.fps |
Integer |
Video frame rate. |
"fps": 16 |
|
output.code |
String |
Error code (returned only on failure). |
InvalidParameter |
|
output.message |
String |
Error details (returned only on failure). |
The request is missing required parameters or in a wrong format |
|
request_id |
String |
Unique request ID. |
7574ee8f-38a3-4b1e-9280-11c33ab46e51 |
Sample request
Replace 86ecf553-d340-4e21-xxxxxxxxx with your task ID.
curl -X GET https://dashscope.aliyuncs.com/api/v1/tasks/86ecf553-d340-4e21-xxxxxxxxx \
--header "Authorization: Bearer $DASHSCOPE_API_KEY"
Task results are retained for 24 hours and then automatically purged.
Sample responses
Successful response
Save task results within 24 hours before automatic purging.
{
"output": {
"task_id": "bcae8761-f242-4775-a11e-xxxxxx",
"task_status": "SUCCEEDED",
"submit_time": "2025-09-01 09:37:27.468",
"scheduled_time": "2025-09-01 09:37:34.885",
"end_time": "2025-09-01 09:40:20.734",
"results": {
"video_url": "http://dashscope-result-hz.oss-cn-hangzhou.aliyuncs.com/1d/xxx.mp4?Expires=xxxxxx"
}
},
"usage": {
"duration": 18.13,
"size": "512*640",
"fps": 16,
"video_count": 1,
"SR": 480
},
"request_id": "28cfedb1-cd60-9e0c-b920-xxxxxx"
}
Failed response
{
"request_id": "8d49f522-f6a4-9eed-b322-xxxxxx",
"output": {
"task_id": "101ad32f-7653-4ae9-8f22-xxxxxx",
"task_status": "FAILED",
"submit_time": "2025-09-01 11:43:41.174",
"scheduled_time": "2025-09-01 11:43:48.937",
"end_time": "2025-09-01 11:43:49.802",
"code": "InvalidURL",
"message": "Required URL is missing or invalid, please check the request URL."
}
}
Billing and rate limiting
-
For free quota and unit price, see Model invocation pricing.
-
For rate limits, see Wan series.
-
Billing details:
-
Billing covers output only (per video second successfully generated).
-
Failures do not incur charges or consume the free quota.
-
Error codes
If a model call fails and an error message is returned, see Error messages.