---
type: AI Model
id: vibeo
title: Vibeo API
provider: Pixazo
description: "Vibeo generates short cinematic video with synchronised native audio from either a text prompt or a single still image, at 480P or 768P."
resource: https://www.pixazo.ai/models/vibeo
docs_url: https://www.pixazo.ai/models/vibeo
latest_version: v1
tags:
  - text-to-video
  - image-to-video
  - pixazo
variants:
  - id: vibeo-mode-v1
    name: Vibeo
    version: 1.0
    capabilities:
      - Text to Video
      - Image to Video
timestamp: 2026-08-31T16:52:32.726Z
---

# Vibeo API

> Provider: **Pixazo**
> Source: https://www.pixazo.ai/models/vibeo

Vibeo generates short cinematic video with synchronised native audio from either a text prompt or a single still image, at 480P or 768P.

## Vibeo

### Text to Video

## Vibeo Text to Video API Documentation

```
POST https://gateway.pixazo.ai/vibeo-mode/v1/text-to-video
```

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

## Request Code

HTTPPythonJavaScriptcURL

```
POST https://gateway.pixazo.ai/vibeo-mode/v1/text-to-video HTTP/1.1
Ocp-Apim-Subscription-Key: YOUR_API_KEY
Content-Type: application/json

{
  "prompt": "a paper boat drifting down a rain-soaked street at night, neon reflections",
  "duration": 5,
  "resolution": "768P",
  "aspect_ratio": "16:9",
  "prompt_expansion_mode": "balanced"
}
```

```
import requests

resp = requests.post(
    "https://gateway.pixazo.ai/vibeo-mode/v1/text-to-video",
    headers={
        "Ocp-Apim-Subscription-Key": "YOUR_API_KEY",
        "Content-Type": "application/json",
    },
    json={
        "prompt": "a paper boat drifting down a rain-soaked street at night, neon reflections",
        "duration": 5,
        "resolution": "768P",
        "aspect_ratio": "16:9",
        "prompt_expansion_mode": "balanced"
    },
)
job = resp.json()
print(job["request_id"])
```

```
const resp = await fetch("https://gateway.pixazo.ai/vibeo-mode/v1/text-to-video", {
  method: "POST",
  headers: {
    "Ocp-Apim-Subscription-Key": "YOUR_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
  "prompt": "a paper boat drifting down a rain-soaked street at night, neon reflections",
  "duration": 5,
  "resolution": "768P",
  "aspect_ratio": "16:9",
  "prompt_expansion_mode": "balanced"
}),
});
const job = await resp.json();
console.log(job.request_id);
```

```
curl -X POST https://gateway.pixazo.ai/vibeo-mode/v1/text-to-video \
  -H "Ocp-Apim-Subscription-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"prompt": "a paper boat drifting down a rain-soaked street at night, neon reflections", "duration": 5, "resolution": "768P", "aspect_ratio": "16:9", "prompt_expansion_mode": "balanced"}'
```

## Output

```
{
  "request_id": "vibeo-mode_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "QUEUED",
  "polling_url": "https://gateway.pixazo.ai/v2/requests/status/vibeo-mode_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
```

