---
type: AI Model
id: gemini-omni-1-2
title: Gemini Omni 1.2 Flash API
provider: Google
description: "Google's Gemini Omni 1.2 Flash is a multimodal video model that handles text-to-video, image-to-video, reference-to-video, and video-to-video editing through a single API. Clip length is selectable from 3 to 15 seconds via the duration parameter; video-to-video edits inherit the source clip's length. Successor to Gemini Omni 1.1 Flash, with stronger character consistency and lip-sync."
resource: https://www.pixazo.ai/models/gemini-omni-1-2
docs_url: https://www.pixazo.ai/models/gemini-omni-1-2
trending: true
latest_version: v1.2
tags:
  - trends
  - text-to-video
  - image-to-video
  - reference-to-video
  - video-to-video
  - google
variants:
  - id: gemini-omni-1-2-v1
    name: Gemini Omni 1.2 Flash
    version: 1.2 Flash
    capabilities:
      - Text to Video
      - Image to Video
      - Reference to Video (Ref Images + Ref Videos to Video)
      - Video to Video(video editing)
timestamp: 2026-11-13T14:00:47.313Z
---

# Gemini Omni 1.2 Flash API

> Provider: **Google**
> Source: https://www.pixazo.ai/models/gemini-omni-1-2

Google's Gemini Omni 1.2 Flash is a multimodal video model that handles text-to-video, image-to-video, reference-to-video, and video-to-video editing through a single API. Clip length is selectable from 3 to 15 seconds via the duration parameter; video-to-video edits inherit the source clip's length. Successor to Gemini Omni 1.1 Flash, with stronger character consistency and lip-sync.

## Gemini Omni 1.2 Flash

### Text to Video

## Gemini Omni 1.2 Flash Text to Video 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.

Backed by Google's `gemini-omni-1.2-flash`.

```
POST https://gateway.pixazo.ai/gemini-omni-1-2/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 - Gemini Omni 1.2 Flash

## Request Code

HTTP Python JavaScript cURL

```
POST https://gateway.pixazo.ai/gemini-omni-1-2/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-1-2/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-1-2/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-1-2/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-1-2_01a0xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "QUEUED",
  "polling_url": "https://gateway.pixazo.ai/v2/requests/status/gemini-omni-1-2_01a0xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
