Общая документация Public API · API-ключ можно создать в настройках аккаунта
Veo 3.1 - видеомодель Google DeepMind. Через API она делает 8-секундный ролик по текстовому описанию, по одному исходному кадру или по нескольким референсам. Подходит для рекламных роликов, коротких сцен для соцсетей, оживления фотографий и видео с одним и тем же продуктом или персонажем.
Три режима работы:
Три модели, от доступной к самой качественной:
veo3.1-lite) - самый недорогой вариант, только для видео из текста.veo3.1-fast) - быстрая модель, работает во всех трёх режимах.veo3.1-quality) - максимальное качество картинки, работает с текстом и с одним изображением, без референсов.Каждый вызов создаёт асинхронную операцию. API сразу возвращает id и стартовый статус, а готовое видео нужно забрать отдельной проверкой.
POST /api/v1/operationsAuthorization: Bearer brth_...id, стартовый статус и стоимость.Режим выбирается полем generation_type:
text - видео из текста;image - видео из одного изображения;reference - видео по референсам.{
"tool": "veo-3-1",
"input": {
"generation_type": "text",
"model": "veo3.1-lite",
"prompt": "Опишите сцену, действие, стиль и движение камеры",
"aspect_ratio": "16:9",
"resolution": "1080p"
}
}
tool - slug нейросети, всегда "veo-3-1".input - параметры конкретного запуска. Все поля передаются прямо внутри input, без дополнительной вложенности. Набор полей зависит от режима: для image добавляется image_urls, для reference - reference_image_urls.| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
generation_type | enum | Да | Режим генерации. Варианты: text (видео из текста), image (видео из одного изображения), reference (видео по референсам). |
model | enum | Да | Модель. Варианты: veo3.1-lite (Lite, самая доступная, только режим text), veo3.1-fast (Fast, все режимы), veo3.1-quality (Quality, максимальное качество, режимы text и image). |
prompt | string | Да | Описание ролика: что происходит в кадре, как движется камера, свет, стиль и настроение. От 3 до 4000 символов. |
image_urls | string (url) | Да (для image) | URL одного исходного изображения, которое нейросеть оживит. Нужен только при generation_type: "image". Допустимые расширения: .jpg, .jpeg, .png, .webp. Только внешние http/https ссылки. |
reference_image_urls | string[] (url) | Да (для reference) | Массив из 1-3 URL референсных изображений: персонаж, продукт, стиль. Нужен только при generation_type: "reference". Допустимые расширения: .jpg, .jpeg, .png, .webp. Только внешние http/https ссылки. |
aspect_ratio | enum | Да | Соотношение сторон ролика. Варианты: 16:9 (горизонтальное видео), 9:16 (вертикальное видео). На цену не влияет. |
resolution | enum | Да | Разрешение ролика. Варианты: 720p, 1080p, 4k. Вместе с model определяет цену. |
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "veo-3-1",
"input": {
"generation_type": "text",
"model": "veo3.1-lite",
"prompt": "Кинематографичный пролёт камеры над ночным городом, мокрый асфальт отражает неоновые вывески, лёгкий туман, камера плавно движется вперёд",
"aspect_ratio": "16:9",
"resolution": "1080p"
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'veo-3-1',
input: {
generation_type: 'text',
model: 'veo3.1-lite',
prompt:
'Кинематографичный пролёт камеры над ночным городом, мокрый асфальт отражает неоновые вывески, лёгкий туман, камера плавно движется вперёд',
aspect_ratio: '16:9',
resolution: '1080p',
},
}),
})
const data = await response.json()
console.log(data)
import requests
response = requests.post(
"https://bratuha.ru/api/v1/operations",
headers={
"Authorization": "Bearer brth_ваш_ключ",
"Content-Type": "application/json",
},
json={
"tool": "veo-3-1",
"input": {
"generation_type": "text",
"model": "veo3.1-lite",
"prompt": "Кинематографичный пролёт камеры над ночным городом, мокрый асфальт отражает неоновые вывески, лёгкий туман, камера плавно движется вперёд",
"aspect_ratio": "16:9",
"resolution": "1080p",
},
},
timeout=30,
)
print(response.status_code)
print(response.json())
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "veo-3-1",
"input": {
"generation_type": "image",
"model": "veo3.1-fast",
"prompt": "Девушка на портрете медленно поворачивает голову и улыбается, ветер слегка колышет волосы, мягкий студийный свет, камера плавно приближается",
"image_urls": "https://cdn.example.com/source-image-1.jpg",
"aspect_ratio": "9:16",
"resolution": "1080p"
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'veo-3-1',
input: {
generation_type: 'image',
model: 'veo3.1-fast',
prompt:
'Девушка на портрете медленно поворачивает голову и улыбается, ветер слегка колышет волосы, мягкий студийный свет, камера плавно приближается',
image_urls: 'https://cdn.example.com/source-image-1.jpg',
aspect_ratio: '9:16',
resolution: '1080p',
},
}),
})
const data = await response.json()
console.log(data)
import requests
response = requests.post(
"https://bratuha.ru/api/v1/operations",
headers={
"Authorization": "Bearer brth_ваш_ключ",
"Content-Type": "application/json",
},
json={
"tool": "veo-3-1",
"input": {
"generation_type": "image",
"model": "veo3.1-fast",
"prompt": "Девушка на портрете медленно поворачивает голову и улыбается, ветер слегка колышет волосы, мягкий студийный свет, камера плавно приближается",
"image_urls": "https://cdn.example.com/source-image-1.jpg",
"aspect_ratio": "9:16",
"resolution": "1080p",
},
},
timeout=30,
)
print(response.status_code)
print(response.json())
В этом режиме работает только модель veo3.1-fast. Передайте от одного до трёх изображений: например, сам продукт и упаковку или персонажа с разных ракурсов.
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "veo-3-1",
"input": {
"generation_type": "reference",
"model": "veo3.1-fast",
"prompt": "Рекламный ролик: флакон духов стоит на мокром чёрном камне, вокруг падают капли воды, камера медленно облетает флакон, чистый студийный свет",
"reference_image_urls": [
"https://cdn.example.com/source-image-1.jpg",
"https://cdn.example.com/source-image-2.jpg"
],
"aspect_ratio": "16:9",
"resolution": "1080p"
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'veo-3-1',
input: {
generation_type: 'reference',
model: 'veo3.1-fast',
prompt:
'Рекламный ролик: флакон духов стоит на мокром чёрном камне, вокруг падают капли воды, камера медленно облетает флакон, чистый студийный свет',
reference_image_urls: [
'https://cdn.example.com/source-image-1.jpg',
'https://cdn.example.com/source-image-2.jpg',
],
aspect_ratio: '16:9',
resolution: '1080p',
},
}),
})
const data = await response.json()
console.log(data)
import requests
response = requests.post(
"https://bratuha.ru/api/v1/operations",
headers={
"Authorization": "Bearer brth_ваш_ключ",
"Content-Type": "application/json",
},
json={
"tool": "veo-3-1",
"input": {
"generation_type": "reference",
"model": "veo3.1-fast",
"prompt": "Рекламный ролик: флакон духов стоит на мокром чёрном камне, вокруг падают капли воды, камера медленно облетает флакон, чистый студийный свет",
"reference_image_urls": [
"https://cdn.example.com/source-image-1.jpg",
"https://cdn.example.com/source-image-2.jpg",
],
"aspect_ratio": "16:9",
"resolution": "1080p",
},
},
timeout=30,
)
print(response.status_code)
print(response.json())
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "veo-3-1",
"input": {
"generation_type": "image",
"model": "veo3.1-quality",
"prompt": "Горное озеро на рассвете, по воде идёт лёгкая рябь, над водой медленно рассеивается туман, камера плавно поднимается вверх",
"image_urls": "https://cdn.example.com/source-image-1.jpg",
"aspect_ratio": "16:9",
"resolution": "4k"
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'veo-3-1',
input: {
generation_type: 'image',
model: 'veo3.1-quality',
prompt:
'Горное озеро на рассвете, по воде идёт лёгкая рябь, над водой медленно рассеивается туман, камера плавно поднимается вверх',
image_urls: 'https://cdn.example.com/source-image-1.jpg',
aspect_ratio: '16:9',
resolution: '4k',
},
}),
})
const data = await response.json()
console.log(data)
import requests
response = requests.post(
"https://bratuha.ru/api/v1/operations",
headers={
"Authorization": "Bearer brth_ваш_ключ",
"Content-Type": "application/json",
},
json={
"tool": "veo-3-1",
"input": {
"generation_type": "image",
"model": "veo3.1-quality",
"prompt": "Горное озеро на рассвете, по воде идёт лёгкая рябь, над водой медленно рассеивается туман, камера плавно поднимается вверх",
"image_urls": "https://cdn.example.com/source-image-1.jpg",
"aspect_ratio": "16:9",
"resolution": "4k",
},
},
timeout=30,
)
print(response.status_code)
print(response.json())
{
"id": "3f0f7f1e-5a1f-4d3c-9a0f-9a55d2f7b123",
"status": "queued",
"tool": "veo-3-1",
"cost": 20,
"balance_after": 480,
"created_at": "2026-10-01T12:00:00Z"
}
Сохраните id: по нему вы будете проверять статус и заберёте готовое видео.
{
"id": "3f0f7f1e-5a1f-4d3c-9a0f-9a55d2f7b123",
"status": "completed",
"tool": "veo-3-1",
"cost": 20,
"created_at": "2026-10-01T12:00:00Z",
"completed_at": "2026-10-01T12:02:10Z",
"result": {
"type": "video",
"urls": [
"https://storage.bratuha.ru/results/veo-3-1/result.mp4"
]
},
"error_message": null
}
{
"id": "3f0f7f1e-5a1f-4d3c-9a0f-9a55d2f7b123",
"status": "failed",
"tool": "veo-3-1",
"cost": 20,
"created_at": "2026-10-01T12:00:00Z",
"completed_at": "2026-10-01T12:01:20Z",
"result": null,
"error_message": "Не удалось сгенерировать видео"
}
После создания операции сохраните id и используйте его для проверки статуса:
GET /api/v1/operations/{id}id возвращается сразу после POST /api/v1/operations.curl -H "Authorization: Bearer brth_ваш_ключ" \
https://bratuha.ru/api/v1/operations/3f0f7f1e-5a1f-4d3c-9a0f-9a55d2f7b123
const operationId = '3f0f7f1e-5a1f-4d3c-9a0f-9a55d2f7b123'
const response = await fetch(
`https://bratuha.ru/api/v1/operations/${operationId}`,
{
headers: {
Authorization: 'Bearer brth_ваш_ключ',
},
},
)
const data = await response.json()
console.log(data.status, data.result)
Пока status равен queued или processing, ролик ещё создаётся. Проверяйте одну операцию не чаще раза в секунду, иначе API ответит 429. Когда статус станет completed, ссылка на видео будет в result.urls.
После успешного завершения операция возвращает result в таком формате:
{
"type": "video",
"urls": [
"https://storage.bratuha.ru/results/veo-3-1/result.mp4"
]
}
type - всегда "video".urls - массив ссылок на готовые видео. За один запуск получается один ролик в формате .mp4 длительностью 8 секунд.Если операция завершилась с ошибкой, result будет null, а текст ошибки вернётся в error_message.
Цена фиксированная за одну операцию и зависит только от модели и разрешения. Режим генерации и соотношение сторон на цену не влияют.
| Модель | 720p | 1080p | 4k |
|---|---|---|---|
Lite (veo3.1-lite) | 10 ₽ | 10 ₽ | 25 ₽ |
Fast (veo3.1-fast) | 20 ₽ | 20 ₽ | 50 ₽ |
Quality (veo3.1-quality) | 100 ₽ | 100 ₽ | 400 ₽ |
Стоимость списывается сразу при создании операции и возвращается в поле cost.
POST /api/v1/operations не идемпотентен: каждый повторный запрос создаёт новую операцию и списывает стоимость заново.queued, затем отдельно проверяете статус по id.veo3.1-lite - только text;veo3.1-fast - text, image и reference;veo3.1-quality - text и image.400 validation_error до списания.model, подставится veo3.1-lite. Она работает только с текстом, поэтому для image и reference указывайте модель явно. Если не передать generation_type, aspect_ratio или resolution, подставятся text, 16:9 и 1080p.image_urls нужен для image, reference_image_urls - для reference, для text ни одно из них не нужно.image_urls и reference_image_urls подходят только внешние http/https URL, доступные без авторизации. localhost, private IP и внутренние адреса не принимаются..jpg, .jpeg, .png, .webp. В режиме image передаётся ровно одна ссылка строкой, в режиме reference - массив из 1-3 ссылок.aspect_ratio: горизонтальный для 16:9, вертикальный для 9:16.