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

Kling 2.6 Motion Control

Перенесите движения из одного видео длиной 3–30 секунд на персонажа с одного изображения, в 720p или 1080p. При ориентации по изображению результат длится до 10 секунд, по видео — до 30 секунд.

  • Асинхронная обработка: запрос создания возвращает ID задачи. Видео будет доступно после её успешного завершения.
  • Два обязательных материала: одно изображение персонажа и одно видео движений длиной 3–30 секунд. Персонаж с изображения повторяет движения из видео.
  • character_orientation определяет, чему следует ориентация персонажа, и максимальную длительность результата: до 10 секунд при image по умолчанию, до 30 секунд при video.
  • Поля duration нет: результат длится столько же, сколько видео движений, но не дольше ограничения выбранной ориентации.
  • Оплата за секунду готового видео в 720p или 1080p. Итоговая стоимость рассчитывается из суммы, зарезервированной при создании. Задача, завершившаяся ошибкой, не оплачивается.

На момент написания обе модели Kling Motion Control отсутствуют в актуальном списке GET /v1/media/models. Пока модель не включена в этот список, создание задачи возвращает 503 processing_unavailable без списания средств. Проверьте список перед интеграцией.

POST/v1/videos/tasksПопробовать

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

Идентификаторы моделей

Две модели используют один адрес API и одинаковые входные данные. Значения ниже взяты непосредственно из контракта шлюза. Только Kling 3.0 Motion Control принимает background_source.

ID моделиresolutioncharacter_orientationbackground_sourceИзображения персонажаВидео движенийКогда выбрать
kling-2.6-motion-control720p, 1080pimage, video—11Нужна более низкая цена за секунду, и фон видео движений вас устраивает.
kling-3-motion-control720p, 1080pimage, videoinput_video, input_image11Нужно выбрать источник фона: видео движений или изображение персонажа (background_source). Цена за секунду выше.

Адрес 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, images (1 ссылка), reference_videos (1 ссылка)Персонаж с изображения повторяет движения из видео. prompt необязателен. Другие материалы и параметры не принимаются: нет duration, aspect_ratio, аудио или дополнительных референсов.

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

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

Модель, которую нужно вызвать.

Значение: kling-2.6-motion-control

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

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

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

Необязательные текстовые указания о персонаже или сцене. Сами движения берутся из видео.

Длина: ≤ 2500 символов

  • Длина измеряется в символах; иероглиф CJK считается одним символом. Пустая строка допускается.

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

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

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

Изображение персонажа: ровно одна ссылка. Этот персонаж будет выполнять движения.

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

  • Передайте список с одной общедоступной HTTPS-ссылкой. Локальный файл можно загрузить через POST /v1/files и использовать здесь полученный data.url.
  • Размер файла, формат и размеры изображения при создании задачи не проверяются.

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

  • Поле отсутствует: "images" is required
  • Пустой список: "images" requires at least 1 item
  • Больше одной ссылки: "images" accepts at most 1 items
  • Ссылка не начинается с https://: "images[0]" must be a public HTTPS URL

reference_videos string[] Обязательно

Видео движений: ровно одна ссылка. Персонаж из images повторяет движения этого видео.

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

  • Длительность должна быть 3–30 секунд; см. ограничения материалов. Результат длится столько же, но не дольше лимита character_orientation.
  • До создания задачи шлюз читает длительность из заголовка файла запросами диапазона байтов, если сервер их разрешает.
  • Локальный файл можно загрузить через POST /v1/files (видео до 100 MB) и использовать полученный data.url.

Оплачиваются секунды созданного видео, поэтому обрежьте ролик до нужного движения. При character_orientation: "image" результат не длиннее 10 секунд.

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

  • Поле отсутствует: "reference_videos" is required
  • Пустой список: "reference_videos" requires at least 1 item
  • Больше одной ссылки: "reference_videos" accepts at most 1 items
  • Ссылка не начинается с https://: "reference_videos[0]" must be a public HTTPS URL
  • Короче 3 или длиннее 30 секунд: reference_videos[0] is 2 seconds long; this model takes reference video of 3 to 30 seconds.
  • Сервер возвращает ошибку или пустой файл: reference_videos[0] could not be downloaded: the URL returned HTTP 404.

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

Разрешение результата одновременно определяет тариф: секунда в 1080p стоит дороже, чем в 720p.

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

  • Только строчные буквы. Если параметр не указан, используется 720p.

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

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

character_orientation string НеобязательноПо умолчанию: image

