Перейти к навигации

Veo 3.1

Создавайте 8-секундные видео со звуком в 720p, 1080p или 4K по тексту, по одному-двум кадрам или с использованием не более трёх референсных изображений. Выберите Quality, Fast или Lite: у каждого уровня свой тариф.

  • Асинхронная обработка: запрос создания возвращает ID задачи. Видео будет доступно после её успешного завершения.
  • Один ID модели, три уровня: quality выбирает Quality, Fast или Lite. Для каждой пары уровня и разрешения установлен отдельный тариф.
  • Поля duration нет: длительность определяет модель, а цена задаётся за ролик. В прайс-листе он описан как видео со звуком длительностью 8 секунд.
  • Для референсных изображений требуется Fast или Lite. Если не указать quality, используется Fast; Quality отклоняется. Запросы по тексту и кадрам по умолчанию используют Quality.
  • Оплата за ролик по уровню и разрешению, а не за секунду. Задача, завершившаяся ошибкой, не оплачивается.
POST/v1/videos/tasksПопробовать

Открывает модель в API Explorer. Введите свой API-ключ BeatAPI, чтобы создать задачу. Это настоящий запрос: его стоимость спишется с вашего баланса.

Адрес API и авторизация

POST https://api.beatapi.io/v1/videos/tasks

Authorization string Обязательно

Передавайте API-ключ BeatAPI как Bearer <BEATAPI_API_KEY>. Создать ключ можно в панели управления. Храните ключи на сервере, а не в коде браузерного или мобильного приложения.

Передавайте тело запроса в JSON с заголовком Content-Type: application/json. Idempotency-Key необязателен. Для каждого логического запроса используйте уникальное значение длиной не более 255 символов и повторно используйте его только для отправки точно такого же тела. В течение 24 часов повтор с тем же ключом и телом возвращает первый ответ с заголовком Idempotent-Replayed: true. Тот же ключ с другим телом возвращает 409 idempotency_conflict. Ответы, отличные от 2xx, не сохраняются, поэтому повтор после 400 или 402 выполняется заново.

Как выполняется запрос

1

Создайте задачу

Отправьте перечисленные ниже параметры методом POST на указанный адрес. Ответ 201 означает, что задача принята, а её стоимость зарезервирована на балансе. Обработка идёт в фоновом режиме. Сохраните data.id.

2

Дождитесь завершения

Вызывайте GET /v1/tasks/{task_id}, выдерживая между вызовами data.poll_after_seconds (5 с для изображений, 8 с для видео), пока status не станет succeeded или failed. Можно также настроить вебхук для событий task.succeeded и task.failed. Сохраняйте опрос как резервный способ проверки: задача, остановленная по тайм-ауту обработки, не отправляет событие.

3

Сохраните результат

При succeeded скачайте файлы по всем ссылкам data.output.media[].url и сохраните нужные результаты у себя. BeatAPI не гарантирует срок доступности этих ссылок. При failed прочитайте data.error_code и data.error_message: зарезервированная сумма возвращена на баланс, а data.retryable показывает, может ли повтор того же запроса завершиться успешно.

Режимы ввода

РежимОбязательные данныеПримечания
Видео по текстуmodel, promptЛюбой уровень. Если quality не задан, используется Quality.
Первый кадрmodel, prompt, images (1 ссылка)Видео начинается с изображения. Доступен любой уровень.
Первый и последний кадрыmodel, prompt, images (2 ссылки)images[0] — первый кадр, images[1] — последний. Доступен любой уровень.
Референсные изображенияmodel, prompt, reference_images (1–3 ссылки)Только Fast или Lite; Fast, если quality не задан. aspect_ratio должно быть 16:9 или 9:16. Нельзя сочетать с images.

Параметры запроса

model string Обязательно

Модель, которую нужно вызвать. Veo 3.1 имеет один ID, уровень выбирается параметром quality.

Значение: veo-3.1

Если значение неверно

  • Поле отсутствует: "model" is required
  • На этот адрес API отправлена модель изображений: "model" nano-banana-2 is served by POST /v1/images/tasks, not this endpoint

prompt string Обязательно

Что должно происходить в видео: объект, действие, движение камеры, стиль и звук.

