Preserve the snow leopard, its exact fur pattern, body proportions and rocky mountain setting from the first frame. The leopard slowly turns only its head toward the camera and holds a calm attentive gaze. A light mountain breeze gently moves its dense fur while a few fine snow particles drift sideways. Its body and all four paws stay planted firmly on the ledge; its long tail rests behind it. Very slow subtle camera push-in, natural wildlife documentary motion, consistent anatomy and lighting, no cuts, no extra animals or objects.
Wan 2.2 Fast Image to Video API
alibaba/wan/v2.2-a14b/image-to-video/turboWan 2.2 Fast Image to Video animates static images into fluid, lifelike video clips across 480p and 720p resolutions with fast turnaround and flexible single-image or dual-frame transition control. It preserves subject identity, texture fidelity, and ambient lighting while delivering natural physical motion aligned with your descriptive text prompt.
486/800
![Image Urls[0]](https://cdn.vidgo.ai/apis/models/alibaba/wan/v2.2-a14b/image-to-video/turbo/v1/03/start.png)
![Image Urls[1] (optional)](https://cdn.vidgo.ai/apis/models/alibaba/wan/v2.2-a14b/image-to-video/turbo/v1/03/end.png)
Examples
REST API Reference
Quick Start
Submit a task, then query its result using task_id.
Step 1: Set up authentication
Create an API key in the dashboard and attach Authorization: Bearer <API_KEY> when submitting a task.
- Submit Endpoint
- POST
https://api.vidgo.ai/api/generate/submit - Authorization Header
- Authorization: Bearer VIDGO_API_KEY
Step 2: Submit a task
POST /api/generate/submit: alibaba/wan/v2.2-a14b/image-to-video/turbo
REQUEST_BODY=$(cat <<'JSON'
{
"model": "alibaba/wan/v2.2-a14b/image-to-video/turbo",
"input": {
"prompt": "Close-up shot of an elderly sailor wearing a yellow raincoat, seated on the deck of a catamaran, slowly puffing on a pipe. His cat lies quietly beside him with eyes closed, enjoying the calm. The warm glow of the setting sun bathes the scene, with gentle waves lapping against the hull and a few seabirds circling slowly above. The camera slowly pushes in, capturing this peaceful and harmonious moment.",
"resolution": "480p",
"image_urls": [
"https://cdn.doculator.org/wan-2-2-fast/start-image.jpg"
]
}
}
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-example",
"status": "running",
"created_time": "2026-09-24T00:00:00Z"
}
}{
"code": 200,
"data": {
"task_id": "task-example",
"status": "finished",
"files": [
{
"file_type": "video",
"file_url": "https://example.com/output.mp4"
}
],
"created_time": "2026-09-23T00:00:00Z"
}
}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/v2.2-a14b/image-to-video/turbo",
"input": {
"prompt": "Close-up shot of an elderly sailor wearing a yellow raincoat, seated on the deck of a catamaran, slowly puffing on a pipe. His cat lies quietly beside him with eyes closed, enjoying the calm. The warm glow of the setting sun bathes the scene, with gentle waves lapping against the hull and a few seabirds circling slowly above. The camera slowly pushes in, capturing this peaceful and harmonious moment.",
"resolution": "480p",
"image_urls": [
"https://cdn.doculator.org/wan-2-2-fast/start-image.jpg"
]
}
}
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)
Place generation parameters in input, with model and optional callback_url at the request root. Use standard JSON types; unsupported input fields are rejected.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
| prompt | string | Yes | - | Required non-empty string, up to 800 Unicode characters after trimming surrounding whitespace. |
| image_urls | string[] | Yes | - | Provide 1–2 public HTTP(S) image URLs: first frame, then optional last frame. URLs require a hostname and no credentials or whitespace. |
| resolution | string | No | 480p | Output resolution: 480p or 720p. |
| seed | integer | No | - | Optional random seed for reproducibility. |
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_startedQueued
runningGenerating
finishedReady
failedFailed
Polling & Error Handling
- Polling frequencyBegin polling status 2 to 3 seconds after submission, using a 3-second interval until the task enters finished or failed.
- Network resiliencyTransient HTTP 5xx errors or network timeouts during status queries do not indicate generation failure; retry status requests safely.
- Webhook callbacksSpecify an optional top-level callback_url in your JSON submission payload to receive an automated notification when the task concludes.
Specifications
| Specification | Value | Description |
|---|---|---|
| Model | alibaba/wan/v2.2-a14b/image-to-video/turbo | |
| Resolution | 480p / 720p | Default: 480p |
| Pricing | 480p: $0.030 · 720p: $0.060 | 6 / 12 credits per generation |
Related Models
Wan 2.2 Fast Image to Video API frequently asked questions
What is the Wan 2.2 Fast Image to Video API?
Wan 2.2 Fast Image to Video is an Alibaba model for image-to-video generation. It animates static reference images into fluid, lifelike video clips across 480p and 720p resolutions with fast turnaround and flexible single-image or dual-frame transition control. You can call it programmatically or try it from the playground above.
What image inputs are required for Wan 2.2 Fast Image to Video?
The image_urls array requires at least one publicly accessible HTTP or HTTPS direct image URL as the starting frame. You can also provide an optional second image URL to act as the ending keyframe. Direct upload is supported in the playground, which automatically converts files into public links.
How does the optional last frame work in Wan 2.2 Fast Image to Video?
Supplying a second URL in the image_urls array sets the last frame of the video, enabling the model to interpolate motion smoothly from the first frame to the final frame. Adding this optional last frame does not incur any additional credit fee.
What output resolutions are available in Wan 2.2 Fast Image to Video?
Wan 2.2 Fast Image to Video supports 480p (default) and 720p. The 480p setting is optimized for rapid turnaround and cost-effective testing, while 720p provides crisper fine details and texture clarity for production use.
How is the video aspect ratio determined in Wan 2.2 Fast Image to Video?
The output video automatically adopts the native aspect ratio and frame dimensions of your primary input image. The API does not accept an explicit aspect_ratio parameter, preserving your source composition without unintended cropping or stretching.
What is the prompt limit and role in Wan 2.2 Fast Image to Video?
The prompt parameter is required and accepts up to 800 Unicode characters after whitespace trimming. It directs the motion trajectory, subject actions, emotional expressions, and camera angles that govern how the static frame comes alive.
How much does Wan 2.2 Fast Image to Video cost?
Pricing is charged per completed generation: 480p costs 6 credits ($0.030) and 720p costs 12 credits ($0.060), regardless of whether you include an optional last frame. Deducted credits are automatically refunded if a task terminates with a failed status.
How do you retrieve the generated video via API?
Submit a request to POST /api/generate/submit and read the returned task_id. While the status is not_started or running, poll GET /api/generate/status/{task_id}; stop at finished or failed. On success, read the video URLs from data.files[].file_url. On failure, read data.error_message.