Следует ли ориентация персонажа его изображению (image) или видео движений (video).

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

  • Параметр также задаёт максимальную длительность: до 10 секунд при image, до 30 при video. См. раздел о влиянии ориентации на длительность.
  • Если параметр не указан, используется image. Поэтому для видео движений длиннее 10 секунд явно передайте video.
  • Определяет резерв на балансе при создании задачи: стоимость максимальной длительности для выбранной ориентации. См. раздел об оплате.

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

  • Значение отсутствует в списке допустимых: "character_orientation" must be one of: [image video]

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

  • Требуются ровно одно изображение персонажа и одно загруженное видео движений длиной 3–30 секунд. При character_orientation: image результат не превышает 10 секунд.

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

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

МатериалОграничения, проверяемые до создания задачи
Видеокаждый файл: 3–30 с
  • При создании задачи длительность проверяется только у видео движений: 3–30 секунд, по заголовку файла, с допуском 0,1 секунды. Сообщение указывает индекс материала с 0, как в ошибках полей: reference_videos[0] is 45 seconds long; this model takes reference video of 3 to 30 seconds.
  • Если длительность нельзя прочитать — сервер не поддерживает запросы диапазона байтов или файл не MP4/MOV, — на этом этапе ролик не измеряется и не отклоняется. Создание отклоняется только при ошибке сервера или пустом файле, например reference_videos[0] could not be downloaded: the URL returned HTTP 404.
  • Для роликов до 10 секунд используйте image. Для более длинного видео движений передайте character_orientation: "video".
  • Размер файла, формат и размеры изображения при создании задачи не проверяются.
  • Файл находится на вашем устройстве? Загрузите его через POST /v1/files и передайте полученный data.url. Поддерживаются изображения png, jpg, jpeg, webp до 50 MB и видео mp4, mov до 100 MB.

Как ориентация влияет на длительность

Поля duration нет. Длительность результата совпадает с видео движений, но ограничена character_orientation.

character_orientationЧему следует ориентация персонажаМаксимальная длительность результатаРезерв на балансе при создании
image (по умолчанию)Изображению персонажа10 секунд10 секунд по тарифу разрешения
videoВидео движений30 секунд30 секунд по тарифу разрешения
  • После завершения итоговое списание рассчитывается по данным об использовании для созданного видео, обычно по базовой цене за секунду его длительности. Разница между резервом и списанием возвращается. Если данные об использовании не получены, списывается резерв. См. раздел об оплате.

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

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

  • duration, aspect_ratio, generate_audio, seed, task_type, output_format, reference_images, reference_audios, quality, sound, watermark и другие поля видеомоделей → field "duration" is not supported by model kling-2.6-motion-control (с именем переданного поля).
  • background_source → field "background_source" is not supported by model kling-2.6-motion-control; поле есть только у kling-3-motion-control.
  • Поле, вообще неизвестное API → 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": "kling-2.6-motion-control",
"prompt": "Keep the singer’s look and outfit; follow the movement of the video.",
"images": [
"https://cdn.beatapi.io/samples/neon-singer.png"
],
"reference_videos": [
"https://your-cdn.example.com/clips/source.mp4"
],
"resolution": "720p"
}'

Перенос движений

Замените ссылку собственным MP4 или MOV длиной 3–30 секунд: общедоступного примера видео нет. character_orientation не задан, поэтому используется image, а результат не превышает 10 секунд.

curl --request POST \
--url https://api.beatapi.io/v1/videos/tasks \
--header "Authorization: Bearer $BEATAPI_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
"model": "kling-2.6-motion-control",
"prompt": "Keep the singer’s look and outfit; follow the movement of the video.",
"images": [
"https://cdn.beatapi.io/samples/neon-singer.png"
],
"reference_videos": [
"https://your-cdn.example.com/clips/source.mp4"
],
"resolution": "720p"
}'

1080p, ориентация по видео

Для ролика длиннее 10 секунд: video допускает результат до 30 секунд. Замените ссылку собственным роликом. Большая длительность результата требует большего резерва при создании задачи.

curl --request POST \
--url https://api.beatapi.io/v1/videos/tasks \
--header "Authorization: Bearer $BEATAPI_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
"model": "kling-2.6-motion-control",
"images": [
"https://cdn.beatapi.io/samples/neon-singer.png"
],
"reference_videos": [
"https://your-cdn.example.com/clips/source.mp4"
],
"resolution": "1080p",
"character_orientation": "video"
}'

Ответы

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

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

