# Veo Video API

> Provider: **Google**
> Source: https://www.pixazo.ai/models/veo

Advanced video generation by Google DeepMind.

## Veo v3.1 Fast

### Text to Video

## Base URL

```
https://gateway.pixazo.ai/veo31f/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

## Veo 3.1 Fast Video Generation Request - Veo 3.1 Fast API

## Request Code

HTTP Python JavaScript cURL

```
POST https://gateway.pixazo.ai/veo31f/v1/veo-3.1-fast/generate HTTP/1.1
Content-Type: application/json
Cache-Control: no-cache
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY

{
  "prompt": "A snow-covered tree gradually transforms as winter melts away, snow dripping from branches as green leaves emerge and colorful flowers bloom around the base, transitioning from a cold white landscape to a vibrant lush green meadow full of life",
  "image": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/f1.png",
  "last_frame": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/f2.png",
  "duration": 8,
  "aspect_ratio": "16:9",
  "resolution": "1080p",
  "negative_prompt": "blurry, low quality, distorted, artifacts, text, watermark",
  "generate_audio": true,
  "seed": 42
}
```

```
import requests

url = "https://gateway.pixazo.ai/veo31f/v1/veo-3.1-fast/generate"
headers = {
    "Content-Type": "application/json",
    "Cache-Control": "no-cache",
    "Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
}
data = {
    "prompt": "A snow-covered tree gradually transforms as winter melts away, snow dripping from branches as green leaves emerge and colorful flowers bloom around the base, transitioning from a cold white landscape to a vibrant lush green meadow full of life",
    "image": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/f1.png",
    "last_frame": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/f2.png",
    "duration": 8,
    "aspect_ratio": "16:9",
    "resolution": "1080p",
    "negative_prompt": "blurry, low quality, distorted, artifacts, text, watermark",
    "generate_audio": True,
    "seed": 42
}

response = requests.post(url, json=data, headers=headers)
print(response.json())
```

```
const url = 'https://gateway.pixazo.ai/veo31f/v1/veo-3.1-fast/generate';
const headers = {
  'Content-Type': 'application/json',
  'Cache-Control': 'no-cache',
  'Ocp-Apim-Subscription-Key': 'YOUR_SUBSCRIPTION_KEY'
};
const data = {
  prompt: 'A snow-covered tree gradually transforms as winter melts away, snow dripping from branches as green leaves emerge and colorful flowers bloom around the base, transitioning from a cold white landscape to a vibrant lush green meadow full of life',
  image: 'https://pub-582b7213209642b9b995c96c95a30381.r2.dev/f1.png',
  last_frame: 'https://pub-582b7213209642b9b995c96c95a30381.r2.dev/f2.png',
  duration: 8,
  aspect_ratio: '16:9',
  resolution: '1080p',
  negative_prompt: 'blurry, low quality, distorted, artifacts, text, watermark',
  generate_audio: true,
  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/veo31f/v1/veo-3.1-fast/generate" \
  -H "Content-Type: application/json" \
  -H "Cache-Control: no-cache" \
  -H "Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY" \
  --data-raw '{
    "prompt": "A snow-covered tree gradually transforms as winter melts away, snow dripping from branches as green leaves emerge and colorful flowers bloom around the base, transitioning from a cold white landscape to a vibrant lush green meadow full of life",
    "image": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/f1.png",
    "last_frame": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/f2.png",
    "duration": 8,
    "aspect_ratio": "16:9",
    "resolution": "1080p",
    "negative_prompt": "blurry, low quality, distorted, artifacts, text, watermark",
    "generate_audio": true,
    "seed": 42
  }'