Длина: 1–5000 символов

  • Длина измеряется в символах. Иероглиф CJK считается одним символом.
  • При референсных изображениях укажите назначение каждого и ссылайтесь на него по порядку, например «первое референсное изображение».

Если значение неверно

  • Поле отсутствует: "prompt" is required
  • Пустое значение или превышена допустимая длина: "prompt" has an unsupported length

quality string Необязательно

Уровень: Quality, Fast или Lite. Для каждой пары уровня и разрешения установлен отдельный тариф.

Допустимые значения: Quality, Fast, Lite

  • Регистр важен: Fast, а не fast.
  • Если параметр не указан, запросы по тексту и кадрам используют Quality, а по референсным изображениям — Fast, более дешёвый уровень с поддержкой референсов.
  • Quality нельзя использовать с reference_images. Передайте Fast или Lite либо не задавайте quality.
  • Уровень определяет цену; см. раздел об оплате. Фактическая сумма указана в usage завершённой задачи.

Отсутствие quality не означает одинаковую цену во всех режимах. Запросы по тексту и кадрам оплачиваются как Quality — самый дорогой уровень. Указывайте quality явно.

Если значение неверно

  • Значение отсутствует в списке допустимых: "quality" must be one of: [Quality Fast Lite]
  • Quality вместе с reference_images: Veo 3.1 Quality does not support reference images

images string[] Необязательно

Первый кадр либо первый и последний кадры.

Число элементов: 1–2
Каждый элемент — общедоступная ссылка https://. Если файл находится на вашем устройстве, сначала загрузите его через POST /v1/files, затем передайте полученный data.url.

  • Одна ссылка: видео начинается с этого изображения. Две ссылки: images[0] задаёт первый кадр, images[1] — последний.
  • Для изображений, которые должны направлять генерацию, но не служить кадрами, используйте reference_images с Fast или Lite.

Если значение неверно

  • Больше двух ссылок: "images" accepts at most 2 items
  • Пустой массив: "images" requires at least 1 item
  • Передано вместе с reference_images: Cannot combine "images" with reference inputs in one task
  • Ссылка не начинается с https://: "images[0]" must be a public HTTPS URL

reference_images string[] Необязательно

От одного до трёх изображений, определяющих содержание, персонажей или стиль видео.

Число элементов: 1–3
Каждый элемент — общедоступная ссылка https://. Если файл находится на вашем устройстве, сначала загрузите его через POST /v1/files, затем передайте полученный data.url.

  • Требуется Fast или Lite. Если quality не задан, используется Fast.
  • aspect_ratio должно быть 16:9 или 9:16; по умолчанию — 16:9.
  • Изображения используются в порядке списка. В промпте ссылайтесь на них по порядку.

Если значение неверно

  • Больше трёх ссылок: "reference_images" accepts at most 3 items
  • Пустой массив: "reference_images" requires at least 1 item
  • Передано вместе с images: Cannot combine "images" with reference inputs in one task
  • Вместе с quality: "Quality": Veo 3.1 Quality does not support reference images
  • Вместе с aspect_ratio: "auto": Veo 3.1 reference mode requires aspect_ratio 16:9 or 9:16

aspect_ratio string НеобязательноПо умолчанию: 16:9

Соотношение ширины и высоты видео. При auto выбор делает модель.

Допустимые значения: 16:9, 9:16, auto
По умолчанию: 16:9

  • auto не принимается с reference_images. Используйте 16:9 или 9:16.

Если значение неверно

  • Значение отсутствует в списке допустимых: "aspect_ratio" must be one of: [16:9 9:16 auto]
  • auto вместе с reference_images: Veo 3.1 reference mode requires aspect_ratio 16:9 or 9:16

resolution string НеобязательноПо умолчанию: 720p

Разрешение результата. У каждого уровня свой тариф для каждого разрешения; 4K стоит дороже всего.

Допустимые значения: 720p, 1080p, 4k
По умолчанию: 720p

  • 4k и 4K означают одно и то же; принимаются оба варианта. Остальные значения пишутся строчными буквами.
  • В прайс-листе это разрешение называется 4K.

Если значение неверно

  • Недопустимое значение, например 1080P: "resolution" must be one of: [720p 1080p 4k 4K]

watermark string Необязательно

