Pixazo APIModelsP Video
Pixazo APIModelsP Video

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.

Get API Key
P Video API

Models Version

LIMITED TIME OFFER

Get $5 Free Credit on First Payment

No strings attached — add funds and get $5 bonus instantly

Claim Your $5 →

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.

HeaderTypeRequiredDescription
Ocp-Apim-Subscription-KeystringYesYour 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 submit request to receive a POST callback when the job completes — no polling required.

Webhook Headers

HeaderRequiredDefaultDescription
X-Webhook-URLYes (to enable)HTTPS endpoint on your server that will receive the POST callback. Must respond 2xx within a few seconds (process async if needed).
X-Webhook-ModeNoterminalterminal — fires once at the final status (COMPLETED/FAILED/ERROR). sync — fires on every poll cycle plus the terminal event, and caps the queue’s polling delay at 15s for tighter progress updates.

Example: enable webhook

X-Webhook-URL: https://your-server.com/webhook/callback
X-Webhook-Mode: terminal

Callback Payload

Your endpoint receives a POST application/json with the same shape as the GET /v2/requests/status/{request_id} response. Example terminal callback (mode terminal):

{
  "request_id": "p-video-avatar_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "COMPLETED",
  "model_id": "p-video-avatar",
  "error": null,
  "output": {
    "media_url": [
      "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/p-video-avatar_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/output.mp4"
    ],
    "media_type": "video/mp4"
  },
  "created_at": "2026-05-22T13:17:32.110Z",
  "updated_at": "2026-05-22 13:19:23",
  "completed_at": "2026-05-22 13:19:23"
}

Failure callback shape

{
  "request_id": "p-video-avatar_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "ERROR",
  "model_id": "p-video-avatar",
  "error": "Description of the error",
  "output": null,
  "created_at": "...",
  "updated_at": "...",
  "completed_at": "..."
}

Delivery semantics

  • terminal mode (default) — exactly one POST when the request reaches a terminal status. No callback during PROCESSING.
  • sync modePOST on every status poll (with delay capped at ~15s) plus a final POST at terminal status. Use when you want progress updates.
  • Idempotency — use request_id as your idempotency key. Network retries can deliver the same callback more than once; your handler must tolerate duplicates.
  • Response — respond 200 OK within a few seconds. The queue does not block on slow handlers, but persistent failures may stop further deliveries.
  • HTTPS required — plain http:// URLs are rejected.

Request Parameters - P Video Avatar Generation

ParameterRequiredTypeDefaultAllowed values / rangeDescription
imageYesstring (URL)Publicly accessible URL of the input image used as the first frame. Supported formats: jpg, jpeg, png, webp.
audioNostring (URL)Optional uploaded audio to drive lip-sync. If both audio and voice_script are provided, audio wins.
voiceNostring"Zephyr (Female)"(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)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_languageNostring"English (US)"English (US), English (UK), Spanish, French, German, Italian, Portuguese (Brazil), Japanese, Korean, HindiOutput speech language. Allowed values: English (US), English (UK), Spanish, French, German, Italian, Portuguese (Brazil), Japanese, Korean, Hindi.
voice_scriptNostring""Script the person speaks (ignored if audio is set).
voice_promptNostring"Say the following."Style/tone/pacing/emotion guidance for the TTS engine.
video_promptNostring"The person is talking."Visual prompt describing the video.
resolutionNostring"720p"720p , 1080pOutput resolution. Allowed values: 720p, 1080p.
seedNointegerrandomRandom seed for reproducibility. Must be a non-negative integer (≥ 0).
disable_safety_filterNobooleantruetrue, falseWhen true, skip the safety check on prompts and image.
disable_prompt_upsamplingNobooleanfalsetrue, falseWhen true, skip the multimodal prompt upsampler and pass the raw prompt through.
no_opNobooleanfalsetrue, falseHealth-check mode — returns status without running inference.
webhookNostring (URL)Gateway will POST the final result to this URL when the prediction reaches a terminal state.
webhook_events_filterNostring[]include completed , failed , canceledRestrict 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-Typeapplication/json
Cache-Controlno-cache
Ocp-Apim-Subscription-KeyYOUR_SUBSCRIPTION_KEY

Response Handling

Common status codes.

CodeMeaning
202Accepted — Request queued
Bad Request
401Unauthorized
402Insufficient Balance
403Forbidden
Too Many Requests
500Internal 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

FieldTypeDescription
request_idstringUnique request identifier
statusstringQUEUED, PROCESSING, COMPLETED, FAILED, or ERROR
model_idstringModel that processed the request
errorstring|nullError message if failed
output.media_urlarrayURLs to generated media (R2 CDN)
output.media_typestringMIME type (video/mp4)
created_atstringWhen request was created
completed_atstring|nullWhen request completed
polling_urlstringStatus URL (initial response only)

Status Values

StatusDescription
QUEUEDRequest accepted, waiting to be processed
PROCESSINGBeing processed by the model
COMPLETEDDone — output contains the result
FAILEDFailed — check error field
ERRORSystem error — not charged

Status Flow

QUEUED → PROCESSING → COMPLETED
                    → FAILED
                    → ERROR

