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-synthesisBecause 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 | The API key. For example: Bearer sk-xxx. | Bearer sk-xxx |
task_id | String | Url Path | Yes | The ID of the task to query. | a8532587-fa8c-4ef8-82be-0c46b17950d1 |
Response parameters
Field | Type | Description | Example |
output.task_id | String | The ID of the queried task. | a8532587-fa8c-4ef8-82be-0c46b17950d1 |
output.task_status | String | The task status. Possible values include the following:
| SUCCEEDED |
output.submit_time | String | The time when the task was submitted. | 2025-09-01 09:37:27.468 |
output.scheduled_time | String | The time when the task started running. | 2025-09-01 09:37:34.885 |
output.end_time | String | The time when the task was completed. | 2025-09-01 09:40:20.734 |
output.results.video_url | String | The generated video file. The video_url is valid for 24 hours. Download it promptly. | https://xxx/1.mp4?Expires=xxx |
usage.duration | Float | The video duration in seconds. This is used for billing, which is calculated per second. | 10.23 |
usage.video_count | Integer | The number of generated videos. | 1 |
usage.SR | Integer | The resolution tier of the generated video. | 480 |
usage.size | String | The resolution of the generated video. | "size": "640*480" |
usage.fps | Integer | The frame rate of the generated video. | "fps": 16 |
output.code | String | The error code. This parameter is returned if the task fails. | InvalidParameter |
output.message | String | The error details. This parameter is returned if the task fails. | The request is missing required parameters or in a wrong format |
request_id | String | The unique ID of the request. | 7574ee8f-38a3-4b1e-9280-11c33ab46e51 |
Sample request
Replace 86ecf553-d340-4e21-xxxxxxxxx with the actual task ID.
curl -X GET https://dashscope.aliyuncs.com/api/v1/tasks/86ecf553-d340-4e21-xxxxxxxxx \
--header "Authorization: Bearer $DASHSCOPE_API_KEY"You can query task results using the task_id only within 24 hours. After this period, the system automatically purges the results.
Sample responses
Successful response
Task data, such as the task status and video URL, is retained for only 24 hours and then automatically purged. Save the results promptly.
{
"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:
Input is not billed; output is billed based on the number of video seconds successfully generated.
Model invocation failures or processing errors do not incur charges or consume the new user free quota.
Error codes
If a model call fails and an error message is returned, see Error messages.