Необязательный текст водяного знака, передаётся модели без изменений. Если не указать поле, используется значение по умолчанию модели.

  • Это строка, а не переключатель: true и false отклоняются.

Если значение неверно

  • Значение не является строкой: "watermark" must be a string

enable_translation boolean Необязательно

Передаётся модели как переключатель перевода промпта. Если не указать поле, используется значение по умолчанию модели.

Если значение неверно

  • Значение не равно true или false: "enable_translation" must be a boolean

Перед созданием задачи шлюз также проверяет следующие сочетания параметров:

  • images нельзя сочетать с полями референсных материалов.

Ограничения входных материалов

До создания задачи шлюз проверяет каждый входной материал. Если ограничение нарушено, возвращается 400 bad_request с указанием материала. Средства не списываются.

  • Шлюз проверяет только общедоступность HTTPS-ссылки на каждое изображение. До создания задачи не измеряются размер файла, формат или размеры изображения. Поэтому неподходящее для модели изображение вызывает ошибку уже после отправки. Сообщение укажет, что изменить, а вся зарезервированная сумма вернётся.
  • Файл находится на вашем устройстве? Загрузите его через POST /v1/files и передайте полученный data.url.

Выбор уровня

Один ID модели охватывает три уровня. Это отдельные варианты с собственными ценами, выбираемые параметром quality.

qualityТекст и кадрыРеференсные изображенияЕсли не указать quality
QualityДопускаетсяОтклоняетсяИспользуется для запросов по тексту и кадрам
FastДопускаетсяДопускаетсяИспользуется для запросов по референсным изображениям
LiteДопускаетсяДопускаетсяНикогда не выбирается автоматически
  • Цены для каждого разрешения приведены в таблице раздела об оплате. При любом разрешении Quality — самый дорогой, а Lite — самый дешёвый уровень.

Параметры, которые модель не принимает

Эти параметры не игнорируются, а отклоняются до списания средств:

  • duration → field "duration" is not supported by model veo-3.1. Все видео Veo 3.1 имеют длительность 8 секунд, выбирать её не нужно.
  • reference_videos, reference_audios, generate_audio, seed, sound, task_type, output_format → field "<name>" is not supported by model veo-3.1 (с именем переданного поля). Поля для включения или отключения звука нет.
  • Любое другое неизвестное поле → unknown field: <name>.

Примеры запросов

curl --request POST \
--url https://api.beatapi.io/v1/videos/tasks \
--header "Authorization: Bearer $BEATAPI_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
"model": "veo-3.1",
"prompt": "A slow tracking shot along a rain-lit night market, neon reflections on wet stone, ambient crowd sound",
"quality": "Fast",
"aspect_ratio": "16:9",
"resolution": "720p"
}'

Видео по тексту (Fast)

Ролик длительностью 8 секунд в 720p на уровне Fast. quality указан намеренно: без него текстовый запрос оплачивается как Quality.

curl --request POST \
--url https://api.beatapi.io/v1/videos/tasks \
--header "Authorization: Bearer $BEATAPI_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
"model": "veo-3.1",
"prompt": "A slow tracking shot along a rain-lit night market, neon reflections on wet stone, ambient crowd sound",
"quality": "Fast",
"aspect_ratio": "16:9",
"resolution": "720p"
}'

Видео по тексту (Quality, 1080p)

Вертикальное видео на уровне Quality в 1080p.

curl --request POST \
--url https://api.beatapi.io/v1/videos/tasks \
--header "Authorization: Bearer $BEATAPI_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
"model": "veo-3.1",
"prompt": "A cinematic aerial reveal of a quiet coastal village at sunrise, gulls calling, waves on the shore",
"quality": "Quality",
"aspect_ratio": "9:16",
"resolution": "1080p"
}'

Видео по тексту (Lite, 4K)

4k и 4K равнозначны.

curl --request POST \
--url https://api.beatapi.io/v1/videos/tasks \
--header "Authorization: Bearer $BEATAPI_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
"model": "veo-3.1",
"prompt": "A close-up of coffee being poured into a white cup, steam rising, soft kitchen sounds",
"quality": "Lite",
"aspect_ratio": "16:9",
"resolution": "4k"
}'

Первый и последний кадры

