# Gemini Omni API

> Gemini Omni video from a prompt: with pictures, a source video and a voice, or from the first frame to the last one.

Developer: Google
Model key in the API: `gemeni_omni`

## Connect in three steps

1. [Get a key](https://api.cyhub.ai/docs/connection.md?lang=en): Create a key in the dashboard after you confirm your email. One key opens every model.
2. [Check the price](https://api.cyhub.ai/docs/generations.md?lang=en): POST /v1/price shows the cost of a run in advance, without charging you.
3. [Run a task and collect the result](https://api.cyhub.ai/docs/tasks.md?lang=en): POST /v1/tasks starts a task, GET /v1/tasks/{id} shows its status and files.

## Ready-to-use code

Replace YOUR_API_KEY with your key. The code starts a task and waits for the result. In cURL, repeat the second request with the id from the first response instead of TASK_ID until status becomes succeeded.

```bash
curl -X POST "https://api.cyhub.ai/v1/tasks" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "gemeni_omni",
  "settings": {
    "mode": "materials",
    "prompt": "Рыжий кот в шляпе идёт по осенней улице, камера медленно едет следом",
    "duration": "6",
    "aspect_ratio": "9:16",
    "resolution": "720p",
    "voice": "achernar"
  }
}'

curl "https://api.cyhub.ai/v1/tasks/TASK_ID" \
  -H "Authorization: Bearer YOUR_API_KEY"
```

```python
import time

import requests

API = "https://api.cyhub.ai/v1"
HEADERS = {"Authorization": "Bearer YOUR_API_KEY"}

body = {
    "model": "gemeni_omni",
    "settings": {
        "mode": "materials",
        "prompt": "Рыжий кот в шляпе идёт по осенней улице, камера медленно едет следом",
        "duration": "6",
        "aspect_ratio": "9:16",
        "resolution": "720p",
        "voice": "achernar",
    },
}

response = requests.post(f"{API}/tasks", json=body, headers=HEADERS, timeout=60)
response.raise_for_status()
task = response.json()
while task["status"] in ("queued", "running"):
    time.sleep(5)
    task = requests.get(f"{API}/tasks/{task['id']}", headers=HEADERS, timeout=30).json()
print(task["status"], task["result"])
```

```javascript
const API = "https://api.cyhub.ai/v1";
const HEADERS = { Authorization: "Bearer YOUR_API_KEY", "Content-Type": "application/json" };

const body = {
  "model": "gemeni_omni",
  "settings": {
    "mode": "materials",
    "prompt": "Рыжий кот в шляпе идёт по осенней улице, камера медленно едет следом",
    "duration": "6",
    "aspect_ratio": "9:16",
    "resolution": "720p",
    "voice": "achernar"
  }
};

async function main() {
  let response = await fetch(`${API}/tasks`, { method: "POST", headers: HEADERS, body: JSON.stringify(body) });
  if (!response.ok) throw new Error(await response.text());
  let task = await response.json();
  while (task.status === "queued" || task.status === "running") {
    await new Promise((resolve) => setTimeout(resolve, 5000));
    response = await fetch(`${API}/tasks/${task.id}`, { headers: HEADERS });
    task = await response.json();
  }
  console.log(task.status, task.result);
}

main();
```

[Get a key](https://cyhub.ai/cabinet/keys)

## Price before the run

Prices as of 15.10.2026: from 46 ₽. POST /v1/price shows the exact price of your settings.

Send the same settings to POST /v1/price: the response shows the price of the run without charging you.

```bash
curl -X POST "https://api.cyhub.ai/v1/price" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "gemeni_omni",
  "settings": {
    "mode": "materials",
    "prompt": "Рыжий кот в шляпе идёт по осенней улице, камера медленно едет следом",
    "duration": "6",
    "aspect_ratio": "9:16",
    "resolution": "720p",
    "voice": "achernar"
  }
}'
```

- amount_minor: the price of the run in minor units (kopecks for rubles)
- currency: the wallet currency
- available_minor: how much your balance has for new tasks right now

## <a id="materials"></a>From a prompt and materials

> Video from a prompt. You can attach pictures and a source video and pick a voice, all of it optional. Materials take at most seven slots: a picture takes one, a video two.

Value of the mode field: `materials`

Price in this mode from 46 ₽.

### Parameters

Model parameters go inside settings. Omitted optional fields take their default values.

#### `prompt` (Required)

What happens in the video: who acts, where, how the camera moves.

- Type: String
- Minimum characters: 1
- Maximum characters: 5000

#### `duration` (Optional)

Clip length in seconds; the price depends on it.

- Type: String
- Allowed values: `4`, `6`, `8`, `10`
- Default: `"4"`

#### `aspect_ratio` (Optional)

Portrait 9:16 or landscape 16:9.

- Type: String
- Allowed values: `9:16`, `16:9`
- Default: `"9:16"`

#### `resolution` (Optional)

Resolution of the finished video. 360p, 720p and 1080p cost the same, 4K costs more.

- Type: String
- Allowed values: `360p`, `720p`, `1080p`, `4k`
- Default: `"720p"`

#### `image_urls` (Optional)

Up to seven picture URLs: people, objects, places, style. No more than five with a source video. The model sees them itself, so the prompt can simply say, for example, "the woman from the photo walks down the street".

- Type: List (String, uri)
- Maximum items: 7

#### `video_url` (Optional)

One URL of a source video no longer than 30 seconds. The model takes its first 10 seconds. With a video, duration is ignored: the model picks the length of the new clip, and the price is the same for any length.

- Type: List (String, uri)
- Maximum items: 1

#### `voice` (Optional)

Optional: a voice from the ready-made set that speaks in the video. The voices are English-speaking and may have an accent in other languages.

- Type: String
- Allowed values: `achernar`, `achird`, `algenib`, `algieba`, `alnilam`, `aoede`, `autonoe`, `callirrhoe`, `charon`, `despina`, `enceladus`, `erinome`, `fenrir`, `gacrux`, `iapetus`, `kore`, `laomedeia`, `leda`, `orus`, `puck`, `pulcherrima`, `rasalgethi`, `sadachbia`, `sadaltager`, `schedar`, `sulafat`, `umbriel`, `vindemiatrix`, `zephyr`, `zubenelgenubi`

Parameters not listed here are not accepted: the response is 422 unknown_setting.

### Input

- Pictures are URLs of JPEG, PNG or WebP files, up to 20 MB each.
- A video is a URL of an MP4 or MOV file up to 100 MB and no longer than 30 seconds.

| Field | Accepts | Formats | Files | File size up to |
|---|---|---|---|---|
| `image_urls` | Images | jpeg, jpg, png, webp | 7 | 20 MB |
| `video_url` | Video | mp4, mov | 1 | 100 MB |

[How to send files](https://api.cyhub.ai/docs/files.md?lang=en)

### Request example

Send this JSON to POST /v1/tasks with your API key. To check the price first, send the same JSON to POST /v1/price.

Video from a prompt

```json
{
  "model": "gemeni_omni",
  "settings": {
    "mode": "materials",
    "prompt": "Рыжий кот в шляпе идёт по осенней улице, камера медленно едет следом",
    "duration": "6",
    "aspect_ratio": "9:16",
    "resolution": "720p"
  }
}
```

Video from pictures

```json
{
  "model": "gemeni_omni",
  "settings": {
    "mode": "materials",
    "prompt": "Женщина с фото идёт по набережной на закате",
    "image_urls": [
      "https://example.com/woman.jpg",
      "https://example.com/embankment.jpg"
    ],
    "duration": "8",
    "aspect_ratio": "16:9"
  }
}
```

From a source video with a voice

```json
{
  "model": "gemeni_omni",
  "settings": {
    "mode": "materials",
    "prompt": "Тот же танец на крыше под дождём, в конце танцор говорит «Поехали!»",
    "video_url": [
      "https://example.com/dance.mp4"
    ],
    "voice": "puck"
  }
}
```

The price is calculated when the task is accepted, currency `RUB`.

[Complete generation example](https://api.cyhub.ai/docs/generations.md?lang=en)

### Output

- One MP4 video.
- Generation usually takes 3 to 15 minutes.

| Kind | Formats | How many | Note |
|---|---|---|---|
| `video` | mp4 | 1 |  |

A finished task as GET /v1/tasks/{id} returns it (some fields left out). The caption may sit on the task or on a single file and may be empty; the model picks the file name.

```json
{
  "id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
  "status": "succeeded",
  "finished_at": "2026-10-01T12:03:41+00:00",
  "result": {
    "caption": "Caption of the result: the model and its settings",
    "texts": [],
    "files_expire_at": "2026-10-08T12:03:41+00:00",
    "files_expired": false,
    "artifacts": [
      {
        "index": 0,
        "kind": "video",
        "filename": "video.mp4",
        "size": 12582912,
        "caption": "",
        "download_path": "/v1/tasks/7c9e6679-7425-40de-944b-e07fc1f90ae7/artifacts/0"
      }
    ]
  }
}
```

[How to read the result and download files](https://api.cyhub.ai/docs/tasks.md?lang=en#result)

## <a id="frames"></a>First and last frame

> The video runs from the first frame to the last one. The first frame is required, the last one is optional. The model takes no other materials in this mode.

Value of the mode field: `frames`

Price in this mode from 46 ₽.

### Parameters

Model parameters go inside settings. Omitted optional fields take their default values.

#### `prompt` (Required)

What happens in the video: who acts, where, how the camera moves.

- Type: String
- Minimum characters: 1
- Maximum characters: 5000

#### `duration` (Optional)

Clip length in seconds; the price depends on it.

- Type: String
- Allowed values: `4`, `6`, `8`, `10`
- Default: `"4"`

#### `aspect_ratio` (Optional)

Portrait 9:16 or landscape 16:9.

- Type: String
- Allowed values: `9:16`, `16:9`
- Default: `"9:16"`

#### `resolution` (Optional)

Resolution of the finished video. 360p, 720p and 1080p cost the same, 4K costs more.

- Type: String
- Allowed values: `360p`, `720p`, `1080p`, `4k`
- Default: `"720p"`

#### `first_frame_url` (Required)

One picture URL: the first frame of the video.

- Type: List (String, uri)
- Maximum items: 1

#### `last_frame_url` (Optional)

One picture URL: the last frame of the video. Only together with the first one.

- Type: List (String, uri)
- Maximum items: 1

Parameters not listed here are not accepted: the response is 422 unknown_setting.

### Input

- Pictures are URLs of JPEG, PNG or WebP files, up to 20 MB each.

| Field | Accepts | Formats | Files | File size up to |
|---|---|---|---|---|
| `first_frame_url` | Images | jpeg, jpg, png, webp | 1 | 20 MB |
| `last_frame_url` | Images | jpeg, jpg, png, webp | 1 | 20 MB |

[How to send files](https://api.cyhub.ai/docs/files.md?lang=en)

### Request example

Send this JSON to POST /v1/tasks with your API key. To check the price first, send the same JSON to POST /v1/price.

From the first frame to the last one

```json
{
  "model": "gemeni_omni",
  "settings": {
    "mode": "frames",
    "prompt": "Бутон медленно раскрывается в цветок, мягкий утренний свет",
    "first_frame_url": [
      "https://example.com/bud.png"
    ],
    "last_frame_url": [
      "https://example.com/flower.png"
    ],
    "duration": "4"
  }
}
```

The price is calculated when the task is accepted, currency `RUB`.

[Complete generation example](https://api.cyhub.ai/docs/generations.md?lang=en)

### Output

- One MP4 video.
- Generation usually takes 3 to 15 minutes.

| Kind | Formats | How many | Note |
|---|---|---|---|
| `video` | mp4 | 1 |  |

A finished task as GET /v1/tasks/{id} returns it (some fields left out). The caption may sit on the task or on a single file and may be empty; the model picks the file name.

```json
{
  "id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
  "status": "succeeded",
  "finished_at": "2026-10-01T12:03:41+00:00",
  "result": {
    "caption": "Caption of the result: the model and its settings",
    "texts": [],
    "files_expire_at": "2026-10-08T12:03:41+00:00",
    "files_expired": false,
    "artifacts": [
      {
        "index": 0,
        "kind": "video",
        "filename": "video.mp4",
        "size": 12582912,
        "caption": "",
        "download_path": "/v1/tasks/7c9e6679-7425-40de-944b-e07fc1f90ae7/artifacts/0"
      }
    ]
  }
}
```

[How to read the result and download files](https://api.cyhub.ai/docs/tasks.md?lang=en#result)

## See also

- [Gemini Omni: features and prices](https://api.cyhub.ai/models/gemini-omni)
- Similar models: [Seedance 2.5 API](https://api.cyhub.ai/en/models/seedance-2-5/api.md), [Kling 3.0 API](https://api.cyhub.ai/en/models/kling-3/api.md), [Kling Motion 3.0 API](https://api.cyhub.ai/en/models/kling-motion/api.md), [Veo 3.1 API](https://api.cyhub.ai/en/models/veo-3-1/api.md), [Wan 3.0 API](https://api.cyhub.ai/en/models/wan-3/api.md), [MiniMax H3 (Hailuo 03) API](https://api.cyhub.ai/en/models/minimax-h3/api.md)
- [API documentation](https://api.cyhub.ai/docs.md?lang=en)
- [API errors and how to handle them](https://api.cyhub.ai/docs/errors.md?lang=en)
