Gemini Omni API: Pricing, Documentation
by Google
Gemini Omni API. Through Pixazo's API, developers can leverage Google's flagship multimodal model for diverse video generation workflows.

Models Version
Get $5 Free Credit on First Payment
No strings attached — add funds and get $5 bonus instantly
Gemini Omni Flash API Documentation
Generate a video from a text prompt only. Asynchronous: submit returns a request_id; poll the status endpoint until the request is COMPLETED. Typical generation time is ~36s.
POST https://gateway.pixazo.ai/gemini-omni/v1/text-to-videoAuthentication
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 - Gemini Omni
Request Code
POST https://gateway.pixazo.ai/gemini-omni/v1/text-to-video
Content-Type: application/json
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY
{
"prompt": "A golden retriever running through a sunlit meadow, slow motion, cinematic.",
"aspect_ratio": "16:9"
}import requests
url = "https://gateway.pixazo.ai/gemini-omni/v1/text-to-video"
headers = {
"Content-Type": "application/json",
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
}
data = {
"prompt": "A golden retriever running through a sunlit meadow, slow motion, cinematic.",
"aspect_ratio": "16:9"
}
resp = requests.post(url, json=data, headers=headers)
print(resp.json())const res = await fetch("https://gateway.pixazo.ai/gemini-omni/v1/text-to-video", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
},
body: JSON.stringify({
"prompt": "A golden retriever running through a sunlit meadow, slow motion, cinematic.",
"aspect_ratio": "16:9"
})
});
console.log(await res.json());curl -X POST 'https://gateway.pixazo.ai/gemini-omni/v1/text-to-video' \
-H 'Content-Type: application/json' \
-H 'Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY' \
--data-raw '{"prompt": "A golden retriever running through a sunlit meadow, slow motion, cinematic.", "aspect_ratio": "16:9"}'Output
{
"request_id": "gemini-omni_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/gemini-omni_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}Webhook (Optional)
Instead of polling, you can receive a webhook callback when the request reaches a terminal state. Provide a webhook URL via header on the submit request.
| Header | Required | Description |
|---|---|---|
X-Webhook-URL | Yes (to enable) | HTTPS endpoint on your server that will receive the POST callback. Must respond 2xx within a few seconds. |
X-Webhook-Mode | No | terminal (default) — fires once at the final status (COMPLETED/FAILED/ERROR). sync — fires on every poll cycle plus the terminal event, and caps the queue's polling delay at 15s for tighter progress updates. |
Example: enable webhook
curl -X POST 'https://gateway.pixazo.ai/gemini-omni/v1/text-to-video' \
-H 'Content-Type: application/json' \
-H 'Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY' \
-H 'X-Webhook-URL: https://your-server.com/webhook/callback' \
--data-raw '{"prompt": "A golden retriever running through a sunlit meadow, slow motion, cinematic.", "aspect_ratio": "16:9"}'Callback Payload
Your endpoint receives a POST application/json with the same shape as the GET /v2/requests/status/{request_id} response. Example terminal callback (mode terminal):
{
"request_id": "gemini-omni_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "gemini-omni",
"error": null,
"output": {
"media_url": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/gemini-omni_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/output.mp4"
],
"media_type": "video/mp4"
},
"created_at": "2026-07-01T10:00:00.000Z",
"updated_at": "2026-07-01 10:00:48",
"completed_at": "2026-07-01 10:00:48"
}Failure callback shape
{
"request_id": "gemini-omni_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "gemini-omni",
"error": "Description of the failure",
"output": null,
"created_at": "2026-07-01T10:00:00.000Z",
"updated_at": "2026-07-01 10:00:22",
"completed_at": null
}Delivery semantics
- terminal mode: one webhook callback when the request is
COMPLETEDorERROR/FAILED. - sync mode: a webhook callback on each status change.
- Callbacks are idempotent on
request_id— de-duplicate on it. - Respond
200within a few seconds; the webhook endpoint must be HTTPS.
Request Parameters
| Parameter | Required | Type | Default | Allowed values / range | Description |
|---|---|---|---|---|---|
prompt | Yes | string | — | — | Text prompt describing the video to generate. |
aspect_ratio | No | string | 16:9 | 16:9, 9:16 | Output video aspect ratio. |
Example Request
{
"prompt": "A golden retriever running through a sunlit meadow, slow motion, cinematic.",
"aspect_ratio": "16:9"
}Example Response
{
"request_id": "gemini-omni_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/gemini-omni_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}Request Headers
| Header | Required | Description |
|---|---|---|
| Content-Type | Yes | application/json |
| Ocp-Apim-Subscription-Key | Yes | Your API subscription key. |
| X-Webhook-URL | No | Enable webhook callbacks (see Webhook section). |
Response Handling
| Status Code | Meaning |
|---|---|
| 202 | Accepted — request queued; returns request_id and polling_url. |
| 400 | Bad request — invalid or missing parameters (e.g. missing prompt, missing source image/video). |
| 401 | Unauthorized — missing or invalid subscription key. |
| 402 | Insufficient balance. |
| 403 | Forbidden. |
| 429 | Too many requests. |
| 500 | Internal server error. |
Error Responses
{
"error": "Insufficient Balance",
"message": "Your wallet does not have enough balance."
}A failed generation is reported via the status endpoint (or webhook) with status: "FAILED" or "ERROR" and an error message. Malformed requests (e.g. a missing required field) are rejected immediately with 400.
Retrieving Results
Poll the status endpoint with the request_id from the submit response until status is COMPLETED (or FAILED/ERROR). Typical generation time is ~36s.
curl 'https://gateway.pixazo.ai/v2/requests/status/gemini-omni_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' \
-H 'Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY'Completed response
{
"request_id": "gemini-omni_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "gemini-omni",
"error": null,
"output": {
"media_url": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/gemini-omni_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/output.mp4"
],
"media_type": "video/mp4"
},
"created_at": "2026-07-01T10:00:00.000Z",
"updated_at": "2026-07-01 10:00:48",
"completed_at": "2026-07-01 10:00:48"
}Response Fields
| Field | Type | Description |
|---|---|---|
| request_id | string | Unique request identifier. |
| status | string | QUEUED, PROCESSING, COMPLETED, FAILED, or ERROR. |
| model_id | string | The model that handled the request (gemini-omni). |
| output.media_url | array | URL(s) to the generated MP4 video. |
| output.media_type | string | Always video/mp4. |
| created_at | string | Request creation timestamp. |
| completed_at | string | Completion timestamp. |
| polling_url | string | Status URL for this request (submit response only). |
| error | string | Error message when status is FAILED/ERROR. |
Status Values & Flow
QUEUED → PROCESSING → COMPLETED (success) or FAILED/ERROR (failure).
Pricing
Billed at a flat $0.15 per request, regardless of resolution or output duration.
Notes & Limitations
| Topic | Detail |
|---|---|
| Audio | Generated automatically for every video — there is no on/off parameter. Describe the sound effects, music, or dialogue you want directly in prompt. |
| Prompt controls | No separate negative-prompt, temperature, or sampling parameter. Put exclusions directly in prompt (e.g. “no dialogue”). See the Prompting Guide below. |
| Language | English is fully supported; other languages may work but results can vary. |
| Generation time | Varies with duration, resolution, and current API load — longer or higher-resolution videos take longer. |
| Watermark | Every generated video carries an invisible SynthID watermark (not visible to viewers, but programmatically detectable). |
| Content safety | Filters apply to both your prompt and the generated video, and enforcement is region-dependent. Policy-violating prompts or content are blocked. |
| Not supported | Uploading audio references is not supported in the current API version. |
Prompting Guide
The prompt is passed through to the model verbatim, so all of Google’s prompt syntax works as-is.
| Technique | How to use it |
|---|---|
| Single scene | By default the model may split into several shots. Force one continuous shot by saying so — “in a single continuous shot”, “no scene cuts”. |
| Remove elements | Use simple negatives in the prompt — “no dialogue”, “no embellishments”, “no extra sound effects”. |
| Prompt the audio | Describe the sound you want — “calm background music”, “a high-energy techno beat”, “a low tinny radio in the background”. |
| Timing events | Use natural language (“after 3 seconds a woman enters”) or timecode syntax: [0-3s] walking [3-6s] stops and turns [6-10s] starts running. |
| On-screen text | Quote it exactly — e.g. a street sign that says: “This is an AI generation”. |
| Meta-prompting | Ask for general qualities — “be extremely detailed in your descriptions of characters and environments”. |
Gemini Omni Flash API Pricing
Gemini Omni Flash API Documentation
Animate a single source image into a video, guided by a text prompt. Asynchronous: submit returns a request_id; poll the status endpoint until the request is COMPLETED. Typical generation time is ~36s.
POST https://gateway.pixazo.ai/gemini-omni/v1/image-to-videoAuthentication
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 - Gemini Omni
Request Code
POST https://gateway.pixazo.ai/gemini-omni/v1/image-to-video
Content-Type: application/json
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY
{
"prompt": "Animate the photo with a gentle camera pan and the subject blinking naturally.",
"image_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/nano-banana_019f1840-7f48-76a2-3393-d5f174826bae8/output.jpg",
"aspect_ratio": "9:16"
}import requests
url = "https://gateway.pixazo.ai/gemini-omni/v1/image-to-video"
headers = {
"Content-Type": "application/json",
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
}
data = {
"prompt": "Animate the photo with a gentle camera pan and the subject blinking naturally.",
"image_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/nano-banana_019f1840-7f48-76a2-3393-d5f174826bae8/output.jpg",
"aspect_ratio": "9:16"
}
resp = requests.post(url, json=data, headers=headers)
print(resp.json())const res = await fetch("https://gateway.pixazo.ai/gemini-omni/v1/image-to-video", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
},
body: JSON.stringify({
"prompt": "Animate the photo with a gentle camera pan and the subject blinking naturally.",
"image_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/nano-banana_019f1840-7f48-76a2-3393-d5f174826bae8/output.jpg",
"aspect_ratio": "9:16"
})
});
console.log(await res.json());curl -X POST 'https://gateway.pixazo.ai/gemini-omni/v1/image-to-video' \
-H 'Content-Type: application/json' \
-H 'Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY' \
--data-raw '{"prompt": "Animate the photo with a gentle camera pan and the subject blinking naturally.", "image_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/nano-banana_019f1840-7f48-76a2-3393-d5f174826bae8/output.jpg", "aspect_ratio": "9:16"}'Output
{
"request_id": "gemini-omni_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/gemini-omni_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}Webhook (Optional)
Instead of polling, you can receive a webhook callback when the request reaches a terminal state. Provide a webhook URL via header on the submit request.
| Header | Required | Description |
|---|---|---|
X-Webhook-URL | Yes (to enable) | HTTPS endpoint on your server that will receive the POST callback. Must respond 2xx within a few seconds. |
X-Webhook-Mode | No | terminal (default) — fires once at the final status (COMPLETED/FAILED/ERROR). sync — fires on every poll cycle plus the terminal event, and caps the queue's polling delay at 15s for tighter progress updates. |
Example: enable webhook
curl -X POST 'https://gateway.pixazo.ai/gemini-omni/v1/image-to-video' \
-H 'Content-Type: application/json' \
-H 'Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY' \
-H 'X-Webhook-URL: https://your-server.com/webhook/callback' \
--data-raw '{"prompt": "Animate the photo with a gentle camera pan and the subject blinking naturally.", "image_url": "https://example.com/portrait.jpg", "aspect_ratio": "9:16"}'Callback Payload
Your endpoint receives a POST application/json with the same shape as the GET /v2/requests/status/{request_id} response. Example terminal callback (mode terminal):
{
"request_id": "gemini-omni_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "gemini-omni",
"error": null,
"output": {
"media_url": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/gemini-omni_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/output.mp4"
],
"media_type": "video/mp4"
},
"created_at": "2026-07-01T10:00:00.000Z",
"updated_at": "2026-07-01 10:00:48",
"completed_at": "2026-07-01 10:00:48"
}Failure callback shape
{
"request_id": "gemini-omni_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "gemini-omni",
"error": "Description of the failure",
"output": null,
"created_at": "2026-07-01T10:00:00.000Z",
"updated_at": "2026-07-01 10:00:22",
"completed_at": null
}Delivery semantics
- terminal mode: one webhook callback when the request is
COMPLETEDorERROR/FAILED. - sync mode: a webhook callback on each status change.
- Callbacks are idempotent on
request_id— de-duplicate on it. - Respond
200within a few seconds; the webhook endpoint must be HTTPS.
Request Parameters
| Parameter | Required | Type | Default | Allowed values / range | Description |
|---|---|---|---|---|---|
prompt | Yes | string | — | — | Text prompt describing the motion/scene to animate the image into. |
image_url | Conditional | string (URL) | — | JPEG, PNG, WebP, HEIC, or HEIF | Source image to animate. Required if image_urls is omitted. |
aspect_ratio | No | string | 16:9 | 16:9, 9:16 | Output video aspect ratio. |
Content Item Types & Limits
| Type | Max | Format / Size | Description |
|---|---|---|---|
| image | 1 | JPG, PNG, WEBP, HEIC, HEIF · < 20 MB | Input image to animate. |
Example Request
{
"prompt": "Animate the photo with a gentle camera pan and the subject blinking naturally.",
"image_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/nano-banana_019f1840-7f48-76a2-3393-d5f174826bae8/output.jpg",
"aspect_ratio": "9:16"
}Example Response
{
"request_id": "gemini-omni_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/gemini-omni_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}Request Headers
| Header | Required | Description |
|---|---|---|
| Content-Type | Yes | application/json |
| Ocp-Apim-Subscription-Key | Yes | Your API subscription key. |
| X-Webhook-URL | No | Enable webhook callbacks (see Webhook section). |
Response Handling
| Status Code | Meaning |
|---|---|
| 202 | Accepted — request queued; returns request_id and polling_url. |
| 400 | Bad request — invalid or missing parameters (e.g. missing prompt, missing source image/video). |
| 401 | Unauthorized — missing or invalid subscription key. |
| 402 | Insufficient balance. |
| 403 | Forbidden. |
| 429 | Too many requests. |
| 500 | Internal server error. |
Error Responses
{
"error": "Insufficient Balance",
"message": "Your wallet does not have enough balance."
}A failed generation is reported via the status endpoint (or webhook) with status: "FAILED" or "ERROR" and an error message. Malformed requests (e.g. a missing required field) are rejected immediately with 400.
Retrieving Results
Poll the status endpoint with the request_id from the submit response until status is COMPLETED (or FAILED/ERROR). Typical generation time is ~36s.
curl 'https://gateway.pixazo.ai/v2/requests/status/gemini-omni_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' \
-H 'Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY'Completed response
{
"request_id": "gemini-omni_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "gemini-omni",
"error": null,
"output": {
"media_url": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/gemini-omni_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/output.mp4"
],
"media_type": "video/mp4"
},
"created_at": "2026-07-01T10:00:00.000Z",
"updated_at": "2026-07-01 10:00:48",
"completed_at": "2026-07-01 10:00:48"
}Response Fields
| Field | Type | Description |
|---|---|---|
| request_id | string | Unique request identifier. |
| status | string | QUEUED, PROCESSING, COMPLETED, FAILED, or ERROR. |
| model_id | string | The model that handled the request (gemini-omni). |
| output.media_url | array | URL(s) to the generated MP4 video. |
| output.media_type | string | Always video/mp4. |
| created_at | string | Request creation timestamp. |
| completed_at | string | Completion timestamp. |
| polling_url | string | Status URL for this request (submit response only). |
| error | string | Error message when status is FAILED/ERROR. |
Status Values & Flow
QUEUED → PROCESSING → COMPLETED (success) or FAILED/ERROR (failure).
Pricing
Billed at a flat $0.15 per request, regardless of resolution or output duration.
Notes & Limitations
| Topic | Detail |
|---|---|
| Input image | JPEG, PNG, WebP, HEIC, or HEIF. Keep the combined inline image data under ~20 MB (Google’s inline-data limit). |
| Audio | Generated automatically for every video — there is no on/off parameter. Describe the sound effects, music, or dialogue you want directly in prompt. |
| Prompt controls | No separate negative-prompt, temperature, or sampling parameter. Put exclusions directly in prompt (e.g. “no dialogue”). See the Prompting Guide below. |
| Language | English is fully supported; other languages may work but results can vary. |
| Generation time | Varies with duration, resolution, and current API load — longer or higher-resolution videos take longer. |
| Watermark | Every generated video carries an invisible SynthID watermark (not visible to viewers, but programmatically detectable). |
| Content safety | Filters apply to both your prompt and the generated video, and enforcement is region-dependent. Policy-violating prompts or content are blocked. |
| Not supported | Uploading audio references is not supported in the current API version. |
| Regional limits | In the EEA, Switzerland, and the UK, images containing minors cannot be used. Images of certain recognizable (real, identifiable) people are not supported anywhere. |
Prompting Guide
The prompt is passed through to the model verbatim, so all of Google’s prompt syntax works as-is.
| Technique | How to use it |
|---|---|
First frame <FIRST_FRAME> | Optionally tag the source image’s role in the prompt — e.g. <FIRST_FRAME> a woman is walking. With a single image it is already treated as the start frame; the tag mainly adds clarity in complex prompts. |
| Single scene | By default the model may split into several shots. Force one continuous shot by saying so — “in a single continuous shot”, “no scene cuts”. |
| Remove elements | Use simple negatives in the prompt — “no dialogue”, “no embellishments”, “no extra sound effects”. |
| Prompt the audio | Describe the sound you want — “calm background music”, “a high-energy techno beat”, “a low tinny radio in the background”. |
| Timing events | Use natural language (“after 3 seconds a woman enters”) or timecode syntax: [0-3s] walking [3-6s] stops and turns [6-10s] starts running. |
| On-screen text | Quote it exactly — e.g. a street sign that says: “This is an AI generation”. |
| Meta-prompting | Ask for general qualities — “be extremely detailed in your descriptions of characters and environments”. |
Gemini Omni Flash API Pricing
Gemini Omni Flash API Documentation
Generate a video guided by one or more reference images plus a text prompt. Asynchronous: submit returns a request_id; poll the status endpoint until the request is COMPLETED. Typical generation time is ~36s.
POST https://gateway.pixazo.ai/gemini-omni/v1/reference-to-videoAuthentication
All requests require an API key passed via header.
| Header | Type | Required | Description |
|---|---|---|---|
| Ocp-Apim-Subscription-Key | string | Yes | Your API subscription key |
Reference to Video (Ref Images to Video) - Gemini Omni
Request Code
POST https://gateway.pixazo.ai/gemini-omni/v1/reference-to-video
Content-Type: application/json
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY
{
"prompt": "Combine the two reference images into a short scene of the product rotating on a table.",
"image_urls": [
"https://example.com/ref1.jpg",
"https://example.com/ref2.jpg"
],
"aspect_ratio": "16:9"
}import requests
url = "https://gateway.pixazo.ai/gemini-omni/v1/reference-to-video"
headers = {
"Content-Type": "application/json",
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
}
data = {
"prompt": "Combine the two reference images into a short scene of the product rotating on a table.",
"image_urls": [
"https://example.com/ref1.jpg",
"https://example.com/ref2.jpg"
],
"aspect_ratio": "16:9"
}
resp = requests.post(url, json=data, headers=headers)
print(resp.json())const res = await fetch("https://gateway.pixazo.ai/gemini-omni/v1/reference-to-video", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
},
body: JSON.stringify({
"prompt": "Combine the two reference images into a short scene of the product rotating on a table.",
"image_urls": [
"https://example.com/ref1.jpg",
"https://example.com/ref2.jpg"
],
"aspect_ratio": "16:9"
})
});
console.log(await res.json());curl -X POST 'https://gateway.pixazo.ai/gemini-omni/v1/reference-to-video' \
-H 'Content-Type: application/json' \
-H 'Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY' \
--data-raw '{"prompt": "Combine the two reference images into a short scene of the product rotating on a table.", "image_urls": ["https://example.com/ref1.jpg", "https://example.com/ref2.jpg"], "aspect_ratio": "16:9"}'Output
{
"request_id": "gemini-omni_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/gemini-omni_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}Webhook (Optional)
Instead of polling, you can receive a webhook callback when the request reaches a terminal state. Provide a webhook URL via header on the submit request.
| Header | Required | Description |
|---|---|---|
X-Webhook-URL | Yes (to enable) | HTTPS endpoint on your server that will receive the POST callback. Must respond 2xx within a few seconds. |
X-Webhook-Mode | No | terminal (default) — fires once at the final status (COMPLETED/FAILED/ERROR). sync — fires on every poll cycle plus the terminal event, and caps the queue's polling delay at 15s for tighter progress updates. |
Example: enable webhook
curl -X POST 'https://gateway.pixazo.ai/gemini-omni/v1/reference-to-video' \
-H 'Content-Type: application/json' \
-H 'Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY' \
-H 'X-Webhook-URL: https://your-server.com/webhook/callback' \
--data-raw '{"prompt": "Combine the two reference images into a short scene of the product rotating on a table.", "image_urls": ["https://example.com/ref1.jpg", "https://example.com/ref2.jpg"], "aspect_ratio": "16:9"}'Callback Payload
Your endpoint receives a POST application/json with the same shape as the GET /v2/requests/status/{request_id} response. Example terminal callback (mode terminal):
{
"request_id": "gemini-omni_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "gemini-omni",
"error": null,
"output": {
"media_url": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/gemini-omni_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/output.mp4"
],
"media_type": "video/mp4"
},
"created_at": "2026-07-01T10:00:00.000Z",
"updated_at": "2026-07-01 10:00:48",
"completed_at": "2026-07-01 10:00:48"
}Failure callback shape
{
"request_id": "gemini-omni_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "gemini-omni",
"error": "Description of the failure",
"output": null,
"created_at": "2026-07-01T10:00:00.000Z",
"updated_at": "2026-07-01 10:00:22",
"completed_at": null
}Delivery semantics
- terminal mode: one webhook callback when the request is
COMPLETEDorERROR/FAILED. - sync mode: a webhook callback on each status change.
- Callbacks are idempotent on
request_id— de-duplicate on it. - Respond
200within a few seconds; the webhook endpoint must be HTTPS.
Request Parameters
| Parameter | Required | Type | Default | Allowed values / range | Description |
|---|---|---|---|---|---|
prompt | Yes | string | — | — | Text prompt describing the scene to generate from the reference images. |
image_urls | Conditional | string[] (URLs) | — | JPEG, PNG, WebP, HEIC, or HEIF | Reference images used as visual references for the generated video. Required if image_url is omitted. |
aspect_ratio | No | string | 16:9 | 16:9, 9:16 | Output video aspect ratio. |
Content Item Types & Limits
| Type | Max | Format / Size | Description |
|---|---|---|---|
| image | 6 | JPG, PNG, WEBP, HEIC, HEIF · < 20 MB | Reference image(s), up to ~6. |
Example Request
{
"prompt": "Transform both robots into a sleek futuristic sports car through a seamless mechanical transformation, with shifting metal panels, rotating gears, glowing energy, and cinematic motion.",
"image_urls": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/nano-banana/nano-banana-a382a80b-f8df-4de1-a0c1-a5dcfd42dae4-1758783383399.jpg;,
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/flux-schnell-cf/prompt-1782482807515-639182.png"
],
"aspect_ratio": "16:9"
}Example Response
{
"request_id": "gemini-omni_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/gemini-omni_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}Request Headers
| Header | Required | Description |
|---|---|---|
| Content-Type | Yes | application/json |
| Ocp-Apim-Subscription-Key | Yes | Your API subscription key. |
| X-Webhook-URL | No | Enable webhook callbacks (see Webhook section). |
Response Handling
| Status Code | Meaning |
|---|---|
| 202 | Accepted — request queued; returns request_id and polling_url. |
| 400 | Bad request — invalid or missing parameters (e.g. missing prompt, missing source image/video). |
| 401 | Unauthorized — missing or invalid subscription key. |
| 402 | Insufficient balance. |
| 403 | Forbidden. |
| 429 | Too many requests. |
| 500 | Internal server error. |
Error Responses
{
"error": "Insufficient Balance",
"message": "Your wallet does not have enough balance."
}A failed generation is reported via the status endpoint (or webhook) with status: "FAILED" or "ERROR" and an error message. Malformed requests (e.g. a missing required field) are rejected immediately with 400.
Retrieving Results
Poll the status endpoint with the request_id from the submit response until status is COMPLETED (or FAILED/ERROR). Typical generation time is ~36s.
curl 'https://gateway.pixazo.ai/v2/requests/status/gemini-omni_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' \
-H 'Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY'Completed response
{
"request_id": "gemini-omni_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "gemini-omni",
"error": null,
"output": {
"media_url": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/gemini-omni_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/output.mp4"
],
"media_type": "video/mp4"
},
"created_at": "2026-07-01T10:00:00.000Z",
"updated_at": "2026-07-01 10:00:48",
"completed_at": "2026-07-01 10:00:48"
}Response Fields
| Field | Type | Description |
|---|---|---|
| request_id | string | Unique request identifier. |
| status | string | QUEUED, PROCESSING, COMPLETED, FAILED, or ERROR. |
| model_id | string | The model that handled the request (gemini-omni). |
| output.media_url | array | URL(s) to the generated MP4 video. |
| output.media_type | string | Always video/mp4. |
| created_at | string | Request creation timestamp. |
| completed_at | string | Completion timestamp. |
| polling_url | string | Status URL for this request (submit response only). |
| error | string | Error message when status is FAILED/ERROR. |
Status Values & Flow
QUEUED → PROCESSING → COMPLETED (success) or FAILED/ERROR (failure).
Pricing
Billed at a flat $0.15 per request, regardless of resolution or output duration.
Notes & Limitations
| Topic | Detail |
|---|---|
| Input images | JPEG, PNG, WebP, HEIC, or HEIF. Keep the combined inline image data under ~20 MB (Google’s inline-data limit). |
| References | Static images only — video clips are not accepted as references, and reasoning across multiple videos is not supported. Google’s examples use up to ~6 images; there is no hard maximum, but quality is best within that range. |
| Audio | Generated automatically for every video — there is no on/off parameter. Describe the sound effects, music, or dialogue you want directly in prompt. |
| Prompt controls | No separate negative-prompt, temperature, or sampling parameter. Put exclusions directly in prompt (e.g. “no dialogue”). See the Prompting Guide below. |
| Language | English is fully supported; other languages may work but results can vary. |
| Generation time | Varies with duration, resolution, and current API load — longer or higher-resolution videos take longer. |
| Watermark | Every generated video carries an invisible SynthID watermark (not visible to viewers, but programmatically detectable). |
| Content safety | Filters apply to both your prompt and the generated video, and enforcement is region-dependent. Policy-violating prompts or content are blocked. |
| Not supported | Uploading audio references is not supported in the current API version. |
| Regional limits | In the EEA, Switzerland, and the UK, images containing minors cannot be used. Images of certain recognizable (real, identifiable) people are not supported anywhere. |
Prompting Guide
The prompt is passed through to the model verbatim, so all of Google’s prompt syntax works as-is.
| Technique | How to use it |
|---|---|
Reference tags <IMAGE_REF_N> | Bind each image to a role in the prompt, indexed from 0 in image_urls order — e.g. in the style of <IMAGE_REF_0> a woman <IMAGE_REF_1> is walking. |
| Multi-image compositions | Combine reference tags with timecodes — e.g. [0-3s] woman <IMAGE_REF_0> holding <IMAGE_REF_1> [3-6s] man <IMAGE_REF_2> holding <IMAGE_REF_3>. |
| Single scene | By default the model may split into several shots. Force one continuous shot by saying so — “in a single continuous shot”, “no scene cuts”. |
| Remove elements | Use simple negatives in the prompt — “no dialogue”, “no embellishments”, “no extra sound effects”. |
| Prompt the audio | Describe the sound you want — “calm background music”, “a high-energy techno beat”, “a low tinny radio in the background”. |
| Timing events | Use natural language (“after 3 seconds a woman enters”) or timecode syntax: [0-3s] walking [3-6s] stops and turns [6-10s] starts running. |
| On-screen text | Quote it exactly — e.g. a street sign that says: “This is an AI generation”. |
| Meta-prompting | Ask for general qualities — “be extremely detailed in your descriptions of characters and environments”. |
Gemini Omni Flash API Pricing
Gemini Omni Flash API Documentation
Edit/transform an existing video using a text prompt (e.g. background swap, style change, object edits). The output inherits the source video's dimensions. Asynchronous: submit returns a request_id; poll the status endpoint until the request is COMPLETED. Typical generation time is ~60-110s.
POST https://gateway.pixazo.ai/gemini-omni/v1/video-to-videoAuthentication
All requests require an API key passed via header.
| Header | Type | Required | Description |
|---|---|---|---|
| Ocp-Apim-Subscription-Key | string | Yes | Your API subscription key |
Video to Video - Gemini Omni
Request Code
POST https://gateway.pixazo.ai/gemini-omni/v1/video-to-video
Content-Type: application/json
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY
{
"prompt": "Replace the background with a neon cyberpunk city while keeping the subject unchanged.",
"video_url": "https://example.com/source.mp4"
}import requests
url = "https://gateway.pixazo.ai/gemini-omni/v1/video-to-video"
headers = {
"Content-Type": "application/json",
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
}
data = {
"prompt": "Replace the background with a neon cyberpunk city while keeping the subject unchanged.",
"video_url": "https://example.com/source.mp4"
}
resp = requests.post(url, json=data, headers=headers)
print(resp.json())const res = await fetch("https://gateway.pixazo.ai/gemini-omni/v1/video-to-video", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
},
body: JSON.stringify({
"prompt": "Replace the background with a neon cyberpunk city while keeping the subject unchanged.",
"video_url": "https://example.com/source.mp4"
})
});
console.log(await res.json());curl -X POST 'https://gateway.pixazo.ai/gemini-omni/v1/video-to-video' \
-H 'Content-Type: application/json' \
-H 'Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY' \
--data-raw '{"prompt": "Replace the background with a neon cyberpunk city while keeping the subject unchanged.", "video_url": "https://example.com/source.mp4"}'Output
{
"request_id": "gemini-omni_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/gemini-omni_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}Webhook (Optional)
Instead of polling, you can receive a webhook callback when the request reaches a terminal state. Provide a webhook URL via header on the submit request.
| Header | Required | Description |
|---|---|---|
X-Webhook-URL | Yes (to enable) | HTTPS endpoint on your server that will receive the POST callback. Must respond 2xx within a few seconds. |
X-Webhook-Mode | No | terminal (default) — fires once at the final status (COMPLETED/FAILED/ERROR). sync — fires on every poll cycle plus the terminal event, and caps the queue's polling delay at 15s for tighter progress updates. |
Example: enable webhook
curl -X POST 'https://gateway.pixazo.ai/gemini-omni/v1/video-to-video' \
-H 'Content-Type: application/json' \
-H 'Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY' \
-H 'X-Webhook-URL: https://your-server.com/webhook/callback' \
--data-raw '{"prompt": "Replace the background with a neon cyberpunk city while keeping the subject unchanged.", "video_url": "https://example.com/source.mp4"}'Callback Payload
Your endpoint receives a POST application/json with the same shape as the GET /v2/requests/status/{request_id} response. Example terminal callback (mode terminal):
{
"request_id": "gemini-omni_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "gemini-omni",
"error": null,
"output": {
"media_url": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/gemini-omni_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/output.mp4"
],
"media_type": "video/mp4"
},
"created_at": "2026-07-01T10:00:00.000Z",
"updated_at": "2026-07-01 10:00:48",
"completed_at": "2026-07-01 10:00:48"
}Failure callback shape
{
"request_id": "gemini-omni_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "ERROR",
"model_id": "gemini-omni",
"error": "Description of the failure",
"output": null,
"created_at": "2026-07-01T10:00:00.000Z",
"updated_at": "2026-07-01 10:00:22",
"completed_at": null
}Delivery semantics
- terminal mode: one webhook callback when the request is
COMPLETEDorERROR/FAILED. - sync mode: a webhook callback on each status change.
- Callbacks are idempotent on
request_id— de-duplicate on it. - Respond
200within a few seconds; the webhook endpoint must be HTTPS.
Request Parameters
| Parameter | Required | Type | Default | Allowed values / range | Description |
|---|---|---|---|---|---|
prompt | Yes | string | — | — | Text describing the edit to apply. |
video_url | Yes | string (URL) | — | MP4, MPEG, MOV, AVI, FLV, MPG, WebM, WMV, or 3GPP | Source video to edit. Must be a direct, fetchable video file URL — YouTube links and other hosted-platform URLs are not supported. |
Content Item Types & Limits
| Type | Max | Format / Size | Description |
|---|---|---|---|
| video | 1 | MP4, MOV, WEBM, AVI, MPEG, FLV, 3GP | Source video to transform. |
Example Request
{
"prompt": "Replace the background with a neon cyberpunk city while keeping the subject unchanged.",
"video_url": "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/sync-lipsync-v2-pro_019f1910-7eca-7dc9-c2ef-da59f4839abec/output.mp4"
}Example Response
{
"request_id": "gemini-omni_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/gemini-omni_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}Request Headers
| Header | Required | Description |
|---|---|---|
| Content-Type | Yes | application/json |
| Ocp-Apim-Subscription-Key | Yes | Your API subscription key. |
| X-Webhook-URL | No | Enable webhook callbacks (see Webhook section). |
Response Handling
| Status Code | Meaning |
|---|---|
| 202 | Accepted — request queued; returns request_id and polling_url. |
| 400 | Bad request — invalid or missing parameters (e.g. missing prompt, missing source image/video). |
| 401 | Unauthorized — missing or invalid subscription key. |
| 402 | Insufficient balance. |
| 403 | Forbidden. |
| 429 | Too many requests. |
| 500 | Internal server error. |
Error Responses
{
"error": "Insufficient Balance",
"message": "Your wallet does not have enough balance."
}A failed generation is reported via the status endpoint (or webhook) with status: "FAILED" or "ERROR" and an error message. Malformed requests (e.g. a missing required field) are rejected immediately with 400.
Retrieving Results
Poll the status endpoint with the request_id from the submit response until status is COMPLETED (or FAILED/ERROR). Typical generation time is ~60-110s.
curl 'https://gateway.pixazo.ai/v2/requests/status/gemini-omni_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' \
-H 'Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY'Completed response
{
"request_id": "gemini-omni_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "gemini-omni",
"error": null,
"output": {
"media_url": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/gemini-omni_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/output.mp4"
],
"media_type": "video/mp4"
},
"created_at": "2026-07-01T10:00:00.000Z",
"updated_at": "2026-07-01 10:00:48",
"completed_at": "2026-07-01 10:00:48"
}Response Fields
| Field | Type | Description |
|---|---|---|
| request_id | string | Unique request identifier. |
| status | string | QUEUED, PROCESSING, COMPLETED, FAILED, or ERROR. |
| model_id | string | The model that handled the request (gemini-omni). |
| output.media_url | array | URL(s) to the generated MP4 video. |
| output.media_type | string | Always video/mp4. |
| created_at | string | Request creation timestamp. |
| completed_at | string | Completion timestamp. |
| polling_url | string | Status URL for this request (submit response only). |
| error | string | Error message when status is FAILED/ERROR. |
Status Values & Flow
QUEUED → PROCESSING → COMPLETED (success) or FAILED/ERROR (failure).
Pricing
Billed at a flat $0.15 per request, regardless of resolution or output duration.
Notes & Limitations
| Topic | Detail |
|---|---|
| Input video | MP4, MPEG, MOV, AVI, FLV, MPG, WebM, WMV, or 3GPP. Use short, modestly-sized clips for best reliability — very large or long videos may be slow or fail. |
| Audio | Generated automatically for every video — there is no on/off parameter. Describe the sound effects, music, or dialogue you want directly in prompt. |
| Prompt controls | No separate negative-prompt, temperature, or sampling parameter. Put exclusions directly in prompt (e.g. “no dialogue”). See the Prompting Guide below. |
| Language | English is fully supported; other languages may work but results can vary. |
| Generation time | Varies with duration, resolution, and current API load — longer or higher-resolution videos take longer. |
| Watermark | Every generated video carries an invisible SynthID watermark (not visible to viewers, but programmatically detectable). |
| Content safety | Filters apply to both your prompt and the generated video, and enforcement is region-dependent. Policy-violating prompts or content are blocked. |
| Not supported | Uploading audio references; chained editing (submit a fresh video_url for each edit); voice/dialogue editing; and video extension or frame interpolation (this operation transforms existing footage, it does not lengthen it or generate new frames). |
| Regional limits | Editing an uploaded video is not available for users in the EEA, Switzerland, or the UK. |
Prompting Guide
The prompt is passed through to the model verbatim, so all of Google’s prompt syntax works as-is.
| Technique | How to use it |
|---|---|
| Keep it simple | Short prompts edit best; long paragraphs cause unintended changes. Prefer “Make this video anime” or “Change the lighting to be more dramatic”. |
| “Keep everything else the same” | When editing one aspect, add this phrase to preserve the rest — e.g. “Add a cat that jumps onto his lap. Keep everything else the same.” |
| Single scene | By default the model may split into several shots. Force one continuous shot by saying so — “in a single continuous shot”, “no scene cuts”. |
| Remove elements | Use simple negatives in the prompt — “no dialogue”, “no embellishments”, “no extra sound effects”. |
| Prompt the audio | Describe the sound you want — “calm background music”, “a high-energy techno beat”, “a low tinny radio in the background”. |
| Timing events | Use natural language (“after 3 seconds a woman enters”) or timecode syntax: [0-3s] walking [3-6s] stops and turns [6-10s] starts running. |
| On-screen text | Quote it exactly — e.g. a street sign that says: “This is an AI generation”. |
| Meta-prompting | Ask for general qualities — “be extremely detailed in your descriptions of characters and environments”. |