Typical Workflow

  1. Send a generate request to the API endpoint
  2. Save the request_id from the response
  3. Poll every 5-10 seconds: GET /v2/requests/status/{request_id}
  4. When status is "COMPLETED", download from output.media_url

Tip: Use X-Webhook-URL header to get a callback instead of polling.

P Video Avatar Image to Video API Pricing

ResolutionDurationPrice (USD)
720p1s$0.025
1080p1s$0.045
2. P Video v1

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.

HeaderTypeRequiredDescription
Ocp-Apim-Subscription-KeystringYesYour 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 submit request to receive a POST callback when the job completes — no polling required.

Webhook Headers

HeaderRequiredDefaultDescription
X-Webhook-URLYes (to enable)HTTPS endpoint on your server that will receive the POST callback. Must respond 2xx within a few seconds (process async if needed).
X-Webhook-ModeNoterminalterminal — fires once at the final status (COMPLETED/FAILED/ERROR). sync — fires on every poll cycle plus the terminal event, and caps the queue’s polling delay at 15s for tighter progress updates.

Example: enable webhook

X-Webhook-URL: https://your-server.com/webhook/callback
X-Webhook-Mode: terminal

Callback Payload

Your endpoint receives a POST application/json with the same shape as the GET /v2/requests/status/{request_id} response. Example terminal callback (mode terminal):

{
  "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-xxxx-xxxx-xxxxxxxxxxxx/output.mp4"
    ],
    "media_type": "video/mp4"
  },
  "created_at": "2026-05-22T13:17:32.110Z",
  "updated_at": "2026-05-22 13:19:23",
  "completed_at": "2026-05-22 13:19:23"
}

Failure callback shape

{
  "request_id": "p-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "ERROR",
  "model_id": "p-video",
  "error": "Description of the error",
  "output": null,
  "created_at": "...",
  "updated_at": "...",
  "completed_at": "..."
}

Delivery semantics

  • terminal mode (default) — exactly one POST when the request reaches a terminal status. No callback during PROCESSING.
  • sync modePOST on every status poll (with delay capped at ~15s) plus a final POST at terminal status. Use when you want progress updates.
  • Idempotency — use request_id as your idempotency key. Network retries can deliver the same callback more than once; your handler must tolerate duplicates.
  • Response — respond 200 OK within a few seconds. The queue does not block on slow handlers, but persistent failures may stop further deliveries.
  • HTTPS required — plain http:// URLs are rejected.

Request Parameters - Video Request

ParameterRequiredTypeDefaultAllowed values / rangeDescription
promptYesstringText prompt for video generation
imageNostring (URI)Input image URL for image-to-video generation (jpg, jpeg, png, webp)
audioNostring (URI)Input audio URL to condition video generation (flac, mp3, wav)
durationNointeger5Duration of the video in seconds (1-10). Ignored when audio is provided
aspect_ratioNostring"16:9"Aspect ratio of the video. Ignored when image is provided
resolutionNostring"720p"Resolution: "720p", "1080p"
fpsNointeger24Frames per second: 24, 48
draftNobooleanfalsetrue, falseDraft mode — generates a lower-quality preview faster
prompt_upsamplingNobooleantrueEnhance the prompt for better resultstrue, false
disable_safety_filterNobooleantru etrue, falseDisable safety filter for prompts and input image
save_audioNobooleantruetrue, falseSave the video with audio
seedNointegerRandom seed for reproducible generation
webhookNostringWebhook URL for async notifications when generation completes
webhook_events_filterNoarrayEvent 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-Typeapplication/json
Cache-Controlno-cache
Ocp-Apim-Subscription-KeyYOUR_API_KEY

Response Handling

Common status codes.

CodeMeaning
202Accepted — Request queued
Bad Request
401Unauthorized
402Insufficient Balance
403Forbidden
Too Many Requests
500Internal 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

FieldTypeDescription
request_idstringUnique request identifier
statusstringQUEUED, PROCESSING, COMPLETED, FAILED, or ERROR
model_idstringModel that processed the request
errorstring|nullError message if failed
output.media_urlarrayURLs to generated media (R2 CDN)
output.media_typestringMIME type of the output
created_atstringWhen request was created
completed_atstring|nullWhen request completed
polling_urlstringStatus URL (initial response only)

Status Values

StatusDescription
QUEUEDRequest accepted, waiting to be processed
PROCESSINGBeing processed by the model
COMPLETEDDone — output contains the result
FAILEDFailed — check error field
ERRORSystem error — not charged

Status Flow

QUEUED → PROCESSING → COMPLETED
                    → FAILED
                    → ERROR

Typical Workflow

  1. Send a generate request to the API endpoint
  2. Save the request_id from the response
  3. Poll every 5-10 seconds: GET /v2/requests/status/{request_id}
  4. When status is "COMPLETED", download from output.media_url

Tip: Use X-Webhook-URL header to get a callback instead of polling.

P Video v1 Text to Video API Pricing

ResolutionDurationPrice (USD)
720p1s$0.02
720p1s$0.005
1080p1s$0.04
1080p1s$0.01