Профессионально генерирует и редактирует видео по тексту, изображению, референсам и исходному видео, чтобы получались связные сцены с нужным стилем и движением камеры. Стоимость от 27 до 50 рублей за секунду - зависит от режима (генерация/редактирование), модели (Standard/Pro) и включения генерации аудио.
Общая документация Public API · API-ключ можно создать в настройках аккаунта
Kling 3.0 подходит для случаев, когда нужно сгенерировать или отредактировать короткое видео несколькими разными способами через один и тот же Public API endpoint.
Практически у модели пять основных сценариев:
text_to_video - видео только по текстовому описанию;image_to_video - анимация одного исходного изображения;reference_image_to_video - видео по стартовому кадру с дополнительными референсами изображений;edit_video - редактирование уже готового видео;reference_video_to_video - генерация на основе референс-видео с возможностью добавить изображения-референсы.Дополнительно модель поддерживает несколько полезных опций:
generate_audio для генерации нативного аудио в режимах без входного видео;voice_ids для озвучки в text_to_video;use_multi_prompt и multi_prompt для multi-shot сценариев с несколькими сценами;image_to_video и reference_image_to_video;elements для более точного контроля персонажей, объектов и стиля.Каждый вызов создаёт асинхронную операцию. Сразу после запроса API возвращает id, стартовый статус и стоимость запуска, а готовый ролик нужно получать отдельной проверкой статуса.
POST /api/v1/operationsAuthorization: Bearer brth_...id, стартовый статус и стоимость.Практически у Kling 3.0 есть пять публичных режимов:
text_to_videoimage_to_videoreference_image_to_videoedit_videoreference_video_to_videoБазовая форма запроса:
{
"tool": "kling-3-0",
"input": {
"kling_generation_type": "image_to_video",
"kling_model_tier": "standard",
"...": "..."
}
}
tool - slug нейросети. Для этой модели всегда используйте "kling-3-0".input - параметры конкретного запуска.input зависит от выбранного kling_generation_type.input, без дополнительного вложенного объекта input.input.| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
kling_generation_type | enum | Да | Режим запуска. Варианты: text_to_video, image_to_video, reference_image_to_video, edit_video, reference_video_to_video. Именно этот параметр определяет, какие остальные поля нужно передавать. |
kling_model_tier | enum | Да | Качество модели. Варианты: standard, pro. Влияет на цену во всех режимах. |
use_multi_prompt | boolean | Нет | Включает multi-shot сценарий с несколькими сценами. Практически имеет смысл в режимах без входного видео. Если включён, основной prompt можно не передавать, а детализацию сцены нужно описывать в multi_prompt. |
prompt | string | Да | Основное текстовое описание ролика или правок. Максимум 2500 символов. Для text_to_video можно использовать маркеры <<<voice_1>>> и <<<voice_2>>>, если передаёте voice_ids. |
multi_prompt | object[] | Да | Массив сцен для multi-shot генерации. Каждый элемент должен содержать prompt и duration. Минимум 1, максимум 6 сцен. Длительность одной сцены - от 3 до 15 секунд. Если используете multi_prompt, поле duration должно совпадать с суммой длительностей всех сцен. |
image_url | string (url) | Да | Один URL исходного изображения для режима image_to_video. Разрешены только внешние http/https ссылки. Допустимые форматы Public API: JPG, JPEG, PNG, WebP. |
start_image_url | string (url) | Да | Один URL стартового кадра для режима с референс-изображениями. Форматы Public API: JPG / JPEG / PNG / WebP. |
image_urls | string[] (url) | Нет | Дополнительные изображения-референсы для reference_image_to_video. Обычно используют для сохранения персонажа, одежды, окружения и деталей стиля. Максимум 4 файла, а если включён конечный кадр - максимум 2. |
elements | object[] | Нет | Дополнительные элементы для reference_image_to_video. Каждый элемент может содержать обязательный frontal_image_url и опциональный массив reference_image_urls. Используйте, когда нужно жёстче удерживать отдельный объект или персонажа. |
video_url_edit | string (url) | Да | URL исходного видео для режима edit_video. Допустимые форматы: MP4, MOV. Практически используйте ролики длиной от 3 до 10 секунд. |
video_url_reference | string (url) | Да | URL референс-видео для режима reference_video_to_video. Допустимые форматы: MP4, MOV. Практически используйте ролики длиной от 3 до 10 секунд. |
keep_audio_edit | boolean | Нет | Для edit_video. Если true, модель старается сохранить исходное аудио видео. На цену не влияет. |
keep_audio_reference | boolean | Нет | Для reference_video_to_video. Если true, модель старается сохранить аудио исходного видео. На цену не влияет. |
image_urls_edit | string[] (url) | Нет | Дополнительные изображения-референсы для edit_video. Максимум 4 файла. Подходит, когда нужно изменить стиль, лицо, одежду или объект по дополнительным картинкам. |
image_urls_reference | string[] (url) | Нет | Дополнительные изображения-референсы для reference_video_to_video. Максимум 4 файла. |
elements_edit | object[] | Нет | Дополнительные элементы для edit_video. Структура элемента такая же, как у elements: обязательный frontal_image_url и опциональный массив reference_image_urls. |
elements_reference | object[] | Нет | Дополнительные элементы для reference_video_to_video. Структура элемента такая же, как у elements. |
use_end_image_i2v | boolean | Нет | Включает конечный кадр в режиме image_to_video. Не комбинируйте с use_multi_prompt = true. |
end_image_url_i2v | string (url) | Да | URL конечного кадра для image_to_video, если use_end_image_i2v = true. Допустимые форматы Public API: JPG, JPEG, PNG, WebP. |
use_end_image_reference | boolean | Нет | Включает конечный кадр в режиме reference_image_to_video. Не комбинируйте с use_multi_prompt = true. |
end_image_url_reference | string (url) | Да | URL конечного кадра для reference_image_to_video, если use_end_image_reference = true. Допустимые форматы Public API: JPG, JPEG, PNG, WebP. |
duration | number | Да | Длительность ролика в секундах для text_to_video, image_to_video и reference_image_to_video. Диапазон - от 3 до 15 секунд. Если используете multi_prompt, это поле должно быть равно сумме длительностей всех сцен. |
duration_v2v | number | Да | Длительность ролика для reference_video_to_video. Диапазон - от 3 до 10 секунд. Влияет на стоимость. |
aspect_ratio | enum | Да | Соотношение сторон для text_to_video. Варианты: 16:9, 9:16, 1:1. |
aspect_ratio_v2v | enum | Да | Соотношение сторон для reference_video_to_video. Варианты: auto, 16:9, 9:16, 1:1. |
generate_audio | boolean | Нет | Генерация нативного аудио. Доступна только в text_to_video, image_to_video и reference_image_to_video. Влияет на цену. |
voice_ids | string[] | Нет | Список Voice ID для text_to_video. Практически используйте до 2 голосов и вставляйте в prompt маркеры <<<voice_1>>> и <<<voice_2>>>. |
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "kling-3-0",
"input": {
"kling_generation_type": "text_to_video",
"kling_model_tier": "standard",
"prompt": "Кинематографичный ночной город после дождя. <<<voice_1>>> говорит спокойным голосом: «Мы уже рядом». Камера медленно едет вперёд, отражения неона в мокром асфальте, мягкий пар в воздухе.",
"duration": 5,
"aspect_ratio": "16:9",
"generate_audio": true,
"voice_ids": [
"11111111-1111-1111-1111-111111111111"
]
}
}'
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-3-0',
input: {
kling_generation_type: 'text_to_video',
kling_model_tier: 'standard',
prompt:
'Кинематографичный ночной город после дождя. <<<voice_1>>> говорит спокойным голосом: «Мы уже рядом». Камера медленно едет вперёд, отражения неона в мокром асфальте, мягкий пар в воздухе.',
duration: 5,
aspect_ratio: '16:9',
generate_audio: true,
voice_ids: ['11111111-1111-1111-1111-111111111111'],
},
}),
})
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": "kling-3-0",
"input": {
"kling_generation_type": "text_to_video",
"kling_model_tier": "standard",
"prompt": "Кинематографичный ночной город после дождя. <<<voice_1>>> говорит спокойным голосом: «Мы уже рядом». Камера медленно едет вперёд, отражения неона в мокром асфальте, мягкий пар в воздухе.",
"duration": 5,
"aspect_ratio": "16:9",
"generate_audio": True,
"voice_ids": ["11111111-1111-1111-1111-111111111111"],
},
},
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-3-0",
"input": {
"kling_generation_type": "image_to_video",
"kling_model_tier": "standard",
"prompt": "Девушка делает пол-оборота, улыбается в камеру, лёгкий ветер шевелит волосы, мягкий золотой свет, плавное движение камеры.",
"image_url": "https://cdn.example.com/source-image-1.jpg",
"duration": 5,
"generate_audio": false
}
}'
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-3-0',
input: {
kling_generation_type: 'image_to_video',
kling_model_tier: 'standard',
prompt:
'Девушка делает пол-оборота, улыбается в камеру, лёгкий ветер шевелит волосы, мягкий золотой свет, плавное движение камеры.',
image_url: 'https://cdn.example.com/source-image-1.jpg',
duration: 5,
generate_audio: false,
},
}),
})
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": "kling-3-0",
"input": {
"kling_generation_type": "image_to_video",
"kling_model_tier": "standard",
"prompt": "Девушка делает пол-оборота, улыбается в камеру, лёгкий ветер шевелит волосы, мягкий золотой свет, плавное движение камеры.",
"image_url": "https://cdn.example.com/source-image-1.jpg",
"duration": 5,
"generate_audio": False,
},
},
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-3-0",
"input": {
"kling_generation_type": "reference_image_to_video",
"kling_model_tier": "standard",
"use_multi_prompt": true,
"start_image_url": "https://cdn.example.com/source-image-1.jpg",
"image_urls": [
"https://cdn.example.com/source-image-2.jpg",
"https://cdn.example.com/source-image-3.jpg"
],
"duration": 10,
"multi_prompt": [
{
"prompt": "Персонаж медленно поднимает голову и смотрит в сторону камеры, лёгкий ветер, спокойный фон.",
"duration": 4
},
{
"prompt": "Камера плавно приближается, персонаж делает шаг вперёд и мягко улыбается, сохраняется тот же стиль и освещение.",
"duration": 6
}
],
"generate_audio": false
}
}'
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-3-0',
input: {
kling_generation_type: 'reference_image_to_video',
kling_model_tier: 'standard',
use_multi_prompt: true,
start_image_url: 'https://cdn.example.com/source-image-1.jpg',
image_urls: [
'https://cdn.example.com/source-image-2.jpg',
'https://cdn.example.com/source-image-3.jpg',
],
duration: 10,
multi_prompt: [
{
prompt:
'Персонаж медленно поднимает голову и смотрит в сторону камеры, лёгкий ветер, спокойный фон.',
duration: 4,
},
{
prompt:
'Камера плавно приближается, персонаж делает шаг вперёд и мягко улыбается, сохраняется тот же стиль и освещение.',
duration: 6,
},
],
generate_audio: false,
},
}),
})
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": "kling-3-0",
"input": {
"kling_generation_type": "reference_image_to_video",
"kling_model_tier": "standard",
"use_multi_prompt": True,
"start_image_url": "https://cdn.example.com/source-image-1.jpg",
"image_urls": [
"https://cdn.example.com/source-image-2.jpg",
"https://cdn.example.com/source-image-3.jpg",
],
"duration": 10,
"multi_prompt": [
{
"prompt": "Персонаж медленно поднимает голову и смотрит в сторону камеры, лёгкий ветер, спокойный фон.",
"duration": 4,
},
{
"prompt": "Камера плавно приближается, персонаж делает шаг вперёд и мягко улыбается, сохраняется тот же стиль и освещение.",
"duration": 6,
},
],
"generate_audio": False,
},
},
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-3-0",
"input": {
"kling_generation_type": "edit_video",
"kling_model_tier": "pro",
"prompt": "Сделай фон более кинематографичным, усили мягкий контровой свет, сохрани лицо и движения человека без искажений.",
"video_url_edit": "https://cdn.example.com/source-video-1.mp4",
"keep_audio_edit": true
}
}'
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-3-0',
input: {
kling_generation_type: 'edit_video',
kling_model_tier: 'pro',
prompt:
'Сделай фон более кинематографичным, усили мягкий контровой свет, сохрани лицо и движения человека без искажений.',
video_url_edit: 'https://cdn.example.com/source-video-1.mp4',
keep_audio_edit: true,
},
}),
})
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": "kling-3-0",
"input": {
"kling_generation_type": "edit_video",
"kling_model_tier": "pro",
"prompt": "Сделай фон более кинематографичным, усили мягкий контровой свет, сохрани лицо и движения человека без искажений.",
"video_url_edit": "https://cdn.example.com/source-video-1.mp4",
"keep_audio_edit": True,
},
},
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-3-0",
"input": {
"kling_generation_type": "reference_video_to_video",
"kling_model_tier": "pro",
"prompt": "Замени автомобиль в ролике на автомобиль с референсных изображений, сохрани ракурс, темп движения и общую композицию.",
"video_url_reference": "https://cdn.example.com/source-video-2.mov",
"image_urls_reference": [
"https://cdn.example.com/source-image-4.jpg",
"https://cdn.example.com/source-image-5.jpg"
],
"duration_v2v": 7,
"aspect_ratio_v2v": "16:9",
"keep_audio_reference": true
}
}'
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-3-0',
input: {
kling_generation_type: 'reference_video_to_video',
kling_model_tier: 'pro',
prompt:
'Замени автомобиль в ролике на автомобиль с референсных изображений, сохрани ракурс, темп движения и общую композицию.',
video_url_reference: 'https://cdn.example.com/source-video-2.mov',
image_urls_reference: [
'https://cdn.example.com/source-image-4.jpg',
'https://cdn.example.com/source-image-5.jpg',
],
duration_v2v: 7,
aspect_ratio_v2v: '16:9',
keep_audio_reference: true,
},
}),
})
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": "kling-3-0",
"input": {
"kling_generation_type": "reference_video_to_video",
"kling_model_tier": "pro",
"prompt": "Замени автомобиль в ролике на автомобиль с референсных изображений, сохрани ракурс, темп движения и общую композицию.",
"video_url_reference": "https://cdn.example.com/source-video-2.mov",
"image_urls_reference": [
"https://cdn.example.com/source-image-4.jpg",
"https://cdn.example.com/source-image-5.jpg",
],
"duration_v2v": 7,
"aspect_ratio_v2v": "16:9",
"keep_audio_reference": True,
},
},
timeout=30,
)
print(response.status_code)
print(response.json())
{
"id": "op_uuid-123",
"status": "queued",
"tool": "kling-3-0",
"cost": 165,
"balance_after": 495,
"created_at": "2026-03-27T12:00:00Z"
}
{
"id": "op_uuid-123",
"status": "completed",
"tool": "kling-3-0",
"cost": 165,
"created_at": "2026-03-27T12:00:00Z",
"completed_at": "2026-03-27T12:03:41Z",
"result": {
"type": "video",
"urls": [
"https://storage.bratuha.ru/results/kling-3-0/result.mp4"
]
},
"error_message": null
}
После создания операции сохраните id и используйте его для отдельной проверки статуса:
GET /api/v1/operations/{id}id возвращается сразу после POST /api/v1/operations.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()
console.log(data)
После успешного завершения операция возвращает result в таком формате:
{
"type": "video",
"urls": [
"https://storage.bratuha.ru/results/kling-3-0/result.mp4"
]
}
Что важно знать:
type для Kling 3.0 в Public API нужно обрабатывать как "video";urls - массив ссылок на готовые mp4-файлы;file, хотя реальные completed операции у kling-3-0 возвращают именно video.Базовая ставка начинается от 27 ₽ за секунду.
Итоговая цена зависит от четырёх вещей:
kling_generation_type;kling_model_tier;generate_audio, если режим поддерживает генерацию аудио;Практические правила расчёта:
text_to_video, image_to_video и reference_image_to_video цена считается по полю duration;reference_video_to_video цена считается по полю duration_v2v;multi_prompt[*].duration должна совпадать с duration;3 секунды;15 секунд, но для video-to-video сценариев практически ориентируйтесь на исходные видео до 10 секунд.| Режим | Standard без аудио | Standard с аудио | Pro без аудио | Pro с аудио |
|---|---|---|---|---|
text_to_video | 27 ₽/сек | 33 ₽/сек | 33 ₽/сек | 42 ₽/сек |
image_to_video | 27 ₽/сек | 33 ₽/сек | 33 ₽/сек | 42 ₽/сек |
reference_image_to_video | 27 ₽/сек | 33 ₽/сек | 33 ₽/сек | 42 ₽/сек |
| Режим | Standard | Pro |
|---|---|---|
edit_video | 40 ₽/сек | 50 ₽/сек |
reference_video_to_video | 40 ₽/сек | 50 ₽/сек |
Что это означает на практике:
pro всегда дороже standard;generate_audio = true влияет только на text_to_video, image_to_video и reference_image_to_video;keep_audio_edit и keep_audio_reference меняют поведение результата, но не увеличивают цену сами по себе;Примеры расчёта:
text_to_video + standard + generate_audio = true + 5 секунд = 165 ₽;image_to_video + pro + generate_audio = false + 9 секунд = 297 ₽;reference_video_to_video + pro + 7 секунд = 350 ₽.POST /api/v1/operations не идемпотентен: каждый повторный запрос создаёт новую операцию.queued, затем отдельно проверяете статус по id.http/https URL. localhost, private IP и внутренние адреса не принимаются..jpg, .jpeg, .png, .webp. Форматы HEIC/HEIF, которые доступны в UI-загрузке, через внешние URL для Public API не поддерживаются..mp4 и .mov.edit_video и reference_video_to_video практически рассчитаны на входные ролики длиной от 3 до 10 секунд.use_multi_prompt, следите, чтобы duration совпадал с суммой multi_prompt[*].duration.use_multi_prompt = true с конечным кадром use_end_image_i2v или use_end_image_reference.reference_image_to_video поле image_urls поддерживает до 4 изображений, но вместе с конечным кадром лучше ориентироваться на лимит 2.voice_ids используйте не более двух голосов и обязательно ставьте соответствующие маркеры <<<voice_1>>> и <<<voice_2>>> внутри prompt.elements, elements_edit или elements_reference, а не пытайтесь описать всё только текстом.GET /api/v1/operations/{id} слишком часто. Практически безопасно проверять статус примерно раз в секунду.