P-Video Avatar API, P-Video API - AI Video Generation APIs
by Pruna AI
P Video is an advanced AI video generation model offering multiple generation modes including text-to-video, image-to-video, audio-conditioned, and image+audio synthesis. Integrate seamlessly via the Pixazo API.

Models Version
Get $5 Free Credit on First Payment
No strings attached — add funds and get $5 bonus instantly
P Video Avatar Image to Video API Documentation
https://gateway.pixazo.ai/p-video-avatar/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 |
P Video Avatar Generation Request - P Video Avatar API
Request Code
POST https://gateway.pixazo.ai/p-video-avatar/v1/p-video-avatar/generate HTTP/1.1
Content-Type: application/json
Cache-Control: no-cache
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY
{
"image": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/input_model.png",
"voice": "Charon (Male)",
"voice_language": "English (US)",
"voice_script": "p-video is the fastest video model on earth!",
"voice_prompt": "Say the following with a warm, confident tone.",
"video_prompt": "A studio-lit talking head, soft key light, subtle camera movement.",
"resolution": "1080p",
"seed": 42
}
import requests
url = "https://gateway.pixazo.ai/p-video-avatar/v1/p-video-avatar/generate"
headers = {
"Content-Type": "application/json",
"Cache-Control": "no-cache",
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
}
data = {
"image": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/input_model.png",
"voice": "Charon (Male)",
"voice_language": "English (US)",
"voice_script": "p-video is the fastest video model on earth!",
"voice_prompt": "Say the following with a warm, confident tone.",
"video_prompt": "A studio-lit talking head, soft key light, subtle camera movement.",
"resolution": "1080p",
"seed": 42
}
response = requests.post(url, json=data, headers=headers)
print(response.json())
const url = 'https://gateway.pixazo.ai/p-video-avatar/v1/p-video-avatar/generate';
const headers = {
'Content-Type': 'application/json',
'Cache-Control': 'no-cache',
'Ocp-Apim-Subscription-Key': 'YOUR_SUBSCRIPTION_KEY'
};
const data = {
image: 'https://pub-582b7213209642b9b995c96c95a30381.r2.dev/input_model.png',
voice: 'Charon (Male)',
voice_language: 'English (US)',
voice_script: 'p-video is the fastest video model on earth!',
voice_prompt: 'Say the following with a warm, confident tone.',
video_prompt: 'A studio-lit talking head, soft key light, subtle camera movement.',
resolution: '1080p',
seed: 42
};
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/p-video-avatar/v1/p-video-avatar/generate" \
-H "Content-Type: application/json" \
-H "Cache-Control: no-cache" \
-H "Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY" \
--data-raw '{
"image": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/input_model.png",
"voice": "Charon (Male)",
"voice_language": "English (US)",
"voice_script": "p-video is the fastest video model on earth!",
"voice_prompt": "Say the following with a warm, confident tone.",
"video_prompt": "A studio-lit talking head, soft key light, subtle camera movement.",
"resolution": "1080p",
"seed": 42
}'
Output
{
"request_id": "p-video-avatar_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/p-video-avatar_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 - P Video Avatar Generation
| Parameter | Required | Type | Default | Description |
|---|---|---|---|---|
| image | Yes | string (URL) | — | Publicly accessible URL of the input image used as the first frame. Supported formats: jpg, jpeg, png, webp. |
| audio | No | string (URL) | — | Optional uploaded audio to drive lip-sync. If both audio and voice_script are provided, audio wins. |
| voice | No | string | "Zephyr (Female)" | Named voice for synthesized speech (used only when audio is not provided). Allowed values (30 total) — Female: Zephyr (Female), Kore (Female), Leda (Female), Aoede (Female), Callirrhoe (Female), Autonoe (Female), Despina (Female), Erinome (Female), Laomedeia (Female), Achernar (Female), Gacrux (Female), Pulcherrima (Female), Vindemiatrix (Female), Sulafat (Female). Male: Puck (Male), Charon (Male), Fenrir (Male), Orus (Male), Enceladus (Male), Iapetus (Male), Umbriel (Male), Algenib (Male), Algieba (Male), Schedar (Male), Achird (Male), Zubenelgenubi (Male), Sadachbia (Male), Sadaltager (Male), Alnilam (Male), Rasalgethi (Male). |
| voice_language | No | string | "English (US)" | Output speech language. Allowed values: English (US), English (UK), Spanish, French, German, Italian, Portuguese (Brazil), Japanese, Korean, Hindi. |
| voice_script | No | string | "" | Script the person speaks (ignored if audio is set). |
| voice_prompt | No | string | "Say the following." | Style/tone/pacing/emotion guidance for the TTS engine. |
| video_prompt | No | string | "The person is talking." | Visual prompt describing the video. |
| resolution | No | string | "720p" | Output resolution. Allowed values: 720p, 1080p. |
| seed | No | integer | random | Random seed for reproducibility. Must be a non-negative integer (≥ 0). |
| disable_safety_filter | No | boolean | true | When true, skip the safety check on prompts and image. |
| disable_prompt_upsampling | No | boolean | false | When true, skip the multimodal prompt upsampler and pass the raw prompt through. |
| no_op | No | boolean | false | Health-check mode — returns status without running inference. |
| webhook | No | string (URL) | — | Gateway will POST the final result to this URL when the prediction reaches a terminal state. |
| webhook_events_filter | No | string[] | — | Restrict which events fire the webhook. Allowed values include completed, failed, canceled. |
Example Request
{
"image": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/input_model.png",
"audio": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/abhinav_YF5ZZmi6.mp3",
"voice": "Charon (Male)",
"voice_language": "English (US)",
"voice_script": "p-video is the fastest video model on earth!",
"voice_prompt": "Say the following with a warm, confident tone.",
"video_prompt": "A studio-lit talking head, soft key light, subtle camera movement.",
"resolution": "1080p",
"seed": 42,
"disable_safety_filter": true,
"disable_prompt_upsampling": false,
"no_op": false,
"webhook": "https://your-server.com/webhooks/p-video-avatar",
"webhook_events_filter": ["completed", "failed"]
}
Response
{
"request_id": "p-video-avatar_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/p-video-avatar_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, model validation errors, and the shape returned via status/webhook.
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 'p-video-avatar' not found or is disabled"
}
Model Validation Errors (400)
// Missing or invalid fields — examples
{ "error": "image is required and must be a string URL" }
{ "error": "image must be a valid URL" }
{ "error": "voice must be one of: Zephyr (Female), Kore (Female), ... Rasalgethi (Male)" }
{ "error": "voice_language must be one of: English (US), English (UK), ..., Hindi" }
{ "error": "resolution must be one of: 720p, 1080p" }
{ "error": "seed must be a non-negative integer" }
{ "error": "voice_script must be a string" }
{ "error": "disable_safety_filter must be a boolean" }
{ "error": "Invalid webhook URL" }
Error via Status/Webhook
{
"request_id": "p-video-avatar_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "p-video-avatar",
"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/p-video-avatar_019d42ce-ae71-7999-24c9-5d76447ecafb4"
Response (Completed)
{
"request_id": "p-video-avatar_019d42ce-ae71-7999-24c9-5d76447ecafb4",
"status": "COMPLETED",
"model_id": "p-video-avatar",
"error": null,
"output": {
"media_url": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/p-video-avatar_019d42ce-ae71-7999-24c9-5d76447ecafb4/output.mp4"
],
"media_type": "video/mp4"
},
"created_at": "2026-05-01T07:13:45.138Z",
"updated_at": "2026-05-01T07:14:32.000Z",
"completed_at": "2026-05-01T07:14:32.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.
P Video Avatar Image to Video API Pricing
| Resolution | Duration | Price (USD) |
|---|---|---|
| 720p | 1s | $0.025 |
| 1080p | 1s | $0.045 |
P Video v1 Text to Video API Documentation
https://gateway.pixazo.ai/p-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 |
Video Request - P Video
Request Code
POST https://gateway.pixazo.ai/p-video/v1/p-video/generate
Content-Type: application/json
Cache-Control: no-cache
Ocp-Apim-Subscription-Key: YOUR_API_KEY
{
"prompt": "A cat walking in a garden"
}
import requests
url = "https://gateway.pixazo.ai/p-video/v1/p-video/generate"
headers = {
"Content-Type": "application/json",
"Cache-Control": "no-cache",
"Ocp-Apim-Subscription-Key": "YOUR_API_KEY"
}
data = {
"prompt": "A cat walking in a garden"
}
response = requests.post(url, json=data, headers=headers)
print(response.json())
const url = 'https://gateway.pixazo.ai/p-video/v1/p-video/generate';
const headers = {
'Content-Type': 'application/json',
'Cache-Control': 'no-cache',
'Ocp-Apim-Subscription-Key': 'YOUR_API_KEY'
};
const data = {
prompt: 'A cat walking in a garden'
};
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/p-video/v1/p-video/generate" \
-H "Content-Type: application/json" \
-H "Cache-Control: no-cache" \
-H "Ocp-Apim-Subscription-Key: YOUR_API_KEY" \
--data-raw '{
"prompt": "A cat walking in a garden"
}'
Output
{
"request_id": "p-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/p-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 - Video Request
| Parameter | Required | Type | Default | Description |
|---|---|---|---|---|
| prompt | Yes | string | — | Text prompt for video generation |
| image | No | string (URI) | — | Input image URL for image-to-video generation (jpg, jpeg, png, webp) |
| audio | No | string (URI) | — | Input audio URL to condition video generation (flac, mp3, wav) |
| duration | No | integer | 5 | Duration of the video in seconds (1-10). Ignored when audio is provided |
| aspect_ratio | No | string | "16:9" | Aspect ratio of the video. Ignored when image is provided |
| resolution | No | string | "720p" | Resolution: "720p", "1080p" |
| fps | No | integer | 24 | Frames per second: 24, 48 |
| draft | No | boolean | false | Draft mode — generates a lower-quality preview faster |
| prompt_upsampling | No | boolean | true | Enhance the prompt for better results |
| disable_safety_filter | No | boolean | tru e | Disable safety filter for prompts and input image |
| save_audio | No | boolean | true | Save the video with audio |
| seed | No | integer | — | Random seed for reproducible generation |
| webhook | No | string | — | Webhook URL for async notifications when generation completes |
| webhook_events_filter | No | array | — | Event types to receive (e.g. ["completed"]) |
Example Request
{
"prompt": "A cat walking gracefully through a sunlit garden with butterflies and flowers swaying in the breeze",
"image": "https://example.com/cat.jpg",
"audio": "https://example.com/garden-ambience.wav",
"duration": 10,
"aspect_ratio": "16:9",
"resolution": "1080p",
"fps": 48,
"draft": false,
"prompt_upsampling": true,
"disable_safety_filter": true,
"save_audio": true,
"seed": 42,
"webhook": "https://your-webhook.com/callback",
"webhook_events_filter": ["completed"]
}
Response
{
"request_id": "p-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/p-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
Request Headers
| Header | Value |
|---|---|
| Content-Type | application/json |
| Cache-Control | no-cache |
| Ocp-Apim-Subscription-Key | YOUR_API_KEY |
Video Status - P Video
Request Code
POST https://gateway.pixazo.ai/p-video/v1/p-video/prediction
Content-Type: application/json
Cache-Control: no-cache
Ocp-Apim-Subscription-Key: YOUR_API_KEY
{
"requestId": "12gkggc805rmw0cwmg9skrgcb8"
}
import requests
url = "https://gateway.pixazo.ai/p-video/v1/p-video/prediction"
headers = {
"Content-Type": "application/json",
"Cache-Control": "no-cache",
"Ocp-Apim-Subscription-Key": "YOUR_API_KEY"
}
data = {
"requestId": "12gkggc805rmw0cwmg9skrgcb8"
}
response = requests.post(url, json=data, headers=headers)
print(response.json())
const url = 'https://gateway.pixazo.ai/p-video/v1/p-video/prediction';
const headers = {
'Content-Type': 'application/json',
'Cache-Control': 'no-cache',
'Ocp-Apim-Subscription-Key': 'YOUR_API_KEY'
};
const data = {
requestId: '12gkggc805rmw0cwmg9skrgcb8'
};
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/p-video/v1/p-video/prediction" \
-H "Content-Type: application/json" \
-H "Cache-Control: no-cache" \
-H "Ocp-Apim-Subscription-Key: YOUR_API_KEY" \
--data-raw '{
"requestId": "12gkggc805rmw0cwmg9skrgcb8"
}'
Output
{
"success": true,
"id": "12gkggc805rmw0cwmg9skrgcb8",
"status": "succeeded",
"output": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/..."
}
Request Parameters - Video Status
| Parameter | Required | Type | Description |
|---|---|---|---|
| requestId | Yes | string | The prediction ID returned from the generate endpoint |
Example Request
{
"requestId": "12gkggc805rmw0cwmg9skrgcb8"
}
Response
{
"success": true,
"id": "12gkggc805rmw0cwmg9skrgcb8",
"status": "succeeded",
"input": {
"prompt": "A cat walking in a garden",
"aspect_ratio": "16:9",
"resolution": "720p",
"fps": 24,
"duration": 5,
"prompt_upsampling": true,
"disable_safety_filter": true,
"save_audio": true
},
"output": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/p-video/12gkggc805rmw0cwmg9skrgcb8_output_0.mp4",
"created_at": "2026-02-28T11:47:49.377Z"
}
Request Headers
| Header | Value |
|---|---|
| Content-Type | application/json |
| Cache-Control | no-cache |
| Ocp-Apim-Subscription-Key | YOUR_API_KEY |
Response Handling
Common status codes for Video Status.
| Code | Meaning |
|---|---|
| 200 | Success |
| 400 | Bad Request |
| 401 | Unauthorized |
| 403 | Forbidden |
| 404 | Not Found |
| 429 | Too Many Requests |
| 500 | Internal Server Error |
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 'p-video' not found or is disabled"
}
Error via Status/Webhook
{
"request_id": "p-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "p-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/p-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
Response (Completed)
{
"request_id": "p-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "p-video",
"error": null,
"output": {
"media_url": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/p-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.
P Video v1 Text to Video API Pricing
| Resolution | Duration | Price (USD) |
|---|---|---|
| 720p | 1s | $0.02 |
| 720p | 1s | $0.005 |
| 1080p | 1s | $0.04 |
| 1080p | 1s | $0.01 |