{
"data": {
"id": "task_7Qm2Xc9LpR4vT8sKa1Nf6YbH3eWdJ0uZ",
"object": "task",
"task_kind": "video",
"capability_id": "kling-2.6-motion-control",
"capability_version": 1,
"media_type": "video",
"model": "kling-2.6-motion-control",
"status": "queued",
"stage": "queued",
"created_at": 1791993600,
"updated_at": 1791993600,
"completed_at": null,
"poll_after_seconds": 8,
"output": null,
"usage": {
"credits_reserved": 0.6,
"credits_settled": 0,
"credits_refunded": 0,
"credits_charged": 0.6,
"billable_duration_seconds": 10
},
"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": "kling-2.6-motion-control",
"capability_version": 1,
"media_type": "video",
"model": "kling-2.6-motion-control",
"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.6,
"credits_settled": 0.6,
"credits_refunded": 0,
"credits_charged": 0.6,
"billable_duration_seconds": 10
},
"request_id": "req_5f0c2a9e4b7d4e31",
"error_code": null,
"error_message": null
}
}

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

ПолеТипОписание
output.mediaobject[]Созданные файлы. Для этой модели — одно видео.
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": "kling-2.6-motion-control",
"capability_version": 1,
"media_type": "video",
"model": "kling-2.6-motion-control",
"status": "failed",
"stage": "failed",
"created_at": 1791993600,
"updated_at": 1791993690,
"completed_at": 1791993690,
"output": null,
"usage": {
"credits_reserved": 0.6,
"credits_settled": 0,
"credits_refunded": 0.6,
"credits_charged": 0,
"billable_duration_seconds": 10
},
"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": "kling-2.6-motion-control",
"prompt": "Keep the singer’s look and outfit; follow the movement of the video.",
"images": [
"https://cdn.beatapi.io/samples/neon-singer.png"
],
"reference_videos": [
"https://your-cdn.example.com/clips/source.mp4"
],
"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"])

Оплата

  • Эти цены действуют после появления модели в списке. До этого запрос создания отклоняется без списания средств.
  • Оплата за секунду готового видео по тарифу resolution. character_orientation и промпт на тариф не влияют. В таблице ниже указана цена 8-секундного результата.
  • Результат длится столько же, сколько видео движений, поэтому при создании окончательная цена неизвестна. Шлюз резервирует максимум для выбранной ориентации: 10 секунд при image, 30 при video, по тарифу разрешения. Это примерно 0.60(720p)или0.60 (720p) или 1.00 (1080p) при image и 1.80(720p)или1.80 (720p) или 3.00 (1080p) при video. Баланс должен покрывать резерв, иначе создание возвращает 402 insufficient_credits.
  • После завершения списание рассчитывается по данным об использовании для созданного видео, обычно по базовому тарифу за секунду его длительности. Остаток резерва возвращается. Если данные об использовании не получены, списывается резерв. usage.credits_charged и usage.credits_settled показывают списанную сумму. У этой модели usage.billable_duration_seconds показывает зарезервированные при создании секунды (10 или 30), а не длину готового видео. Фактическую оплату проверяйте по денежным полям.
  • Если задача завершилась ошибкой, в том числе из-за модерации после отправки, резерв возвращается полностью. Отклонённый до создания задачи запрос не оплачивается.

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

ВариантБазовая цена (USD)
8 с · 720p$0.48
8 с · 1080p$0.8

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

Ошибка или признак проблемыПричинаЧто делать
400 field "duration" is not supported by model kling-2.6-motion-controlМодель не поддерживает этот параметр, как и aspect_ratio, seed, generate_audio, task_type и другие перечисленные поля.Удалите поле. Длительность определяется видео движений.
400 "images" accepts at most 1 items или "reference_videos" accepts at most 1 itemsПередано больше одного изображения персонажа или видео движений.Передайте ровно одну ссылку в каждом списке.
400 "reference_videos" is requiredОтсутствует видео движений. Режима только по тексту или изображению у модели нет.Передайте одну ссылку в reference_videos и одну в images.
400 reference_videos[0] is 2 seconds long; this model takes reference video of 3 to 30 seconds.Видео движений короче 3 или длиннее 30 секунд.Обрежьте или замените ролик. Средства не списаны.
400 reference_videos[0] could not be downloaded: the URL returned HTTP 404.Ссылка возвращает ошибку или пустой файл.Разместите ролик по общедоступной HTTPS-ссылке либо загрузите через POST /v1/files.
400 "resolution" must be one of: [720p 1080p]Передано 480p, 4k или значение с заглавной буквой, например 1080P.Передайте 720p или 1080p.
400 field "background_source" is not supported by model kling-2.6-motion-controlbackground_source есть только у kling-3-motion-control.Удалите поле либо используйте kling-3-motion-control.
402 insufficient_creditsБаланс меньше резерва при создании — стоимости максимальной длительности выбранной ориентации: 10 с при image, 30 с при video.Пополните баланс либо используйте character_orientation: "image" с роликом до 10 секунд: резерв будет меньше.
503 processing_unavailable при создании задачиМодель сейчас недоступна: её нет в GET /v1/media/models.Средства не списаны. Проверьте список, затем повторите запрос с увеличивающейся задержкой.
Задача failed с content_policy_violationПромпт, входной материал или результат отклонены модерацией.Измените входные данные. Повтор без изменений снова завершится ошибкой; средства не списаны.

