# P Video API

> Provider: **Pruna AI**
> Source: https://www.pixazo.ai/models/p-video

AI-powered video generation model supporting text-to-video, image-to-video, audio-conditioned, and image+audio generation modes.

## P Video Avatar

### Image to Video

## Base URL

```
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

HTTP Python JavaScript cURL

```
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"
}
```

[Try Now](https://api.pixazo.ai/api-details#api=p-video-avatar&operation=video-status)

## 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

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

## Base URL

```
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

HTTP Python JavaScript cURL

```
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"
}
```

[Try Now](https://api.pixazo.ai/api-details#api=p-video&operation=video-request)

## 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

HTTP Python JavaScript cURL

```
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/..."
}
```

[Try Now](https://api.pixazo.ai/api-details#api=p-video&operation=video-status)

## 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

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.
