Vibeo API: Pricing, Documentation
by Pixazo
Vibeo is a video generation model that produces short cinematic clips with synchronised native audio. It accepts either a text prompt or a single still image as its starting point, so the same model covers both storyboarding from a written description and animating an existing frame. Output is available at 480P and 768P, with clip lengths from 5 to 15 seconds and a choice of six aspect ratios covering cinematic, landscape, square and vertical formats. A built-in prompt expansion mode rewrites terse prompts into fuller scene descriptions, and can be disabled when you want the model to follow your wording exactly.

Models Version
Get $5 Free Credit on First Payment
No strings attached — add funds and get $5 bonus instantly
POST https://gateway.pixazo.ai/vibeo-mode/v1/text-to-videoVibeo API Documentation (Text to Video)
All requests require an API key passed via header.
| Header | Type | Required | Description |
|---|---|---|---|
| Ocp-Apim-Subscription-Key | string | Yes | Your API subscription key |
Vibeo API (Text to Video)
Request Code
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"
}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
terminalfires exactly once, on COMPLETED or FAILED.syncalso 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
200within a few seconds; slow endpoints are treated as failed deliveries. - HTTPS is required.
Request Parameters - Vibeo API (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
-> ERRORTypical Workflow
- POST the request body to
https://gateway.pixazo.ai/vibeo-mode/v1/text-to-video. - Read
request_idfrom the 202 response. - Poll
https://gateway.pixazo.ai/v2/requests/status/{request_id}every few seconds, or wait for the webhook. - On COMPLETED, download
output.media_url.
Vibeo API Pricing — Per-Second Rates
| Resolution | Price (USD) |
|---|---|
| 768P | $0.08/sec |
| 480P | $0.05/sec |
POST https://gateway.pixazo.ai/vibeo-mode/v1/image-to-videoVibeo API Documentation (Image to Video)
All requests require an API key passed via header.
| Header | Type | Required | Description |
|---|---|---|---|
| Ocp-Apim-Subscription-Key | string | Yes | Your API subscription key |
Vibeo API (Image to Video)
Request Code
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"
}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
terminalfires exactly once, on COMPLETED or FAILED.syncalso 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
200within a few seconds; slow endpoints are treated as failed deliveries. - HTTPS is required.
Request Parameters - Vibeo API (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
-> ERRORTypical Workflow
- POST the request body to
https://gateway.pixazo.ai/vibeo-mode/v1/image-to-video. - Read
request_idfrom the 202 response. - Poll
https://gateway.pixazo.ai/v2/requests/status/{request_id}every few seconds, or wait for the webhook. - On COMPLETED, download
output.media_url.
Vibeo API Pricing — Per-Second Rates
| Resolution | Price (USD) |
|---|---|
| 768P | $0.08/sec |
| 480P | $0.05/sec |
⚡ Performance
Live usage measured on Pixazo's gateway, split by model version. Generation time is how long a generation takes end-to-end (lower is better). Success rate is the percent of generations that complete (higher is better).
〰 Uptime
Percent of generations that succeeded over the selected period, per model version.