[Try Now](https://api.pixazo.ai/api-details#api=vibeo-mode&operation=text-to-video)

## Webhook (Optional)

Instead of polling, supply a callback URL and Pixazo will POST the result to it as soon as the request reaches a terminal state.

Header

Type

Required

Description

X-Webhook-URL

string

No

HTTPS endpoint that receives the callback. Supplying it enables webhook delivery.

X-Webhook-Mode

string

No

`terminal` (default) delivers once on COMPLETED or FAILED. `sync` also delivers intermediate status changes.

### Example: enable webhook

```
curl -X POST https://gateway.pixazo.ai/vibeo-mode/v1/text-to-video \
  -H "Ocp-Apim-Subscription-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "X-Webhook-URL: https://your-server.example.com/hooks/vibeo" \
  -H "X-Webhook-Mode: terminal" \
  -d '{"prompt": "a paper boat drifting down a rain-soaked street at night, neon reflections", "prompt_expansion_mode": "balanced"}'
```

### Callback Payload

```
{
  "request_id": "vibeo-mode_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "COMPLETED",
  "model_id": "vibeo-mode",
  "error": null,
  "output": {
    "media_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/vibeo-mode_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/output.mp4",
    "media_type": "video/mp4"
  },
  "created_at": "2026-08-27T09:42:17.774Z",
  "completed_at": "2026-08-27T09:45:02.118Z"
}
```

### Failure callback shape

```
{
  "request_id": "vibeo-mode_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "ERROR",
  "model_id": "vibeo-mode",
  "error": "Generation failed upstream",
  "output": null
}
```

### Delivery semantics

-   `terminal` fires exactly once, on COMPLETED or FAILED.
-   `sync` also fires on intermediate transitions such as QUEUED → PROCESSING.
-   Deliveries are idempotent on `request_id` — de-duplicate on it, as a callback may be retried.
-   Respond `200` within a few seconds; slow endpoints are treated as failed deliveries.
-   HTTPS is required.

## Request Parameters - Text to Video

Parameter

Required

Type

Default

Allowed values / range

Description

`prompt`

Yes

string

—

Any text

Description of the video to generate.

`duration`

No

integer

5

5 – 15

Length of the finished video in seconds. Billed per second.

`resolution`

No

string

768P

480P, 768P

Output resolution. Determines the per-second price: 480P $0.05/s, 768P $0.08/s.

`aspect_ratio`

No

string

16:9

21:9, 16:9, 4:3, 1:1, 3:4, 9:16

Frame shape of the output video.

`prompt_expansion_mode`

Yes

string

balanced

disabled, balanced, quality

How much the prompt is rewritten before generation. `disabled` uses your wording verbatim; `balanced` adds about a second; `quality` spends up to ~30s building a richer prompt.

`enable_safety_checker`

No

boolean

true

true, false

Runs the content safety check over the generated video.

`seed`

No

integer

— (random)

Any integer

Fixes sampling so the same prompt reproduces the same video.

## Example Request

```
{
  "prompt": "a paper boat drifting down a rain-soaked street at night, neon reflections",
  "prompt_expansion_mode": "balanced"
}
```

## Response

```
{
  "request_id": "vibeo-mode_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "QUEUED",
  "polling_url": "https://gateway.pixazo.ai/v2/requests/status/vibeo-mode_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
```

## Request Headers

Header

Value

Required

Ocp-Apim-Subscription-Key

YOUR\_API\_KEY

Yes

Content-Type

application/json

Yes

X-Webhook-URL

https://your-server.example.com/hooks/vibeo

No

X-Webhook-Mode

terminal | sync

No

## Response Handling

Code

Meaning

What to do

202

Accepted and queued

Read `request_id` and poll the status endpoint.

400

Invalid request body or parameter value

Check the parameter table above; the message names the offending field.

401

Missing or invalid subscription key

Check the `Ocp-Apim-Subscription-Key` header.

402

Insufficient wallet balance

Top up. The message names the resolved price for this request.

403

Key not subscribed to this product

Subscribe the key to the API product.

429

Rate limit exceeded

Back off and retry; the limit is 50 calls per 60 seconds.

500

Server error

Retry once; if it persists, contact support with the `request_id`.

## Error Responses

### Insufficient balance (402)

```
{
  "error": "Insufficient balance",
  "required": 0.4,
  "available": 0.12,
  "currency": "USD"
}
```

### Invalid parameter (400)

```
{
  "error": "Invalid value for 'duration': must be between 5 and 15"
}
```

### Failure after acceptance

A request that was accepted can still fail during generation. That is reported through the status endpoint or the webhook, with `status` set to `ERROR`:

```
{
  "request_id": "vibeo-mode_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "ERROR",
  "model_id": "vibeo-mode",
  "error": "Generation failed upstream",
  "output": null
}
```

## Retrieving Results

Poll the status endpoint with the `request_id` returned by the submit call.

```
GET https://gateway.pixazo.ai/v2/requests/status/{request_id}
```

### cURL Example

```
curl https://gateway.pixazo.ai/v2/requests/status/vibeo-mode_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
  -H "Ocp-Apim-Subscription-Key: YOUR_API_KEY"
```

### Response (Completed)

```
{
  "request_id": "vibeo-mode_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "COMPLETED",
  "model_id": "vibeo-mode",
  "error": null,
  "output": {
    "media_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/vibeo-mode_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/output.mp4",
    "media_type": "video/mp4"
  },
  "created_at": "2026-08-27T09:42:17.774Z",
  "completed_at": "2026-08-27T09:45:02.118Z"
}
```

## Response Fields

Field

Type

Description

request\_id

string

Identifier for this request. Use it to poll and to de-duplicate webhooks.

status

string

QUEUED, PROCESSING, COMPLETED, FAILED or ERROR.

model\_id

string

Always `vibeo-mode`.

error

string | null

Failure reason, null while the request is healthy.

output.media\_url

string

URL of the finished MP4, re-hosted by Pixazo.

output.media\_type

string

Always `video/mp4`.

created\_at

string

ISO-8601 timestamp of submission.

completed\_at

string

ISO-8601 timestamp of the terminal transition.

polling\_url

string

Fully-formed status URL for this request.

## Status Values

Status

Terminal

Meaning

QUEUED

No

Accepted and waiting for a generation slot.

PROCESSING

No

Generation is running.

COMPLETED

Yes

Finished. `output.media_url` holds the video.

FAILED

Yes

Generation failed. Not billed.

ERROR

Yes

The request could not be processed. Not billed.

## Status Flow

```
QUEUED -> PROCESSING -> COMPLETED
                     -> FAILED
                     -> ERROR
```

## Typical Workflow

1.  POST the request body to `https://gateway.pixazo.ai/vibeo-mode/v1/text-to-video`.
2.  Read `request_id` from the 202 response.
3.  Poll `https://gateway.pixazo.ai/v2/requests/status/{request_id}` every few seconds, or wait for the webhook.
4.  On COMPLETED, download `output.media_url`.

### Image to Video

## Vibeo Image to Video API Documentation

```
POST https://gateway.pixazo.ai/vibeo-mode/v1/image-to-video
```

## Authentication

All requests require an API key passed via header.

Header

Type

Required

Description

Ocp-Apim-Subscription-Key

string

Yes

Your API subscription key

## Image to Video - Vibeo

## Request Code

HTTPPythonJavaScriptcURL

```
POST https://gateway.pixazo.ai/vibeo-mode/v1/image-to-video HTTP/1.1
Ocp-Apim-Subscription-Key: YOUR_API_KEY
Content-Type: application/json

{
  "prompt": "the camera slowly pushes in as rain begins to fall",
  "image_url": "https://your-cdn.example.com/first-frame.jpg",
  "duration": 5,
  "resolution": "768P",
  "prompt_expansion_mode": "balanced"
}
```

```
import requests

resp = requests.post(
    "https://gateway.pixazo.ai/vibeo-mode/v1/image-to-video",
    headers={
        "Ocp-Apim-Subscription-Key": "YOUR_API_KEY",
        "Content-Type": "application/json",
    },
    json={
        "prompt": "the camera slowly pushes in as rain begins to fall",
        "image_url": "https://your-cdn.example.com/first-frame.jpg",
        "duration": 5,
        "resolution": "768P",
        "prompt_expansion_mode": "balanced"
    },
)
job = resp.json()
print(job["request_id"])
```

```
const resp = await fetch("https://gateway.pixazo.ai/vibeo-mode/v1/image-to-video", {
  method: "POST",
  headers: {
    "Ocp-Apim-Subscription-Key": "YOUR_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
  "prompt": "the camera slowly pushes in as rain begins to fall",
  "image_url": "https://your-cdn.example.com/first-frame.jpg",
  "duration": 5,
  "resolution": "768P",
  "prompt_expansion_mode": "balanced"
}),
});
const job = await resp.json();
console.log(job.request_id);
```

```
curl -X POST https://gateway.pixazo.ai/vibeo-mode/v1/image-to-video \
  -H "Ocp-Apim-Subscription-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"prompt": "the camera slowly pushes in as rain begins to fall", "image_url": "https://your-cdn.example.com/first-frame.jpg", "duration": 5, "resolution": "768P", "prompt_expansion_mode": "balanced"}'
```

## Output

```
{
  "request_id": "vibeo-mode_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "QUEUED",
  "polling_url": "https://gateway.pixazo.ai/v2/requests/status/vibeo-mode_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
```

[Try Now](https://api.pixazo.ai/api-details#api=vibeo-mode&operation=image-to-video)

## Webhook (Optional)

Instead of polling, supply a callback URL and Pixazo will POST the result to it as soon as the request reaches a terminal state.

Header

Type

Required

Description

X-Webhook-URL

string

No

HTTPS endpoint that receives the callback. Supplying it enables webhook delivery.

X-Webhook-Mode

string

No

`terminal` (default) delivers once on COMPLETED or FAILED. `sync` also delivers intermediate status changes.

### Example: enable webhook

```
curl -X POST https://gateway.pixazo.ai/vibeo-mode/v1/image-to-video \
  -H "Ocp-Apim-Subscription-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "X-Webhook-URL: https://your-server.example.com/hooks/vibeo" \
  -H "X-Webhook-Mode: terminal" \
  -d '{"prompt": "the camera slowly pushes in", "image_url": "https://your-cdn.example.com/first-frame.jpg", "prompt_expansion_mode": "balanced"}'
```

### Callback Payload

```
{
  "request_id": "vibeo-mode_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "COMPLETED",
  "model_id": "vibeo-mode",
  "error": null,
  "output": {
    "media_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/vibeo-mode_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/output.mp4",
    "media_type": "video/mp4"
  },
  "created_at": "2026-08-27T09:42:17.774Z",
  "completed_at": "2026-08-27T09:45:02.118Z"
}
```

### Failure callback shape

```
{
  "request_id": "vibeo-mode_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "ERROR",
  "model_id": "vibeo-mode",
  "error": "Generation failed upstream",
  "output": null
}
```

### Delivery semantics

-   `terminal` fires exactly once, on COMPLETED or FAILED.
-   `sync` also fires on intermediate transitions such as QUEUED → PROCESSING.
-   Deliveries are idempotent on `request_id` — de-duplicate on it, as a callback may be retried.
-   Respond `200` within a few seconds; slow endpoints are treated as failed deliveries.
-   HTTPS is required.

## Request Parameters - Image to Video

Parameter

Required

Type

Default

Allowed values / range

Description

`prompt`

Yes

string

—

Any text

Description of the video to generate.

`image_url`

Yes

string

—

Public https URL of an image

First frame of the video. The output aspect ratio follows this image, so there is no `aspect_ratio` parameter on this operation.

`end_image_url`

No

string

— (none)

Public https URL of an image

Optional last frame. Supply it to generate a first-to-last keyframe transition.

`duration`

No

integer

5

5 – 15

Length of the finished video in seconds. Billed per second.

`resolution`

No

string

768P

480P, 768P

Output resolution. Determines the per-second price: 480P $0.05/s, 768P $0.08/s.

`prompt_expansion_mode`

Yes

string

balanced

disabled, balanced, quality

How much the prompt is rewritten before generation. `disabled` uses your wording verbatim; `balanced` adds about a second; `quality` spends up to ~30s building a richer prompt.

`enable_safety_checker`

No

boolean

true

true, false

Runs the content safety check over the generated video.

`seed`

No

integer

— (random)

Any integer

Fixes sampling so the same prompt reproduces the same video.

## Example Request

```
{
  "prompt": "the camera slowly pushes in",
  "image_url": "https://your-cdn.example.com/first-frame.jpg",
  "prompt_expansion_mode": "balanced"
}
```

## Response

```
{
  "request_id": "vibeo-mode_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "QUEUED",
  "polling_url": "https://gateway.pixazo.ai/v2/requests/status/vibeo-mode_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
```

## Request Headers

Header

Value

Required

Ocp-Apim-Subscription-Key

YOUR\_API\_KEY

Yes

Content-Type

application/json

Yes

X-Webhook-URL

https://your-server.example.com/hooks/vibeo

No

X-Webhook-Mode

terminal | sync

No

## Response Handling

Code

Meaning

What to do

202

Accepted and queued

Read `request_id` and poll the status endpoint.

400

Invalid request body or parameter value

Check the parameter table above; the message names the offending field.

401

Missing or invalid subscription key

Check the `Ocp-Apim-Subscription-Key` header.

402

Insufficient wallet balance

Top up. The message names the resolved price for this request.

403

Key not subscribed to this product

Subscribe the key to the API product.

429

Rate limit exceeded

Back off and retry; the limit is 50 calls per 60 seconds.

500

Server error

Retry once; if it persists, contact support with the `request_id`.

## Error Responses

### Insufficient balance (402)

```
{
  "error": "Insufficient balance",
  "required": 0.4,
  "available": 0.12,
  "currency": "USD"
}
```

### Invalid parameter (400)

```
{
  "error": "Invalid value for 'duration': must be between 5 and 15"
}
```

### Failure after acceptance

A request that was accepted can still fail during generation. That is reported through the status endpoint or the webhook, with `status` set to `ERROR`:

```
{
  "request_id": "vibeo-mode_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "ERROR",
  "model_id": "vibeo-mode",
  "error": "Generation failed upstream",
  "output": null
}
```

## Retrieving Results

Poll the status endpoint with the `request_id` returned by the submit call.

```
GET https://gateway.pixazo.ai/v2/requests/status/{request_id}
```

### cURL Example

```
curl https://gateway.pixazo.ai/v2/requests/status/vibeo-mode_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
  -H "Ocp-Apim-Subscription-Key: YOUR_API_KEY"
```

### Response (Completed)

```
{
  "request_id": "vibeo-mode_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "COMPLETED",
  "model_id": "vibeo-mode",
  "error": null,
  "output": {
    "media_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/vibeo-mode_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/output.mp4",
    "media_type": "video/mp4"
  },
  "created_at": "2026-08-27T09:42:17.774Z",
  "completed_at": "2026-08-27T09:45:02.118Z"
}
```

## Response Fields

Field

Type

Description

request\_id

string

Identifier for this request. Use it to poll and to de-duplicate webhooks.

status

string

QUEUED, PROCESSING, COMPLETED, FAILED or ERROR.

model\_id

string

Always `vibeo-mode`.

error

string | null

Failure reason, null while the request is healthy.

output.media\_url

string

URL of the finished MP4, re-hosted by Pixazo.

output.media\_type

string

Always `video/mp4`.

created\_at

string

ISO-8601 timestamp of submission.

completed\_at

string

ISO-8601 timestamp of the terminal transition.

polling\_url

string

Fully-formed status URL for this request.

## Status Values

Status

Terminal

Meaning

QUEUED

No

Accepted and waiting for a generation slot.

PROCESSING

No

Generation is running.

COMPLETED

Yes

Finished. `output.media_url` holds the video.

FAILED

Yes

Generation failed. Not billed.

ERROR

Yes

The request could not be processed. Not billed.

## Status Flow

```
QUEUED -> PROCESSING -> COMPLETED
                     -> FAILED
                     -> ERROR
```

## Typical Workflow

1.  POST the request body to `https://gateway.pixazo.ai/vibeo-mode/v1/image-to-video`.
2.  Read `request_id` from the 202 response.
3.  Poll `https://gateway.pixazo.ai/v2/requests/status/{request_id}` every few seconds, or wait for the webhook.
4.  On COMPLETED, download `output.media_url`.