Краткий справочник 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Средства не списаны. Повторите запрос с экспоненциальным увеличением задержки.

Отличия двух моделей

Kling 2.6 Motion ControlKling 3.0 Motion Control
Входные данныеОдно изображение персонажа, одно видео движений длиной 3–30 сТо же
resolution720p, 1080pТо же
character_orientationimage (по умолчанию), videoТо же
background_sourceНе поддерживаетсяinput_video (по умолчанию), input_image
Цена за секундуНижеВыше; см. таблицу цен на странице каждой модели

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

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.
imageslist of stringsОбязательный

Изображение персонажа: ровно одна ссылка. Этот персонаж будет выполнять движения.

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

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

  • Передайте список с одной общедоступной HTTPS-ссылкой. Локальный файл можно загрузить через POST /v1/files и использовать здесь полученный data.url.
  • Размер файла, формат и размеры изображения при создании задачи не проверяются.

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

  • Поле отсутствует: "images" is required
  • Пустой список: "images" requires at least 1 item
  • Больше одной ссылки: "images" accepts at most 1 items
  • Ссылка не начинается с https://: "images[0]" must be a public HTTPS URL
modelenumОбязательный

Модель, которую нужно вызвать.

Значение: kling-2.6-motion-control

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

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

Видео движений: ровно одна ссылка. Персонаж из images повторяет движения этого видео.

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

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

  • Длительность должна быть 3–30 секунд; см. ограничения материалов. Результат длится столько же, но не дольше лимита character_orientation.
  • До создания задачи шлюз читает длительность из заголовка файла запросами диапазона байтов, если сервер их разрешает.
  • Локальный файл можно загрузить через POST /v1/files (видео до 100 MB) и использовать полученный data.url.

Примечания: Оплачиваются секунды созданного видео, поэтому обрежьте ролик до нужного движения. При character_orientation: "image" результат не длиннее 10 секунд.

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

  • Поле отсутствует: "reference_videos" is required
  • Пустой список: "reference_videos" requires at least 1 item
  • Больше одной ссылки: "reference_videos" accepts at most 1 items
  • Ссылка не начинается с https://: "reference_videos[0]" must be a public HTTPS URL
  • Короче 3 или длиннее 30 секунд: reference_videos[0] is 2 seconds long; this model takes reference video of 3 to 30 seconds.
  • Сервер возвращает ошибку или пустой файл: reference_videos[0] could not be downloaded: the URL returned HTTP 404.
character_orientationenumОпциональныйПо умолчанию image

Следует ли ориентация персонажа его изображению (image) или видео движений (video).

Допустимые значения: image, video

По умолчанию: image

  • Параметр также задаёт максимальную длительность: до 10 секунд при image, до 30 при video. См. раздел о влиянии ориентации на длительность.
  • Если параметр не указан, используется image. Поэтому для видео движений длиннее 10 секунд явно передайте video.
  • Определяет резерв на балансе при создании задачи: стоимость максимальной длительности для выбранной ориентации. См. раздел об оплате.

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

  • Значение отсутствует в списке допустимых: "character_orientation" must be one of: [image video]
Допустимые значения:
promptstringОпциональный<=2500 characters

Необязательные текстовые указания о персонаже или сцене. Сами движения берутся из видео.

Длина: ≤ 2500 символов

  • Длина измеряется в символах; иероглиф CJK считается одним символом. Пустая строка допускается.

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

  • Превышена допустимая длительность: "prompt" has an unsupported length
resolutionenumОпциональныйПо умолчанию 720p

Разрешение результата одновременно определяет тариф: секунда в 1080p стоит дороже, чем в 720p.

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

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

  • Только строчные буквы. Если параметр не указан, используется 720p.

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

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

Ответ

Объект задачи. Поле 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