```

[Try Now](https://api.pixazo.ai/api-details#api=gemini-omni-1-2&operation=text-to-video-request)

## 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-1-2/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-1-2_01a0xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "COMPLETED",
  "model_id": "gemini-omni-1-2",
  "error": null,
  "output": {
    "media_url": [
      "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/gemini-omni-1-2_01a0xxxx-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-1-2_01a0xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "ERROR",
  "model_id": "gemini-omni-1-2",
  "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 `COMPLETED` or `ERROR`/`FAILED`.
-   **sync** mode: a webhook callback on each status change.
-   Callbacks are idempotent on `request_id` — de-duplicate on it.
-   Respond `200` within 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.

`duration`

No

integer

—

3–15 (integer seconds)

Length of the generated video, in seconds. Accepted values are integers 3–15. Optional — if you omit it, the video is 10 seconds long. When you send it, it takes precedence over any length mentioned in `prompt`. Billing follows the actual output length, so a shorter clip costs proportionally less.

## Example Request

```
{
  "prompt": "A golden retriever running through a sunlit meadow, slow motion, cinematic.",
  "aspect_ratio": "16:9"
}
```

## Example Response

```
{
  "request_id": "gemini-omni-1-2_01a0xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "QUEUED",
  "polling_url": "https://gateway.pixazo.ai/v2/requests/status/gemini-omni-1-2_01a0xxxx-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-1-2_01a0xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' \
  -H 'Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY'
```

### Completed response

```
{
  "request_id": "gemini-omni-1-2_01a0xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "COMPLETED",
  "model_id": "gemini-omni-1-2",
  "error": null,
  "output": {
    "media_url": [
      "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/gemini-omni-1-2_01a0xxxx-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-1-2`).

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 per second of output video, measured from the generated file, so a shorter clip costs proportionally less. Failed requests are not billed. The current rate is shown on this model's page.

## 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-5s] walking [5-10s] stops and turns [10-15s] 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”.

### Image to Video

## Gemini Omni 1.2 Flash Image to Video 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.

Backed by Google's `gemini-omni-1.2-flash`.

```
POST https://gateway.pixazo.ai/gemini-omni-1-2/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 - Gemini Omni 1.2 Flash

## Request Code

HTTP Python JavaScript cURL

```
POST https://gateway.pixazo.ai/gemini-omni-1-2/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-1-2/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-1-2/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-1-2/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-1-2_01a0xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "QUEUED",
  "polling_url": "https://gateway.pixazo.ai/v2/requests/status/gemini-omni-1-2_01a0xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
```

[Try Now](https://api.pixazo.ai/api-details#api=gemini-omni-1-2&operation=image-to-video-request)

## 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-1-2/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://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/images/input.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-1-2_01a0xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "COMPLETED",
  "model_id": "gemini-omni-1-2",
  "error": null,
  "output": {
    "media_url": [
      "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/gemini-omni-1-2_01a0xxxx-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-1-2_01a0xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "ERROR",
  "model_id": "gemini-omni-1-2",
  "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 `COMPLETED` or `ERROR`/`FAILED`.
-   **sync** mode: a webhook callback on each status change.
-   Callbacks are idempotent on `request_id` — de-duplicate on it.
-   Respond `200` within 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`

Yes

string (URL)

—

JPEG, PNG, WebP, HEIC, or HEIF

URL of the source image to animate.

`image_urls`

No

string\[\] (URLs)

—

JPEG, PNG, WebP, HEIC, or HEIF

Alternative to `image_url`. Only the first entry is used by this operation — to combine several images in one video, use the Reference to Video operation instead.

`aspect_ratio`

No

string

`16:9`

`16:9`, `9:16`

Output video aspect ratio.

`duration`

No

integer

—

3–15 (integer seconds)

Length of the generated video, in seconds. Accepted values are integers 3–15. Optional — if you omit it, the video is 10 seconds long. When you send it, it takes precedence over any length mentioned in `prompt`. Billing follows the actual output length, so a shorter clip costs proportionally less.

### 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-1-2_01a0xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "QUEUED",
  "polling_url": "https://gateway.pixazo.ai/v2/requests/status/gemini-omni-1-2_01a0xxxx-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-1-2_01a0xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' \
  -H 'Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY'
```

### Completed response

```
{
  "request_id": "gemini-omni-1-2_01a0xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "COMPLETED",
  "model_id": "gemini-omni-1-2",
  "error": null,
  "output": {
    "media_url": [
      "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/gemini-omni-1-2_01a0xxxx-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-1-2`).

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 per second of output video, measured from the generated file, so a shorter clip costs proportionally less. Failed requests are not billed. The current rate is shown on this model's page.

## 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**

The image is used as the start frame. Say so in plain language when the prompt is complex — e.g. `starting from the image, a woman starts walking`.

**No control tags**

Do not put control strings such as `<FIRST_FRAME>` or `<IMAGE_REF_0>` in `prompt`: Gemini Omni 1.2 Flash no longer supports them. Describe in plain language how each image should be used instead.

**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-5s] walking [5-10s] stops and turns [10-15s] 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”.

### Reference to Video (Ref Images + Ref Videos to Video)

## Gemini Omni 1.2 Flash Reference to Video (Ref Images + Ref Videos to Video) API Documentation

Generate a video guided by reference images, short reference videos, or both, plus a text prompt. Asynchronous: submit returns a `request_id`; poll the status endpoint until the request is `COMPLETED`. Typical generation time is ~36s with reference images only; reference videos add upload time (our 3-second test with one clip took about 1 min 45 s).

Backed by Google's `gemini-omni-1.2-flash`.

```
POST https://gateway.pixazo.ai/gemini-omni-1-2/v1/reference-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

## Reference to Video (Ref Images + Ref Videos to Video) - Gemini Omni 1.2 Flash

## Request Code

HTTP Python JavaScript cURL

```
POST https://gateway.pixazo.ai/gemini-omni-1-2/v1/reference-to-video
Content-Type: application/json
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY

{
  "prompt": "The woman from the reference image meets the subject shown in the reference video on a bright city street, in a single continuous shot.",
  "image_urls": [
    "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/images/input.jpg"
  ],
  "video_urls": [
    "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/video/input-3s.mp4"
  ],
  "duration": 5,
  "aspect_ratio": "16:9"
}
```

```
import requests

url = "https://gateway.pixazo.ai/gemini-omni-1-2/v1/reference-to-video"
headers = {
    "Content-Type": "application/json",
    "Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
}
data = {
  "prompt": "The woman from the reference image meets the subject shown in the reference video on a bright city street, in a single continuous shot.",
  "image_urls": [
    "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/images/input.jpg"
  ],
  "video_urls": [
    "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/video/input-3s.mp4"
  ],
  "duration": 5,
  "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-1-2/v1/reference-to-video", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
  },
  body: JSON.stringify({
  "prompt": "The woman from the reference image meets the subject shown in the reference video on a bright city street, in a single continuous shot.",
  "image_urls": [
    "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/images/input.jpg"
  ],
  "video_urls": [
    "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/video/input-3s.mp4"
  ],
  "duration": 5,
  "aspect_ratio": "16:9"
})
});
console.log(await res.json());
```

```
curl -X POST 'https://gateway.pixazo.ai/gemini-omni-1-2/v1/reference-to-video' \
  -H 'Content-Type: application/json' \
  -H 'Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY' \
  --data-raw '{"prompt": "The woman from the reference image meets the subject shown in the reference video on a bright city street, in a single continuous shot.", "image_urls": ["https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/images/input.jpg"], "video_urls": ["https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/video/input-3s.mp4"], "duration": 5, "aspect_ratio": "16:9"}'
```

## Output

```
{
  "request_id": "gemini-omni-1-2_01a0xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "QUEUED",
  "polling_url": "https://gateway.pixazo.ai/v2/requests/status/gemini-omni-1-2_01a0xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
```

[Try Now](https://api.pixazo.ai/api-details#api=gemini-omni-1-2&operation=reference-to-video-request)

## 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-1-2/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": "The woman from the reference image meets the subject shown in the reference video on a bright city street, in a single continuous shot.", "image_urls": ["https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/images/input.jpg"], "video_urls": ["https://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/video/input-3s.mp4"], "duration": 5, "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-1-2_01a0xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "COMPLETED",
  "model_id": "gemini-omni-1-2",
  "error": null,
  "output": {
    "media_url": [
      "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/gemini-omni-1-2_01a0xxxx-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-1-2_01a0xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "ERROR",
  "model_id": "gemini-omni-1-2",
  "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 `COMPLETED` or `ERROR`/`FAILED`.
-   **sync** mode: a webhook callback on each status change.
-   Callbacks are idempotent on `request_id` — de-duplicate on it.
-   Respond `200` within 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 and videos.

`image_urls`

Yes, unless `video_urls` is sent

string\[\] (URLs)

—

JPEG, PNG, WebP, HEIC, or HEIF

Reference images to incorporate into the video, up to 6 (up to 3 images per character, for up to 2 characters). Say in plain language in `prompt` how each image is used, e.g. “the woman from the first image”.

`image_url`

No

string (URL)

—

JPEG, PNG, WebP, HEIC, or HEIF

Convenience alternative to `image_urls` when you have a single reference image; it is treated as one reference.

`video_urls`

No

string\[\] (https URLs)

—

MP4 or MOV · up to 3 seconds and 50 MB each · 1–3 clips

Short reference videos of a person, character, or object the video should feature; Google says they work best for keeping a visual likeness. Up to 3 when `duration` is 3–10 (or left out), 1 when it is 11–15. Each must be a public https URL to a regular (not fragmented) MP4 or MOV file. Their sound is ignored. Say in plain language in `prompt` how each clip is used, e.g. “the man shown in the reference video”. A clip that is longer than 3 seconds, larger than 50 MB, cannot be read, or is one too many is refused with a `400` before anything is charged.

`aspect_ratio`

No

string

`16:9`

`16:9`, `9:16`

Output video aspect ratio.

`duration`

No

integer

—

3–15 (integer seconds)

Length of the generated video, in seconds. Accepted values are integers 3–15. Optional — if you omit it, the video is 10 seconds long. When you send it, it takes precedence over any length mentioned in `prompt`. Billing follows the actual output length, so a shorter clip costs proportionally less.

### Content Item Types & Limits

Type

Max

Format / Size

Description

image

6

JPG, PNG, WEBP, HEIC, HEIF · < 20 MB combined

Reference images (`image_urls` / `image_url`): up to 6, up to 3 per character for up to 2 characters.

video

3 (1 when `duration` is 11–15)

MP4, MOV · up to 3 s · up to 50 MB each

Reference videos (`video_urls`). Audio in them is ignored.

## 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-1-2_01a0xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "QUEUED",
  "polling_url": "https://gateway.pixazo.ai/v2/requests/status/gemini-omni-1-2_01a0xxxx-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, a reference video longer than 3 seconds or larger than 50 MB, or more reference videos than the duration allows).

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 with reference images only; reference videos add upload time (our 3-second test with one clip took about 1 min 45 s).

```
curl 'https://gateway.pixazo.ai/v2/requests/status/gemini-omni-1-2_01a0xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' \
  -H 'Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY'
```

### Completed response

```
{
  "request_id": "gemini-omni-1-2_01a0xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "COMPLETED",
  "model_id": "gemini-omni-1-2",
  "error": null,
  "output": {
    "media_url": [
      "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/gemini-omni-1-2_01a0xxxx-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-1-2`).

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 per second of output video, measured from the generated file, so a shorter clip costs proportionally less. Failed requests are not billed. The current rate is shown on this model's page.

## 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**

Up to 6 reference images per request (up to 3 images per character, for up to 2 characters), and short reference videos in `video_urls`: MP4 or MOV, up to 3 seconds and 50 MB each, up to 3 per request for a 3–10 second video and 1 for an 11–15 second video. A request may carry images, videos, or both. The sound of a reference video is ignored. Google notes that reasoning across several videos is not supported and may give unexpected results, so one clip is the most reliable. The price is per second of output video; reference images and videos do not change it.

**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. Reference videos add upload and processing time before generation starts.

**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. Reference videos are accepted only here (Reference to Video), not by Video to Video editing.

**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

**Referring to images and videos**

Name each image by its place in `image_urls` and its role, in plain language — e.g. `in the style of the first image, the woman from the second image is walking`. Name a reference video the same way — e.g. `the man shown in the reference video sits at the cafe table from the first image`.

**No control tags**

Do not put control strings such as `<FIRST_FRAME>`, `<IMAGE_REF_0>` or `<VIDEO_REF_0>` in `prompt`: Gemini Omni 1.2 Flash no longer supports them. Describe in plain language how each image or video should be used instead.

**Multi-image compositions**

Combine plain-language references with timecodes — e.g. `[0-5s] the woman from the first image holds the bag from the second image [5-10s] the man from the third image holds the hat from the fourth image`.

**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-5s] walking [5-10s] stops and turns [10-15s] 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”.

### Video to Video(video editing)

## Gemini Omni 1.2 Flash Video to Video 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.

Backed by Google's `gemini-omni-1.2-flash`.

```
POST https://gateway.pixazo.ai/gemini-omni-1-2/v1/video-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

## Video to Video - Gemini Omni 1.2 Flash

## Request Code

HTTP Python JavaScript cURL

```
POST https://gateway.pixazo.ai/gemini-omni-1-2/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://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/video/input-8s.mp4"
}
```

```
import requests

url = "https://gateway.pixazo.ai/gemini-omni-1-2/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://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/video/input-8s.mp4"
}

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

```
const res = await fetch("https://gateway.pixazo.ai/gemini-omni-1-2/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://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/video/input-8s.mp4"
})
});
console.log(await res.json());
```

```
curl -X POST 'https://gateway.pixazo.ai/gemini-omni-1-2/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://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/video/input-8s.mp4"}'
```

## Output

```
{
  "request_id": "gemini-omni-1-2_01a0xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "QUEUED",
  "polling_url": "https://gateway.pixazo.ai/v2/requests/status/gemini-omni-1-2_01a0xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
```

[Try Now](https://api.pixazo.ai/api-details#api=gemini-omni-1-2&operation=video-to-video-request)

## 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-1-2/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://pub-582b7213209642b9b995c96c95a30381.r2.dev/doc-assets/video/input-8s.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-1-2_01a0xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "COMPLETED",
  "model_id": "gemini-omni-1-2",
  "error": null,
  "output": {
    "media_url": [
      "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/gemini-omni-1-2_01a0xxxx-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-1-2_01a0xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "ERROR",
  "model_id": "gemini-omni-1-2",
  "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 `COMPLETED` or `ERROR`/`FAILED`.
-   **sync** mode: a webhook callback on each status change.
-   Callbacks are idempotent on `request_id` — de-duplicate on it.
-   Respond `200` within 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. The source clip must be 15 seconds or shorter.

`aspect_ratio`

No

string

—

—

**Not used for video-to-video** — the edited clip keeps the aspect ratio of the source video.

`duration`

No

integer

—

—

**Not used for video-to-video** — the edited clip inherits the length of the source video. Billing follows the actual output length.

### 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-1-2_01a0xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "QUEUED",
  "polling_url": "https://gateway.pixazo.ai/v2/requests/status/gemini-omni-1-2_01a0xxxx-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-1-2_01a0xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' \
  -H 'Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY'
```

### Completed response

```
{
  "request_id": "gemini-omni-1-2_01a0xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "COMPLETED",
  "model_id": "gemini-omni-1-2",
  "error": null,
  "output": {
    "media_url": [
      "https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/gemini-omni-1-2_01a0xxxx-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-1-2`).

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 per second of output video, measured from the generated file, so a shorter clip costs proportionally less. Failed requests are not billed. The current rate is shown on this model's page.

## 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-5s] walking [5-10s] stops and turns [10-15s] 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”.