Видео переходит от первого изображения ко второму. Если в images одна ссылка, видео начинается с этого изображения.

curl --request POST \
--url https://api.beatapi.io/v1/videos/tasks \
--header "Authorization: Bearer $BEATAPI_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
"model": "veo-3.1",
"prompt": "The camera pushes in from the bottle on the table to the singer on a neon stage in one continuous move",
"images": [
"https://cdn.beatapi.io/samples/smart-bottle.png",
"https://cdn.beatapi.io/samples/neon-singer.png"
],
"quality": "Quality",
"aspect_ratio": "16:9",
"resolution": "720p"
}'

Референсные изображения

Требуется Fast или Lite и aspect_ratio со значением 16:9 или 9:16.

curl --request POST \
--url https://api.beatapi.io/v1/videos/tasks \
--header "Authorization: Bearer $BEATAPI_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
"model": "veo-3.1",
"prompt": "The singer from the second reference image walks past the bottle from the first reference image on a neon street, handheld camera",
"reference_images": [
"https://cdn.beatapi.io/samples/smart-bottle.png",
"https://cdn.beatapi.io/samples/neon-singer.png"
],
"quality": "Fast",
"aspect_ratio": "16:9",
"resolution": "720p"
}'

Ответы

Создание задачи (201)

Объект задачи. Поле output равно null, пока задача не завершится успешно. Поля с пометкой «во время выполнения» исчезают после завершения задачи.

{
"data": {
"id": "task_7Qm2Xc9LpR4vT8sKa1Nf6YbH3eWdJ0uZ",
"object": "task",
"task_kind": "video",
"capability_id": "veo-3.1",
"capability_version": 1,
"media_type": "video",
"model": "veo-3.1",
"status": "queued",
"stage": "queued",
"created_at": 1791993600,
"updated_at": 1791993600,
"completed_at": null,
"poll_after_seconds": 8,
"output": null,
"usage": {
"credits_reserved": 0.3,
"credits_settled": 0,
"credits_refunded": 0,
"credits_charged": 0.3
},
"request_id": "req_5f0c2a9e4b7d4e31",
"error_code": null,
"error_message": null
}
}
ПолеТипОписание
data.idstringID задачи: префикс task_ и 32 буквы или цифры. Используется для опроса и сопоставления событий вебхука.
data.objectstringВсегда task.
data.task_kindstringimage или video.
data.capability_idstringID модели из вашего запроса.
data.capability_versionintegerВерсия контракта модели, сейчас 1.
data.media_typestringimage или video.
data.modelstringID модели из запроса, совпадает с capability_id.
data.statusstringqueued, processing, succeeded или failed. Только последние два состояния являются конечными.
data.stagestringПовторяет status; сохранено для совместимости со старыми клиентами.
data.created_atintegerВремя создания задачи, в секундах Unix.
data.updated_atintegerВремя последнего изменения, в секундах Unix.
data.completed_atinteger | nullВремя завершения, в секундах Unix. Во время выполнения равно null.
data.poll_after_secondsintegerВо время выполнения: сколько секунд ждать перед следующей проверкой (5 для изображений, 8 для видео).
data.typical_secondsobjectВо время выполнения, при достаточном числе недавних задач: время завершения p50 и p90 в секундах за последний период window, рассчитанное по samples задачам.
data.outputobject | nullРезультат. Равно null, пока status не станет succeeded. Поля результата описаны ниже.
data.usage.credits_reservednumberСумма USD, зарезервированная на балансе при создании задачи.
data.usage.credits_chargednumberСтоимость задачи в USD; 0, если задача завершилась ошибкой.
data.usage.credits_settlednumberОкончательно списанная сумма USD. Устанавливается после успешного завершения, иначе 0.
data.usage.credits_refundednumberСумма USD, возвращённая на баланс. После регистрации возврата по неудачной задаче равна зарезервированной сумме.
data.usage.billable_duration_secondsintegerТолько для видео: длительность в секундах, по которой рассчитана цена. Отсутствует, если модель не сообщает длительность.
data.request_idstringID запроса. Укажите его при обращении в поддержку.
data.error_codestring | nullКод ошибки; null, если задача не завершилась ошибкой.
data.error_messagestring | nullОписание проблемы и способа её исправить; null, если задача не завершилась ошибкой.

