Kling 3.0 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 без списания средств. Проверьте список перед интеграцией.
Открывает модель в API Explorer. Введите свой API-ключ BeatAPI, чтобы создать задачу. Это настоящий запрос: его стоимость спишется с вашего баланса.
Идентификаторы моделей
Две модели используют один адрес API и одинаковые входные данные. Значения ниже взяты непосредственно из контракта шлюза. Только Kling 3.0 Motion Control принимает 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 выполняется заново.
Как выполняется запрос
Создайте задачу
Отправьте перечисленные ниже параметры методом POST на указанный адрес. Ответ 201 означает, что задача принята, а её стоимость зарезервирована на балансе. Обработка идёт в фоновом режиме. Сохраните data.id.
Дождитесь завершения
Вызывайте GET /v1/tasks/{task_id}, выдерживая между вызовами data.poll_after_seconds (5 с для изображений, 8 с для видео), пока status не станет succeeded или failed. Можно также настроить вебхук для событий task.succeeded и task.failed. Сохраняйте опрос как резервный способ проверки: задача, остановленная по тайм-ауту обработки, не отправляет событие.
Сохраните результат
При succeeded скачайте файлы по всем ссылкам data.output.media[].url и сохраните нужные результаты у себя. BeatAPI не гарантирует срок доступности этих ссылок. При failed прочитайте data.error_code и data.error_message: зарезервированная сумма возвращена на баланс, а data.retryable показывает, может ли повтор того же запроса завершиться успешно.
Режимы ввода
Параметры запроса
model
string
Обязательно
Модель, которую нужно вызвать.
Значение: kling-3-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]
background_source
string
НеобязательноПо умолчанию: input_video
Источник фона результата: input_video сохраняет фон видео движений, input_image — фон изображения персонажа.
Допустимые значения: input_video, input_image
По умолчанию: input_video
- Если параметр не указан, используется
input_video. - Только Kling 3.0 Motion Control принимает это поле.
Если значение неверно
- Значение отсутствует в списке допустимых:
"background_source" must be one of: [input_video input_image]
Перед созданием задачи шлюз также проверяет следующие сочетания параметров:
- Требуются ровно одно изображение персонажа и одно загруженное видео движений длиной 3–30 секунд. При
character_orientation: imageрезультат не превышает 10 секунд.
Ограничения входных материалов
До создания задачи шлюз проверяет каждый входной материал. Если ограничение нарушено, возвращается 400 bad_request с указанием материала. Средства не списываются.
- При создании задачи длительность проверяется только у видео движений: 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.
- После завершения итоговое списание рассчитывается по данным об использовании для созданного видео, обычно по базовой цене за секунду его длительности. Разница между резервом и списанием возвращается. Если данные об использовании не получены, списывается резерв. См. раздел об оплате.
Параметры, которые модель не принимает
Эти параметры не игнорируются, а отклоняются до списания средств:
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-3-motion-control(с именем переданного поля).- Поле, вообще неизвестное API →
unknown field: <name>.
Примеры запросов
Перенос движений
Замените ссылку собственным MP4 или MOV длиной 3–30 секунд: общедоступного примера видео нет. character_orientation не задан, поэтому используется image, а результат не превышает 10 секунд.
1080p, ориентация по видео
Для ролика длиннее 10 секунд: video допускает результат до 30 секунд. Замените ссылку собственным роликом. Большая длительность результата требует большего резерва при создании задачи.
Сохранение фона изображения персонажа
Результат сохраняет фон изображения персонажа вместо фона видео движений. Замените ссылку на видео своим роликом.
Ответы
Создание задачи (201)
Объект задачи. Поле output равно null, пока задача не завершится успешно. Поля с пометкой «во время выполнения» исчезают после завершения задачи.
Успешно завершённая задача
GET /v1/tasks/{task_id} возвращает HTTP 200 со status: "succeeded" и результатом в data.output.
Поля результата
Задача, завершившаяся ошибкой
Если задача завершилась ошибкой, GET /v1/tasks/{task_id} всё равно возвращает HTTP 200: сведения об ошибке находятся в теле ответа. Зарезервированная сумма возвращается полностью, поэтому списания нет.
Полный пример
Создайте задачу, дождитесь её завершения с интервалом опроса, указанным сервером, и выведите ссылки на результаты. Задайте BEATAPI_API_KEY в переменной окружения и установите requests.
Оплата
- Эти цены действуют после появления модели в списке. До этого запрос создания отклоняется без списания средств.
- Оплата за секунду готового видео по тарифу
resolution.character_orientationи промпт на тариф не влияют. В таблице ниже указана цена 8-секундного результата. - Результат длится столько же, сколько видео движений, поэтому при создании окончательная цена неизвестна. Шлюз резервирует максимум для выбранной ориентации: 10 секунд при
image, 30 приvideo, по тарифу разрешения. Это примерно 1.40 (1080p) приimageи 4.20 (1080p) приvideo. Баланс должен покрывать резерв, иначе создание возвращает402 insufficient_credits. - После завершения списание рассчитывается по данным об использовании для созданного видео, обычно по базовому тарифу за секунду его длительности. Остаток резерва возвращается. Если данные об использовании не получены, списывается резерв.
usage.credits_chargedиusage.credits_settledпоказывают списанную сумму. У этой моделиusage.billable_duration_secondsпоказывает зарезервированные при создании секунды (10 или 30), а не длину готового видео. Фактическую оплату проверяйте по денежным полям. - Если задача завершилась ошибкой, в том числе из-за модерации после отправки, резерв возвращается полностью. Отклонённый до создания задачи запрос не оплачивается.
Текущие базовые цены совпадают с указанными на странице цен. Если для аккаунта согласована скидка, стоимость будет ниже. Фактически списанная сумма всегда указана в data.usage задачи.
Частые ошибки
Краткий справочник HTTP-ошибок
Ошибки до создания задачи возвращаются с HTTP-статусом, отличным от 2xx, без списания средств. Обрабатывайте error.code или error.retryable; причина указана в message. Полный список и правила повторов приведены в разделе ошибок.
Отличия двух моделей
Аутентификация
Передавайте API-ключ в виде Authorization: Bearer <BEATAPI_API_KEY>.
Заголовки
Передавайте тело запроса в JSON с заголовком Content-Type: application/json. Idempotency-Key необязателен. Для каждого логического запроса используйте уникальное значение длиной не более 255 символов и повторно используйте его только для отправки точно такого же тела. В течение 24 часов повтор с тем же ключом и телом возвращает первый ответ с заголовком Idempotent-Replayed: true. Тот же ключ с другим телом возвращает 409 idempotency_conflict. Ответы, отличные от 2xx, не сохраняются, поэтому повтор после 400 или 402 выполняется заново.
Запрос
Изображение персонажа: ровно одна ссылка. Этот персонаж будет выполнять движения.
Число элементов: 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
Модель, которую нужно вызвать.
Значение: kling-3-motion-control
Если значение неверно
- Поле отсутствует:
"model" is required - На этот адрес API отправлена модель изображений:
"model" nano-banana-2 is served by POST /v1/images/tasks, not this endpoint
Видео движений: ровно одна ссылка. Персонаж из 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.
Источник фона результата: input_video сохраняет фон видео движений, input_image — фон изображения персонажа.
Допустимые значения: input_video, input_image
По умолчанию: input_video
- Если параметр не указан, используется
input_video. - Только Kling 3.0 Motion Control принимает это поле.
Если значение неверно
- Значение отсутствует в списке допустимых:
"background_source" must be one of: [input_video input_image]
Следует ли ориентация персонажа его изображению (image) или видео движений (video).
Допустимые значения: image, video
По умолчанию: image
- Параметр также задаёт максимальную длительность: до 10 секунд при
image, до 30 приvideo. См. раздел о влиянии ориентации на длительность. - Если параметр не указан, используется
image. Поэтому для видео движений длиннее 10 секунд явно передайтеvideo. - Определяет резерв на балансе при создании задачи: стоимость максимальной длительности для выбранной ориентации. См. раздел об оплате.
Если значение неверно
- Значение отсутствует в списке допустимых:
"character_orientation" must be one of: [image video]
Необязательные текстовые указания о персонаже или сцене. Сами движения берутся из видео.
Длина: ≤ 2500 символов
- Длина измеряется в символах; иероглиф CJK считается одним символом. Пустая строка допускается.
Если значение неверно
- Превышена допустимая длительность:
"prompt" has an unsupported length
Разрешение результата одновременно определяет тариф: секунда в 1080p стоит дороже, чем в 720p.
Допустимые значения: 720p, 1080p
По умолчанию: 720p
- Только строчные буквы. Если параметр не указан, используется
720p.
Если значение неверно
- Недопустимое значение, например
480p,4kили1080P:"resolution" must be one of: [720p 1080p]
Ответ
Объект задачи. Поле output равно null, пока задача не завершится успешно. Поля с пометкой «во время выполнения» исчезают после завершения задачи.

