Wan 2.7 Pro API, Wan 2.6 API, Wan 2.5 API, Wan 2.2 API - AI Video & Image Generation APIs
by Alibaba
Wan 2.7 Pro API, developers can access multiple Wan versions (2.2, 2.5, 2.6) for text-to-video, image-to-video, speech-to-video, and image generation. The API provides extensive capabilities including animation and flash video generation, making it one of the most versatile video AI solutions available.
Models Version
Get $5 Free Credit on First Payment
No strings attached — add funds and get $5 bonus instantly
Wan 2.7 Text to Image API Documentation
https://gateway.pixazo.ai/wan-2-7-api/v1
Authentication
All requests require an API key passed via header.
| Header | Type | Required | Description |
|---|---|---|---|
| Ocp-Apim-Subscription-Key | string | Yes | Your API subscription key |
Wan 2.7 Text to Image Request - Wan 2.7 API
Request Code
POST https://gateway.pixazo.ai/wan-2-7-api/v1/generateWan27TextToImageRequest
Content-Type: application/json
Ocp-Apim-Subscription-Key: YOUR_API_KEY
{
"prompt": "A charming flower shop with beautiful window displays filled with colorful flowers"
}
import requests
url = "https://gateway.pixazo.ai/wan-2-7-api/v1/generateWan27TextToImageRequest"
headers = {
"Content-Type": "application/json",
"Ocp-Apim-Subscription-Key": "YOUR_API_KEY"
}
payload = {
"prompt": "A charming flower shop with beautiful window displays filled with colorful flowers"
}
response = requests.post(url, json=payload, headers=headers)
print(response.status_code)
print(response.json())
const response = await fetch("https://gateway.pixazo.ai/wan-2-7-api/v1/generateWan27TextToImageRequest", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Ocp-Apim-Subscription-Key": "YOUR_API_KEY"
},
body: JSON.stringify({
prompt: "A charming flower shop with beautiful window displays filled with colorful flowers"
})
});
const data = await response.json();
console.log(data);
curl -X POST "https://gateway.pixazo.ai/wan-2-7-api/v1/generateWan27TextToImageRequest" \
-H "Content-Type: application/json" \
-H "Ocp-Apim-Subscription-Key: YOUR_API_KEY" \
-d '{"prompt":"A charming flower shop with beautiful window displays filled with colorful flowers"}'
Output
{
"status": "QUEUED",
"request_id": "wan-2-7-api_019d4e3f-83c5-719c-dbba-039df43078184",
"message": "Request accepted and queued for processing"
}
Webhook (Optional)
You can optionally provide a webhook_url in your request body. When the request completes (success or failure), a POST request will be sent to your webhook URL with the result payload.
Webhook Payload (Success)
{
"request_id": "wan-2-7-api_019d4e3f-83c5-719c-dbba-039df43078184",
"status": "COMPLETED",
"result": {
"images": [
{
"file_name": "output.png",
"content_type": "image/png",
"url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/wan-2-7-api_019d4e3f-83c5-719c-dbba-039df43078184/output.png"
}
],
"description": ""
}
}
Webhook Payload (Failure)
{
"request_id": "wan-2-7-api_019d4e3f-83c5-719c-dbba-039df43078184",
"status": "FAILED",
"error": "Processing failed: upstream provider returned an error"
}
Request Parameters - Wan 2.7 Text to Image Request
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
| prompt | string | Yes | — | Text description of the image to generate. Supports Chinese and English, max 5000 characters. |
| size | string | No | "2K" | Output resolution: "1K", "2K" (default). No 4K for standard model. |
| n | integer | No | 4 | Number of images to generate, 1-4. |
| thinking_mode | boolean | No | true | Enables thinking mode for better quality. Increases generation time. |
| watermark | boolean | No | false | Adds "AI Generated" watermark. |
| seed | integer | No | — | Random seed [0, 2147483647]. Same seed yields similar outputs. |
| enable_sequential | boolean | No | false | Enables image set output mode. |
| color_palette | array | No | — | Custom color theme. Array of objects with hex (string) and ratio (string, e.g. "25.00%"). 3-10 colors. |
| webhook_url | string | No | — | URL to receive a POST callback when the request completes. Must be a publicly accessible HTTPS endpoint. |
Minimum Request
{
"prompt": "A charming flower shop with beautiful window displays filled with colorful flowers"
}
Full Request (all options)
{
"prompt": "A charming flower shop with beautiful window displays filled with colorful flowers",
"size": "2K",
"n": 2,
"thinking_mode": true,
"watermark": false,
"seed": 12345
}
Response
{
"status": "QUEUED",
"request_id": "wan-2-7-api_019d4e3f-83c5-719c-dbba-039df43078184",
"message": "Request accepted and queued for processing"
}
Request Headers
| Header | Value |
|---|---|
| Content-Type | application/json |
| Ocp-Apim-Subscription-Key | Your API subscription key |
Response Handling
Common status codes for Wan 2.7 Text to Image Request.
| Code | Meaning |
|---|---|
| 202 | Accepted - Request queued for processing |
| 400 | Bad Request - Invalid parameters or missing required fields |
| 401 | Unauthorized - Invalid or missing API key |
| 402 | Payment Required - Insufficient wallet balance |
| 403 | Forbidden - Access denied |
| 429 | Too Many Requests - Rate limit exceeded |
| 500 | Internal Server Error |
Error Responses
Error responses from the queue system and status/webhook errors.
Queue System Errors
{
"error": "Invalid request: prompt is required",
"status": 400
}
{
"error": "Unauthorized: invalid or missing API key",
"status": 401
}
{
"error": "Insufficient balance. Please top up your wallet.",
"status": 402
}
{
"error": "Rate limit exceeded. Please retry after some time.",
"status": 429
}
Status / Webhook Errors
{
"request_id": "wan-2-7-api_019d4e3f-83c5-719c-dbba-039df43078184",
"status": "FAILED",
"error": "Processing failed: upstream provider returned an error"
}
{
"error": "Request not found",
"status": 404
}
Retrieving Results
After submitting a request, use the request_id from the queued response to check the status and retrieve results.
GET /v2/requests/status/{request_id}
GET https://gateway.pixazo.ai/v2/requests/status/wan-2-7-api_019d4e3f-83c5-719c-dbba-039df43078184
Ocp-Apim-Subscription-Key: YOUR_API_KEY
Response (Queued / Processing)
{
"request_id": "wan-2-7-api_019d4e3f-83c5-719c-dbba-039df43078184",
"status": "PROCESSING",
"message": "Request is being processed"
}
Response (Completed)
{
"request_id": "wan-2-7-api_019d4e3f-83c5-719c-dbba-039df43078184",
"status": "COMPLETED",
"result": {
"images": [
{
"file_name": "output.png",
"content_type": "image/png",
"url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/wan-2-7-api_019d4e3f-83c5-719c-dbba-039df43078184/output.png"
}
],
"description": ""
}
}
Response (Failed)
{
"request_id": "wan-2-7-api_019d4e3f-83c5-719c-dbba-039df43078184",
"status": "FAILED",
"error": "Processing failed: upstream provider returned an error"
}
Response Fields - Wan 2.7 Text to Image Request
| Field | Type | Description |
|---|---|---|
| request_id | string | Unique identifier for the request. Use this to poll for status. |
| status | string | Current status of the request (QUEUED, PROCESSING, COMPLETED, FAILED). |
| message | string | Human-readable status message. |
| result | object | The result payload (present when status is COMPLETED). |
| images | array | Array of generated image objects. |
| images[].file_name | string | Name of the output file. |
| images[].content_type | string | MIME type of the output file (image/png). |
| images[].url | string | Publicly accessible URL to download the generated image. |
| description | string | Optional description returned with the response. |
| error | string | Error message (present when status is FAILED). |
Status Values
| Status | Description |
|---|---|
| QUEUED | Request has been accepted and is waiting in the queue. |
| PROCESSING | Request is currently being processed by the AI model. |
| COMPLETED | Request finished successfully. Results are available. |
| FAILED | Request failed during processing. Check the error field for details. |
Status Flow
QUEUED --> PROCESSING --> COMPLETED
\--> FAILED
Typical Workflow
- Submit a POST request to
https://gateway.pixazo.ai/wan-2-7-api/v1/generateWan27TextToImageRequestwith your parameters. - Receive a
202 Acceptedresponse with arequest_idand statusQUEUED. - Poll the status endpoint
GET /v2/requests/status/{request_id}periodically (e.g. every 5-10 seconds). - Retrieve the result once status is
COMPLETED. Theresultobject contains image URLs. - (Optional) Use a
webhook_urlto receive results automatically without polling.
Wan 2.7 Text to Image API Pricing
| Resolution | Price (USD) |
|---|---|
| default | $0.03 |
Wan 2.7 Image to Image (Image Editing) API Documentation
https://gateway.pixazo.ai/wan-2-7-api/v1
Authentication
All requests require an API key passed via header.
| Header | Type | Required | Description |
|---|---|---|---|
| Ocp-Apim-Subscription-Key | string | Yes | Your API subscription key |
Wan 2.7 Edit Image Request - Wan 2.7 API
Request Code
POST https://gateway.pixazo.ai/wan-2-7-api/v1/generateWan27EditImageRequest
Content-Type: application/json
Ocp-Apim-Subscription-Key: YOUR_API_KEY
{
"images": ["https://pub-582b7213209642b9b995c96c95a30381.r2.dev/f1.png"],
"prompt": "Transform the tree into a lush green tree with vibrant flowers"
}
import requests
url = "https://gateway.pixazo.ai/wan-2-7-api/v1/generateWan27EditImageRequest"
headers = {
"Content-Type": "application/json",
"Ocp-Apim-Subscription-Key": "YOUR_API_KEY"
}
payload = {
"images": ["https://pub-582b7213209642b9b995c96c95a30381.r2.dev/f1.png"],
"prompt": "Transform the tree into a lush green tree with vibrant flowers"
}
response = requests.post(url, json=payload, headers=headers)
print(response.status_code)
print(response.json())
const response = await fetch("https://gateway.pixazo.ai/wan-2-7-api/v1/generateWan27EditImageRequest", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Ocp-Apim-Subscription-Key": "YOUR_API_KEY"
},
body: JSON.stringify({
images: ["https://pub-582b7213209642b9b995c96c95a30381.r2.dev/f1.png"],
prompt: "Transform the tree into a lush green tree with vibrant flowers"
})
});
const data = await response.json();
console.log(data);
curl -X POST "https://gateway.pixazo.ai/wan-2-7-api/v1/generateWan27EditImageRequest" \
-H "Content-Type: application/json" \
-H "Ocp-Apim-Subscription-Key: YOUR_API_KEY" \
-d '{"images":["https://pub-582b7213209642b9b995c96c95a30381.r2.dev/f1.png"],"prompt":"Transform the tree into a lush green tree with vibrant flowers"}'
Output
{
"status": "QUEUED",
"request_id": "wan-2-7-api_019d4e44-7a8e-7df1-fad0-926fa428ca293",
"message": "Request accepted and queued for processing"
}
Webhook (Optional)
You can optionally provide a webhook_url in your request body. When the request completes (success or failure), a POST request will be sent to your webhook URL with the result payload.
Webhook Payload (Success)
{
"request_id": "wan-2-7-api_019d4e44-7a8e-7df1-fad0-926fa428ca293",
"status": "COMPLETED",
"result": {
"images": [
{
"file_name": "output.png",
"content_type": "image/png",
"url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/wan-2-7-api_019d4e44-7a8e-7df1-fad0-926fa428ca293/output.png"
}
],
"description": ""
}
}
Webhook Payload (Failure)
{
"request_id": "wan-2-7-api_019d4e44-7a8e-7df1-fad0-926fa428ca293",
"status": "FAILED",
"error": "Processing failed: upstream provider returned an error"
}
Request Parameters - Wan 2.7 Edit Image Request
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
| images | array | Yes | — | Array of image URLs to edit. Supports 1-9 images. URLs must be publicly accessible. Supported formats: JPEG, JPG, PNG, BMP, WEBP. Max 20MB per image. Resolution: 240-8000px, aspect ratio 1:8 to 8:1. |
| prompt | string | Yes | — | Text description of the desired edit. Max 5000 characters. |
| size | string | No | "2K" | Output resolution: "1K", "2K" (default). |
| n | integer | No | 4 | Number of images to generate, 1-4. |
| watermark | boolean | No | false | Adds "AI Generated" watermark. |
| seed | integer | No | — | Random seed [0, 2147483647]. |
| bbox_list | array | No | — | Selected areas for interactive editing. Array of arrays matching input image count. Each image supports up to 2 bounding boxes as [x1, y1, x2, y2] pixel coordinates. |
| enable_sequential | boolean | No | false | Enables image set output mode. |
| webhook_url | string | No | — | URL to receive a POST callback when the request completes. Must be a publicly accessible HTTPS endpoint. |
Minimum Request
{
"images": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/f1.png"
],
"prompt": "Transform the tree into a lush green tree with vibrant flowers"
}
Full Request (all options)
{
"images": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/f1.png"
],
"prompt": "Transform the tree into a lush green tree with vibrant flowers",
"size": "2K",
"n": 1,
"watermark": false,
"seed": 42
}
Response
{
"status": "QUEUED",
"request_id": "wan-2-7-api_019d4e44-7a8e-7df1-fad0-926fa428ca293",
"message": "Request accepted and queued for processing"
}
Request Headers
| Header | Value |
|---|---|
| Content-Type | application/json |
| Ocp-Apim-Subscription-Key | Your API subscription key |
Response Handling
Common status codes for Wan 2.7 Edit Image Request.
| Code | Meaning |
|---|---|
| 202 | Accepted - Request queued for processing |
| 400 | Bad Request - Invalid parameters or missing required fields |
| 401 | Unauthorized - Invalid or missing API key |
| 402 | Payment Required - Insufficient wallet balance |
| 403 | Forbidden - Access denied |
| 429 | Too Many Requests - Rate limit exceeded |
| 500 | Internal Server Error |
Error Responses
Error responses from the queue system and status/webhook errors.
Queue System Errors
{
"error": "Invalid request: prompt is required",
"status": 400
}
{
"error": "Unauthorized: invalid or missing API key",
"status": 401
}
{
"error": "Insufficient balance. Please top up your wallet.",
"status": 402
}
{
"error": "Rate limit exceeded. Please retry after some time.",
"status": 429
}
Status / Webhook Errors
{
"request_id": "wan-2-7-api_019d4e44-7a8e-7df1-fad0-926fa428ca293",
"status": "FAILED",
"error": "Processing failed: upstream provider returned an error"
}
{
"error": "Request not found",
"status": 404
}
Retrieving Results
After submitting a request, use the request_id from the queued response to check the status and retrieve results.
GET /v2/requests/status/{request_id}
GET https://gateway.pixazo.ai/v2/requests/status/wan-2-7-api_019d4e44-7a8e-7df1-fad0-926fa428ca293
Ocp-Apim-Subscription-Key: YOUR_API_KEY
Response (Queued / Processing)
{
"request_id": "wan-2-7-api_019d4e44-7a8e-7df1-fad0-926fa428ca293",
"status": "PROCESSING",
"message": "Request is being processed"
}
Response (Completed)
{
"request_id": "wan-2-7-api_019d4e44-7a8e-7df1-fad0-926fa428ca293",
"status": "COMPLETED",
"result": {
"images": [
{
"file_name": "output.png",
"content_type": "image/png",
"url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/wan-2-7-api_019d4e44-7a8e-7df1-fad0-926fa428ca293/output.png"
}
],
"description": ""
}
}
Response (Failed)
{
"request_id": "wan-2-7-api_019d4e44-7a8e-7df1-fad0-926fa428ca293",
"status": "FAILED",
"error": "Processing failed: upstream provider returned an error"
}
Response Fields - Wan 2.7 Edit Image Request
| Field | Type | Description |
|---|---|---|
| request_id | string | Unique identifier for the request. Use this to poll for status. |
| status | string | Current status of the request (QUEUED, PROCESSING, COMPLETED, FAILED). |
| message | string | Human-readable status message. |
| result | object | The result payload (present when status is COMPLETED). |
| images | array | Array of generated image objects. |
| images[].file_name | string | Name of the output file. |
| images[].content_type | string | MIME type of the output file (image/png). |
| images[].url | string | Publicly accessible URL to download the generated image. |
| description | string | Optional description returned with the response. |
| error | string | Error message (present when status is FAILED). |
Status Values
| Status | Description |
|---|---|
| QUEUED | Request has been accepted and is waiting in the queue. |
| PROCESSING | Request is currently being processed by the AI model. |
| COMPLETED | Request finished successfully. Results are available. |
| FAILED | Request failed during processing. Check the error field for details. |
Status Flow
QUEUED --> PROCESSING --> COMPLETED
\--> FAILED
Typical Workflow
- Submit a POST request to
https://gateway.pixazo.ai/wan-2-7-api/v1/generateWan27EditImageRequestwith your parameters. - Receive a
202 Acceptedresponse with arequest_idand statusQUEUED. - Poll the status endpoint
GET /v2/requests/status/{request_id}periodically (e.g. every 5-10 seconds). - Retrieve the result once status is
COMPLETED. Theresultobject contains image URLs. - (Optional) Use a
webhook_urlto receive results automatically without polling.
Wan 2.7 Image to Image (Image Editing) API Pricing
| Resolution | Price (USD) |
|---|---|
| default | $0.03 |
Wan 2.7 Video to Video (Video Editing) API Documentation
https://gateway.pixazo.ai/wan-2-7-video-api/v1
Authentication
All requests require an API key passed via header.
| Header | Type | Required | Description |
|---|---|---|---|
| Ocp-Apim-Subscription-Key | string | Yes | Your API subscription key |
Wan 2.7 Video Style Transfer Request - Wan 2.7 Video API
Request Code
POST https://gateway.pixazo.ai/wan-2-7-video-api/v1/generateWan27VideoStyleRequest
Content-Type: application/json
Cache-Control: no-cache
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY
{
"video_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/wan-t2v/wan-t2v-6421dc79-417c-445c-96e3-65c333aeafb9.mp4",
"prompt": "Convert to claymation style"
}
import requests
url = "https://gateway.pixazo.ai/wan-2-7-video-api/v1/generateWan27VideoStyleRequest"
headers = {
"Content-Type": "application/json",
"Cache-Control": "no-cache",
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
}
data = {
"video_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/wan-t2v/wan-t2v-6421dc79-417c-445c-96e3-65c333aeafb9.mp4",
"prompt": "Convert to claymation style"
}
response = requests.post(url, json=data, headers=headers)
print(response.json())
const url = 'https://gateway.pixazo.ai/wan-2-7-video-api/v1/generateWan27VideoStyleRequest';
const headers = {
'Content-Type': 'application/json',
'Cache-Control': 'no-cache',
'Ocp-Apim-Subscription-Key': 'YOUR_SUBSCRIPTION_KEY'
};
const data = {
video_url: 'https://pub-582b7213209642b9b995c96c95a30381.r2.dev/wan-t2v/wan-t2v-6421dc79-417c-445c-96e3-65c333aeafb9.mp4',
prompt: 'Convert to claymation style'
};
fetch(url, {
method: 'POST',
headers: headers,
body: JSON.stringify(data)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
curl -X POST "https://gateway.pixazo.ai/wan-2-7-video-api/v1/generateWan27VideoStyleRequest" \
-H "Content-Type: application/json" \
-H "Cache-Control: no-cache" \
-H "Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY" \
--data-raw '{
"video_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/wan-t2v/wan-t2v-6421dc79-417c-445c-96e3-65c333aeafb9.mp4",
"prompt": "Convert to claymation style"
}'
Output
{
"request_id": "wan-2-7-video-api_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/wan-2-7-video-api_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
Webhook (Optional)
Add the X-Webhook-URL header to your generate request to receive a POST callback instead of polling.
X-Webhook-URL: https://your-server.com/webhook/callback
Request Parameters - Wan 2.7 Video Style Transfer Request
| Parameter | Required | Type | Description |
|---|---|---|---|
| video_url | Yes | string | URL of the video to edit. Format: MP4, MOV. Duration: 2-10s. Max 100MB. |
| reference_images | Yes | array | Array of reference image URLs (1-3 images). Format: JPEG, JPG, PNG, BMP, WEBP. Max 20MB each. |
| prompt | Yes | string | Text description of the desired edit. Max 5,000 characters. |
| negative_prompt | No | string | Describes content you do not want in the video. Max 500 characters. |
| resolution | No | string | Resolution of the output video. Supported: "720P", "1080P". Default: "1080P". |
| ratio | No | string | Aspect ratio. Supported: "16:9", "9:16", "1:1", "4:3", "3:4". |
| duration | No | integer | Duration in seconds. Set only to truncate. Range: 2-10. |
| audio_setting | No | string | "auto" (model decides) or "origin" (retains original audio). Default: "auto". |
| prompt_extend | No | boolean | Enables prompt rewriting using LLM. Default: true. |
| watermark | No | boolean | Whether to add "AI-generated" watermark. Default: false. |
| seed | No | integer | Random seed for reproducible results. Range: 0-2147483647. |
Example Request
{
"video_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/wan-t2v/wan-t2v-6421dc79-417c-445c-96e3-65c333aeafb9.mp4",
"prompt": "Convert to claymation style",
"negative_prompt": "low quality, blurry",
"resolution": "1080P",
"ratio": "16:9",
"duration": 5,
"audio_setting": "origin",
"prompt_extend": false,
"watermark": true,
"seed": 12345
}
Response
{
"request_id": "wan-2-7-video-api_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/wan-2-7-video-api_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
Request Headers
| Header | Value |
|---|---|
| Content-Type | application/json |
| Cache-Control | no-cache |
| Ocp-Apim-Subscription-Key | YOUR_SUBSCRIPTION_KEY |
Response Handling
Common status codes.
| Code | Meaning |
|---|---|
| 202 | Accepted — Request queued |
| 400 | Bad Request |
| 401 | Unauthorized |
| 402 | Insufficient Balance |
| 403 | Forbidden |
| 429 | Too Many Requests |
| 500 | Internal Server Error |
Error Responses
Queue system errors and model validation errors.
Queue System Errors
// 402 — Insufficient balance
{
"error": "Insufficient Balance",
"message": "Your wallet does not have enough balance. Required: $0.01"
}
// 400 — Model not found
{
"error": "Model not found",
"message": "Model 'wan-2-7-video-api' not found or is disabled"
}
Error via Status/Webhook
{
"request_id": "wan-2-7-video-api_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "wan-2-7-video-api",
"error": "Description of the error",
"output": null
}
Retrieving Results
Poll the universal status endpoint to check progress and retrieve results.
Endpoint
GET https://gateway.pixazo.ai/v2/requests/status/{request_id}
Ocp-Apim-Subscription-Key: YOUR_API_KEY
cURL Example
curl -H "Ocp-Apim-Subscription-Key: YOUR_API_KEY" \
"https://gateway.pixazo.ai/v2/requests/status/wan-2-7-video-api_019d52bf-9ae0-7faf-594a-08e2d4e7281b0"
Response (Completed)
{
"request_id": "wan-2-7-video-api_019d52bf-9ae0-7faf-594a-08e2d4e7281b0",
"status": "COMPLETED",
"model_id": "wan-2-7-video-api",
"error": null,
"output": {
"media_url": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/wan-2-7-video-api_019d52bf-9ae0-7faf-594a-08e2d4e7281b0/output.mp4"
],
"media_type": "video/mp4"
},
"created_at": "2026-03-31T07:32:03.749Z",
"updated_at": "2026-03-31T07:32:20.000Z",
"completed_at": "2026-03-31T07:32:20.000Z"
}
Response Fields
| Field | Type | Description |
|---|---|---|
| request_id | string | Unique request identifier |
| status | string | QUEUED, PROCESSING, COMPLETED, FAILED, or ERROR |
| model_id | string | Model that processed the request |
| error | string|null | Error message if failed |
| output.media_url | array | URLs to generated media (R2 CDN) |
| output.media_type | string | MIME type (video/mp4) |
| created_at | string | When request was created |
| completed_at | string|null | When request completed |
| polling_url | string | Status URL (initial response only) |
Status Values
| Status | Description |
|---|---|
| QUEUED | Request accepted, waiting to be processed |
| PROCESSING | Being processed by the model |
| COMPLETED | Done — output contains the result |
| FAILED | Failed — check error field |
| ERROR | System error — not charged |
Status Flow
QUEUED → PROCESSING → COMPLETED
→ FAILED
→ ERROR
Typical Workflow
- Send a generate request to the API endpoint
- Save the
request_idfrom the response - Poll every 5-10 seconds:
GET /v2/requests/status/{request_id} - When
statusis"COMPLETED", download fromoutput.media_url
Tip: Use X-Webhook-URL header to get a callback instead of polling.
Wan 2.7 Video to Video (Video Editing) API Pricing
| Resolution | Duration | Price (USD) |
|---|---|---|
| 720P | 1s | $0.1 |
| 1080P | 1s | $0.15 |
Wan 2.7 Reference to Video (Ref Image + Ref Video to Video) API Documentation
https://gateway.pixazo.ai/wan-2-7-video-api/v1
Authentication
All requests require an API key passed via header.
| Header | Type | Required | Description |
|---|---|---|---|
| Ocp-Apim-Subscription-Key | string | Yes | Your API subscription key |
Wan 2.7 Video Edit By Reference Request - Wan 2.7 Video API
Request Code
POST https://gateway.pixazo.ai/wan-2-7-video-api/v1/generateWan27VideoEditRequest
Content-Type: application/json
Cache-Control: no-cache
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY
{
"video_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/wan2.7-video.mp4",
"reference_images": ["https://pub-582b7213209642b9b995c96c95a30381.r2.dev/wan2.7-videoedit-change-clothes.png"],
"prompt": "Replace the clothes with the ones from the image"
}
import requests
url = "https://gateway.pixazo.ai/wan-2-7-video-api/v1/generateWan27VideoEditRequest"
headers = {
"Content-Type": "application/json",
"Cache-Control": "no-cache",
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
}
data = {
"video_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/wan2.7-video.mp4",
"reference_images": ["https://pub-582b7213209642b9b995c96c95a30381.r2.dev/wan2.7-videoedit-change-clothes.png"],
"prompt": "Replace the clothes with the ones from the image"
}
response = requests.post(url, json=data, headers=headers)
print(response.json())
const url = 'https://gateway.pixazo.ai/wan-2-7-video-api/v1/generateWan27VideoEditRequest';
const headers = {
'Content-Type': 'application/json',
'Cache-Control': 'no-cache',
'Ocp-Apim-Subscription-Key': 'YOUR_SUBSCRIPTION_KEY'
};
const data = {
video_url: 'https://pub-582b7213209642b9b995c96c95a30381.r2.dev/wan2.7-video.mp4',
reference_images: ['https://pub-582b7213209642b9b995c96c95a30381.r2.dev/wan2.7-videoedit-change-clothes.png'],
prompt: 'Replace the clothes with the ones from the image'
};
fetch(url, {
method: 'POST',
headers: headers,
body: JSON.stringify(data)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
curl -X POST "https://gateway.pixazo.ai/wan-2-7-video-api/v1/generateWan27VideoEditRequest" \
-H "Content-Type: application/json" \
-H "Cache-Control: no-cache" \
-H "Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY" \
--data-raw '{
"video_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/wan2.7-video.mp4",
"reference_images": ["https://pub-582b7213209642b9b995c96c95a30381.r2.dev/wan2.7-videoedit-change-clothes.png"],
"prompt": "Replace the clothes with the ones from the image"
}'
Output
{
"request_id": "wan-2-7-video-api_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/wan-2-7-video-api_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
Webhook (Optional)
Add the X-Webhook-URL header to your generate request to receive a POST callback instead of polling.
X-Webhook-URL: https://your-server.com/webhook/callback
Request Parameters - Wan 2.7 Video Edit By Reference Request
| Parameter | Required | Type | Description |
|---|---|---|---|
| video_url | Yes | string | URL of the video to edit. Format: MP4, MOV. Duration: 2-10s. Max 100MB. |
| reference_images | Yes | array | Array of reference image URLs (1-3 images). Format: JPEG, JPG, PNG, BMP, WEBP. Max 20MB each. |
| prompt | Yes | string | Text description of the desired edit. Max 5,000 characters. |
| negative_prompt | No | string | Describes content you do not want in the video. Max 500 characters. |
| resolution | No | string | Resolution of the output video. Supported: "720P", "1080P". Default: "1080P". |
| ratio | No | string | Aspect ratio. Supported: "16:9", "9:16", "1:1", "4:3", "3:4". |
| duration | No | integer | Duration in seconds. Set only to truncate. Range: 2-10. |
| audio_setting | No | string | "auto" (model decides) or "origin" (retains original audio). Default: "auto". |
| prompt_extend | No | boolean | Enables prompt rewriting using LLM. Default: true. |
| watermark | No | boolean | Whether to add "AI-generated" watermark. Default: false. |
| seed | No | integer | Random seed for reproducible results. Range: 0-2147483647. |
Example Request
{
"video_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/wan2.7-video.mp4",
"reference_images": ["https://pub-582b7213209642b9b995c96c95a30381.r2.dev/wan2.7-videoedit-change-clothes.png"],
"prompt": "Replace the clothes with the ones from the image",
"negative_prompt": "low quality, blurry",
"resolution": "1080P",
"ratio": "16:9",
"duration": 5,
"audio_setting": "origin",
"prompt_extend": false,
"watermark": true,
"seed": 12345
}
Response
{
"request_id": "wan-2-7-video-api_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/wan-2-7-video-api_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
Request Headers
| Header | Value |
|---|---|
| Content-Type | application/json |
| Cache-Control | no-cache |
| Ocp-Apim-Subscription-Key | YOUR_SUBSCRIPTION_KEY |
Response Handling
Common status codes.
| Code | Meaning |
|---|---|
| 202 | Accepted — Request queued |
| 400 | Bad Request |
| 401 | Unauthorized |
| 402 | Insufficient Balance |
| 403 | Forbidden |
| 429 | Too Many Requests |
| 500 | Internal Server Error |
Error Responses
Queue system errors and model validation errors.
Queue System Errors
// 402 — Insufficient balance
{
"error": "Insufficient Balance",
"message": "Your wallet does not have enough balance. Required: $0.01"
}
// 400 — Model not found
{
"error": "Model not found",
"message": "Model 'wan-2-7-video-api' not found or is disabled"
}
Error via Status/Webhook
{
"request_id": "wan-2-7-video-api_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "wan-2-7-video-api",
"error": "Description of the error",
"output": null
}
Retrieving Results
Poll the universal status endpoint to check progress and retrieve results.
Endpoint
GET https://gateway.pixazo.ai/v2/requests/status/{request_id}
Ocp-Apim-Subscription-Key: YOUR_API_KEY
cURL Example
curl -H "Ocp-Apim-Subscription-Key: YOUR_API_KEY" \
"https://gateway.pixazo.ai/v2/requests/status/wan-2-7-video-api_019d52bf-9ae0-7faf-594a-08e2d4e7281b0"
Response (Completed)
{
"request_id": "wan-2-7-video-api_019d52bf-9ae0-7faf-594a-08e2d4e7281b0",
"status": "COMPLETED",
"model_id": "wan-2-7-video-api",
"error": null,
"output": {
"media_url": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/wan-2-7-video-api_019d52bf-9ae0-7faf-594a-08e2d4e7281b0/output.mp4"
],
"media_type": "video/mp4"
},
"created_at": "2026-03-31T07:32:03.749Z",
"updated_at": "2026-03-31T07:32:20.000Z",
"completed_at": "2026-03-31T07:32:20.000Z"
}
Response Fields
| Field | Type | Description |
|---|---|---|
| request_id | string | Unique request identifier |
| status | string | QUEUED, PROCESSING, COMPLETED, FAILED, or ERROR |
| model_id | string | Model that processed the request |
| error | string|null | Error message if failed |
| output.media_url | array | URLs to generated media (R2 CDN) |
| output.media_type | string | MIME type (video/mp4) |
| created_at | string | When request was created |
| completed_at | string|null | When request completed |
| polling_url | string | Status URL (initial response only) |
Status Values
| Status | Description |
|---|---|
| QUEUED | Request accepted, waiting to be processed |
| PROCESSING | Being processed by the model |
| COMPLETED | Done — output contains the result |
| FAILED | Failed — check error field |
| ERROR | System error — not charged |
Status Flow
QUEUED → PROCESSING → COMPLETED
→ FAILED
→ ERROR
Typical Workflow
- Send a generate request to the API endpoint
- Save the
request_idfrom the response - Poll every 5-10 seconds:
GET /v2/requests/status/{request_id} - When
statusis"COMPLETED", download fromoutput.media_url
Tip: Use X-Webhook-URL header to get a callback instead of polling.
Wan 2.7 Reference to Video (Ref Image + Ref Video to Video) API Pricing
| Resolution | Duration | Price (USD) |
|---|---|---|
| 720P | 1s | $0.1 |
| 1080P | 1s | $0.15 |
Wan 2.7 Pro Text to Image API Documentation
https://gateway.pixazo.ai/wan-2-7-pro-api/v1
Authentication
All requests require an API key passed via header.
| Header | Type | Required | Description |
|---|---|---|---|
| Ocp-Apim-Subscription-Key | string | Yes | Your API subscription key |
Wan 2.7 Pro Text to Image Request - Wan 2.7 Pro API
Request Code
POST https://gateway.pixazo.ai/wan-2-7-pro-api/v1/generateWan27ProTextToImageRequest
Content-Type: application/json
Ocp-Apim-Subscription-Key: YOUR_API_KEY
{
"prompt": "A charming flower shop with beautiful window displays filled with colorful flowers"
}
import requests
url = "https://gateway.pixazo.ai/wan-2-7-pro-api/v1/generateWan27ProTextToImageRequest"
headers = {
"Content-Type": "application/json",
"Ocp-Apim-Subscription-Key": "YOUR_API_KEY"
}
payload = {
"prompt": "A charming flower shop with beautiful window displays filled with colorful flowers"
}
response = requests.post(url, json=payload, headers=headers)
print(response.status_code)
print(response.json())
const response = await fetch("https://gateway.pixazo.ai/wan-2-7-pro-api/v1/generateWan27ProTextToImageRequest", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Ocp-Apim-Subscription-Key": "YOUR_API_KEY"
},
body: JSON.stringify({
prompt: "A charming flower shop with beautiful window displays filled with colorful flowers"
})
});
const data = await response.json();
console.log(data);
curl -X POST "https://gateway.pixazo.ai/wan-2-7-pro-api/v1/generateWan27ProTextToImageRequest" \
-H "Content-Type: application/json" \
-H "Ocp-Apim-Subscription-Key: YOUR_API_KEY" \
-d '{"prompt":"A charming flower shop with beautiful window displays filled with colorful flowers"}'
Output
{
"status": "QUEUED",
"request_id": "wan-2-7-pro-api_019d4e4b-b2da-7a82-ecae-994db4acea2c6",
"message": "Request accepted and queued for processing"
}
Webhook (Optional)
You can optionally provide a webhook_url in your request body. When the request completes (success or failure), a POST request will be sent to your webhook URL with the result payload.
Webhook Payload (Success)
{
"request_id": "wan-2-7-pro-api_019d4e4b-b2da-7a82-ecae-994db4acea2c6",
"status": "COMPLETED",
"result": {
"images": [
{
"file_name": "output.png",
"content_type": "image/png",
"url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/wan-2-7-pro-api_019d4e4b-b2da-7a82-ecae-994db4acea2c6/output.png"
}
],
"description": ""
}
}
Webhook Payload (Failure)
{
"request_id": "wan-2-7-pro-api_019d4e4b-b2da-7a82-ecae-994db4acea2c6",
"status": "FAILED",
"error": "Processing failed: upstream provider returned an error"
}
Request Parameters - Wan 2.7 Pro Text to Image Request
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
| prompt | string | Yes | — | Text description of the image to generate. Supports Chinese and English, max 5000 characters. |
| size | string | No | "2K" | Output resolution: "1K", "2K" (default), "4K". |
| n | integer | No | 4 | Number of images to generate, 1-4. |
| thinking_mode | boolean | No | true | Enables thinking mode for better quality. Increases generation time. |
| watermark | boolean | No | false | Adds "AI Generated" watermark. |
| seed | integer | No | — | Random seed [0, 2147483647]. Same seed yields similar outputs. |
| enable_sequential | boolean | No | false | Enables image set output mode. |
| color_palette | array | No | — | Custom color theme. Array of objects with hex (string) and ratio (string, e.g. "25.00%"). 3-10 colors. |
| webhook_url | string | No | — | URL to receive a POST callback when the request completes. Must be a publicly accessible HTTPS endpoint. |
Minimum Request
{
"prompt": "A charming flower shop with beautiful window displays filled with colorful flowers"
}
Full Request (all options)
{
"prompt": "A charming flower shop with beautiful window displays filled with colorful flowers",
"size": "2K",
"n": 2,
"thinking_mode": true,
"watermark": false,
"seed": 12345
}
Response
{
"status": "QUEUED",
"request_id": "wan-2-7-pro-api_019d4e4b-b2da-7a82-ecae-994db4acea2c6",
"message": "Request accepted and queued for processing"
}
Request Headers
| Header | Value |
|---|---|
| Content-Type | application/json |
| Ocp-Apim-Subscription-Key | Your API subscription key |
Response Handling
Common status codes for Wan 2.7 Pro Text to Image Request.
| Code | Meaning |
|---|---|
| 202 | Accepted - Request queued for processing |
| 400 | Bad Request - Invalid parameters or missing required fields |
| 401 | Unauthorized - Invalid or missing API key |
| 402 | Payment Required - Insufficient wallet balance |
| 403 | Forbidden - Access denied |
| 429 | Too Many Requests - Rate limit exceeded |
| 500 | Internal Server Error |
Error Responses
Error responses from the queue system and status/webhook errors.
Queue System Errors
{
"error": "Invalid request: prompt is required",
"status": 400
}
{
"error": "Unauthorized: invalid or missing API key",
"status": 401
}
{
"error": "Insufficient balance. Please top up your wallet.",
"status": 402
}
{
"error": "Rate limit exceeded. Please retry after some time.",
"status": 429
}
Status / Webhook Errors
{
"request_id": "wan-2-7-pro-api_019d4e4b-b2da-7a82-ecae-994db4acea2c6",
"status": "FAILED",
"error": "Processing failed: upstream provider returned an error"
}
{
"error": "Request not found",
"status": 404
}
Retrieving Results
After submitting a request, use the request_id from the queued response to check the status and retrieve results.
GET /v2/requests/status/{request_id}
GET https://gateway.pixazo.ai/v2/requests/status/wan-2-7-pro-api_019d4e4b-b2da-7a82-ecae-994db4acea2c6
Ocp-Apim-Subscription-Key: YOUR_API_KEY
Response (Queued / Processing)
{
"request_id": "wan-2-7-pro-api_019d4e4b-b2da-7a82-ecae-994db4acea2c6",
"status": "PROCESSING",
"message": "Request is being processed"
}
Response (Completed)
{
"request_id": "wan-2-7-pro-api_019d4e4b-b2da-7a82-ecae-994db4acea2c6",
"status": "COMPLETED",
"result": {
"images": [
{
"file_name": "output.png",
"content_type": "image/png",
"url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/wan-2-7-pro-api_019d4e4b-b2da-7a82-ecae-994db4acea2c6/output.png"
}
],
"description": ""
}
}
Response (Failed)
{
"request_id": "wan-2-7-pro-api_019d4e4b-b2da-7a82-ecae-994db4acea2c6",
"status": "FAILED",
"error": "Processing failed: upstream provider returned an error"
}
Response Fields - Wan 2.7 Pro Text to Image Request
| Field | Type | Description |
|---|---|---|
| request_id | string | Unique identifier for the request. Use this to poll for status. |
| status | string | Current status of the request (QUEUED, PROCESSING, COMPLETED, FAILED). |
| message | string | Human-readable status message. |
| result | object | The result payload (present when status is COMPLETED). |
| images | array | Array of generated image objects. |
| images[].file_name | string | Name of the output file. |
| images[].content_type | string | MIME type of the output file (image/png). |
| images[].url | string | Publicly accessible URL to download the generated image. |
| description | string | Optional description returned with the response. |
| error | string | Error message (present when status is FAILED). |
Status Values
| Status | Description |
|---|---|
| QUEUED | Request has been accepted and is waiting in the queue. |
| PROCESSING | Request is currently being processed by the AI model. |
| COMPLETED | Request finished successfully. Results are available. |
| FAILED | Request failed during processing. Check the error field for details. |
Status Flow
QUEUED --> PROCESSING --> COMPLETED
\--> FAILED
Typical Workflow
- Submit a POST request to
https://gateway.pixazo.ai/wan-2-7-pro-api/v1/generateWan27ProTextToImageRequestwith your parameters. - Receive a
202 Acceptedresponse with arequest_idand statusQUEUED. - Poll the status endpoint
GET /v2/requests/status/{request_id}periodically (e.g. every 5-10 seconds). - Retrieve the result once status is
COMPLETED. Theresultobject contains image URLs. - (Optional) Use a
webhook_urlto receive results automatically without polling.
Wan 2.7 Pro Text to Image API Pricing
| Resolution | Price (USD) |
|---|---|
| default | $0.075 |
Wan 2.7 Pro Image to Image (Image Editing) API Documentation
https://gateway.pixazo.ai/wan-2-7-pro-api/v1
Authentication
All requests require an API key passed via header.
| Header | Type | Required | Description |
|---|---|---|---|
| Ocp-Apim-Subscription-Key | string | Yes | Your API subscription key |
Wan 2.7 Pro Edit Image Request - Wan 2.7 Pro API
Request Code
POST https://gateway.pixazo.ai/wan-2-7-pro-api/v1/generateWan27ProEditImageRequest
Content-Type: application/json
Ocp-Apim-Subscription-Key: YOUR_API_KEY
{
"images": ["https://pub-582b7213209642b9b995c96c95a30381.r2.dev/f1.png"],
"prompt": "Transform the tree into a lush green tree with vibrant flowers"
}
import requests
url = "https://gateway.pixazo.ai/wan-2-7-pro-api/v1/generateWan27ProEditImageRequest"
headers = {
"Content-Type": "application/json",
"Ocp-Apim-Subscription-Key": "YOUR_API_KEY"
}
payload = {
"images": ["https://pub-582b7213209642b9b995c96c95a30381.r2.dev/f1.png"],
"prompt": "Transform the tree into a lush green tree with vibrant flowers"
}
response = requests.post(url, json=payload, headers=headers)
print(response.status_code)
print(response.json())
const response = await fetch("https://gateway.pixazo.ai/wan-2-7-pro-api/v1/generateWan27ProEditImageRequest", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Ocp-Apim-Subscription-Key": "YOUR_API_KEY"
},
body: JSON.stringify({
images: ["https://pub-582b7213209642b9b995c96c95a30381.r2.dev/f1.png"],
prompt: "Transform the tree into a lush green tree with vibrant flowers"
})
});
const data = await response.json();
console.log(data);
curl -X POST "https://gateway.pixazo.ai/wan-2-7-pro-api/v1/generateWan27ProEditImageRequest" \
-H "Content-Type: application/json" \
-H "Ocp-Apim-Subscription-Key: YOUR_API_KEY" \
-d '{"images":["https://pub-582b7213209642b9b995c96c95a30381.r2.dev/f1.png"],"prompt":"Transform the tree into a lush green tree with vibrant flowers"}'
Output
{
"status": "QUEUED",
"request_id": "wan-2-7-pro-api_019d4e48-893e-7582-850a-9be6943bebe13",
"message": "Request accepted and queued for processing"
}
Webhook (Optional)
You can optionally provide a webhook_url in your request body. When the request completes (success or failure), a POST request will be sent to your webhook URL with the result payload.
Webhook Payload (Success)
{
"request_id": "wan-2-7-pro-api_019d4e48-893e-7582-850a-9be6943bebe13",
"status": "COMPLETED",
"result": {
"images": [
{
"file_name": "output.png",
"content_type": "image/png",
"url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/wan-2-7-pro-api_019d4e48-893e-7582-850a-9be6943bebe13/output.png"
}
],
"description": ""
}
}
Webhook Payload (Failure)
{
"request_id": "wan-2-7-pro-api_019d4e48-893e-7582-850a-9be6943bebe13",
"status": "FAILED",
"error": "Processing failed: upstream provider returned an error"
}
Request Parameters - Wan 2.7 Pro Edit Image Request
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
| images | array | Yes | — | Array of image URLs to edit. Supports 1-9 images. URLs must be publicly accessible. Supported formats: JPEG, JPG, PNG, BMP, WEBP. Max 20MB per image. Resolution: 240-8000px, aspect ratio 1:8 to 8:1. |
| prompt | string | Yes | — | Text description of the desired edit. Max 5000 characters. |
| size | string | No | "2K" | Output resolution: "1K", "2K" (default). Note: 4K is only available for text-to-image. |
| n | integer | No | 4 | Number of images to generate, 1-4. |
| watermark | boolean | No | false | Adds "AI Generated" watermark. |
| seed | integer | No | — | Random seed [0, 2147483647]. |
| bbox_list | array | No | — | Selected areas for interactive editing. Array of arrays matching input image count. Each image supports up to 2 bounding boxes as [x1, y1, x2, y2] pixel coordinates. |
| enable_sequential | boolean | No | false | Enables image set output mode. |
| webhook_url | string | No | — | URL to receive a POST callback when the request completes. Must be a publicly accessible HTTPS endpoint. |
Minimum Request
{
"images": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/f1.png"
],
"prompt": "Transform the tree into a lush green tree with vibrant flowers"
}
Full Request (all options)
{
"images": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/f1.png"
],
"prompt": "Transform the tree into a lush green tree with vibrant flowers",
"size": "2K",
"n": 1,
"watermark": false,
"seed": 42
}
Response
{
"status": "QUEUED",
"request_id": "wan-2-7-pro-api_019d4e48-893e-7582-850a-9be6943bebe13",
"message": "Request accepted and queued for processing"
}
Request Headers
| Header | Value |
|---|---|
| Content-Type | application/json |
| Ocp-Apim-Subscription-Key | Your API subscription key |
Response Handling
Common status codes for Wan 2.7 Pro Edit Image Request.
| Code | Meaning |
|---|---|
| 202 | Accepted - Request queued for processing |
| 400 | Bad Request - Invalid parameters or missing required fields |
| 401 | Unauthorized - Invalid or missing API key |
| 402 | Payment Required - Insufficient wallet balance |
| 403 | Forbidden - Access denied |
| 429 | Too Many Requests - Rate limit exceeded |
| 500 | Internal Server Error |
Error Responses
Error responses from the queue system and status/webhook errors.
Queue System Errors
{
"error": "Invalid request: prompt is required",
"status": 400
}
{
"error": "Unauthorized: invalid or missing API key",
"status": 401
}
{
"error": "Insufficient balance. Please top up your wallet.",
"status": 402
}
{
"error": "Rate limit exceeded. Please retry after some time.",
"status": 429
}
Status / Webhook Errors
{
"request_id": "wan-2-7-pro-api_019d4e48-893e-7582-850a-9be6943bebe13",
"status": "FAILED",
"error": "Processing failed: upstream provider returned an error"
}
{
"error": "Request not found",
"status": 404
}
Retrieving Results
After submitting a request, use the request_id from the queued response to check the status and retrieve results.
GET /v2/requests/status/{request_id}
GET https://gateway.pixazo.ai/v2/requests/status/wan-2-7-pro-api_019d4e48-893e-7582-850a-9be6943bebe13
Ocp-Apim-Subscription-Key: YOUR_API_KEY
Response (Queued / Processing)
{
"request_id": "wan-2-7-pro-api_019d4e48-893e-7582-850a-9be6943bebe13",
"status": "PROCESSING",
"message": "Request is being processed"
}
Response (Completed)
{
"request_id": "wan-2-7-pro-api_019d4e48-893e-7582-850a-9be6943bebe13",
"status": "COMPLETED",
"result": {
"images": [
{
"file_name": "output.png",
"content_type": "image/png",
"url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/wan-2-7-pro-api_019d4e48-893e-7582-850a-9be6943bebe13/output.png"
}
],
"description": ""
}
}
Response (Failed)
{
"request_id": "wan-2-7-pro-api_019d4e48-893e-7582-850a-9be6943bebe13",
"status": "FAILED",
"error": "Processing failed: upstream provider returned an error"
}
Response Fields - Wan 2.7 Pro Edit Image Request
| Field | Type | Description |
|---|---|---|
| request_id | string | Unique identifier for the request. Use this to poll for status. |
| status | string | Current status of the request (QUEUED, PROCESSING, COMPLETED, FAILED). |
| message | string | Human-readable status message. |
| result | object | The result payload (present when status is COMPLETED). |
| images | array | Array of generated image objects. |
| images[].file_name | string | Name of the output file. |
| images[].content_type | string | MIME type of the output file (image/png). |
| images[].url | string | Publicly accessible URL to download the generated image. |
| description | string | Optional description returned with the response. |
| error | string | Error message (present when status is FAILED). |
Status Values
| Status | Description |
|---|---|
| QUEUED | Request has been accepted and is waiting in the queue. |
| PROCESSING | Request is currently being processed by the AI model. |
| COMPLETED | Request finished successfully. Results are available. |
| FAILED | Request failed during processing. Check the error field for details. |
Status Flow
QUEUED --> PROCESSING --> COMPLETED
\--> FAILED
Typical Workflow
- Submit a POST request to
https://gateway.pixazo.ai/wan-2-7-pro-api/v1/generateWan27ProEditImageRequestwith your parameters. - Receive a
202 Acceptedresponse with arequest_idand statusQUEUED. - Poll the status endpoint
GET /v2/requests/status/{request_id}periodically (e.g. every 5-10 seconds). - Retrieve the result once status is
COMPLETED. Theresultobject contains image URLs. - (Optional) Use a
webhook_urlto receive results automatically without polling.
Wan 2.7 Pro Image to Image (Image Editing) API Pricing
| Resolution | Price (USD) |
|---|---|
| default | $0.075 |
Wan 2.6 Image to Video API Documentation
https://gateway.pixazo.ai/wan-2-6-image-to-video-477/v1
Authentication
All requests require an API key passed via header.
| Header | Type | Required | Description |
|---|---|---|---|
| Ocp-Apim-Subscription-Key | string | Yes | Your API subscription key |
Wan 2.6 Image to Video generate request - Wan 2.6 Image to Video API
Request Code
POST https://gateway.pixazo.ai/wan-2-6-image-to-video-477/v1/wan-2-6-image-to-video-request
Content-Type: application/json
Cache-Control: no-cache
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY
{
"prompt": "A serene mountain lake at sunrise, with gently flowing water and birds flying overhead",
"image_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/f1.png",
"aspect_ratio": "16:9",
"resolution": "1080p",
"duration": "10",
"audio_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/gemini-music/lyria-1771923124229-veu9ens.wav",
"enable_prompt_expansion": true,
"multi_shots": true,
"enable_safety_checker": true
}
import requests
url = "https://gateway.pixazo.ai/wan-2-6-image-to-video-477/v1/wan-2-6-image-to-video-request"
headers = {
"Content-Type": "application/json",
"Cache-Control": "no-cache",
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
}
data = {
"prompt": "A serene mountain lake at sunrise, with gently flowing water and birds flying overhead",
"image_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/f1.png",
"aspect_ratio": "16:9",
"resolution": "1080p",
"duration": "10",
"enable_prompt_expansion": True,
"multi_shots": True,
"enable_safety_checker": True
}
response = requests.post(url, json=data, headers=headers)
print(response.json())
const url = 'https://gateway.pixazo.ai/wan-2-6-image-to-video-477/v1/wan-2-6-image-to-video-request';
const headers = {
'Content-Type': 'application/json',
'Cache-Control': 'no-cache',
'Ocp-Apim-Subscription-Key': 'YOUR_SUBSCRIPTION_KEY'
};
const data = {
prompt: 'A serene mountain lake at sunrise, with gently flowing water and birds flying overhead',
image_url: 'https://pub-582b7213209642b9b995c96c95a30381.r2.dev/f1.png',
aspect_ratio: '16:9',
resolution: '1080p',
duration: '10',
enable_prompt_expansion: true,
multi_shots: true,
enable_safety_checker: true
};
fetch(url, {
method: 'POST',
headers: headers,
body: JSON.stringify(data)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
curl -X POST "https://gateway.pixazo.ai/wan-2-6-image-to-video-477/v1/wan-2-6-image-to-video-request" \
-H "Content-Type: application/json" \
-H "Cache-Control: no-cache" \
-H "Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY" \
--data-raw '{
"prompt": "A serene mountain lake at sunrise, with gently flowing water and birds flying overhead",
"image_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/f1.png",
"aspect_ratio": "16:9",
"resolution": "1080p",
"duration": "10",
"enable_prompt_expansion": true,
"multi_shots": true,
"enable_safety_checker": true
}'
Output
{
"request_id": "wan-2-6-image-to-video-477_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/wan-2-6-image-to-video-477_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
Webhook (Optional)
Add the X-Webhook-URL header to your generate request to receive a POST callback instead of polling.
X-Webhook-URL: https://your-server.com/webhook/callback
Request Parameters - Wan 2.6 Image to Video generate request
| Parameter | Required | Type | Description |
|---|---|---|---|
| prompt | Yes | string | Text prompt describing the desired motion, mood, or style for the generated video. Enhances visual storytelling. |
| image_url | Yes | string | Publicly accessible URL of the source image to convert into video. Must be reachable by the API server. |
| aspect_ratio | No | string | Aspect ratio of the output video. Supported values: "16:9", "9:16", "1:1", "4:3", "3:4". |
| resolution | No | string | Resolution of the output video. Supported values: "720p", "1080p". |
| duration | No | string | Duration of the generated video in seconds. Supported values: "5", "10", "15". |
| audio_url | No | string | URL of an audio file to use as background music. Must be publicly accessible. Format: WAV or MP3. Duration: 3-30 seconds. Max file size: 15 MB. If the audio is longer than the video duration, it is truncated to the first N seconds; if shorter than the video, the remaining video time is silent. |
| enable_prompt_expansion | No | boolean | When true, the API will enhance and expand the provided prompt for richer, more descriptive video generation. |
| multi_shots | No | boolean | When true, enables multiple camera shots and transitions within the video for dynamic, cinematic output. |
| enable_safety_checker | No | boolean | When true, activates content safety filtering to block inappropriate or harmful outputs. |
Example Request
{
"prompt": "A serene mountain lake at sunrise, with gently flowing water and birds flying overhead",
"image_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/f1.png",
"aspect_ratio": "16:9",
"resolution": "1080p",
"duration": "10",
"audio_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/gemini-music/lyria-1771923124229-veu9ens.wav",
"enable_prompt_expansion": true,
"multi_shots": true,
"enable_safety_checker": true
}
Response
{
"request_id": "wan-2-6-image-to-video-477_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/wan-2-6-image-to-video-477_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
Request Headers
| Header | Value |
|---|---|
| Content-Type | application/json |
| Cache-Control | no-cache |
| Ocp-Apim-Subscription-Key | YOUR_SUBSCRIPTION_KEY |
Response Handling
Common status codes.
| Code | Meaning |
|---|---|
| 202 | Accepted — Request queued |
| 400 | Bad Request |
| 401 | Unauthorized |
| 402 | Insufficient Balance |
| 403 | Forbidden |
| 429 | Too Many Requests |
| 500 | Internal Server Error |
Error Responses
Queue system errors and model validation errors.
Queue System Errors
// 402 — Insufficient balance
{
"error": "Insufficient Balance",
"message": "Your wallet does not have enough balance. Required: $0.01"
}
// 400 — Model not found
{
"error": "Model not found",
"message": "Model 'wan-2-6-image-to-video-477' not found or is disabled"
}
Error via Status/Webhook
{
"request_id": "wan-2-6-image-to-video-477_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "wan-2-6-image-to-video-477",
"error": "Description of the error",
"output": null
}
Retrieving Results
Poll the universal status endpoint to check progress and retrieve results.
Endpoint
GET https://gateway.pixazo.ai/v2/requests/status/{request_id}
Ocp-Apim-Subscription-Key: YOUR_API_KEY
cURL Example
curl -H "Ocp-Apim-Subscription-Key: YOUR_API_KEY" \
"https://gateway.pixazo.ai/v2/requests/status/wan-2-6-image-to-video-477_019d42ce-ae71-7999-24c9-5d76447ecafb4"
Response (Completed)
{
"request_id": "wan-2-6-image-to-video-477_019d42ce-ae71-7999-24c9-5d76447ecafb4",
"status": "COMPLETED",
"model_id": "wan-2-6-image-to-video-477",
"error": null,
"output": {
"media_url": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/wan-2-6-image-to-video-477_019d42ce-ae71-7999-24c9-5d76447ecafb4/output.mp4"
],
"media_type": "video/mp4"
},
"created_at": "2026-03-31T07:32:03.749Z",
"updated_at": "2026-03-31T07:32:20.000Z",
"completed_at": "2026-03-31T07:32:20.000Z"
}
Response Fields
| Field | Type | Description |
|---|---|---|
| request_id | string | Unique request identifier |
| status | string | QUEUED, PROCESSING, COMPLETED, FAILED, or ERROR |
| model_id | string | Model that processed the request |
| error | string|null | Error message if failed |
| output.media_url | array | URLs to generated media (R2 CDN) |
| output.media_type | string | MIME type (video/mp4) |
| created_at | string | When request was created |
| completed_at | string|null | When request completed |
| polling_url | string | Status URL (initial response only) |
Status Values
| Status | Description |
|---|---|
| QUEUED | Request accepted, waiting to be processed |
| PROCESSING | Being processed by the model |
| COMPLETED | Done — output contains the result |
| FAILED | Failed — check error field |
| ERROR | System error — not charged |
Status Flow
QUEUED → PROCESSING → COMPLETED
→ FAILED
→ ERROR
Typical Workflow
- Send a generate request to the API endpoint
- Save the
request_idfrom the response - Poll every 5-10 seconds:
GET /v2/requests/status/{request_id} - When
statusis"COMPLETED", download fromoutput.media_url
Tip: Use X-Webhook-URL header to get a callback instead of polling.
Wan 2.6 Image to Video API Pricing
| Resolution | Duration | Price (USD) |
|---|---|---|
| Image/Text to Video | 5s | $0.75 |
| Image/Text to Video | 10s | $1.5 |
| Image/Text to Video | 15s | $2.25 |
Wan 2.6 Text to Video API Documentation
https://gateway.pixazo.ai/wan-2-6-text-to-video-569/v1
Authentication
All requests require an API key passed via header.
| Header | Type | Required | Description |
|---|---|---|---|
| Ocp-Apim-Subscription-Key | string | Yes | Your API subscription key |
Wan 2.6 Text to Video generate request - Wan 2.6 Text to Video API
Request Code
POST https://gateway.pixazo.ai/wan-2-6-text-to-video-569/v1/wan-2-6-text-to-video-request
Content-Type: application/json
Cache-Control: no-cache
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY
{
"prompt": "Create a cinematic video with multiple scenes showing a fox director making a movie, transitioning between different environments.",
"aspect_ratio": "16:9",
"resolution": "1080p",
"duration": "10",
"audio_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/gemini-music/lyria-1771923124229-veu9ens.wav",
"negative_prompt": "low resolution, error, worst quality, low quality, defects",
"enable_prompt_expansion": true,
"multi_shots": true,
"enable_safety_checker": true
}
import requests
url = "https://gateway.pixazo.ai/wan-2-6-text-to-video-569/v1/wan-2-6-text-to-video-request"
headers = {
"Content-Type": "application/json",
"Cache-Control": "no-cache",
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
}
data = {
"prompt": "Create a cinematic video with multiple scenes showing a fox director making a movie, transitioning between different environments.",
"aspect_ratio": "16:9",
"resolution": "1080p",
"duration": "10",
"audio_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/gemini-music/lyria-1771923124229-veu9ens.wav",
"negative_prompt": "low resolution, error, worst quality, low quality, defects",
"enable_prompt_expansion": True,
"multi_shots": True,
"enable_safety_checker": True
}
response = requests.post(url, json=data, headers=headers)
print(response.json())
const url = 'https://gateway.pixazo.ai/wan-2-6-text-to-video-569/v1/wan-2-6-text-to-video-request';
const headers = {
'Content-Type': 'application/json',
'Cache-Control': 'no-cache',
'Ocp-Apim-Subscription-Key': 'YOUR_SUBSCRIPTION_KEY'
};
const data = {
prompt: 'Create a cinematic video with multiple scenes showing a fox director making a movie, transitioning between different environments.',
aspect_ratio: '16:9',
resolution: '1080p',
duration: '10',
negative_prompt: 'low resolution, error, worst quality, low quality, defects',
enable_prompt_expansion: true,
multi_shots: true,
enable_safety_checker: true
};
fetch(url, {
method: 'POST',
headers: headers,
body: JSON.stringify(data)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
curl -X POST "https://gateway.pixazo.ai/wan-2-6-text-to-video-569/v1/wan-2-6-text-to-video-request" \
-H "Content-Type: application/json" \
-H "Cache-Control: no-cache" \
-H "Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY" \
--data-raw '{
"prompt": "Create a cinematic video with multiple scenes showing a fox director making a movie, transitioning between different environments.",
"aspect_ratio": "16:9",
"resolution": "1080p",
"duration": "10",
"audio_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/gemini-music/lyria-1771923124229-veu9ens.wav",
"negative_prompt": "low resolution, error, worst quality, low quality, defects",
"enable_prompt_expansion": true,
"multi_shots": true,
"enable_safety_checker": true
}'
Output
{
"request_id": "wan-2-6-text-to-video-569_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/wan-2-6-text-to-video-569_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
Webhook (Optional)
Add the X-Webhook-URL header to your generate request to receive a POST callback instead of polling.
X-Webhook-URL: https://your-server.com/webhook/callback
Request Parameters - Wan 2.6 Text to Video generate request
| Parameter | Required | Type | Description |
|---|---|---|---|
| prompt | Yes | string | A detailed text description of the desired video content. Include scenes, actions, lighting, and mood for optimal results. |
| aspect_ratio | No | string | The aspect ratio of the output video. Supported values: "16:9", "9:16", "1:1", "4:3", "3:4". |
| resolution | No | string | The output video resolution. Supported values: "720p", "1080p". |
| duration | No | string | The length of the generated video in seconds. Supported values: "5", "10", "15". |
| audio_url | No | string | URL of an audio file to use as background music. Must be publicly accessible. Format: WAV or MP3. Duration: 3-30 seconds. Max file size: 15 MB. If the audio is longer than the video duration, it is truncated to the first N seconds; if shorter than the video, the remaining video time is silent. |
| negative_prompt | No | string | Description of elements to avoid in the video. Helps improve output quality by excluding undesired visuals. |
| enable_prompt_expansion | No | boolean | Enables intelligent prompting expansion to enhance scene richness and detail. When enabled, the model may augment your prompt with contextual enhancements. |
| multi_shots | No | boolean | Enables multi-shot generation, allowing the model to segment the video into multiple cohesive scenes based on the prompt. |
| enable_safety_checker | No | boolean | Activates content safety filtering to block inappropriate or harmful outputs. |
Example Request
{
"prompt": "Create a cinematic video with multiple scenes showing a fox director making a movie, transitioning between different environments.",
"aspect_ratio": "16:9",
"resolution": "1080p",
"duration": "10",
"audio_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/gemini-music/lyria-1771923124229-veu9ens.wav",
"negative_prompt": "low resolution, error, worst quality, low quality, defects",
"enable_prompt_expansion": true,
"multi_shots": true,
"enable_safety_checker": true
}
Response
{
"status": "IN_QUEUE",
"request_id": "a1b2c3d4-e5f6-7890-g1h2-i3j4k5l6m7n8",
"response_url": "[RESPONSE_URL]"
}
Request Headers
| Header | Value |
|---|---|
| Content-Type | application/json |
| Cache-Control | no-cache |
| Ocp-Apim-Subscription-Key | YOUR_SUBSCRIPTION_KEY |
Response Handling
Common status codes.
| Code | Meaning |
|---|---|
| 202 | Accepted — Request queued |
| 400 | Bad Request |
| 401 | Unauthorized |
| 402 | Insufficient Balance |
| 403 | Forbidden |
| 429 | Too Many Requests |
| 500 | Internal Server Error |
Error Responses
Queue system errors and model validation errors.
Queue System Errors
// 402 — Insufficient balance
{
"error": "Insufficient Balance",
"message": "Your wallet does not have enough balance."
}
// 400 — Model not found
{
"error": "Model not found",
"message": "Model 'wan-2-6-text-to-video-569' not found or is disabled"
}
Error via Status/Webhook
{
"request_id": "wan-2-6-text-to-video-569_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "wan-2-6-text-to-video-569",
"error": "Description of the error",
"output": null
}
Retrieving Results
Poll the universal status endpoint to check progress and retrieve results.
Endpoint
GET https://gateway.pixazo.ai/v2/requests/status/{request_id}
Ocp-Apim-Subscription-Key: YOUR_API_KEY
cURL Example
curl -H "Ocp-Apim-Subscription-Key: YOUR_API_KEY" \
"https://gateway.pixazo.ai/v2/requests/status/wan-2-6-text-to-video-569_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
Response (Completed)
{
"request_id": "wan-2-6-text-to-video-569_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "wan-2-6-text-to-video-569",
"error": null,
"output": {
"media_url": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/wan-2-6-text-to-video-569_019dxxxx-xxxx/output.ext"
],
"media_type": "application/octet-stream"
},
"created_at": "2026-03-31T10:00:00.000Z",
"updated_at": "2026-03-31T10:00:15.000Z",
"completed_at": "2026-03-31T10:00:15.000Z"
}
Response Fields
| Field | Type | Description |
|---|---|---|
| request_id | string | Unique request identifier |
| status | string | QUEUED, PROCESSING, COMPLETED, FAILED, or ERROR |
| model_id | string | Model that processed the request |
| error | string|null | Error message if failed |
| output.media_url | array | URLs to generated media (R2 CDN) |
| output.media_type | string | MIME type of the output |
| created_at | string | When request was created |
| completed_at | string|null | When request completed |
| polling_url | string | Status URL (initial response only) |
Status Values
| Status | Description |
|---|---|
| QUEUED | Request accepted, waiting to be processed |
| PROCESSING | Being processed by the model |
| COMPLETED | Done — output contains the result |
| FAILED | Failed — check error field |
| ERROR | System error — not charged |
Status Flow
QUEUED → PROCESSING → COMPLETED
→ FAILED
→ ERROR
Typical Workflow
- Send a generate request to the API endpoint
- Save the
request_idfrom the response - Poll every 5-10 seconds:
GET /v2/requests/status/{request_id} - When
statusis"COMPLETED", download fromoutput.media_url
Tip: Use X-Webhook-URL header to get a callback instead of polling.
Wan 2.6 Text to Video API Pricing
| Resolution | Duration | Price (USD) |
|---|---|---|
| Image/Text to Video | 5s | $0.75 |
| Image/Text to Video | 10s | $1.5 |
| Image/Text to Video | 15s | $2.25 |
Wan 2.6 Image to Video (Flash) API Documentation
https://gateway.pixazo.ai/wan-2-6-image-to-video-flash-api-353/v1
Authentication
All requests require an API key passed via header.
| Header | Type | Required | Description |
|---|---|---|---|
| Ocp-Apim-Subscription-Key | string | Yes | Your API subscription key |
Wan 2.6 Image-to-Video Flash API generate request - Wan 2.6 Image-to-Video Flash API
Request Code
POST https://gateway.pixazo.ai/wan-2-6-image-to-video-flash-api-353/v1/wan-2-6-image-to-video-flash-api-request
Content-Type: application/json
Cache-Control: no-cache
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY
{
"prompt": "A cinematic beach portrait that evolves into an energy-charged scene. Photorealistic, stable identity matching the reference image, natural lighting, smooth cinematic motion, no subtitles.\n\nShot 1 [0-4s] Continue from the first frame of the reference image. The man stands on a sunny beach wearing a black t-shirt with glowing blue flame graphics. Gentle ocean waves move behind him and wind lightly moves his hair and shirt. The blue flame design on the shirt begins to softly glow and flicker like living energy.\n\nShot 2 [4-8s] Slow cinematic push-in toward the subject. The glowing blue flames on the shirt animate and flow upward like magical energy. Subtle particles and light streaks appear around the flame pattern. The ocean sparkles in the sunlight while waves roll naturally in the background.\n\nShot 3 [8-12s] Hard cinematic cut to a slightly closer angle. The blue flames briefly expand outward as luminous energy patterns around the torso before settling back onto the shirt. The wind becomes slightly stronger, moving the shirt fabric and hair while the beach environment remains realistic.\n\nShot 4 [12-15s] Final cinematic close shot. The flames stabilize into a calm glowing pattern on the shirt while the subject stands confidently against the horizon. The camera slowly drifts sideways with warm sunlight reflecting off the ocean, ending in a clean photorealistic frame.",
"image_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/input_model.png"
}
import requests
url = "https://gateway.pixazo.ai/wan-2-6-image-to-video-flash-api-353/v1/wan-2-6-image-to-video-flash-api-request"
headers = {
"Content-Type": "application/json",
"Cache-Control": "no-cache",
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
}
data = {
"prompt": "A cinematic beach portrait that evolves into an energy-charged scene. Photorealistic, stable identity matching the reference image, natural lighting, smooth cinematic motion, no subtitles.\n\nShot 1 [0-4s] Continue from the first frame of the reference image. The man stands on a sunny beach wearing a black t-shirt with glowing blue flame graphics. Gentle ocean waves move behind him and wind lightly moves his hair and shirt. The blue flame design on the shirt begins to softly glow and flicker like living energy.\n\nShot 2 [4-8s] Slow cinematic push-in toward the subject. The glowing blue flames on the shirt animate and flow upward like magical energy. Subtle particles and light streaks appear around the flame pattern. The ocean sparkles in the sunlight while waves roll naturally in the background.\n\nShot 3 [8-12s] Hard cinematic cut to a slightly closer angle. The blue flames briefly expand outward as luminous energy patterns around the torso before settling back onto the shirt. The wind becomes slightly stronger, moving the shirt fabric and hair while the beach environment remains realistic.\n\nShot 4 [12-15s] Final cinematic close shot. The flames stabilize into a calm glowing pattern on the shirt while the subject stands confidently against the horizon. The camera slowly drifts sideways with warm sunlight reflecting off the ocean, ending in a clean photorealistic frame.",
"image_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/input_model.png"
}
response = requests.post(url, json=data, headers=headers)
print(response.json())
const url = 'https://gateway.pixazo.ai/wan-2-6-image-to-video-flash-api-353/v1/wan-2-6-image-to-video-flash-api-request';
const headers = {
'Content-Type': 'application/json',
'Cache-Control': 'no-cache',
'Ocp-Apim-Subscription-Key': 'YOUR_SUBSCRIPTION_KEY'
};
const data = {
prompt: "A cinematic beach portrait that evolves into an energy-charged scene. Photorealistic, stable identity matching the reference image, natural lighting, smooth cinematic motion, no subtitles.\n\nShot 1 [0-4s] Continue from the first frame of the reference image. The man stands on a sunny beach wearing a black t-shirt with glowing blue flame graphics. Gentle ocean waves move behind him and wind lightly moves his hair and shirt. The blue flame design on the shirt begins to softly glow and flicker like living energy.\n\nShot 2 [4-8s] Slow cinematic push-in toward the subject. The glowing blue flames on the shirt animate and flow upward like magical energy. Subtle particles and light streaks appear around the flame pattern. The ocean sparkles in the sunlight while waves roll naturally in the background.\n\nShot 3 [8-12s] Hard cinematic cut to a slightly closer angle. The blue flames briefly expand outward as luminous energy patterns around the torso before settling back onto the shirt. The wind becomes slightly stronger, moving the shirt fabric and hair while the beach environment remains realistic.\n\nShot 4 [12-15s] Final cinematic close shot. The flames stabilize into a calm glowing pattern on the shirt while the subject stands confidently against the horizon. The camera slowly drifts sideways with warm sunlight reflecting off the ocean, ending in a clean photorealistic frame.",
image_url: 'https://pub-582b7213209642b9b995c96c95a30381.r2.dev/input_model.png'
};
fetch(url, {
method: 'POST',
headers: headers,
body: JSON.stringify(data)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
curl -X POST "https://gateway.pixazo.ai/wan-2-6-image-to-video-flash-api-353/v1/wan-2-6-image-to-video-flash-api-request" \
-H "Content-Type: application/json" \
-H "Cache-Control: no-cache" \
-H "Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY" \
--data-raw '{
"prompt": "A cinematic beach portrait that evolves into an energy-charged scene. Photorealistic, stable identity matching the reference image, natural lighting, smooth cinematic motion, no subtitles.\\n\\nShot 1 [0-4s] Continue from the first frame of the reference image. The man stands on a sunny beach wearing a black t-shirt with glowing blue flame graphics. Gentle ocean waves move behind him and wind lightly moves his hair and shirt. The blue flame design on the shirt begins to softly glow and flicker like living energy.\\n\\nShot 2 [4-8s] Slow cinematic push-in toward the subject. The glowing blue flames on the shirt animate and flow upward like magical energy. Subtle particles and light streaks appear around the flame pattern. The ocean sparkles in the sunlight while waves roll naturally in the background.\\n\\nShot 3 [8-12s] Hard cinematic cut to a slightly closer angle. The blue flames briefly expand outward as luminous energy patterns around the torso before settling back onto the shirt. The wind becomes slightly stronger, moving the shirt fabric and hair while the beach environment remains realistic.\\n\\nShot 4 [12-15s] Final cinematic close shot. The flames stabilize into a calm glowing pattern on the shirt while the subject stands confidently against the horizon. The camera slowly drifts sideways with warm sunlight reflecting off the ocean, ending in a clean photorealistic frame.",
"image_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/input_model.png"
}'
Output
{
"request_id": "wan-2-6-image-to-video-flash-api-353_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/wan-2-6-image-to-video-flash-api-353_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
Webhook (Optional)
Add the X-Webhook-URL header to your generate request to receive a POST callback instead of polling.
X-Webhook-URL: https://your-server.com/webhook/callback
Request Parameters - Wan 2.6 Image-to-Video Flash API generate request
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
| prompt | string | Yes | — | A detailed narrative describing the desired video sequence, including shot-by-shot instructions, timing cues, and emotional tone. Must specify transitions, camera movement, and scene changes for best results. |
| image_url | string | Yes | — | Publicly accessible URL of the input image to animate. Must be a stable, direct link (e.g., PNG, JPG). Supports HTTPS. |
| resolution | string | No | 1080p | Output video resolution. Supported values: "720p", "1080p", "2160p". |
| duration | string | No | 5 | Desired video duration in seconds. Accepts integer values from 5 to 15. Longer durations may incur higher processing time. |
| audio_url | string | No | "" | URL of an audio file to use as background music. Must be publicly accessible. Format: WAV or MP3. Duration: 3-30 seconds. Max file size: 15 MB. If the audio is longer than the video duration, it is truncated to the first N seconds; if shorter than the video, the remaining video time is silent. |
| negative_prompt | string | No | "" | A description of elements to avoid in the generated video. Helps exclude artifacts, distortions, or unwanted visual elements. |
| enable_prompt_expansion | boolean | No | true | When true, the model enhances the provided prompt with contextual details for richer output. Disable if you require strict prompt adherence. |
| enable_safety_checker | boolean | No | true | When true, enables content safety filtering to block inappropriate or harmful output. Disable only in controlled environments. |
Minimum Request
{
"prompt": "A cinematic beach portrait that evolves into an energy-charged scene. Photorealistic, stable identity matching the reference image, natural lighting, smooth cinematic motion, no subtitles.\n\nShot 1 [0-4s] Continue from the first frame of the reference image. The man stands on a sunny beach wearing a black t-shirt with glowing blue flame graphics. Gentle ocean waves move behind him and wind lightly moves his hair and shirt. The blue flame design on the shirt begins to softly glow and flicker like living energy.\n\nShot 2 [4-8s] Slow cinematic push-in toward the subject. The glowing blue flames on the shirt animate and flow upward like magical energy. Subtle particles and light streaks appear around the flame pattern. The ocean sparkles in the sunlight while waves roll naturally in the background.\n\nShot 3 [8-12s] Hard cinematic cut to a slightly closer angle. The blue flames briefly expand outward as luminous energy patterns around the torso before settling back onto the shirt. The wind becomes slightly stronger, moving the shirt fabric and hair while the beach environment remains realistic.\n\nShot 4 [12-15s] Final cinematic close shot. The flames stabilize into a calm glowing pattern on the shirt while the subject stands confidently against the horizon. The camera slowly drifts sideways with warm sunlight reflecting off the ocean, ending in a clean photorealistic frame.",
"image_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/input_model.png"
}
Full Request (all options)
{
"prompt": "A cinematic beach portrait that evolves into an energy-charged scene. Photorealistic, stable identity matching the reference image, natural lighting, smooth cinematic motion, no subtitles.\n\nShot 1 [0-4s] Continue from the first frame of the reference image. The man stands on a sunny beach wearing a black t-shirt with glowing blue flame graphics. Gentle ocean waves move behind him and wind lightly moves his hair and shirt. The blue flame design on the shirt begins to softly glow and flicker like living energy.\n\nShot 2 [4-8s] Slow cinematic push-in toward the subject. The glowing blue flames on the shirt animate and flow upward like magical energy. Subtle particles and light streaks appear around the flame pattern. The ocean sparkles in the sunlight while waves roll naturally in the background.\n\nShot 3 [8-12s] Hard cinematic cut to a slightly closer angle. The blue flames briefly expand outward as luminous energy patterns around the torso before settling back onto the shirt. The wind becomes slightly stronger, moving the shirt fabric and hair while the beach environment remains realistic.\n\nShot 4 [12-15s] Final cinematic close shot. The flames stabilize into a calm glowing pattern on the shirt while the subject stands confidently against the horizon. The camera slowly drifts sideways with warm sunlight reflecting off the ocean, ending in a clean photorealistic frame.",
"image_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/input_model.png",
"resolution": "1080p",
"duration": "15",
"audio_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/gemini-music/lyria-1771923124229-veu9ens.wav",
"negative_prompt": "low resolution, error, worst quality, low quality, defects, distorted face, extra limbs, flickering, unstable identity",
"enable_prompt_expansion": true,
"enable_safety_checker": true
}
Response
Wan 2.6 Image to Video (Flash) API Pricing
| Resolution | Duration | Price (USD) |
|---|---|---|
| Image/Text to Video | 5s | $0.75 |
| Image/Text to Video | 10s | $1.5 |
| Image/Text to Video | 15s | $2.25 |
Wan 2.5 Image to Image (Image Editing) API Documentation
https://gateway.pixazo.ai/wan-image-2-5/v1
Authentication
All requests require an API key passed via header.
| Header | Type | Required | Description |
|---|---|---|---|
| Ocp-Apim-Subscription-Key | string | Yes | Your API subscription key |
Generate Image to Image - Wan 2.5 Image Generation
Request Code
POST https://gateway.pixazo.ai/wan-image-2-5/v1/generateEditImage2-5Request
Content-Type: application/json
Cache-Control: no-cache
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY
{
"prompt": "Replace the floral dress with a vintage-style lace gown that has delicate embroidery on the collar and cuffs",
"images": [
"https://example.com/images/woman-in-dress.jpg"
],
"size": "1280*1280"
}
import requests
import json
url = "https://gateway.pixazo.ai/wan-image-2-5/v1/generateEditImage2-5Request"
headers = {
"Content-Type": "application/json",
"Cache-Control": "no-cache",
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
}
data = {
"prompt": "Replace the floral dress with a vintage-style lace gown that has delicate embroidery on the collar and cuffs",
"images": ["https://example.com/images/woman-in-dress.jpg"],
"size": "1280*1280"
}
response = requests.post(url, headers=headers, data=json.dumps(data))
print(response.json())
const url = 'https://gateway.pixazo.ai/wan-image-2-5/v1/generateEditImage2-5Request';
const data = {
prompt: 'Replace the floral dress with a vintage-style lace gown that has delicate embroidery on the collar and cuffs',
images: ['https://example.com/images/woman-in-dress.jpg'],
size: '1280*1280'
};
fetch(url, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Cache-Control': 'no-cache',
'Ocp-Apim-Subscription-Key': 'YOUR_SUBSCRIPTION_KEY'
},
body: JSON.stringify(data)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
curl -v -X POST "https://gateway.pixazo.ai/wan-image-2-5/v1/generateEditImage2-5Request" \
-H "Content-Type: application/json" \
-H "Cache-Control: no-cache" \
-H "Ocp-Apim-Subscription-Key: XXXXXXXXXXXXXXXXXXXXXXX" \
--data-raw '{
"prompt": "Replace the floral dress with a vintage-style lace gown that has delicate embroidery on the collar and cuffs",
"images": [
"https://example.com/images/woman-in-dress.jpg"
],
"size": "1280*1280"
}'
Output
{
"request_id": "wan-2-5-image-generation_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/wan-2-5-image-generation_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
Webhook (Optional)
Add the X-Webhook-URL header to your generate request to receive a POST callback instead of polling.
X-Webhook-URL: https://your-server.com/webhook/callback
Request Parameters - Generate Image to Image
| Parameter | Required | Type | Description |
|---|---|---|---|
| prompt | Yes | string | Text description of the editing operation to perform. |
| images | Yes | array | Array of image URLs. Single image for editing, multiple images for fusion. |
| negative_prompt | No | string | Default: null. Elements to exclude from the edited image. |
| size | No | string | Default: "1280*1280". Output image dimensions in width*height format. |
| n | No | integer | Default: 1. Number of images to generate. Currently only 1 is supported. |
| seed | No | integer | Random seed for reproducible results |
Example Request
{
"prompt": "Replace the floral dress with a vintage-style lace gown that has delicate embroidery on the collar and cuffs",
"images": [
"https://example.com/images/woman-in-dress.jpg"
],
"size": "1280*1280"
}
Response
{
"request_id": "wan-2-5-image-generation_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/wan-2-5-image-generation_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
Request Headers
| Header | Value |
|---|---|
| Content-Type | application/json |
| Cache-Control | no-cache |
| Ocp-Apim-Subscription-Key | YOUR_SUBSCRIPTION_KEY |
Response Handling
Common status codes.
| Code | Meaning |
|---|---|
| 202 | Accepted — Request queued |
| 400 | Bad Request |
| 401 | Unauthorized |
| 402 | Insufficient Balance |
| 403 | Forbidden |
| 429 | Too Many Requests |
| 500 | Internal Server Error |
Error Responses
Queue system errors and model validation errors.
Queue System Errors
// 402 — Insufficient balance
{
"error": "Insufficient Balance",
"message": "Your wallet does not have enough balance."
}
// 400 — Model not found
{
"error": "Model not found",
"message": "Model 'wan-2-5-image-generation' not found or is disabled"
}
Error via Status/Webhook
{
"request_id": "wan-2-5-image-generation_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "wan-2-5-image-generation",
"error": "Description of the error",
"output": null
}
Retrieving Results
Poll the universal status endpoint to check progress and retrieve results.
Endpoint
GET https://gateway.pixazo.ai/v2/requests/status/{request_id}
Ocp-Apim-Subscription-Key: YOUR_API_KEY
cURL Example
curl -H "Ocp-Apim-Subscription-Key: YOUR_API_KEY" \
"https://gateway.pixazo.ai/v2/requests/status/wan-2-5-image-generation_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
Response (Completed)
{
"request_id": "wan-2-5-image-generation_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "wan-2-5-image-generation",
"error": null,
"output": {
"media_url": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/wan-2-5-image-generation_019dxxxx-xxxx/output.ext"
],
"media_type": "application/octet-stream"
},
"created_at": "2026-03-31T10:00:00.000Z",
"updated_at": "2026-03-31T10:00:15.000Z",
"completed_at": "2026-03-31T10:00:15.000Z"
}
Response Fields
| Field | Type | Description |
|---|---|---|
| request_id | string | Unique request identifier |
| status | string | QUEUED, PROCESSING, COMPLETED, FAILED, or ERROR |
| model_id | string | Model that processed the request |
| error | string|null | Error message if failed |
| output.media_url | array | URLs to generated media (R2 CDN) |
| output.media_type | string | MIME type of the output |
| created_at | string | When request was created |
| completed_at | string|null | When request completed |
| polling_url | string | Status URL (initial response only) |
Status Values
| Status | Description |
|---|---|
| QUEUED | Request accepted, waiting to be processed |
| PROCESSING | Being processed by the model |
| COMPLETED | Done — output contains the result |
| FAILED | Failed — check error field |
| ERROR | System error — not charged |
Status Flow
QUEUED → PROCESSING → COMPLETED
→ FAILED
→ ERROR
Typical Workflow
- Send a generate request to the API endpoint
- Save the
request_idfrom the response - Poll every 5-10 seconds:
GET /v2/requests/status/{request_id} - When
statusis"COMPLETED", download fromoutput.media_url
Tip: Use X-Webhook-URL header to get a callback instead of polling.
Wan 2.5 Image to Image (Image Editing) API Pricing
| Resolution | Price (USD) |
|---|---|
| All Resolution | $0.05 |
Wan 2.5 Text to Image API Documentation
https://gateway.pixazo.ai/wan-image-2-5/v1
Authentication
All requests require an API key passed via header.
| Header | Type | Required | Description |
|---|---|---|---|
| Ocp-Apim-Subscription-Key | string | Yes | Your API subscription key |
Generate Text to Image - Wan 2.5 Image Generation
Request Code
POST https://gateway.pixazo.ai/wan-image-2-5/v1/generateTextToImage2-5Request
Content-Type: application/json
Cache-Control: no-cache
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY
{
"prompt": "A beautiful flower shop with exquisite windows, a beautiful wooden door, and flowers on display",
"size": "1024*1024",
"prompt_extend": true,
"watermark": false
}
import requests
import json
url = "https://gateway.pixazo.ai/wan-image-2-5/v1/generateTextToImage2-5Request"
headers = {
"Content-Type": "application/json",
"Cache-Control": "no-cache",
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
}
data = {
"prompt": "A beautiful flower shop with exquisite windows, a beautiful wooden door, and flowers on display",
"size": "1024*1024",
"prompt_extend": True,
"watermark": False
}
response = requests.post(url, headers=headers, json=data)
print(response.json())
const url = 'https://gateway.pixazo.ai/wan-image-2-5/v1/generateTextToImage2-5Request';
const headers = {
'Content-Type': 'application/json',
'Cache-Control': 'no-cache',
'Ocp-Apim-Subscription-Key': 'YOUR_SUBSCRIPTION_KEY'
};
const data = {
prompt: 'A beautiful flower shop with exquisite windows, a beautiful wooden door, and flowers on display',
size: '1024*1024',
prompt_extend: true,
watermark: false
};
fetch(url, {
method: 'POST',
headers: headers,
body: JSON.stringify(data)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
curl -v -X POST "https://gateway.pixazo.ai/wan-image-2-5/v1/generateTextToImage2-5Request" \
-H "Content-Type: application/json" \
-H "Cache-Control: no-cache" \
-H "Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY" \
--data-raw '{
"prompt": "A beautiful flower shop with exquisite windows, a beautiful wooden door, and flowers on display",
"size": "1024*1024",
"prompt_extend": true,
"watermark": false
}'
Output
{
"request_id": "wan-2-5-image-generation_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/wan-2-5-image-generation_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
Webhook (Optional)
Add the X-Webhook-URL header to your generate request to receive a POST callback instead of polling.
X-Webhook-URL: https://your-server.com/webhook/callback
Request Parameters - Generate Text to Image
| Parameter | Required | Type | Description |
|---|---|---|---|
| prompt | Yes | string | Text description of the image to generate. Supports English and Chinese. |
| negative_prompt | No | string | Default: null. Elements to exclude from the image. |
| size | No | string | Default: "1024*1024". Image dimensions in width*height format. |
| n | No | integer | Default: 1. Number of images to generate. Currently only 1 is supported. |
| prompt_extend | No | boolean | Default: false. Enable intelligent prompt rewriting |
| watermark | No | boolean | Default: false. Add watermark to image |
| seed | No | integer | Random seed for reproducible results |
Example Request
{
"prompt": "A majestic mountain landscape at sunset, snow-capped peaks, golden light, photorealistic",
"size": "1440*960",
"prompt_extend": true,
"watermark": false
}
Response
{
"request_id": "wan-2-5-image-generation_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/wan-2-5-image-generation_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
Request Headers
| Header | Value |
|---|---|
| Content-Type | application/json |
| Cache-Control | no-cache |
| Ocp-Apim-Subscription-Key | YOUR_SUBSCRIPTION_KEY |
Response Handling
Common status codes.
| Code | Meaning |
|---|---|
| 202 | Accepted — Request queued |
| 400 | Bad Request |
| 401 | Unauthorized |
| 402 | Insufficient Balance |
| 403 | Forbidden |
| 429 | Too Many Requests |
| 500 | Internal Server Error |
Error Responses
Queue system errors and model validation errors.
Queue System Errors
// 402 — Insufficient balance
{
"error": "Insufficient Balance",
"message": "Your wallet does not have enough balance."
}
// 400 — Model not found
{
"error": "Model not found",
"message": "Model 'wan-2-5-image-generation' not found or is disabled"
}
Error via Status/Webhook
{
"request_id": "wan-2-5-image-generation_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "wan-2-5-image-generation",
"error": "Description of the error",
"output": null
}
Retrieving Results
Poll the universal status endpoint to check progress and retrieve results.
Endpoint
GET https://gateway.pixazo.ai/v2/requests/status/{request_id}
Ocp-Apim-Subscription-Key: YOUR_API_KEY
cURL Example
curl -H "Ocp-Apim-Subscription-Key: YOUR_API_KEY" \
"https://gateway.pixazo.ai/v2/requests/status/wan-2-5-image-generation_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
Response (Completed)
{
"request_id": "wan-2-5-image-generation_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "wan-2-5-image-generation",
"error": null,
"output": {
"media_url": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/wan-2-5-image-generation_019dxxxx-xxxx/output.ext"
],
"media_type": "application/octet-stream"
},
"created_at": "2026-03-31T10:00:00.000Z",
"updated_at": "2026-03-31T10:00:15.000Z",
"completed_at": "2026-03-31T10:00:15.000Z"
}
Response Fields
| Field | Type | Description |
|---|---|---|
| request_id | string | Unique request identifier |
| status | string | QUEUED, PROCESSING, COMPLETED, FAILED, or ERROR |
| model_id | string | Model that processed the request |
| error | string|null | Error message if failed |
| output.media_url | array | URLs to generated media (R2 CDN) |
| output.media_type | string | MIME type of the output |
| created_at | string | When request was created |
| completed_at | string|null | When request completed |
| polling_url | string | Status URL (initial response only) |
Status Values
| Status | Description |
|---|---|
| QUEUED | Request accepted, waiting to be processed |
| PROCESSING | Being processed by the model |
| COMPLETED | Done — output contains the result |
| FAILED | Failed — check error field |
| ERROR | System error — not charged |
Status Flow
QUEUED → PROCESSING → COMPLETED
→ FAILED
→ ERROR
Typical Workflow
- Send a generate request to the API endpoint
- Save the
request_idfrom the response - Poll every 5-10 seconds:
GET /v2/requests/status/{request_id} - When
statusis"COMPLETED", download fromoutput.media_url
Tip: Use X-Webhook-URL header to get a callback instead of polling.
Wan 2.5 Text to Image API Pricing
| Resolution | Price (USD) |
|---|---|
| All Resolution | $0.05 |
Wan 2.5 Image to Video API Documentation
https://gateway.pixazo.ai/wan-video-2-5/v1
Authentication
All requests require an API key passed via header.
| Header | Type | Required | Description |
|---|---|---|---|
| Ocp-Apim-Subscription-Key | string | Yes | Your API subscription key |
Generate Image To Video - Wan 2.5 Video Generation API
Request Code
POST https://gateway.pixazo.ai/wan-video-2-5/v1/generateImageToVideo2-5Request
Content-Type: application/json
Cache-Control: no-cache
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY
{
"img_url": "https://example.com/images/cat.png",
"prompt": "A cat running on the grass",
"resolution": "480P",
"duration": 5,
"audio": false,
"prompt_extend": true,
"watermark": false
}
import requests
url = "https://gateway.pixazo.ai/wan-video-2-5/v1/generateImageToVideo2-5Request"
headers = {
"Content-Type": "application/json",
"Cache-Control": "no-cache",
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
}
data = {
"img_url": "https://example.com/images/cat.png",
"prompt": "A cat running on the grass",
"resolution": "480P",
"duration": 5,
"audio": False,
"prompt_extend": True,
"watermark": False
}
response = requests.post(url, json=data, headers=headers)
print(response.json())
const url = 'https://gateway.pixazo.ai/wan-video-2-5/v1/generateImageToVideo2-5Request';
const headers = {
'Content-Type': 'application/json',
'Cache-Control': 'no-cache',
'Ocp-Apim-Subscription-Key': 'YOUR_SUBSCRIPTION_KEY'
};
const data = {
img_url: 'https://example.com/images/cat.png',
prompt: 'A cat running on the grass',
resolution: '480P',
duration: 5,
audio: false,
prompt_extend: true,
watermark: false
};
fetch(url, {
method: 'POST',
headers: headers,
body: JSON.stringify(data)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
curl -v -X POST "https://gateway.pixazo.ai/wan-video-2-5/v1/generateImageToVideo2-5Request" \
-H "Content-Type: application/json" \
-H "Cache-Control: no-cache" \
-H "Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY" \
--data-raw '{
"img_url": "https://example.com/images/cat.png",
"prompt": "A cat running on the grass",
"resolution": "480P",
"duration": 5,
"audio": false,
"prompt_extend": true,
"watermark": false
}'
Output
{
"request_id": "wan-image-to-video-2-5_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/wan-image-to-video-2-5_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
Webhook (Optional)
Add the X-Webhook-URL header to your generate request to receive a POST callback instead of polling.
X-Webhook-URL: https://your-server.com/webhook/callback
Request Parameters - Generate Image To Video
| Parameter | Required | Type | Description |
|---|---|---|---|
| img_url | Yes | string | URL to the first-frame image. Supports public URLs, Base64 encoding, or local file paths. |
| prompt | No | string | Text description of the video to generate. Supports English and Chinese. |
| negative_prompt | No | string | Default: null. Elements to exclude from the video. |
| audio_url | No | string | URL to custom audio file (overrides audio parameter). Takes priority over `audio` setting. |
| resolution | No | string | Default: "480P". Available resolutions: "480P", "720P", "1080P". Internally converted to size format. |
| duration | No | integer | Default: 5. Video length in seconds. Available values: 5, 10 |
| audio | No | boolean | Default: false. Audio behavior: false (silent), true (auto-generate audio) |
| prompt_extend | No | boolean | Default: true. Enable intelligent prompt rewriting |
| watermark | No | boolean | Default: false. Add watermark to video |
| seed | No | integer | Random seed for reproducible results |
Example Request
{
"img_url": "https://example.com/images/battle-scene.png",
"prompt": "An epic battle scene with dramatic music and sound effects",
"negative_prompt": "blurry, low quality, distorted",
"resolution": "1080P",
"duration": 10,
"audio": true,
"prompt_extend": true,
"watermark": false,
"seed": 98765
}
Response
{
"request_id": "wan-image-to-video-2-5_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/wan-image-to-video-2-5_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
Request Headers
| Header | Value |
|---|---|
| Content-Type | application/json |
| Cache-Control | no-cache |
| Ocp-Apim-Subscription-Key | YOUR_SUBSCRIPTION_KEY |
Response Handling
Common status codes.
| Code | Meaning |
|---|---|
| 202 | Accepted — Request queued |
| 400 | Bad Request |
| 401 | Unauthorized |
| 402 | Insufficient Balance |
| 403 | Forbidden |
| 429 | Too Many Requests |
| 500 | Internal Server Error |
Error Responses
Queue system errors and model validation errors.
Queue System Errors
// 402 — Insufficient balance
{
"error": "Insufficient Balance",
"message": "Your wallet does not have enough balance."
}
// 400 — Model not found
{
"error": "Model not found",
"message": "Model 'wan-image-to-video-2-5' not found or is disabled"
}
Error via Status/Webhook
{
"request_id": "wan-image-to-video-2-5_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "wan-image-to-video-2-5",
"error": "Description of the error",
"output": null
}
Retrieving Results
Poll the universal status endpoint to check progress and retrieve results.
Endpoint
GET https://gateway.pixazo.ai/v2/requests/status/{request_id}
Ocp-Apim-Subscription-Key: YOUR_API_KEY
cURL Example
curl -H "Ocp-Apim-Subscription-Key: YOUR_API_KEY" \
"https://gateway.pixazo.ai/v2/requests/status/wan-image-to-video-2-5_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
Response (Completed)
{
"request_id": "wan-image-to-video-2-5_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "wan-image-to-video-2-5",
"error": null,
"output": {
"media_url": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/wan-image-to-video-2-5_019dxxxx-xxxx/output.ext"
],
"media_type": "application/octet-stream"
},
"created_at": "2026-03-31T10:00:00.000Z",
"updated_at": "2026-03-31T10:00:15.000Z",
"completed_at": "2026-03-31T10:00:15.000Z"
}
Response Fields
| Field | Type | Description |
|---|---|---|
| request_id | string | Unique request identifier |
| status | string | QUEUED, PROCESSING, COMPLETED, FAILED, or ERROR |
| model_id | string | Model that processed the request |
| error | string|null | Error message if failed |
| output.media_url | array | URLs to generated media (R2 CDN) |
| output.media_type | string | MIME type of the output |
| created_at | string | When request was created |
| completed_at | string|null | When request completed |
| polling_url | string | Status URL (initial response only) |
Status Values
| Status | Description |
|---|---|
| QUEUED | Request accepted, waiting to be processed |
| PROCESSING | Being processed by the model |
| COMPLETED | Done — output contains the result |
| FAILED | Failed — check error field |
| ERROR | System error — not charged |
Status Flow
QUEUED → PROCESSING → COMPLETED
→ FAILED
→ ERROR
Typical Workflow
- Send a generate request to the API endpoint
- Save the
request_idfrom the response - Poll every 5-10 seconds:
GET /v2/requests/status/{request_id} - When
statusis"COMPLETED", download fromoutput.media_url
Tip: Use X-Webhook-URL header to get a callback instead of polling.
Wan 2.5 Image to Video API Pricing
| Resolution | Price (USD) |
|---|---|
| All Resolution | $0.05 |
Wan 2.5 Text to Video API Documentation
https://gateway.pixazo.ai/wan-video-2-5/v1
Authentication
All requests require an API key passed via header.
| Header | Type | Required | Description |
|---|---|---|---|
| Ocp-Apim-Subscription-Key | string | Yes | Your API subscription key |
Generate Text To Video Request - Wan 2.5 Video Generation API
Request Code
POST https://gateway.pixazo.ai/wan-video-2-5/v1/generateTextToVideo2-5Request
Content-Type: application/json
Cache-Control: no-cache
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY
{
"prompt": "A beautiful sunset over a calm ocean with gentle waves",
"size": "832*480",
"duration": 5,
"audio": false,
"prompt_extend": true,
"watermark": false
}
import requests
url = "https://gateway.pixazo.ai/wan-video-2-5/v1/generateTextToVideo2-5Request"
headers = {
"Content-Type": "application/json",
"Cache-Control": "no-cache",
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
}
data = {
"prompt": "A beautiful sunset over a calm ocean with gentle waves",
"size": "832*480",
"duration": 5,
"audio": False,
"prompt_extend": True,
"watermark": False
}
response = requests.post(url, json=data, headers=headers)
print(response.json())
const url = 'https://gateway.pixazo.ai/wan-video-2-5/v1/generateTextToVideo2-5Request';
const headers = {
'Content-Type': 'application/json',
'Cache-Control': 'no-cache',
'Ocp-Apim-Subscription-Key': 'YOUR_SUBSCRIPTION_KEY'
};
const body = {
prompt: 'A beautiful sunset over a calm ocean with gentle waves',
size: '832*480',
duration: 5,
audio: false,
prompt_extend: true,
watermark: false
};
fetch(url, {
method: 'POST',
headers: headers,
body: JSON.stringify(body)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
curl -v -X POST "https://gateway.pixazo.ai/wan-video-2-5/v1/generateTextToVideo2-5Request" \
-H "Content-Type: application/json" \
-H "Cache-Control: no-cache" \
-H "Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY" \
--data-raw '{
"prompt": "A beautiful sunset over a calm ocean with gentle waves",
"size": "832*480",
"duration": 5,
"audio": false,
"prompt_extend": true,
"watermark": false
}'
Output
{
"request_id": "wan-image-to-video-2-5_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/wan-image-to-video-2-5_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
Webhook (Optional)
Add the X-Webhook-URL header to your generate request to receive a POST callback instead of polling.
X-Webhook-URL: https://your-server.com/webhook/callback
Request Parameters - Generate Text To Video Request
| Parameter | Required | Type | Description |
|---|---|---|---|
| prompt | Yes | string | Text description of the video to generate. Supports English and Chinese. |
| negative_prompt | No | string | Default: null. Elements to exclude from the video. |
| audio_url | No | string | URL to custom audio file (overrides audio parameter). Takes priority over `audio` setting. |
| size | No | string | Default: "832*480". Available resolutions: "832*480", "1280*720", "1920*1080" |
| duration | No | integer | Default: 5. Video length in seconds. Available values: 5, 10 |
| audio | No | boolean | Default: false. Audio behavior: false (silent), true (auto-generate audio) |
| prompt_extend | No | boolean | Default: true. Enable intelligent prompt rewriting |
| watermark | No | boolean | Default: false. Add watermark to video |
| seed | No | integer | Random seed for reproducible results |
Example Request
{
"prompt": "A beautiful sunset over a calm ocean with gentle waves",
"size": "832*480",
"duration": 5,
"audio": false,
"prompt_extend": true,
"watermark": false
}
Response
{
"request_id": "wan-image-to-video-2-5_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/wan-image-to-video-2-5_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
Request Headers
| Header | Value |
|---|---|
| Content-Type | application/json |
| Cache-Control | no-cache |
| Ocp-Apim-Subscription-Key | YOUR_SUBSCRIPTION_KEY |
Response Handling
Common status codes.
| Code | Meaning |
|---|---|
| 202 | Accepted — Request queued |
| 400 | Bad Request |
| 401 | Unauthorized |
| 402 | Insufficient Balance |
| 403 | Forbidden |
| 429 | Too Many Requests |
| 500 | Internal Server Error |
Error Responses
Queue system errors and model validation errors.
Queue System Errors
// 402 — Insufficient balance
{
"error": "Insufficient Balance",
"message": "Your wallet does not have enough balance."
}
// 400 — Model not found
{
"error": "Model not found",
"message": "Model 'wan-image-to-video-2-5' not found or is disabled"
}
Error via Status/Webhook
{
"request_id": "wan-image-to-video-2-5_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "wan-image-to-video-2-5",
"error": "Description of the error",
"output": null
}
Retrieving Results
Poll the universal status endpoint to check progress and retrieve results.
Endpoint
GET https://gateway.pixazo.ai/v2/requests/status/{request_id}
Ocp-Apim-Subscription-Key: YOUR_API_KEY
cURL Example
curl -H "Ocp-Apim-Subscription-Key: YOUR_API_KEY" \
"https://gateway.pixazo.ai/v2/requests/status/wan-image-to-video-2-5_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
Response (Completed)
{
"request_id": "wan-image-to-video-2-5_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "wan-image-to-video-2-5",
"error": null,
"output": {
"media_url": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/wan-image-to-video-2-5_019dxxxx-xxxx/output.ext"
],
"media_type": "application/octet-stream"
},
"created_at": "2026-03-31T10:00:00.000Z",
"updated_at": "2026-03-31T10:00:15.000Z",
"completed_at": "2026-03-31T10:00:15.000Z"
}
Response Fields
| Field | Type | Description |
|---|---|---|
| request_id | string | Unique request identifier |
| status | string | QUEUED, PROCESSING, COMPLETED, FAILED, or ERROR |
| model_id | string | Model that processed the request |
| error | string|null | Error message if failed |
| output.media_url | array | URLs to generated media (R2 CDN) |
| output.media_type | string | MIME type of the output |
| created_at | string | When request was created |
| completed_at | string|null | When request completed |
| polling_url | string | Status URL (initial response only) |
Status Values
| Status | Description |
|---|---|
| QUEUED | Request accepted, waiting to be processed |
| PROCESSING | Being processed by the model |
| COMPLETED | Done — output contains the result |
| FAILED | Failed — check error field |
| ERROR | System error — not charged |
Status Flow
QUEUED → PROCESSING → COMPLETED
→ FAILED
→ ERROR
Typical Workflow
- Send a generate request to the API endpoint
- Save the
request_idfrom the response - Poll every 5-10 seconds:
GET /v2/requests/status/{request_id} - When
statusis"COMPLETED", download fromoutput.media_url
Tip: Use X-Webhook-URL header to get a callback instead of polling.
Wan 2.5 Text to Video API Pricing
| Resolution | Price (USD) |
|---|---|
| All Resolution | $0.05 |
Wan 2.5 Image to Video API Documentation
https://gateway.pixazo.ai/pixazo-wan-image-to-video-1763709522/v1
Authentication
All requests require an API key passed via header.
| Header | Type | Required | Description |
|---|---|---|---|
| Ocp-Apim-Subscription-Key | string | Yes | Your API subscription key |
Generate Request - Pixazo Wan Image to Video API
Request Code
POST https://gateway.pixazo.ai/pixazo-wan-image-to-video-1763709522/v1/pixazo-wan-image-to-video-request
Content-Type: application/json
Cache-Control: no-cache
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY
{
"prompt": "A stylish man walks down a sea side",
"image_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/input_model.png"
}
import requests
url = "https://gateway.pixazo.ai/pixazo-wan-image-to-video-1763709522/v1/pixazo-wan-image-to-video-request"
headers = {
"Content-Type": "application/json",
"Cache-Control": "no-cache",
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
}
data = {
"prompt": "A stylish man walks down a sea side",
"image_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/input_model.png"
}
response = requests.post(url, json=data, headers=headers)
print(response.json())
const url = 'https://gateway.pixazo.ai/pixazo-wan-image-to-video-1763709522/v1/pixazo-wan-image-to-video-request';
const headers = {
'Content-Type': 'application/json',
'Cache-Control': 'no-cache',
'Ocp-Apim-Subscription-Key': 'YOUR_SUBSCRIPTION_KEY'
};
const body = {
prompt: 'A stylish man walks down a sea side',
image_url: 'https://pub-582b7213209642b9b995c96c95a30381.r2.dev/input_model.png'
};
fetch(url, {
method: 'POST',
headers: headers,
body: JSON.stringify(body)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
curl -X POST "https://gateway.pixazo.ai/pixazo-wan-image-to-video-1763709522/v1/pixazo-wan-image-to-video-request" \
-H "Content-Type: application/json" \
-H "Cache-Control: no-cache" \
-H "Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY" \
--data-raw '{
"prompt": "A stylish man walks down a sea side",
"image_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/input_model.png"
}'
Output
{
"request_id": "pixazo-wan-image-to-video-1763709522_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/pixazo-wan-image-to-video-1763709522_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
Webhook (Optional)
Add the X-Webhook-URL header to your generate request to receive a POST callback instead of polling.
X-Webhook-URL: https://your-server.com/webhook/callback
Request Parameters - Generate Request
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
| prompt | string | Yes | — | A detailed text description of the desired motion and scene context. The model uses this to animate the image. |
| image_url | string | Yes | — | Publicly accessible HTTPS URL pointing to a static image (JPEG, PNG, WebP). The image will be animated according to the prompt. |
Minimum Request
{
"prompt": "A stylish man walks down a sea side",
"image_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/input_model.png"
}
Full Request (all options)
{
"prompt": "A stylish man walks down a sea side",
"image_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/input_model.png"
}
Response
{
"request_id": "pixazo-wan-image-to-video-1763709522_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/pixazo-wan-image-to-video-1763709522_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
Request Headers
| Header | Value |
|---|---|
| Content-Type | application/json |
| Cache-Control | no-cache |
| Ocp-Apim-Subscription-Key | Your subscription key |
Response Handling
Common status codes for Generate Request.
| Code | Meaning |
|---|---|
| 202 | Accepted — Request queued |
| 400 | Bad Request |
| 401 | Unauthorized |
| 403 | Forbidden |
| 404 | Not Found |
| 429 | Too Many Requests |
| 500 | Internal Server Error |
Response Fields - Check Status
| Field | Type | Description | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| video | object | Object containing video metadata and download URL | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| video.file_size | integer | Size of the video file in bytes | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| video.file_name | string | Name of the generated video file | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| video.content_type | string | MIME type of the video file | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Code | Meaning |
|---|---|
| 202 | Accepted — Request queued |
| 400 | Bad Request |
| 401 | Unauthorized |
| 402 | Insufficient Balance |
| 403 | Forbidden |
| 429 | Too Many Requests |
| 500 | Internal Server Error |
Error Responses
Queue system errors and model validation errors.
Queue System Errors
// 402 — Insufficient balance
{
"error": "Insufficient Balance",
"message": "Your wallet does not have enough balance."
}
// 400 — Model not found
{
"error": "Model not found",
"message": "Model 'pixazo-wan-image-to-video-1763709522' not found or is disabled"
}
Error via Status/Webhook
{
"request_id": "pixazo-wan-image-to-video-1763709522_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "pixazo-wan-image-to-video-1763709522",
"error": "Description of the error",
"output": null
}
Retrieving Results
Poll the universal status endpoint to check progress and retrieve results.
Endpoint
GET https://gateway.pixazo.ai/v2/requests/status/{request_id}
Ocp-Apim-Subscription-Key: YOUR_API_KEY
cURL Example
curl -H "Ocp-Apim-Subscription-Key: YOUR_API_KEY" \
"https://gateway.pixazo.ai/v2/requests/status/pixazo-wan-image-to-video-1763709522_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
Response (Completed)
{
"request_id": "pixazo-wan-image-to-video-1763709522_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "pixazo-wan-image-to-video-1763709522",
"error": null,
"output": {
"media_url": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/pixazo-wan-image-to-video-1763709522_019dxxxx-xxxx/output.ext"
],
"media_type": "application/octet-stream"
},
"created_at": "2026-03-31T10:00:00.000Z",
"updated_at": "2026-03-31T10:00:15.000Z",
"completed_at": "2026-03-31T10:00:15.000Z"
}
Response Fields
| Field | Type | Description |
|---|---|---|
| request_id | string | Unique request identifier |
| status | string | QUEUED, PROCESSING, COMPLETED, FAILED, or ERROR |
| model_id | string | Model that processed the request |
| error | string|null | Error message if failed |
| output.media_url | array | URLs to generated media (R2 CDN) |
| output.media_type | string | MIME type of the output |
| created_at | string | When request was created |
| completed_at | string|null | When request completed |
| polling_url | string | Status URL (initial response only) |
Status Values
| Status | Description |
|---|---|
| QUEUED | Request accepted, waiting to be processed |
| PROCESSING | Being processed by the model |
| COMPLETED | Done — output contains the result |
| FAILED | Failed — check error field |
| ERROR | System error — not charged |
Status Flow
QUEUED → PROCESSING → COMPLETED
→ FAILED
→ ERROR
Typical Workflow
- Send a generate request to the API endpoint
- Save the
request_idfrom the response - Poll every 5-10 seconds:
GET /v2/requests/status/{request_id} - When
statusis"COMPLETED", download fromoutput.media_url
Tip: Use X-Webhook-URL header to get a callback instead of polling.
Wan 2.5 Image to Video API Pricing
| Resolution | Price (USD) |
|---|---|
| All Resolution | $0.05 |
Wan 2.2 Audio to Video (Ref Audio to Video) API Documentation
https://gateway.pixazo.ai/wan2.2-s2v/v1
Authentication
All requests require an API key passed via header.
| Header | Type | Required | Description |
|---|---|---|---|
| Ocp-Apim-Subscription-Key | string | Yes | Your API subscription key |
Speech to Video Request - Wan 2.2 14B Speech to Video
Request Code
POST https://gateway.pixazo.ai/wan2.2-s2v/v1/generateSpeechToVideoRequest
Content-Type: application/json
Cache-Control: no-cache
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY
{
"prompt": "Summer beach vacation style, a man wearing sunglasses Blue Tshirt.",
"image_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/input_model.png",
"audio_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/input_music.mp3"
}
import requests
import json
url = "https://gateway.pixazo.ai/wan2.2-s2v/v1/generateSpeechToVideoRequest"
headers = {
"Content-Type": "application/json",
"Cache-Control": "no-cache",
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
}
data = {
"prompt": "Summer beach vacation style, a man wearing sunglasses Blue Tshirt.",
"image_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/input_model.png",
"audio_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/input_music.mp3"
}
response = requests.post(url, headers=headers, data=json.dumps(data))
print(response.json())
const url = 'https://gateway.pixazo.ai/wan2.2-s2v/v1/generateSpeechToVideoRequest';
const headers = {
'Content-Type': 'application/json',
'Cache-Control': 'no-cache',
'Ocp-Apim-Subscription-Key': 'YOUR_SUBSCRIPTION_KEY'
};
const data = {
prompt: 'Summer beach vacation style, a man wearing sunglasses Blue Tshirt.',
image_url: 'https://pub-582b7213209642b9b995c96c95a30381.r2.dev/input_model.png',
audio_url: 'https://pub-582b7213209642b9b995c96c95a30381.r2.dev/input_music.mp3'
};
fetch(url, {
method: 'POST',
headers: headers,
body: JSON.stringify(data)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
curl -v -X POST "https://gateway.pixazo.ai/wan2.2-s2v/v1/generateSpeechToVideoRequest" \
-H "Content-Type: application/json" \
-H "Cache-Control: no-cache" \
-H "Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY" \
--data-raw '{
"prompt": "Summer beach vacation style, a man wearing sunglasses Blue Tshirt.",
"image_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/input_model.png",
"audio_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/input_music.mp3"
}'
Output
{
"request_id": "wan-2-2-14b-speech-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/wan-2-2-14b-speech-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
Webhook (Optional)
Add the X-Webhook-URL header to your generate request to receive a POST callback instead of polling.
X-Webhook-URL: https://your-server.com/webhook/callback
Request Parameters - Speech to Video Request
| Parameter | Required | Type | Description |
|---|---|---|---|
| prompt | Yes | string | The text prompt used for video generation. Describes the style and content for the generated video. |
| image_url | Yes | string | URL of the input image. If the input image does not match the chosen aspect ratio, it is resized and center cropped. |
| audio_url | Yes | string | The URL of the audio file that will be used to generate lip-sync and facial expressions in the video. |
| negative_prompt | No | string | Negative prompt for video generation. Default: "". Used to steer the generation away from unwanted features. |
| seed | No | integer | Random seed for reproducibility. If not provided, a random seed is chosen. |
| resolution | No | string | Resolution of the generated video. Default: "480p". Available values: "480p", "580p", "720p". |
| num_inference_steps | No | integer | Number of inference steps for sampling. Higher values give better quality but take longer. Default: 27. |
| enable_safety_checker | No | boolean | If set to true, input data will be checked for safety before processing. |
| guidance_scale | No | float | Classifier-free guidance scale. Higher values give better adherence to the prompt but may decrease quality. Default: 3.5. |
| shift | No | float | Shift value for the video. Must be between 1.0 and 10.0. Default: 5. |
| video_quality | No | string | The quality of the output video. Higher quality means better visual quality but larger file size. Default: "high". Values: "low", "medium", "high", "maximum". |
| video_write_mode | No | string | The write mode of the output video. Default: "balanced". Values: "fast" (faster results, larger file), "balanced" (compromise), "small" (slowest, smallest file). |
Example Request
{
"prompt": "Summer beach vacation style, a man wearing sunglasses Blue Tshirt.",
"image_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/input_model.png",
"audio_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/input_music.mp3"
}
Response
{
"request_id": "wan-2-2-14b-speech-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/wan-2-2-14b-speech-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
Request Headers
| Header | Value |
|---|---|
| Content-Type | application/json |
| Cache-Control | no-cache |
| Ocp-Apim-Subscription-Key | YOUR_SUBSCRIPTION_KEY |
Response Handling
Common status codes.
| Code | Meaning |
|---|---|
| 202 | Accepted — Request queued |
| 400 | Bad Request |
| 401 | Unauthorized |
| 402 | Insufficient Balance |
| 403 | Forbidden |
| 429 | Too Many Requests |
| 500 | Internal Server Error |
Error Responses
Queue system errors and model validation errors.
Queue System Errors
// 402 — Insufficient balance
{
"error": "Insufficient Balance",
"message": "Your wallet does not have enough balance."
}
// 400 — Model not found
{
"error": "Model not found",
"message": "Model 'wan-2-2-14b-speech-to-video' not found or is disabled"
}
Error via Status/Webhook
{
"request_id": "wan-2-2-14b-speech-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "wan-2-2-14b-speech-to-video",
"error": "Description of the error",
"output": null
}
Retrieving Results
Poll the universal status endpoint to check progress and retrieve results.
Endpoint
GET https://gateway.pixazo.ai/v2/requests/status/{request_id}
Ocp-Apim-Subscription-Key: YOUR_API_KEY
cURL Example
curl -H "Ocp-Apim-Subscription-Key: YOUR_API_KEY" \
"https://gateway.pixazo.ai/v2/requests/status/wan-2-2-14b-speech-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
Response (Completed)
{
"request_id": "wan-2-2-14b-speech-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "wan-2-2-14b-speech-to-video",
"error": null,
"output": {
"media_url": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/wan-2-2-14b-speech-to-video_019dxxxx-xxxx/output.ext"
],
"media_type": "application/octet-stream"
},
"created_at": "2026-03-31T10:00:00.000Z",
"updated_at": "2026-03-31T10:00:15.000Z",
"completed_at": "2026-03-31T10:00:15.000Z"
}
Response Fields
| Field | Type | Description |
|---|---|---|
| request_id | string | Unique request identifier |
| status | string | QUEUED, PROCESSING, COMPLETED, FAILED, or ERROR |
| model_id | string | Model that processed the request |
| error | string|null | Error message if failed |
| output.media_url | array | URLs to generated media (R2 CDN) |
| output.media_type | string | MIME type of the output |
| created_at | string | When request was created |
| completed_at | string|null | When request completed |
| polling_url | string | Status URL (initial response only) |
Status Values
| Status | Description |
|---|---|
| QUEUED | Request accepted, waiting to be processed |
| PROCESSING | Being processed by the model |
| COMPLETED | Done — output contains the result |
| FAILED | Failed — check error field |
| ERROR | System error — not charged |
Status Flow
QUEUED → PROCESSING → COMPLETED
→ FAILED
→ ERROR
Typical Workflow
- Send a generate request to the API endpoint
- Save the
request_idfrom the response - Poll every 5-10 seconds:
GET /v2/requests/status/{request_id} - When
statusis"COMPLETED", download fromoutput.media_url
Tip: Use X-Webhook-URL header to get a callback instead of polling.
Wan 2.2 Audio to Video (Ref Audio to Video) API Pricing
No data available
Could not load current pricing
Wan 2.2 Audio to Video (Ref Image + Ref Audio to Video — Animate) API Documentation
https://gateway.pixazo.ai/wan-2-2-animate-api-524/v1
Authentication
All requests require an API key passed via header.
| Header | Type | Required | Description |
|---|---|---|---|
| Ocp-Apim-Subscription-Key | string | Yes | Your API subscription key |
Generate Request - Wan 2.2 Animate
Request Code
POST /wan-2-2-animate-api-request HTTP/1.1
Host: gateway.pixazo.ai
Content-Type: application/json
Cache-Control: no-cache
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY
{
"video_url": "https://example.com/motion-source.mp4",
"image_url": "https://example.com/target-image.png"
}
import requests
url = "https://gateway.pixazo.ai/wan-2-2-animate-api-524/v1/wan-2-2-animate-api-request"
headers = {
"Content-Type": "application/json",
"Cache-Control": "no-cache",
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
}
data = {
"video_url": "https://example.com/motion-source.mp4",
"image_url": "https://example.com/target-image.png"
}
response = requests.post(url, json=data, headers=headers)
print(response.json())
const url = "https://gateway.pixazo.ai/wan-2-2-animate-api-524/v1/wan-2-2-animate-api-request";
const headers = {
"Content-Type": "application/json",
"Cache-Control": "no-cache",
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
};
const data = {
video_url: "https://example.com/motion-source.mp4",
image_url: "https://example.com/target-image.png"
};
fetch(url, {
method: "POST",
headers: headers,
body: JSON.stringify(data)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error("Error:", error));
curl -X POST "https://gateway.pixazo.ai/wan-2-2-animate-api-524/v1/wan-2-2-animate-api-request" \
-H "Content-Type: application/json" \
-H "Cache-Control: no-cache" \
-H "Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY" \
--data-raw '{
"video_url": "https://example.com/motion-source.mp4",
"image_url": "https://example.com/target-image.png"
}'
Output
{
"request_id": "wan-2-2-animate-api-524_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/wan-2-2-animate-api-524_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
Webhook (Optional)
Add the X-Webhook-URL header to your generate request to receive a POST callback instead of polling.
X-Webhook-URL: https://your-server.com/webhook/callback
Request Parameters - Generate Request
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
| video_url | string | Yes | — | URL pointing to a video file that will serve as the motion source. The API extracts motion patterns from this video to animate the target image. |
| image_url | string | Yes | — | URL pointing to a static image that will be animated using the motion from the video. Must be a valid, publicly accessible image (PNG, JPEG, etc.). |
Minimum Request
{
"video_url": "https://example.com/motion-source.mp4",
"image_url": "https://example.com/target-image.png"
}
Full Request (all options)
{
"video_url": "https://example.com/motion-source.mp4",
"image_url": "https://example.com/target-image.png"
}
Response
{
"request_id": "wan-2-2-animate-api-524_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/wan-2-2-animate-api-524_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
Request Headers
| Header | Value |
|---|---|
| Content-Type | application/json |
| Cache-Control | no-cache |
| Ocp-Apim-Subscription-Key | Your API subscription key |
Response Handling
Common status codes for Generate Request.
| Code | Meaning |
|---|---|
| 202 | Accepted — Request queued |
| 400 | Bad Request |
| 401 | Unauthorized |
| 403 | Forbidden |
| 404 | Not Found |
| 429 | Too Many Requests |
| 500 | Internal Server Error |
Status Flow
Polling status values for async processing.
| Status | Description |
|---|---|
| IN_QUEUE | Request is queued and waiting to be processed |
| IN_PROGRESS | Request is currently being processed, animation rendering in progress |
| COMPLETED | Request completed successfully, animation output is ready |
| FAILED | Request failed due to invalid input, resource timeout, or system error |
Status Flow
IN_QUEUE → IN_PROGRESS → [COMPLETED or FAILED]
Typical Workflow
- Submit request to /wan-2-2-animate-api-request with video_url and image_url
- Receive response containing request_id
- Poll /wan-2-2-animate-api-request-result every 2-5 seconds using request_id
- When status is COMPLETED, extract animation URL from response
- Use the animation URL to display or download the generated video
Response Handling
Common status codes.
| Code | Meaning |
|---|---|
| 202 | Accepted — Request queued |
| 400 | Bad Request |
| 401 | Unauthorized |
| 402 | Insufficient Balance |
| 403 | Forbidden |
| 429 | Too Many Requests |
| 500 | Internal Server Error |
Error Responses
Queue system errors and model validation errors.
Queue System Errors
// 402 — Insufficient balance
{
"error": "Insufficient Balance",
"message": "Your wallet does not have enough balance."
}
// 400 — Model not found
{
"error": "Model not found",
"message": "Model 'wan-2-2-animate-api-524' not found or is disabled"
}
Error via Status/Webhook
{
"request_id": "wan-2-2-animate-api-524_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "wan-2-2-animate-api-524",
"error": "Description of the error",
"output": null
}
Retrieving Results
Poll the universal status endpoint to check progress and retrieve results.
Endpoint
GET https://gateway.pixazo.ai/v2/requests/status/{request_id}
Ocp-Apim-Subscription-Key: YOUR_API_KEY
cURL Example
curl -H "Ocp-Apim-Subscription-Key: YOUR_API_KEY" \
"https://gateway.pixazo.ai/v2/requests/status/wan-2-2-animate-api-524_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
Response (Completed)
{
"request_id": "wan-2-2-animate-api-524_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "wan-2-2-animate-api-524",
"error": null,
"output": {
"media_url": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/wan-2-2-animate-api-524_019dxxxx-xxxx/output.ext"
],
"media_type": "application/octet-stream"
},
"created_at": "2026-03-31T10:00:00.000Z",
"updated_at": "2026-03-31T10:00:15.000Z",
"completed_at": "2026-03-31T10:00:15.000Z"
}
Response Fields
| Field | Type | Description |
|---|---|---|
| request_id | string | Unique request identifier |
| status | string | QUEUED, PROCESSING, COMPLETED, FAILED, or ERROR |
| model_id | string | Model that processed the request |
| error | string|null | Error message if failed |
| output.media_url | array | URLs to generated media (R2 CDN) |
| output.media_type | string | MIME type of the output |
| created_at | string | When request was created |
| completed_at | string|null | When request completed |
| polling_url | string | Status URL (initial response only) |
Status Values
| Status | Description |
|---|---|
| QUEUED | Request accepted, waiting to be processed |
| PROCESSING | Being processed by the model |
| COMPLETED | Done — output contains the result |
| FAILED | Failed — check error field |
| ERROR | System error — not charged |
Status Flow
QUEUED → PROCESSING → COMPLETED
→ FAILED
→ ERROR
Typical Workflow
- Send a generate request to the API endpoint
- Save the
request_idfrom the response - Poll every 5-10 seconds:
GET /v2/requests/status/{request_id} - When
statusis"COMPLETED", download fromoutput.media_url
Tip: Use X-Webhook-URL header to get a callback instead of polling.
Wan 2.2 Audio to Video (Ref Image + Ref Audio to Video — Animate) API Pricing
| Resolution | Price (USD) |
|---|---|
| All Resolution | $0.4 |
Wan 2.2 Image to Video (First Frame to Video) API Documentation
https://gateway.pixazo.ai/wan-i2v/v1
Authentication
All requests require an API key passed via header.
| Header | Type | Required | Description |
|---|---|---|---|
| Ocp-Apim-Subscription-Key | string | Yes | Your API subscription key |
Wan Image to Video First Frame - Wan Image to Video API
Request Code
POST https://gateway.pixazo.ai/wan-i2v/v1/generateImageToVideoRequest
Content-Type: application/json
Cache-Control: no-cache
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY
{
"model": "wan2.2-i2v-plus",
"input": {
"prompt": "Banana dancing in a traditional dress",
"negative_prompt": "flowers, blur",
"img_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/nano-banana.jpeg"
},
"parameters": {
"resolution": "1080P",
"duration": 5,
"prompt_extend": true,
"watermark": false,
"seed": 12345
}
}
import requests
url = "https://gateway.pixazo.ai/wan-i2v/v1/generateImageToVideoRequest"
headers = {
"Content-Type": "application/json",
"Cache-Control": "no-cache",
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
}
data = {
"model": "wan2.2-i2v-plus",
"input": {
"prompt": "Banana dancing in a traditional dress",
"negative_prompt": "flowers, blur",
"img_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/nano-banana.jpeg"
},
"parameters": {
"resolution": "1080P",
"duration": 5,
"prompt_extend": true,
"watermark": false,
"seed": 12345
}
}
response = requests.post(url, json=data, headers=headers)
print(response.json())
const url = 'https://gateway.pixazo.ai/wan-i2v/v1/generateImageToVideoRequest';
const data = {
model: 'wan2.2-i2v-plus',
input: {
prompt: 'Banana dancing in a traditional dress',
negative_prompt: 'flowers, blur',
img_url: 'https://pub-582b7213209642b9b995c96c95a30381.r2.dev/nano-banana.jpeg'
},
parameters: {
resolution: '1080P',
duration: 5,
prompt_extend: true,
watermark: false,
seed: 12345
}
};
fetch(url, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Cache-Control': 'no-cache',
'Ocp-Apim-Subscription-Key': 'YOUR_SUBSCRIPTION_KEY'
},
body: JSON.stringify(data)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
curl -v -X POST "https://gateway.pixazo.ai/wan-i2v/v1/generateImageToVideoRequest" \
-H "Content-Type: application/json" \
-H "Cache-Control: no-cache" \
-H "Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY" \
--data-raw '{
"model": "wan2.2-i2v-plus",
"input": {
"prompt": "Banana dancing in a traditional dress",
"negative_prompt": "flowers, blur",
"img_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/nano-banana.jpeg"
},
"parameters": {
"resolution": "1080P",
"duration": 5,
"prompt_extend": true,
"watermark": false,
"seed": 12345
}
}'
Output
{
"request_id": "wan-image-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/wan-image-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
Webhook (Optional)
Add the X-Webhook-URL header to your generate request to receive a POST callback instead of polling.
X-Webhook-URL: https://your-server.com/webhook/callback
Request Parameters - Wan Image to Video First Frame
| Parameter | Required | Type | Description |
|---|---|---|---|
| model | Yes | string | Model to use. Available values: "wan2.2-i2v-flash", "wan2.2-i2v-plus" (recommended), "wan2.1-i2v-plus", "wan2.1-i2v-turbo". |
| input.img_url | Yes | string | URL of the first frame image. Must be publicly accessible HTTP/HTTPS URL. Supports JPEG, JPG, PNG, BMP, WEBP. Max size: 10MB. Image resolution: 360-2000 pixels. |
| input.prompt | No | string | Default: null. Text description to guide video generation. Supports English and Chinese, up to 800 characters. |
| input.negative_prompt | No | string | Default: null. Elements to exclude from the video. Up to 500 characters. |
| parameters.resolution | No | string | Default varies by model: - wan2.2-i2v-plus: "480P" or "1080P" (default: "1080P") - wan2.2-i2v-flash: "480P" or "720P" (default: "720P") - wan2.1-i2v-plus: only "720P" - wan2.1-i2v-turbo: "480P" or "720P" (default: "720P") |
| parameters.duration | No | integer | Default: 5. Video duration in seconds. For wan2.1-i2v-turbo: 3, 4, or 5. Other models fixed at 5. |
| parameters.prompt_extend | No | boolean | Default: true. When enabled, uses LLM to enhance the prompt. Improves quality but adds processing time. |
| parameters.watermark | No | boolean | Default: false. When true, adds "Generated by AI" watermark at bottom-right. |
| parameters.seed | No | integer | Default: null. Random seed for reproducible results. Range: 0-2147483647. |
Example Request
{
"model": "wan2.2-i2v-plus",
"input": {
"prompt": "Banana dancing in a traditional dress",
"negative_prompt": "flowers, blur",
"img_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/nano-banana.jpeg"
},
"parameters": {
"resolution": "1080p",
"duration": 5,
"prompt_extend": true,
"watermark": false,
"seed": 12345
}
}
Response
{
"request_id": "wan-image-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/wan-image-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
Request Headers
| Header | Value |
|---|---|
| Content-Type | application/json |
| Cache-Control | no-cache |
| Ocp-Apim-Subscription-Key | YOUR_SUBSCRIPTION_KEY |
Response Handling
Common status codes.
| Code | Meaning |
|---|---|
| 202 | Accepted — Request queued |
| 400 | Bad Request |
| 401 | Unauthorized |
| 402 | Insufficient Balance |
| 403 | Forbidden |
| 429 | Too Many Requests |
| 500 | Internal Server Error |
Error Responses
Queue system errors and model validation errors.
Queue System Errors
// 402 — Insufficient balance
{
"error": "Insufficient Balance",
"message": "Your wallet does not have enough balance."
}
// 400 — Model not found
{
"error": "Model not found",
"message": "Model 'wan-image-to-video' not found or is disabled"
}
Error via Status/Webhook
{
"request_id": "wan-image-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "wan-image-to-video",
"error": "Description of the error",
"output": null
}
Retrieving Results
Poll the universal status endpoint to check progress and retrieve results.
Endpoint
GET https://gateway.pixazo.ai/v2/requests/status/{request_id}
Ocp-Apim-Subscription-Key: YOUR_API_KEY
cURL Example
curl -H "Ocp-Apim-Subscription-Key: YOUR_API_KEY" \
"https://gateway.pixazo.ai/v2/requests/status/wan-image-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
Response (Completed)
{
"request_id": "wan-image-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "wan-image-to-video",
"error": null,
"output": {
"media_url": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/wan-image-to-video_019dxxxx-xxxx/output.ext"
],
"media_type": "application/octet-stream"
},
"created_at": "2026-03-31T10:00:00.000Z",
"updated_at": "2026-03-31T10:00:15.000Z",
"completed_at": "2026-03-31T10:00:15.000Z"
}
Response Fields
| Field | Type | Description |
|---|---|---|
| request_id | string | Unique request identifier |
| status | string | QUEUED, PROCESSING, COMPLETED, FAILED, or ERROR |
| model_id | string | Model that processed the request |
| error | string|null | Error message if failed |
| output.media_url | array | URLs to generated media (R2 CDN) |
| output.media_type | string | MIME type of the output |
| created_at | string | When request was created |
| completed_at | string|null | When request completed |
| polling_url | string | Status URL (initial response only) |
Status Values
| Status | Description |
|---|---|
| QUEUED | Request accepted, waiting to be processed |
| PROCESSING | Being processed by the model |
| COMPLETED | Done — output contains the result |
| FAILED | Failed — check error field |
| ERROR | System error — not charged |
Status Flow
QUEUED → PROCESSING → COMPLETED
→ FAILED
→ ERROR
Typical Workflow
- Send a generate request to the API endpoint
- Save the
request_idfrom the response - Poll every 5-10 seconds:
GET /v2/requests/status/{request_id} - When
statusis"COMPLETED", download fromoutput.media_url
Tip: Use X-Webhook-URL header to get a callback instead of polling.
Wan 2.2 Image to Video (First Frame to Video) API Pricing
| Resolution | Duration | Price (USD) |
|---|---|---|
| 720P | 5s | $0.6 |
| 480P | - | $0.085 |
| 720P | 5s | $0.2 |
| 480P | - | $0.125 |
| 1080P | - | $0.75 |
| 480P | 5s | $0.2 |
| 720P | - | $0.2 |
| 720P | - | $0.75 |
Wan 2.2 Image to Video (Keyframe to Video) API Documentation
https://gateway.pixazo.ai/wan-image-to-video/v1
Authentication
All requests require an API key passed via header.
| Header | Type | Required | Description |
|---|---|---|---|
| Ocp-Apim-Subscription-Key | string | Yes | Your API subscription key |
Wan Keyframe to Video - Wan Image to Video API
Request Code
POST https://gateway.appypie.com/wan-i2v/v1/generateImageToVideoFrameRequest
Content-Type: application/json
Cache-Control: no-cache
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY
{
"model": "wan2.1-kf2v-plus",
"input": {
"first_frame_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/wan-t2i/wan-t2i-75d44f7d-a954-46b0-a603-10c09cb5df84-0.png",
"last_frame_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/wan-t2i/wan-t2i-47c06b16-ce7f-4977-8f7c-a04384409934-0.png",
"prompt": "Realistic style. Aeroplane from takeoff to fly captured in camera",
"negative_prompt": "person, text"
},
"parameters": {
"resolution": "720P",
"prompt_extend": true,
"watermark": false,
"seed": 12345
}
}
import requests
url = "https://gateway.appypie.com/wan-i2v/v1/generateImageToVideoFrameRequest"
headers = {
"Content-Type": "application/json",
"Cache-Control": "no-cache",
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
}
data = {
"model": "wan2.1-kf2v-plus",
"input": {
"first_frame_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/wan-t2i/wan-t2i-75d44f7d-a954-46b0-a603-10c09cb5df84-0.png",
"last_frame_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/wan-t2i/wan-t2i-47c06b16-ce7f-4977-8f7c-a04384409934-0.png",
"prompt": "Realistic style. Aeroplane from takeoff to fly captured in camera",
"negative_prompt": "person, text"
},
"parameters": {
"resolution": "720P",
"prompt_extend": true,
"watermark": false,
"seed": 12345
}
}
response = requests.post(url, json=data, headers=headers)
print(response.json())
const url = 'https://gateway.appypie.com/wan-i2v/v1/generateImageToVideoFrameRequest';
const headers = {
'Content-Type': 'application/json',
'Cache-Control': 'no-cache',
'Ocp-Apim-Subscription-Key': 'YOUR_SUBSCRIPTION_KEY'
};
const data = {
model: 'wan2.1-kf2v-plus',
input: {
first_frame_url: 'https://pub-582b7213209642b9b995c96c95a30381.r2.dev/wan-t2i/wan-t2i-75d44f7d-a954-46b0-a603-10c09cb5df84-0.png',
last_frame_url: 'https://pub-582b7213209642b9b995c96c95a30381.r2.dev/wan-t2i/wan-t2i-47c06b16-ce7f-4977-8f7c-a04384409934-0.png',
prompt: 'Realistic style. Aeroplane from takeoff to fly captured in camera',
negative_prompt: 'person, text'
},
parameters: {
resolution: '720P',
prompt_extend: true,
watermark: false,
seed: 12345
}
};
fetch(url, {
method: 'POST',
headers: headers,
body: JSON.stringify(data)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
curl -v -X POST "https://gateway.appypie.com/wan-i2v/v1/generateImageToVideoFrameRequest" -H "Content-Type: application/json" -H "Cache-Control: no-cache" -H "Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY" --data-raw '{
"model": "wan2.1-kf2v-plus",
"input": {
"first_frame_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/wan-t2i/wan-t2i-75d44f7d-a954-46b0-a603-10c09cb5df84-0.png",
"last_frame_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/wan-t2i/wan-t2i-47c06b16-ce7f-4977-8f7c-a04384409934-0.png",
"prompt": "Realistic style. Aeroplane from takeoff to fly captured in camera",
"negative_prompt": "person, text"
},
"parameters": {
"resolution": "720P",
"prompt_extend": true,
"watermark": false,
"seed": 12345
}
}'
Output
{
"request_id": "wan-image-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/wan-image-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
Webhook (Optional)
Add the X-Webhook-URL header to your generate request to receive a POST callback instead of polling.
X-Webhook-URL: https://your-server.com/webhook/callback
Request Parameters - Wan Keyframe to Video
| Parameter | Required | Type | Description |
|---|---|---|---|
| model | Yes | string | Model to use. Available value: "wan2.1-kf2v-plus" (keyframe-to-video model). |
| input.first_frame_url | Yes | string | URL of the first frame image. Must be a publicly accessible HTTP/HTTPS URL. Supports JPEG, JPG, PNG, BMP, WEBP. Max size: 10MB. Resolution: 360–2000 pixels. |
| input.last_frame_url | Yes | string | URL of the last frame image. Must be a publicly accessible HTTP/HTTPS URL. Supports JPEG, JPG, PNG, BMP, WEBP. Max size: 10MB. Resolution: 360–2000 pixels. |
| input.prompt | No | string | Default: null. Text description to guide video transition between frames. Supports English and Chinese, up to 800 characters. Useful for camera/subject changes. |
| input.negative_prompt | No | string | Default: null. Elements to exclude from the video. Up to 500 characters. |
| parameters.resolution | No | string | Default: "720P". Currently only "720P" is supported. Typical resolution is 1280×720 with 16:9 aspect ratio. |
| parameters.duration | No | integer | Default: 5. Video duration in seconds. Fixed at 5 seconds and cannot be changed. |
| parameters.prompt_extend | No | boolean | Default: true. When enabled, uses LLM to enhance the prompt. Improves quality but adds processing time. |
| parameters.watermark | No | boolean | Default: false. When true, adds an "AI-generated" watermark at the bottom-right corner. |
| parameters.seed | No | integer | Default: null. Random seed for reproducible results. Range: 0–2147483647. |
Example Request
{
"model": "wan2.1-kf2v-plus",
"input": {
"first_frame_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/wan-t2i/wan-t2i-75d44f7d-a954-46b0-a603-10c09cb5df84-0.png",
"last_frame_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/wan-t2i/wan-t2i-47c06b16-ce7f-4977-8f7c-a04384409934-0.png",
"prompt": "Realistic style. Aeroplane from takeoff to fly captured in camera",
"negative_prompt": "person, text"
},
"parameters": {
"resolution": "720P",
"prompt_extend": true,
"watermark": false,
"seed": 12345
}
}
Response
{
"request_id": "wan-image-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/wan-image-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
Request Headers
| Header | Value |
|---|---|
| Content-Type | application/json |
| Cache-Control | no-cache |
| Ocp-Apim-Subscription-Key | YOUR_SUBSCRIPTION_KEY |
Response Handling
Common status codes.
| Code | Meaning |
|---|---|
| 202 | Accepted — Request queued |
| 400 | Bad Request |
| 401 | Unauthorized |
| 402 | Insufficient Balance |
| 403 | Forbidden |
| 429 | Too Many Requests |
| 500 | Internal Server Error |
Error Responses
Queue system errors and model validation errors.
Queue System Errors
// 402 — Insufficient balance
{
"error": "Insufficient Balance",
"message": "Your wallet does not have enough balance."
}
// 400 — Model not found
{
"error": "Model not found",
"message": "Model 'wan-image-to-video' not found or is disabled"
}
Error via Status/Webhook
{
"request_id": "wan-image-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "wan-image-to-video",
"error": "Description of the error",
"output": null
}
Retrieving Results
Poll the universal status endpoint to check progress and retrieve results.
Endpoint
GET https://gateway.pixazo.ai/v2/requests/status/{request_id}
Ocp-Apim-Subscription-Key: YOUR_API_KEY
cURL Example
curl -H "Ocp-Apim-Subscription-Key: YOUR_API_KEY" \
"https://gateway.pixazo.ai/v2/requests/status/wan-image-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
Response (Completed)
{
"request_id": "wan-image-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "wan-image-to-video",
"error": null,
"output": {
"media_url": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/wan-image-to-video_019dxxxx-xxxx/output.ext"
],
"media_type": "application/octet-stream"
},
"created_at": "2026-03-31T10:00:00.000Z",
"updated_at": "2026-03-31T10:00:15.000Z",
"completed_at": "2026-03-31T10:00:15.000Z"
}
Response Fields
| Field | Type | Description |
|---|---|---|
| request_id | string | Unique request identifier |
| status | string | QUEUED, PROCESSING, COMPLETED, FAILED, or ERROR |
| model_id | string | Model that processed the request |
| error | string|null | Error message if failed |
| output.media_url | array | URLs to generated media (R2 CDN) |
| output.media_type | string | MIME type of the output |
| created_at | string | When request was created |
| completed_at | string|null | When request completed |
| polling_url | string | Status URL (initial response only) |
Status Values
| Status | Description |
|---|---|
| QUEUED | Request accepted, waiting to be processed |
| PROCESSING | Being processed by the model |
| COMPLETED | Done — output contains the result |
| FAILED | Failed — check error field |
| ERROR | System error — not charged |
Status Flow
QUEUED → PROCESSING → COMPLETED
→ FAILED
→ ERROR
Typical Workflow
- Send a generate request to the API endpoint
- Save the
request_idfrom the response - Poll every 5-10 seconds:
GET /v2/requests/status/{request_id} - When
statusis"COMPLETED", download fromoutput.media_url
Tip: Use X-Webhook-URL header to get a callback instead of polling.
Wan 2.2 Image to Video (Keyframe to Video) API Pricing
| Resolution | Duration | Price (USD) |
|---|---|---|
| 720P | 5s | $0.6 |
| 480P | - | $0.085 |
| 720P | 5s | $0.2 |
| 480P | - | $0.125 |
| 1080P | - | $0.75 |
| 480P | 5s | $0.2 |
| 720P | - | $0.2 |
| 720P | - | $0.75 |
Wan 2.2 Image to Image (Image Editing) API Documentation
https://gateway.pixazo.ai/wan-t2i/v1
Authentication
All requests require an API key passed via header.
| Header | Type | Required | Description |
|---|---|---|---|
| Ocp-Apim-Subscription-Key | string | Yes | Your API subscription key |
Edit Image Request - Wan Text to Image API
Request Code
POST https://gateway.pixazo.ai/wan-t2i/v1/generateEditImageRequest
Content-Type: application/json
Cache-Control: no-cache
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY
{
"model": "wanx2.1-imageedit",
"input": {
"function": "stylization_all",
"prompt": "A dreamy watercolor style",
"base_image_url": "https://example.com/image.jpg"
},
"parameters": {
"n": 1
}
}
import requests
url = "https://gateway.pixazo.ai/wan-t2i/v1/generateEditImageRequest"
headers = {
"Content-Type": "application/json",
"Cache-Control": "no-cache",
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
}
data = {
"model": "wanx2.1-imageedit",
"input": {
"function": "stylization_all",
"prompt": "A dreamy watercolor style",
"base_image_url": "https://example.com/image.jpg"
},
"parameters": {
"n": 1
}
}
response = requests.post(url, json=data, headers=headers)
print(response.json())
fetch('https://gateway.pixazo.ai/wan-t2i/v1/generateEditImageRequest', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Cache-Control': 'no-cache',
'Ocp-Apim-Subscription-Key': 'YOUR_SUBSCRIPTION_KEY'
},
body: JSON.stringify({
model: 'wanx2.1-imageedit',
input: {
function: 'stylization_all',
prompt: 'A dreamy watercolor style',
base_image_url: 'https://example.com/image.jpg'
},
parameters: {
n: 1
}
})
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
curl -X POST \"https://gateway.pixazo.ai/wan-t2i/v1/generateEditImageRequest\" \\
-H \"Content-Type: application/json\" \\
-H \"Cache-Control: no-cache\" \\
-H \"Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY\" \\
--data-raw '{
\"model\": \"wanx2.1-imageedit\",
\"input\": {
\"function\": \"stylization_all\",
\"prompt\": \"A dreamy watercolor style\",
\"base_image_url\": \"https://example.com/image.jpg\"
},
\"parameters\": {
\"n\": 1
}
}'
Output
{
"request_id": "wan-text-to-image_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/wan-text-to-image_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
Webhook (Optional)
Add the X-Webhook-URL header to your generate request to receive a POST callback instead of polling.
X-Webhook-URL: https://your-server.com/webhook/callback
Request Parameters - Edit Image Request
| Parameter | Required | Type | Description |
|---|---|---|---|
| model | Yes | string | Model to use. Available value: "wanx2.1-imageedit". |
| input.function | Yes | string | Function to apply. Example: "stylization_all". |
| input.prompt | Yes | string | Text prompt describing the desired edit. Supports English and Chinese. |
| input.base_image_url | Yes | string | URL of the base image to edit. |
| parameters.n | No | integer | Number of images to generate (default: 1). |
Example Request
{
"model": "wanx2.1-imageedit",
"input": {
"function": "stylization_all",
"prompt": "A dreamy watercolor style",
"base_image_url": "https://example.com/image.jpg"
},
"parameters": {
"n": 1
}
}
Response
{
"request_id": "wan-text-to-image_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/wan-text-to-image_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
Request Headers
| Header | Value |
|---|---|
| Content-Type | application/json |
| Cache-Control | no-cache |
| Ocp-Apim-Subscription-Key | YOUR_SUBSCRIPTION_KEY |
Response Handling
Common status codes.
| Code | Meaning |
|---|---|
| 202 | Accepted — Request queued |
| 400 | Bad Request |
| 401 | Unauthorized |
| 402 | Insufficient Balance |
| 403 | Forbidden |
| 429 | Too Many Requests |
| 500 | Internal Server Error |
Error Responses
Queue system errors and model validation errors.
Queue System Errors
// 402 — Insufficient balance
{
"error": "Insufficient Balance",
"message": "Your wallet does not have enough balance."
}
// 400 — Model not found
{
"error": "Model not found",
"message": "Model 'wan-text-to-image' not found or is disabled"
}
Error via Status/Webhook
{
"request_id": "wan-text-to-image_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "wan-text-to-image",
"error": "Description of the error",
"output": null
}
Retrieving Results
Poll the universal status endpoint to check progress and retrieve results.
Endpoint
GET https://gateway.pixazo.ai/v2/requests/status/{request_id}
Ocp-Apim-Subscription-Key: YOUR_API_KEY
cURL Example
curl -H "Ocp-Apim-Subscription-Key: YOUR_API_KEY" \
"https://gateway.pixazo.ai/v2/requests/status/wan-text-to-image_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
Response (Completed)
{
"request_id": "wan-text-to-image_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "wan-text-to-image",
"error": null,
"output": {
"media_url": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/wan-text-to-image_019dxxxx-xxxx/output.ext"
],
"media_type": "application/octet-stream"
},
"created_at": "2026-03-31T10:00:00.000Z",
"updated_at": "2026-03-31T10:00:15.000Z",
"completed_at": "2026-03-31T10:00:15.000Z"
}
Response Fields
| Field | Type | Description |
|---|---|---|
| request_id | string | Unique request identifier |
| status | string | QUEUED, PROCESSING, COMPLETED, FAILED, or ERROR |
| model_id | string | Model that processed the request |
| error | string|null | Error message if failed |
| output.media_url | array | URLs to generated media (R2 CDN) |
| output.media_type | string | MIME type of the output |
| created_at | string | When request was created |
| completed_at | string|null | When request completed |
| polling_url | string | Status URL (initial response only) |
Status Values
| Status | Description |
|---|---|
| QUEUED | Request accepted, waiting to be processed |
| PROCESSING | Being processed by the model |
| COMPLETED | Done — output contains the result |
| FAILED | Failed — check error field |
| ERROR | System error — not charged |
Status Flow
QUEUED → PROCESSING → COMPLETED
→ FAILED
→ ERROR
Typical Workflow
- Send a generate request to the API endpoint
- Save the
request_idfrom the response - Poll every 5-10 seconds:
GET /v2/requests/status/{request_id} - When
statusis"COMPLETED", download fromoutput.media_url
Tip: Use X-Webhook-URL header to get a callback instead of polling.
Wan 2.2 Image to Image (Image Editing) API Pricing
| Resolution | Price (USD) |
|---|---|
| 1080*1920 | $0.6 |
| 1280*720 | $0.3 |
| 1280*720 | $0.6 |
Wan 2.2 Text to Image API Documentation
https://gateway.pixazo.ai/wan-t2i/v1
Authentication
All requests require an API key passed via header.
| Header | Type | Required | Description |
|---|---|---|---|
| Ocp-Apim-Subscription-Key | string | Yes | Your API subscription key |
Text To Image Request - Wan Text to Image API
Request Code
POST https://gateway.pixazo.ai/wan-t2i/v1/generateTextToImageRequest
Content-Type: application/json
Cache-Control: no-cache
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY
{
"model": "wan2.2-t2i-flash",
"input": {
"prompt": "A beautiful mountain landscape at sunset"
}
}
import requests
url = "https://gateway.pixazo.ai/wan-t2i/v1/generateTextToImageRequest"
headers = {
"Content-Type": "application/json",
"Cache-Control": "no-cache",
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
}
data = {
"model": "wan2.2-t2i-flash",
"input": {
"prompt": "A beautiful mountain landscape at sunset"
}
}
response = requests.post(url, json=data, headers=headers)
print(response.json())
const url = 'https://gateway.pixazo.ai/wan-t2i/v1/generateTextToImageRequest';
const headers = {
'Content-Type': 'application/json',
'Cache-Control': 'no-cache',
'Ocp-Apim-Subscription-Key': 'YOUR_SUBSCRIPTION_KEY'
};
const data = {
model: 'wan2.2-t2i-flash',
input: {
prompt: 'A beautiful mountain landscape at sunset'
}
};
fetch(url, {
method: 'POST',
headers: headers,
body: JSON.stringify(data)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
curl -v -X POST "https://gateway.pixazo.ai/wan-t2i/v1/generateTextToImageRequest" \
-H "Content-Type: application/json" \
-H "Cache-Control: no-cache" \
-H "Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY" \
--data-raw '{
"model": "wan2.2-t2i-flash",
"input": {
"prompt": "A beautiful mountain landscape at sunset"
}
}'
Output
{
"request_id": "wan-text-to-image_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/wan-text-to-image_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
Webhook (Optional)
Add the X-Webhook-URL header to your generate request to receive a POST callback instead of polling.
X-Webhook-URL: https://your-server.com/webhook/callback
Request Parameters - Text To Image Request
| Parameter | Required | Type | Description |
|---|---|---|---|
| model | Yes | string | Model to use. Available values: "wan2.2-t2i-flash", "wan2.2-t2i-plus", "wan2.1-t2i-turbo", "wan2.1-t2i-plus". |
| input.prompt | Yes | string | Positive prompt describing the image. Supports English and Chinese, up to 800 characters. |
| input.negative_prompt | No | string | Default: null. Elements to exclude from the image (up to 500 characters). |
| parameters.size | No | string | Default: "1024x1024". Resolution in widthxheight, range 512–1440, max 2M pixels. |
| parameters.n | No | integer | Default: 1. Number of images (1–4). |
| parameters.seed | No | integer | Default: null. Random seed for reproducible results (0–2147483647). |
| parameters.prompt_extend | No | boolean | Default: false. Enhances the prompt using LLM. Adds 3–4s processing time. |
| parameters.watermark | No | boolean | Default: false. Adds "AI Generated" watermark at bottom-right. |
Example Request
{
"model": "wan2.2-t2i-flash",
"input": {
"prompt": "A beautiful mountain landscape at sunset",
"negative_prompt": "people, buildings, text, watermark, signature"
},
"parameters": {
"size": "1024*1024",
"n": 1,
"seed": 42,
"prompt_extend": false,
"watermark": false
}
}
Response
{
"request_id": "wan-text-to-image_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/wan-text-to-image_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
Request Headers
| Header | Value |
|---|---|
| Content-Type | application/json |
| Cache-Control | no-cache |
| Ocp-Apim-Subscription-Key | YOUR_SUBSCRIPTION_KEY |
Response Handling
Common status codes.
| Code | Meaning |
|---|---|
| 202 | Accepted — Request queued |
| 400 | Bad Request |
| 401 | Unauthorized |
| 402 | Insufficient Balance |
| 403 | Forbidden |
| 429 | Too Many Requests |
| 500 | Internal Server Error |
Error Responses
Queue system errors and model validation errors.
Queue System Errors
// 402 — Insufficient balance
{
"error": "Insufficient Balance",
"message": "Your wallet does not have enough balance."
}
// 400 — Model not found
{
"error": "Model not found",
"message": "Model 'wan-text-to-image' not found or is disabled"
}
Error via Status/Webhook
{
"request_id": "wan-text-to-image_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "wan-text-to-image",
"error": "Description of the error",
"output": null
}
Retrieving Results
Poll the universal status endpoint to check progress and retrieve results.
Endpoint
GET https://gateway.pixazo.ai/v2/requests/status/{request_id}
Ocp-Apim-Subscription-Key: YOUR_API_KEY
cURL Example
curl -H "Ocp-Apim-Subscription-Key: YOUR_API_KEY" \
"https://gateway.pixazo.ai/v2/requests/status/wan-text-to-image_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
Response (Completed)
{
"request_id": "wan-text-to-image_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "wan-text-to-image",
"error": null,
"output": {
"media_url": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/wan-text-to-image_019dxxxx-xxxx/output.ext"
],
"media_type": "application/octet-stream"
},
"created_at": "2026-03-31T10:00:00.000Z",
"updated_at": "2026-03-31T10:00:15.000Z",
"completed_at": "2026-03-31T10:00:15.000Z"
}
Response Fields
| Field | Type | Description |
|---|---|---|
| request_id | string | Unique request identifier |
| status | string | QUEUED, PROCESSING, COMPLETED, FAILED, or ERROR |
| model_id | string | Model that processed the request |
| error | string|null | Error message if failed |
| output.media_url | array | URLs to generated media (R2 CDN) |
| output.media_type | string | MIME type of the output |
| created_at | string | When request was created |
| completed_at | string|null | When request completed |
| polling_url | string | Status URL (initial response only) |
Status Values
| Status | Description |
|---|---|
| QUEUED | Request accepted, waiting to be processed |
| PROCESSING | Being processed by the model |
| COMPLETED | Done — output contains the result |
| FAILED | Failed — check error field |
| ERROR | System error — not charged |
Status Flow
QUEUED → PROCESSING → COMPLETED
→ FAILED
→ ERROR
Typical Workflow
- Send a generate request to the API endpoint
- Save the
request_idfrom the response - Poll every 5-10 seconds:
GET /v2/requests/status/{request_id} - When
statusis"COMPLETED", download fromoutput.media_url
Tip: Use X-Webhook-URL header to get a callback instead of polling.
Wan 2.2 Text to Image API Pricing
| Resolution | Price (USD) |
|---|---|
| 1080*1920 | $0.6 |
| 1280*720 | $0.3 |
| 1280*720 | $0.6 |
Wan 2.2 Text to Video API Documentation
https://gateway.pixazo.ai/wan-video/v1
Authentication
All requests require an API key passed via header.
| Header | Type | Required | Description |
|---|---|---|---|
| Ocp-Apim-Subscription-Key | string | Yes | Your API subscription key |
Generate Text To Video Request - Wan Text to Video API
Request Code
POST https://gateway.pixazo.ai/wan-video/v1/generateTextToVideoRequest
Content-Type: application/json
Cache-Control: no-cache
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY
{
"model": "wan2.2-t2v-plus",
"input": {
"prompt": "A kitten running in the moonlight",
"negative_prompt": "flowers, people, text"
},
"parameters": {
"size": "1920*1080"
}
}
import requests
import json
url = "https://gateway.pixazo.ai/wan-video/v1/generateTextToVideoRequest"
headers = {
"Content-Type": "application/json",
"Cache-Control": "no-cache",
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
}
data = {
"model": "wan2.2-t2v-plus",
"input": {
"prompt": "A kitten running in the moonlight",
"negative_prompt": "flowers, people, text"
},
"parameters": {
"size": "1920*1080"
}
}
response = requests.post(url, headers=headers, json=data)
print(response.json())
const url = 'https://gateway.pixazo.ai/wan-video/v1/generateTextToVideoRequest';
const headers = {
'Content-Type': 'application/json',
'Cache-Control': 'no-cache',
'Ocp-Apim-Subscription-Key': 'YOUR_SUBSCRIPTION_KEY'
};
const data = {
model: 'wan2.2-t2v-plus',
input: {
prompt: 'A kitten running in the moonlight',
negative_prompt: 'flowers, people, text'
},
parameters: {
size: '1920*1080'
}
};
fetch(url, {
method: 'POST',
headers: headers,
body: JSON.stringify(data)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
curl -v -X POST "https://gateway.pixazo.ai/wan-video/v1/generateTextToVideoRequest" \
-H "Content-Type: application/json" \
-H "Cache-Control: no-cache" \
-H "Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY" \
--data-raw '{
"model": "wan2.2-t2v-plus",
"input": {
"prompt": "A kitten running in the moonlight",
"negative_prompt": "flowers, people, text"
},
"parameters": {
"size": "1920*1080"
}
}'
Output
{
"request_id": "wan-text-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/wan-text-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
Webhook (Optional)
Add the X-Webhook-URL header to your generate request to receive a POST callback instead of polling.
X-Webhook-URL: https://your-server.com/webhook/callback
Request Parameters - Generate Text To Video Request
| Parameter | Required | Type | Description |
|---|---|---|---|
| model | Yes | string | Model to use. Available values: "wan2.2-t2v-plus" (recommended), "wanx2.1-t2v-turbo", "wanx2.1-t2v-plus". |
| input.prompt | Yes | string | Text description of the video to generate. Supports English and Chinese. |
| input.negative_prompt | No | string | Default: null. Elements to exclude from the video. |
| parameters.size | No | string | Default: "1280*720". Available resolutions vary by model. |
| parameters.n | No | integer | Default: 1. Number of videos to generate. Currently only 1 is supported. |
Example Request
{
"model": "wan2.2-t2v-plus",
"input": {
"prompt": "A kitten running in the moonlight",
"negative_prompt": "flowers, people, text"
},
"parameters": {
"size": "1920*1080"
}
}
Response
{
"request_id": "wan-text-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/wan-text-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
Request Headers
| Header | Value |
|---|---|
| Content-Type | application/json |
| Cache-Control | no-cache |
| Ocp-Apim-Subscription-Key | YOUR_SUBSCRIPTION_KEY |
Response Handling
Common status codes.
| Code | Meaning |
|---|---|
| 202 | Accepted — Request queued |
| 400 | Bad Request |
| 401 | Unauthorized |
| 402 | Insufficient Balance |
| 403 | Forbidden |
| 429 | Too Many Requests |
| 500 | Internal Server Error |
Error Responses
Queue system errors and model validation errors.
Queue System Errors
// 402 — Insufficient balance
{
"error": "Insufficient Balance",
"message": "Your wallet does not have enough balance."
}
// 400 — Model not found
{
"error": "Model not found",
"message": "Model 'wan-text-to-video' not found or is disabled"
}
Error via Status/Webhook
{
"request_id": "wan-text-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "wan-text-to-video",
"error": "Description of the error",
"output": null
}
Retrieving Results
Poll the universal status endpoint to check progress and retrieve results.
Endpoint
GET https://gateway.pixazo.ai/v2/requests/status/{request_id}
Ocp-Apim-Subscription-Key: YOUR_API_KEY
cURL Example
curl -H "Ocp-Apim-Subscription-Key: YOUR_API_KEY" \
"https://gateway.pixazo.ai/v2/requests/status/wan-text-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
Response (Completed)
{
"request_id": "wan-text-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "wan-text-to-video",
"error": null,
"output": {
"media_url": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/wan-text-to-video_019dxxxx-xxxx/output.ext"
],
"media_type": "application/octet-stream"
},
"created_at": "2026-03-31T10:00:00.000Z",
"updated_at": "2026-03-31T10:00:15.000Z",
"completed_at": "2026-03-31T10:00:15.000Z"
}
Response Fields
| Field | Type | Description |
|---|---|---|
| request_id | string | Unique request identifier |
| status | string | QUEUED, PROCESSING, COMPLETED, FAILED, or ERROR |
| model_id | string | Model that processed the request |
| error | string|null | Error message if failed |
| output.media_url | array | URLs to generated media (R2 CDN) |
| output.media_type | string | MIME type of the output |
| created_at | string | When request was created |
| completed_at | string|null | When request completed |
| polling_url | string | Status URL (initial response only) |
Status Values
| Status | Description |
|---|---|
| QUEUED | Request accepted, waiting to be processed |
| PROCESSING | Being processed by the model |
| COMPLETED | Done — output contains the result |
| FAILED | Failed — check error field |
| ERROR | System error — not charged |
Status Flow
QUEUED → PROCESSING → COMPLETED
→ FAILED
→ ERROR
Typical Workflow
- Send a generate request to the API endpoint
- Save the
request_idfrom the response - Poll every 5-10 seconds:
GET /v2/requests/status/{request_id} - When
statusis"COMPLETED", download fromoutput.media_url
Tip: Use X-Webhook-URL header to get a callback instead of polling.
Wan 2.2 Text to Video API Pricing
| Resolution | Duration | Price (USD) |
|---|---|---|
| 1080*1920 | 5s | $0.6 |
| 1280*720 | 5s | $0.3 |
| 1280*720 | 5s | $0.6 |