Успешно завершённая задача

GET /v1/tasks/{task_id} возвращает HTTP 200 со status: "succeeded" и результатом в data.output.

{
"data": {
"id": "task_7Qm2Xc9LpR4vT8sKa1Nf6YbH3eWdJ0uZ",
"object": "task",
"task_kind": "video",
"capability_id": "veo-3.1",
"capability_version": 1,
"media_type": "video",
"model": "veo-3.1",
"status": "succeeded",
"stage": "succeeded",
"created_at": 1791993600,
"updated_at": 1791993690,
"completed_at": 1791993690,
"output": {
"media": [
{
"type": "video",
"url": "https://media.beatapi.io/outputs/task_7Qm2Xc9LpR4vT8sKa1Nf6YbH3eWdJ0uZ/0.mp4",
"mime_type": "video/mp4"
}
],
"r2_url": "https://media.beatapi.io/outputs/task_7Qm2Xc9LpR4vT8sKa1Nf6YbH3eWdJ0uZ/0.mp4"
},
"usage": {
"credits_reserved": 0.3,
"credits_settled": 0.3,
"credits_refunded": 0,
"credits_charged": 0.3
},
"request_id": "req_5f0c2a9e4b7d4e31",
"error_code": null,
"error_message": null
}
}

Поля результата

ПолеТипОписание
output.mediaobject[]Созданные файлы. Для этой модели — одно 8-секундное видео.
output.media[].typestringВсегда video.
output.media[].urlstringHTTPS-ссылка на сохранённое видео. Скачайте его и храните у себя: срок доступности ссылки не гарантируется.
output.media[].mime_typestringMIME-тип файла, обычно video/mp4.
output.r2_urlstringПовтор ссылки на видео для старых клиентов. Вместо этого используйте media.

Задача, завершившаяся ошибкой

Если задача завершилась ошибкой, GET /v1/tasks/{task_id} всё равно возвращает HTTP 200: сведения об ошибке находятся в теле ответа. Зарезервированная сумма возвращается полностью, поэтому списания нет.

{
"data": {
"id": "task_7Qm2Xc9LpR4vT8sKa1Nf6YbH3eWdJ0uZ",
"object": "task",
"task_kind": "video",
"capability_id": "veo-3.1",
"capability_version": 1,
"media_type": "video",
"model": "veo-3.1",
"status": "failed",
"stage": "failed",
"created_at": 1791993600,
"updated_at": 1791993690,
"completed_at": 1791993690,
"output": null,
"usage": {
"credits_reserved": 0.3,
"credits_settled": 0,
"credits_refunded": 0.3,
"credits_charged": 0
},
"retryable": true,
"request_id": "req_5f0c2a9e4b7d4e31",
"error_code": "processing_failed",
"error_message": "The task failed during processing on our side. Retry; a failed task is refunded."
}
}
ПолеТипОписание
data.error_codestringbad_request или content_policy_violation означают, что запрос нужно изменить. При processing_unavailable, processing_timeout, processing_failed или result_transfer_failed можно повторить позже. См. ошибки.
data.error_messagestringСообщение с причиной ошибки и рекомендацией по исправлению.
data.retryablebooleanПрисутствует только у неудачной задачи. Значение true означает, что повтор того же запроса может завершиться успешно.
data.usageobjectПосле регистрации возврата (обычно сразу при ошибке): credits_charged и credits_settled равны 0, а credits_refunded равно credits_reserved.

Полный пример

Создайте задачу, дождитесь её завершения с интервалом опроса, указанным сервером, и выведите ссылки на результаты. Задайте BEATAPI_API_KEY в переменной окружения и установите requests.