```

## Output

```
{
  "request_id": "veo-3-1-fast_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "QUEUED",
  "polling_url": "https://gateway.pixazo.ai/v2/requests/status/veo-3-1-fast_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
```

[Try Now](https://api.pixazo.ai/api-details#api=veo-3-1-fast&operation=video-generation-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 - Veo 3.1 Fast Video Generation

Parameter

Required

Type

Description

prompt

Yes

string

Text prompt describing the desired video content, motion, mood, or style for the generated video.

image

No

string

Publicly accessible URL of a reference image to guide the video generation. Used as the starting frame or visual reference.

last\_frame

No

string

Publicly accessible URL of an image to use as the last frame of the video, enabling start-to-end visual transitions.

duration

No

number

Duration of the generated video in seconds. Supported values: 5, 6, 8. Default varies by model configuration.

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".

negative\_prompt

No

string

Text describing elements to avoid in the generated video (e.g., "blurry, low quality, distorted, artifacts, text, watermark").

generate\_audio

No

boolean

When true, generates synchronized audio alongside the video output.

seed

No

number

Random seed for reproducible video generation. Use the same seed to get consistent results across runs.

## Example Request

```
{
  "prompt": "A snow-covered tree gradually transforms as winter melts away, snow dripping from branches as green leaves emerge and colorful flowers bloom around the base, transitioning from a cold white landscape to a vibrant lush green meadow full of life",
  "image": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/f1.png",
  "last_frame": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/f2.png",
  "duration": 8,
  "aspect_ratio": "16:9",
  "resolution": "1080p",
  "negative_prompt": "blurry, low quality, distorted, artifacts, text, watermark",
  "generate_audio": true,
  "seed": 42
}
```

## Response

```
{
  "request_id": "veo-3-1-fast_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "QUEUED",
  "polling_url": "https://gateway.pixazo.ai/v2/requests/status/veo-3-1-fast_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 'veo-3-1-fast' not found or is disabled"
}
```

### Error via Status/Webhook

```
{
  "request_id": "veo-3-1-fast_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "ERROR",
  "model_id": "veo-3-1-fast",
  "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/veo-3-1-fast_019d42ce-ae71-7999-24c9-5d76447ecafb4"
```

## Response (Completed)

```
{
  "request_id": "veo-3-1-fast_019d42ce-ae71-7999-24c9-5d76447ecafb4",
  "status": "COMPLETED",
  "model_id": "veo-3-1-fast",
  "error": null,
  "output": {
    "media_url": [
      "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/veo-3-1-fast_019d42ce-ae71-7999-24c9-5d76447ecafb4/output.mp4"
    ],
    "media_type": "video/mp4"
  },
  "created_at": "2026-04-01T07:32:03.749Z",
  "updated_at": "2026-04-01T07:32:20.000Z",
  "completed_at": "2026-04-01T07: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

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.

## Veo v3.1

### Text to Video

## Base URL

```
https://gateway.pixazo.ai/veo/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 Generation Request - Veo 3.1 API

## Request Code

HTTP Python JavaScript cURL

```
POST https://gateway.pixazo.ai/veo/v1/veo-3.1/generate
Content-Type: application/json
Ocp-Apim-Subscription-Key: your-subscription-key

{
  "prompt": "A serene lake with mountains in the background at sunset",
  "aspect_ratio": "16:9",
  "duration": 8,
  "resolution": "1080p",
  "generate_audio": true,
  "negative_prompt": "blur, distortion, low quality",
  "webhook": "https://your-server.com/webhook"
}
```

```
import requests

url = "https://gateway.pixazo.ai/veo/v1/veo-3.1/generate"
headers = {
    "Content-Type": "application/json",
    "Ocp-Apim-Subscription-Key": "your-subscription-key"
}
data = {
    "prompt": "A serene lake with mountains in the background at sunset",
    "aspect_ratio": "16:9",
    "duration": 8,
    "resolution": "1080p",
    "generate_audio": True,
    "negative_prompt": "blur, distortion, low quality",
    "webhook": "https://your-server.com/webhook"
}

response = requests.post(url, json=data, headers=headers)
print(response.json())
```

```
// Node.js example
const response = await fetch('https://gateway.pixazo.ai/veo/v1/veo-3.1/generate', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Ocp-Apim-Subscription-Key': 'your-subscription-key'
  },
  body: JSON.stringify({
    prompt: 'A serene lake with mountains in the background at sunset',
    aspect_ratio: '16:9',
    duration: 8,
    resolution: '1080p',
    generate_audio: true,
    negative_prompt: 'blur, distortion, low quality',
    webhook: 'https://your-server.com/webhook'
  })
});

const data = await response.json();
console.log('Video ID:', data.id);
console.log('Status:', data.status);
```

```
curl -X POST https://gateway.pixazo.ai/veo/v1/veo-3.1/generate \
  -H "Content-Type: application/json" \
  -H "Ocp-Apim-Subscription-Key: your-subscription-key" \
  -d '{
    "prompt": "A serene lake with mountains in the background at sunset",
    "aspect_ratio": "16:9",
    "duration": 8,
    "resolution": "1080p",
    "generate_audio": true,
    "negative_prompt": "blur, distortion, low quality",
    "webhook": "https://your-server.com/webhook"
  }'
```

## Output

```
{
  "request_id": "veo-3-1_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "QUEUED",
  "polling_url": "https://gateway.pixazo.ai/v2/requests/status/veo-3-1_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
```

[Try Now](https://api.pixazo.ai/api-details#api=veo-3-1-api&operation=video-generation-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 Generation Request

Parameter

Required

Type

Description

prompt

Yes

string

Text description of the video to generate (required)

aspect\_ratio

No

string

Video aspect ratio: "16:9" or "9:16"

duration

No

integer

Video duration in seconds: 4, 6, or 8

resolution

No

string

Video resolution: "720p" or "1080p"

generate\_audio

No

boolean

Whether to generate audio with the video

negative\_prompt

No

string

What to exclude from the generated video

image

No

string

Input image URL for image-to-video generation

last\_frame

No

string

Ending image URL for interpolation (requires image)

reference\_images

No

array

1-3 reference images for subject-consistent generation (R2V)

seed

No

integer

Random seed for reproducible results (optional)

webhook

No

string

Webhook URL for completion notifications

webhook\_events\_filter

No

array

Event types to receive: \["start", "completed"\]

## Example Request

```
{
  "prompt": "A serene lake with mountains in the background at sunset",
  "aspect_ratio": "16:9",
  "duration": 8,
  "resolution": "1080p",
  "generate_audio": true,
  "negative_prompt": "blur, distortion, low quality",
  "webhook": "https://your-server.com/webhook"
}
```

## Response

```
{
  "request_id": "veo-3-1_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "QUEUED",
  "polling_url": "https://gateway.pixazo.ai/v2/requests/status/veo-3-1_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
```

## Request Headers

Header

Value

Content-Type

application/json

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 'veo-3-1' not found or is disabled"
}
```

### Error via Status/Webhook

```
{
  "request_id": "veo-3-1_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "ERROR",
  "model_id": "veo-3-1",
  "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/veo-3-1_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
```

## Response (Completed)

```
{
  "request_id": "veo-3-1_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "COMPLETED",
  "model_id": "veo-3-1",
  "error": null,
  "output": {
    "media_url": [
      "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/veo-3-1_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.
