Создание операции
- Endpoint:
POST /api/v1/operations
- Авторизация:
Authorization: Bearer brth_...
- Выполнение асинхронное: запрос создаёт операцию и сразу возвращает её
id и стартовый статус.
Тело запроса
{
"tool": "gemini-omni",
"input": {
"generation_type": "video",
"prompt": "Портрет человека в неоновом городе, мягкий свет, высокая детализация",
"duration": "4",
"aspect_ratio": "16:9",
"resolution": "1080p"
}
}
Параметры передаются напрямую внутри объекта input. Дополнительный вложенный объект input не нужен.
Параметры
| Параметр | Тип | Обязательный | Описание |
|---|
generation_type | enum | Да | Варианты: video (Видео), character (Персонаж), audio (Аудио) |
prompt | string | Да | — |
image_urls | string[] (url) | Нет | Массив внешних URL изображений. Разрешены только http/https ссылки. Максимум файлов: 7. Допустимые расширения: .jpg, .jpeg, .png, .webp. |
video_source_urls | string[] (url) | Нет | Массив внешних URL видео. Разрешены только http/https ссылки. Максимум файлов: 1. Допустимые расширения: .mp4, .mov, .webm. |
video_trim_start | number | Нет | Используется только если загружено исходное видео. Значение задаётся в секундах и не может быть меньше 0. |
video_trim_end | number | Нет | Используется только если загружено исходное видео. Значение должно быть больше начала, а длина фрагмента не должна превышать 10 секунд. |
audio_id | string | Нет | Укажите ID заранее подготовленной аудиодорожки, если она нужна в видео. Можно оставить поле пустым. |
character_ids | object[] | Нет | Массив объектов. ID персонажей, созданных в режиме «Персонаж». До 3 ID. Учитывайте общую квоту: количество изображений + 2 × количество видео + количество ID персонажей ≤ 7. Минимум элементов: 0. Максимум элементов: 3. Поля элемента: id string обязательное. |
duration | enum | Да | Без загруженного видео цена зависит от длительности и разрешения. С видео стоимость фиксированная за генерацию. Варианты: 4 (4 сек), 6 (6 сек), 8 (8 сек), 10 (10 сек) |
aspect_ratio | enum | Да | Доступны горизонтальный и вертикальный форматы ролика. Варианты: 16:9 (16:9), 9:16 (9:16) |
resolution | enum | Да | 720p и 1080p стоят одинаково. 4K дороже: без видео цена зависит от длительности, с видео — фиксированная за генерацию. Варианты: 720p (720p), 1080p (1080p), 4k (4K) |
character_descriptions | string | Да | — |
character_image_url | string (url) | Да | Внешний URL изображения. Разрешены только http/https ссылки. Допустимые расширения: .jpg, .jpeg, .png, .webp. |
character_audio_id | string | Нет | Можно указать ID заранее подготовленного голоса, чтобы задать тембр и манеру речи персонажа. Поле необязательное. |
character_name | string | Нет | — |
audio_voice_id | enum | Да | Выберите пресет голоса. В описании указаны пол, характер тембра и высота. Варианты: achernar (Achernar — женский, мягкий, высокий), achird (Achird — мужской, дружелюбный, средний), algenib (Algenib — мужской, хриплый, низкий), algieba (Algieba — мужской, лёгкий, ниже среднего), alnilam (Alnilam — мужской, ровный, ниже среднего), aoede (Aoede — женский, бодрый, средний), autonoe (Autonoe — женский, яркий, средний), callirrhoe (Callirrhoe — женский, лёгкий, средний), charon (Charon — мужской, интеллигентный, низкий), despina (Despina — женский, мягкий, средний), enceladus (Enceladus — мужской, придыхающий, низкий), erinome (Erinome — женский, чистый, средний), fenrir (Fenrir — мужской, живой, молодой), gacrux (Gacrux — женский, зрелый, средний), iapetus (Iapetus — мужской, чистый, ниже среднего), kore (Kore — женский, уверенный, средний), laomedeia (Laomedeia — женский, радостный, выше среднего), leda (Leda — женский, молодой, выше среднего), orus (Orus — мужской, ровный, ниже среднего), puck (Puck — мужской, радостный, средний), pulcherrima (Pulcherrima — нейтральный, напористый, выше среднего), rasalgethi (Rasalgethi — мужской, интеллигентный, средний), sadachbia (Sadachbia — мужской, выразительный, низкий), sadaltager (Sadaltager — мужской, рассудительный, средний), schedar (Schedar — мужской, мягкий, ниже среднего), sulafat (Sulafat — женский, тёплый, средний), umbriel (Umbriel — мужской, мягкий, низкий), vindemiatrix (Vindemiatrix — женский, нежный, средний), zephyr (Zephyr — женский, яркий, выше среднего), zubenelgenubi (Zubenelgenubi — мужской, непринуждённый, ниже среднего) |
audio_name | string | Да | — |
audio_voice_description | string | Нет | — |
audio_example_dialogue | string | Нет | — |
Примеры запросов
cURL
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "gemini-omni",
"input": {
"generation_type": "video",
"prompt": "Портрет человека в неоновом городе, мягкий свет, высокая детализация",
"duration": "4",
"aspect_ratio": "16:9",
"resolution": "1080p"
}
}'
JavaScript / TypeScript
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"tool": "gemini-omni",
"input": {
"generation_type": "video",
"prompt": "Портрет человека в неоновом городе, мягкий свет, высокая детализация",
"duration": "4",
"aspect_ratio": "16:9",
"resolution": "1080p"
}
}),
})
const data = await response.json()
Python
import requests
response = requests.post(
'https://bratuha.ru/api/v1/operations',
headers={
'Authorization': 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
json={
"tool": "gemini-omni",
"input": {
"generation_type": "video",
"prompt": "Портрет человека в неоновом городе, мягкий свет, высокая детализация",
"duration": "4",
"aspect_ratio": "16:9",
"resolution": "1080p"
}
},
timeout=30,
)
print(response.status_code)
print(response.json())
Примеры ответов
Ответ после создания
{
"id": "op_uuid-123",
"status": "queued",
"tool": "gemini-omni",
"cost": 0,
"balance_after": 495,
"created_at": "2026-03-13T12:00:00Z"
}
Ответ после завершения
{
"id": "op_uuid-123",
"status": "completed",
"tool": "gemini-omni",
"cost": 0,
"created_at": "2026-03-13T12:00:00Z",
"completed_at": "2026-03-13T12:00:24Z",
"result": {
"type": "file",
"files": [
{
"url": "https://storage.bratuha.ru/results/gemini-omni/result.zip",
"name": "result.zip"
}
]
},
"error_message": null
}
Проверка статуса
curl -H "Authorization: Bearer brth_ваш_ключ" \
https://bratuha.ru/api/v1/operations/op_uuid-123
Формат результата
Возможные типы результата зависят от конфигурации инструмента.
Ценообразование
- Базовая ставка начинается от 0 ₽.
- Итоговая цена зависит от выбранных параметров и правил ниже.
Прайсинг
| Тип генерации | Длительность | Разрешение | Видео: заполнено | Цена |
|---|
| Видео | 4 сек | 720p | Нет | 60 ₽ |
| Видео | 6 сек | 720p | Нет | 80 ₽ |
| Видео | 8 сек | 720p | Нет | 100 ₽ |
| Видео | 10 сек | 720p | Нет | 120 ₽ |
| Видео | 4 сек | 1080p | Нет | 60 ₽ |
| Видео | 6 сек | 1080p | Нет | 80 ₽ |
| Видео | 8 сек | 1080p | Нет | 100 ₽ |
| Видео | 10 сек | 1080p | Нет | 120 ₽ |
| Видео | 4 сек | 4K | Нет | 150 ₽ |
| Видео | 6 сек | 4K | Нет | 180 ₽ |
| Видео | 8 сек | 4K | Нет | 220 ₽ |
| Видео | 10 сек | 4K | Нет | 330 ₽ |
| Видео | 4 сек | 720p | Да | 150 ₽ |
| Видео | 6 сек | 720p | Да | 150 ₽ |
| Видео | 8 сек | 720p | Да | 150 ₽ |
| Видео | 10 сек | 720p | Да | 150 ₽ |
| Видео | 4 сек | 1080p | Да | 150 ₽ |
| Видео | 6 сек | 1080p | Да | 150 ₽ |
| Видео | 8 сек | 1080p | Да | 150 ₽ |
| Видео | 10 сек | 1080p | Да | 150 ₽ |
| Видео | 4 сек | 4K | Да | 250 ₽ |
| Видео | 6 сек | 4K |
Ограничения и практические заметки
POST /api/v1/operations не идемпотентен: повторный запрос создаёт новую операцию.
- Все операции выполняются асинхронно: сначала вы получаете
queued, затем проверяете статус по id.
- Для file URL разрешены только внешние
http/https ссылки без localhost, loopback и private IP.
- Формат URL должен соответствовать допустимым расширениям поля, иначе API вернёт
validation_error.
- Форматы
HEIC/HEIF, которые поддерживаются при загрузке файлов в UI, к Public API по URL не относятся. Для API используйте JPG, JPEG, PNG или WebP.