import os
import time
import uuid
import requests
API = "https://api.beatapi.io"
HEADERS = {"Authorization": f"Bearer {os.environ['BEATAPI_API_KEY']}"}
def create_task(body: dict) -> dict:
# One Idempotency-Key per logical request: a retry with the same key cannot create a second task.
headers = {**HEADERS, "Idempotency-Key": str(uuid.uuid4())}
for attempt in range(3):
response = requests.post(f"{API}/v1/videos/tasks", headers=headers, json=body, timeout=60)
if response.status_code in (429, 503) and attempt < 2:
time.sleep(int(response.headers.get("Retry-After", 10)))
continue
break
try:
payload = response.json()
except ValueError: # an edge error page is not JSON
response.raise_for_status()
raise
if not response.ok:
error = payload["error"]
raise RuntimeError(f"{response.status_code} {error['code']}: {error['message']} (request_id={error.get('request_id')})")
return payload["data"]
def wait_for_task(task_id: str, timeout_seconds: int = 1800) -> dict:
deadline = time.monotonic() + timeout_seconds
while time.monotonic() < deadline:
response = requests.get(f"{API}/v1/tasks/{task_id}", headers=HEADERS, timeout=30)
if response.status_code == 429 or response.status_code >= 500:
time.sleep(int(response.headers.get("Retry-After", 10)))
continue
response.raise_for_status()
task = response.json()["data"]
if task["status"] in ("succeeded", "failed"):
return task
time.sleep(task.get("poll_after_seconds", 5))
raise TimeoutError(f"task {task_id} is still running; keep polling later")
task = create_task({
"model": "veo-3.1",
"prompt": "A slow tracking shot along a rain-lit night market, neon reflections on wet stone, ambient crowd sound",
"quality": "Fast",
"aspect_ratio": "16:9",
"resolution": "720p"
})
print("created", task["id"])
task = wait_for_task(task["id"])
if task["status"] == "failed":
raise SystemExit(f"{task['error_code']}: {task['error_message']}")
for item in task["output"]["media"]:
print(item["url"])

Оплата

  • Оплата за ролик, а не за секунду: каждое видео длится 8 секунд, цена зависит от уровня (quality) и разрешения. Звук включён в стоимость.
  • В таблице ниже отдельная строка для каждой пары уровня и разрешения. При любом разрешении Quality — самый дорогой, Lite — самый дешёвый уровень. Внутри уровня дороже всего 4K.
  • Если не указать quality, запрос по тексту или кадрам оплачивается как Quality, а запрос по референсным изображениям — как Fast. Указывайте quality, чтобы заранее знать тариф.
  • Цена резервируется при создании задачи и окончательно списывается, когда видео готово. Если задача завершилась ошибкой, в том числе из-за модерации после отправки, средства возвращаются полностью.

Текущие базовые цены совпадают с указанными на странице цен. Если для аккаунта согласована скидка, стоимость будет ниже. Фактически списанная сумма всегда указана в data.usage задачи.

ВариантБазовая цена (USD)
8 с · Lite · 720p · со звуком$0.15
8 с · Lite · 1080p · со звуком$0.25
8 с · Lite · 4K · со звуком$0.75
8 с · Fast · 720p · со звуком$0.3
8 с · Fast · 1080p · со звуком$0.4
8 с · Fast · 4K · со звуком$0.9
8 с · Quality · 720p · со звуком$1.85
8 с · Quality · 1080p · со звуком$1.9
8 с · Quality · 4K · со звуком$2.5

Частые ошибки

Ошибка или признак проблемыПричинаЧто делать
400 Veo 3.1 Quality does not support reference imagesquality: "Quality" вместе с reference_images.Передайте Fast или Lite либо не указывайте quality, чтобы использовался Fast.
400 Veo 3.1 reference mode requires aspect_ratio 16:9 or 9:16aspect_ratio: "auto" вместе с reference_images.Передайте 16:9 или 9:16 либо не задавайте поле.
400 Cannot combine "images" with reference inputs in one taskКадры (images) и reference_images переданы в одном запросе.Используйте либо кадры, либо референсные изображения, но не оба варианта сразу.
400 field "duration" is not supported by model veo-3.1Видео Veo 3.1 всегда длится 8 секунд, поэтому поля duration нет.Удалите duration.
400 "quality" must be one of: [Quality Fast Lite]Передано другое написание, например fast или quality.Передайте Quality, Fast или Lite с заглавной первой буквой.
400 "watermark" must be a stringwatermark передан как true или false.Передайте текст либо удалите поле.
Стоимость выше ожидаемойВ запросе по тексту или кадрам не указан quality, поэтому применён тариф Quality.Передайте quality: "Fast" или "Lite". Фактическое списание проверьте в usage.credits_charged задачи.
Задача failed с content_policy_violationПромпт, входное изображение или результат отклонены модерацией.Измените промпт или изображения. Повтор без изменений снова завершится ошибкой; средства не списаны.
402 insufficient_creditsБаланс меньше цены выбранных уровня и разрешения.Пополните баланс либо выберите более дешёвый уровень или разрешение.

