Создаёт короткие видео по картинке (а в режиме Master - ещё и по текстовому описанию), добавляя движение персонажам и камере. Стоимость от 25 до 280 рублей за генерацию - зависит от выбранной модели и длительности 5 или 10 секунд.
Общая документация Public API · API-ключ можно создать в настройках аккаунта
Kling 2.1 подходит для генерации коротких видео по изображению, а в режиме Master - и по текстовому описанию. Через Public API вызов всегда создаёт асинхронную операцию: вы отправляете параметры генерации, сразу получаете id, а готовый mp4-файл забираете позже через проверку статуса.
Основные сценарии:
model = kling/v2-1-master-text-to-video;kling/v2-1-standard, kling/v2-1-pro и kling/v2-1-master-image-to-video;kling/v2-1-pro через tail_image_url.POST /api/v1/operationsAuthorization: Bearer brth_...id и стартовый статус.id.Поддерживаемые режимы:
mode = "text" + model = "kling/v2-1-master-text-to-video" - видео из текста;mode = "image" + model = "kling/v2-1-standard" - видео из изображения;mode = "image" + model = "kling/v2-1-pro" - видео из изображения, при необходимости с tail_image_url;mode = "image" + model = "kling/v2-1-master-image-to-video" - видео из изображения в режиме Master.{
"tool": "kling-2-1",
"input": {
"mode": "image",
"model": "kling/v2-1-standard",
"prompt": "Крупный план девушки у окна, лёгкий поворот головы, мягкое движение камеры, естественная мимика",
"image_url": "https://cdn.example.com/source-image-1.jpg",
"duration": "5",
"cfg_scale": 0.5
}
}
tool - это slug нейросети.
input - объект с параметрами конкретного сценария.
Во внешнем контракте поля передаются прямо внутри input, без дополнительного вложения input.input.
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
mode | string | Да | Режим генерации. Допустимые значения: text - видео из текста, image - видео из изображения. |
model | string | Да | Модель Kling 2.1. Допустимые значения: kling/v2-1-standard, kling/v2-1-pro, kling/v2-1-master-image-to-video, kling/v2-1-master-text-to-video. Для mode = "text" используйте только kling/v2-1-master-text-to-video. |
prompt | string | Да | Основное текстовое задание для сцены, движения и стиля. От 2 до 5000 символов. |
image_url | string (url) | Нет | Внешний URL исходного изображения. Нужен для всех сценариев с mode = "image". Разрешены только http/https ссылки на файлы .jpg, .jpeg, .png, .webp. |
tail_image_url | string (url) | Нет | Внешний URL конечного кадра. Используется только вместе с model = "kling/v2-1-pro", если нужно анимировать переход от первого кадра к последнему. Разрешены только http/https ссылки на файлы .jpg, .jpeg, .png, .webp. |
duration | string | Да | Длительность ролика. Допустимые значения: 5, 10. |
aspect_ratio | string | Нет | Соотношение сторон. Используется только для model = "kling/v2-1-master-text-to-video". Допустимые значения: 16:9, 9:16, 1:1. |
negative_prompt | string | Нет | Что нужно исключить из результата: лишние артефакты, размытость, деформации, нежелательные объекты. До 500 символов. |
cfg_scale |
Используйте этот сценарий, когда стартового изображения нет и ролик нужно собрать только по описанию.
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "kling-2-1",
"input": {
"mode": "text",
"model": "kling/v2-1-master-text-to-video",
"prompt": "Кинематографичный пролёт камеры над ночным городом, неоновые вывески, влажный асфальт после дождя, мягкий туман, реалистичное движение света",
"duration": "5",
"aspect_ratio": "16:9",
"negative_prompt": "blur, low quality, artifacts",
"cfg_scale": 0.5
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'kling-2-1',
input: {
mode: 'text',
model: 'kling/v2-1-master-text-to-video',
prompt:
'Кинематографичный пролёт камеры над ночным городом, неоновые вывески, влажный асфальт после дождя, мягкий туман, реалистичное движение света',
duration: '5',
aspect_ratio: '16:9',
negative_prompt: 'blur, low quality, artifacts',
cfg_scale: 0.5,
},
}),
})
const data = await response.json()
import requests
response = requests.post(
"https://bratuha.ru/api/v1/operations",
headers={
"Authorization": "Bearer brth_ваш_ключ",
"Content-Type": "application/json",
},
json={
"tool": "kling-2-1",
"input": {
"mode": "text",
"model": "kling/v2-1-master-text-to-video",
"prompt": "Кинематографичный пролёт камеры над ночным городом, неоновые вывески, влажный асфальт после дождя, мягкий туман, реалистичное движение света",
"duration": "5",
"aspect_ratio": "16:9",
"negative_prompt": "blur, low quality, artifacts",
"cfg_scale": 0.5
}
},
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": "kling-2-1",
"input": {
"mode": "image",
"model": "kling/v2-1-standard",
"prompt": "Девушка смотрит в камеру, слегка улыбается, волосы мягко двигаются от ветра, камера плавно приближается",
"image_url": "https://cdn.example.com/source-image-1.jpg",
"duration": "5",
"cfg_scale": 0.5
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'kling-2-1',
input: {
mode: 'image',
model: 'kling/v2-1-standard',
prompt:
'Девушка смотрит в камеру, слегка улыбается, волосы мягко двигаются от ветра, камера плавно приближается',
image_url: 'https://cdn.example.com/source-image-1.jpg',
duration: '5',
cfg_scale: 0.5,
},
}),
})
const data = await response.json()
import requests
response = requests.post(
"https://bratuha.ru/api/v1/operations",
headers={
"Authorization": "Bearer brth_ваш_ключ",
"Content-Type": "application/json",
},
json={
"tool": "kling-2-1",
"input": {
"mode": "image",
"model": "kling/v2-1-standard",
"prompt": "Девушка смотрит в камеру, слегка улыбается, волосы мягко двигаются от ветра, камера плавно приближается",
"image_url": "https://cdn.example.com/source-image-1.jpg",
"duration": "5",
"cfg_scale": 0.5
}
},
timeout=30,
)
print(response.status_code)
print(response.json())
Этот вариант нужен, когда ролик должен прийти к заранее заданному финальному состоянию. tail_image_url используйте только с kling/v2-1-pro.
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "kling-2-1",
"input": {
"mode": "image",
"model": "kling/v2-1-pro",
"prompt": "Плавный переход от пустой комнаты к интерьеру после хоумстейджинга, мягкое растворение, спокойное движение камеры",
"image_url": "https://cdn.example.com/source-image-1.jpg",
"tail_image_url": "https://cdn.example.com/tail-image-1.jpg",
"duration": "10",
"cfg_scale": 1
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'kling-2-1',
input: {
mode: 'image',
model: 'kling/v2-1-pro',
prompt:
'Плавный переход от пустой комнаты к интерьеру после хоумстейджинга, мягкое растворение, спокойное движение камеры',
image_url: 'https://cdn.example.com/source-image-1.jpg',
tail_image_url: 'https://cdn.example.com/tail-image-1.jpg',
duration: '10',
cfg_scale: 1,
},
}),
})
const data = await response.json()
import requests
response = requests.post(
"https://bratuha.ru/api/v1/operations",
headers={
"Authorization": "Bearer brth_ваш_ключ",
"Content-Type": "application/json",
},
json={
"tool": "kling-2-1",
"input": {
"mode": "image",
"model": "kling/v2-1-pro",
"prompt": "Плавный переход от пустой комнаты к интерьеру после хоумстейджинга, мягкое растворение, спокойное движение камеры",
"image_url": "https://cdn.example.com/source-image-1.jpg",
"tail_image_url": "https://cdn.example.com/tail-image-1.jpg",
"duration": "10",
"cfg_scale": 1
}
},
timeout=30,
)
print(response.status_code)
print(response.json())
{
"id": "op_uuid-123",
"status": "queued",
"tool": "kling-2-1",
"cost": 25,
"balance_after": 495,
"created_at": "2026-03-27T12:00:00Z"
}
{
"id": "op_uuid-123",
"status": "completed",
"tool": "kling-2-1",
"cost": 25,
"created_at": "2026-03-27T12:00:00Z",
"completed_at": "2026-03-27T12:02:21Z",
"result": {
"type": "video",
"urls": [
"https://storage.bratuha.ru/results/kling-2-1/result.mp4"
]
},
"error_message": null
}
Для проверки используйте id, который вы получили при создании операции.
curl -H "Authorization: Bearer brth_ваш_ключ" \
https://bratuha.ru/api/v1/operations/op_uuid-123
const response = await fetch(
'https://bratuha.ru/api/v1/operations/op_uuid-123',
{
headers: {
Authorization: 'Bearer brth_ваш_ключ',
},
},
)
const data = await response.json()
После завершения Kling 2.1 возвращает:
result.type = "video";result.urls - массив ссылок на готовые mp4-файлы;Если операция завершилась ошибкой, поле result будет null, а описание проблемы придёт в error_message.
| Модель | 5 сек | 10 сек |
|---|---|---|
kling/v2-1-standard | 25 ₽ | 50 ₽ |
kling/v2-1-pro | 40 ₽ | 90 ₽ |
kling/v2-1-master-image-to-video | 140 ₽ | 280 ₽ |
kling/v2-1-master-text-to-video | 140 ₽ | 280 ₽ |
Практически это означает:
Standard - самый доступный режим для базовой анимации изображения;Pro - дороже, но поддерживает сценарий с конечным кадром tail_image_url;Master стоят одинаково, но разделены по типу входа: одна для изображения, другая для текста.POST /api/v1/operations не идемпотентен: каждый повторный запрос создаёт новую операцию.id и проверяйте статус отдельным запросом.image_url и tail_image_url используйте только внешние http/https URL. localhost, private IP и внутренние адреса не поддерживаются..jpg, .jpeg, .png, .webp. Форматы HEIC/HEIF, которые могут поддерживаться в UI-загрузке, сюда не относятся.mode = "text" работает только вместе с model = "kling/v2-1-master-text-to-video".mode = "image" работает только с kling/v2-1-standard, kling/v2-1-pro или kling/v2-1-master-image-to-video.image_url обязателен для всех сценариев с mode = "image", но не нужен для mode = "text".tail_image_url имеет смысл передавать только для kling/v2-1-pro. Для остальных моделей этот параметр не нужен.aspect_ratio используйте только для kling/v2-1-master-text-to-video.negative_prompt, дополнительный UI-флаг формы не нужен: в API достаточно самого поля negative_prompt.number |
| Нет |
Насколько строго модель должна следовать текстовому заданию. Допустимый диапазон: от 0 до 1. |