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.

Get API Key
Vibeo API

Models Version

WELCOME BONUS

Get $5 Free Credit on First Payment

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

Claim Your $5 →
POST https://gateway.pixazo.ai/vibeo-mode/v1/text-to-video

Vibeo API Documentation (Text to Video)

All requests require an API key passed via header.

HeaderTypeRequiredDescription
Ocp-Apim-Subscription-KeystringYesYour 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.

HeaderTypeRequiredDescription
X-Webhook-URLstringNoHTTPS endpoint that receives the callback. Supplying it enables webhook delivery.
X-Webhook-ModestringNoterminal (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 - Vibeo API (Text to Video)

ParameterRequiredTypeDefaultAllowed values / rangeDescription
promptYesstringAny textDescription of the video to generate.
durationNointeger55 – 15Length of the finished video in seconds. Billed per second.
resolutionNostring768P480P, 768POutput resolution. Determines the per-second price: 480P $0.05/s, 768P $0.08/s.
aspect_ratioNostring16:921:9, 16:9, 4:3, 1:1, 3:4, 9:16Frame shape of the output video.
prompt_expansion_modeYesstringbalanceddisabled, balanced, qualityHow 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_checkerNobooleantruetrue, falseRuns the content safety check over the generated video.
seedNointeger— (random)Any integerFixes 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

HeaderValueRequired
Ocp-Apim-Subscription-KeyYOUR_API_KEYYes
Content-Typeapplication/jsonYes
X-Webhook-URLhttps://your-server.example.com/hooks/vibeoNo
X-Webhook-Modeterminal | syncNo

Response Handling

CodeMeaningWhat to do
202Accepted and queuedRead request_id and poll the status endpoint.
400Invalid request body or parameter valueCheck the parameter table above; the message names the offending field.
401Missing or invalid subscription keyCheck the Ocp-Apim-Subscription-Key header.
402Insufficient wallet balanceTop up. The message names the resolved price for this request.
403Key not subscribed to this productSubscribe the key to the API product.
429Rate limit exceededBack off and retry; the limit is 50 calls per 60 seconds.
500Server errorRetry 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

FieldTypeDescription
request_idstringIdentifier for this request. Use it to poll and to de-duplicate webhooks.
statusstringQUEUED, PROCESSING, COMPLETED, FAILED or ERROR.
model_idstringAlways vibeo-mode.
errorstring | nullFailure reason, null while the request is healthy.
output.media_urlstringURL of the finished MP4, re-hosted by Pixazo.
output.media_typestringAlways video/mp4.
created_atstringISO-8601 timestamp of submission.
completed_atstringISO-8601 timestamp of the terminal transition.
polling_urlstringFully-formed status URL for this request.

Status Values

StatusTerminalMeaning
QUEUEDNoAccepted and waiting for a generation slot.
PROCESSINGNoGeneration is running.
COMPLETEDYesFinished. output.media_url holds the video.
FAILEDYesGeneration failed. Not billed.
ERRORYesThe 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.

Vibeo API Pricing — Per-Second Rates

ResolutionPrice (USD)
768P$0.08/sec
480P$0.05/sec
Image to Video
POST https://gateway.pixazo.ai/vibeo-mode/v1/image-to-video

Vibeo API Documentation (Image to Video)

All requests require an API key passed via header.

HeaderTypeRequiredDescription
Ocp-Apim-Subscription-KeystringYesYour 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.

HeaderTypeRequiredDescription
X-Webhook-URLstringNoHTTPS endpoint that receives the callback. Supplying it enables webhook delivery.
X-Webhook-ModestringNoterminal (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 - Vibeo API (Image to Video)

ParameterRequiredTypeDefaultAllowed values / rangeDescription
promptYesstringAny textDescription of the video to generate.
image_urlYesstringPublic https URL of an imageFirst frame of the video. The output aspect ratio follows this image, so there is no aspect_ratio parameter on this operation.
end_image_urlNostring— (none)Public https URL of an imageOptional last frame. Supply it to generate a first-to-last keyframe transition.
durationNointeger55 – 15Length of the finished video in seconds. Billed per second.
resolutionNostring768P480P, 768POutput resolution. Determines the per-second price: 480P $0.05/s, 768P $0.08/s.
prompt_expansion_modeYesstringbalanceddisabled, balanced, qualityHow 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_checkerNobooleantruetrue, falseRuns the content safety check over the generated video.
seedNointeger— (random)Any integerFixes 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

HeaderValueRequired
Ocp-Apim-Subscription-KeyYOUR_API_KEYYes
Content-Typeapplication/jsonYes
X-Webhook-URLhttps://your-server.example.com/hooks/vibeoNo
X-Webhook-Modeterminal | syncNo

Response Handling

CodeMeaningWhat to do
202Accepted and queuedRead request_id and poll the status endpoint.
400Invalid request body or parameter valueCheck the parameter table above; the message names the offending field.
401Missing or invalid subscription keyCheck the Ocp-Apim-Subscription-Key header.
402Insufficient wallet balanceTop up. The message names the resolved price for this request.
403Key not subscribed to this productSubscribe the key to the API product.
429Rate limit exceededBack off and retry; the limit is 50 calls per 60 seconds.
500Server errorRetry 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

FieldTypeDescription
request_idstringIdentifier for this request. Use it to poll and to de-duplicate webhooks.
statusstringQUEUED, PROCESSING, COMPLETED, FAILED or ERROR.
model_idstringAlways vibeo-mode.
errorstring | nullFailure reason, null while the request is healthy.
output.media_urlstringURL of the finished MP4, re-hosted by Pixazo.
output.media_typestringAlways video/mp4.
created_atstringISO-8601 timestamp of submission.
completed_atstringISO-8601 timestamp of the terminal transition.
polling_urlstringFully-formed status URL for this request.

Status Values

StatusTerminalMeaning
QUEUEDNoAccepted and waiting for a generation slot.
PROCESSINGNoGeneration is running.
COMPLETEDYesFinished. output.media_url holds the video.
FAILEDYesGeneration failed. Not billed.
ERRORYesThe 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.

Vibeo API Pricing — Per-Second Rates

ResolutionPrice (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).

Show data for the last
Generations
1,400last 30d
~47 per day
Success rate
85.7%
of completed generations
Generation time
104.3savg
p95 109.8s
Requests
Aug 3max 1,400Sep 1
VibeoAvg 47/day
Generation Time
Aug 3max 104.3sSep 1
VibeoAvg 104.3s
Error Rate
Aug 3max 14.3%Sep 1
VibeoAvg 14.3%

〰 Uptime

Percent of generations that succeeded over the selected period, per model version.

Avg. Success Rate (30d)
85.71%
across all generations of this model family
Uptime
Aug 3max 100%Sep 1
SuccessfulAvg 85.71%