Краткий справочник HTTP-ошибок

Ошибки до создания задачи возвращаются с HTTP-статусом, отличным от 2xx, без списания средств. Обрабатывайте error.code или error.retryable; причина указана в message. Полный список и правила повторов приведены в разделе ошибок.

{
"error": {
"code": "bad_request",
"message": "\"prompt\" is required",
"retryable": false,
"request_id": "req_5f0c2a9e4b7d4e31"
}
}
HTTP-статусerror.codeЧто делать
400bad_request, content_policy_violationИсправьте запрос: поле указано в сообщении. Не повторяйте запрос без изменений.
401missing_api_key, invalid_api_key (старые клиенты могут показывать unauthorized)Передайте действующий ключ в Authorization: Bearer <key>.
402insufficient_creditsПополните баланс или увеличьте лимит ключа, затем повторите запрос.
403forbiddenМодель недоступна для ключа или аккаунта; например, бонус можно использовать только с некоторыми моделями. Не повторяйте запрос без изменений.
404not_foundДля GET /v1/tasks/{task_id}: у аккаунта этого ключа нет такой задачи. Проверьте ID.
409idempotency_conflictИспользуйте новый Idempotency-Key или дождитесь завершения первого запроса с этим ключом.
429rate_limit_exceededПодождите число секунд из Retry-After (оно также указано в error.retry_after_seconds), затем повторите запрос.
500internal_errorПовторите запрос с увеличивающейся задержкой. Если ошибка сохраняется, обратитесь в поддержку и укажите request_id.
503processing_unavailable, processing_timeout, processing_failed, result_transfer_failedСредства не списаны. Повторите запрос с экспоненциальным увеличением задержки.

Аутентификация

AuthorizationBearer

Передавайте API-ключ в виде Authorization: Bearer <BEATAPI_API_KEY>.

Заголовки

Idempotency-KeystringОпциональный<=255 characters

Передавайте тело запроса в JSON с заголовком Content-Type: application/json. Idempotency-Key необязателен. Для каждого логического запроса используйте уникальное значение длиной не более 255 символов и повторно используйте его только для отправки точно такого же тела. В течение 24 часов повтор с тем же ключом и телом возвращает первый ответ с заголовком Idempotent-Replayed: true. Тот же ключ с другим телом возвращает 409 idempotency_conflict. Ответы, отличные от 2xx, не сохраняются, поэтому повтор после 400 или 402 выполняется заново.

Запрос

This endpoint expects an object.
modelenumОбязательный

Модель, которую нужно вызвать. Veo 3.1 имеет один ID, уровень выбирается параметром quality.

Значение: veo-3.1

Если значение неверно

  • Поле отсутствует: "model" is required
  • На этот адрес API отправлена модель изображений: "model" nano-banana-2 is served by POST /v1/images/tasks, not this endpoint
Допустимые значения:
promptstringОбязательный1-5000 characters

Что должно происходить в видео: объект, действие, движение камеры, стиль и звук.

Длина: 1–5000 символов

  • Длина измеряется в символах. Иероглиф CJK считается одним символом.
  • При референсных изображениях укажите назначение каждого и ссылайтесь на него по порядку, например «первое референсное изображение».

Если значение неверно

  • Поле отсутствует: "prompt" is required
  • Пустое значение или превышена допустимая длина: "prompt" has an unsupported length
aspect_ratioenumОпциональныйПо умолчанию 16:9

Соотношение ширины и высоты видео. При auto выбор делает модель.

Допустимые значения: 16:9, 9:16, auto

По умолчанию: 16:9

  • auto не принимается с reference_images. Используйте 16:9 или 9:16.

Если значение неверно

  • Значение отсутствует в списке допустимых: "aspect_ratio" must be one of: [16:9 9:16 auto]
  • auto вместе с reference_images: Veo 3.1 reference mode requires aspect_ratio 16:9 or 9:16
Допустимые значения:
enable_translationbooleanОпциональный

Передаётся модели как переключатель перевода промпта. Если не указать поле, используется значение по умолчанию модели.

Если значение неверно

  • Значение не равно true или false: "enable_translation" must be a boolean
imageslist of stringsОпциональный

Первый кадр либо первый и последний кадры.

Число элементов: 1–2

Каждый элемент — общедоступная ссылка https://. Если файл находится на вашем устройстве, сначала загрузите его через POST /v1/files, затем передайте полученный data.url.

  • Одна ссылка: видео начинается с этого изображения. Две ссылки: images[0] задаёт первый кадр, images[1] — последний.
  • Для изображений, которые должны направлять генерацию, но не служить кадрами, используйте reference_images с Fast или Lite.

Если значение неверно

  • Больше двух ссылок: "images" accepts at most 2 items
  • Пустой массив: "images" requires at least 1 item
  • Передано вместе с reference_images: Cannot combine "images" with reference inputs in one task
  • Ссылка не начинается с https://: "images[0]" must be a public HTTPS URL
qualityenumОпциональный

Уровень: Quality, Fast или Lite. Для каждой пары уровня и разрешения установлен отдельный тариф.

Допустимые значения: Quality, Fast, Lite

  • Регистр важен: Fast, а не fast.
  • Если параметр не указан, запросы по тексту и кадрам используют Quality, а по референсным изображениям — Fast, более дешёвый уровень с поддержкой референсов.
  • Quality нельзя использовать с reference_images. Передайте Fast или Lite либо не задавайте quality.
  • Уровень определяет цену; см. раздел об оплате. Фактическая сумма указана в usage завершённой задачи.

Примечания: Отсутствие quality не означает одинаковую цену во всех режимах. Запросы по тексту и кадрам оплачиваются как Quality — самый дорогой уровень. Указывайте quality явно.

Если значение неверно

  • Значение отсутствует в списке допустимых: "quality" must be one of: [Quality Fast Lite]
  • Quality вместе с reference_images: Veo 3.1 Quality does not support reference images
Допустимые значения:
reference_imageslist of stringsОпциональный

От одного до трёх изображений, определяющих содержание, персонажей или стиль видео.

Число элементов: 1–3

Каждый элемент — общедоступная ссылка https://. Если файл находится на вашем устройстве, сначала загрузите его через POST /v1/files, затем передайте полученный data.url.

  • Требуется Fast или Lite. Если quality не задан, используется Fast.
  • aspect_ratio должно быть 16:9 или 9:16; по умолчанию — 16:9.
  • Изображения используются в порядке списка. В промпте ссылайтесь на них по порядку.

Если значение неверно

  • Больше трёх ссылок: "reference_images" accepts at most 3 items
  • Пустой массив: "reference_images" requires at least 1 item
  • Передано вместе с images: Cannot combine "images" with reference inputs in one task
  • Вместе с quality: "Quality": Veo 3.1 Quality does not support reference images
  • Вместе с aspect_ratio: "auto": Veo 3.1 reference mode requires aspect_ratio 16:9 or 9:16
resolutionenumОпциональныйПо умолчанию 720p

Разрешение результата. У каждого уровня свой тариф для каждого разрешения; 4K стоит дороже всего.

Допустимые значения: 720p, 1080p, 4k

По умолчанию: 720p

  • 4k и 4K означают одно и то же; принимаются оба варианта. Остальные значения пишутся строчными буквами.
  • В прайс-листе это разрешение называется 4K.

Если значение неверно

  • Недопустимое значение, например 1080P: "resolution" must be one of: [720p 1080p 4k 4K]
Допустимые значения:
watermarkstringОпциональный

Необязательный текст водяного знака, передаётся модели без изменений. Если не указать поле, используется значение по умолчанию модели.

  • Это строка, а не переключатель: true и false отклоняются.

Если значение неверно

  • Значение не является строкой: "watermark" must be a string

Ответ

Объект задачи. Поле output равно null, пока задача не завершится успешно. Поля с пометкой «во время выполнения» исчезают после завершения задачи.

Ошибки

400
Bad Request Error
401
Unauthorized Error
402
Payment Required Error
403
Forbidden Error
409
Conflict Error
429
Too Many Requests Error
500
Internal Server Error
503
Service Unavailable Error