Генерирует короткие видео по текстовому описанию или “оживляет” картинку, превращая её в видеосцену. Стоимость 40 рублей за 5 секунд или 80 рублей за 10 секунд.
Общая документация Public API · API-ключ можно создать в настройках аккаунта
Kling 2.5 Turbo Pro генерирует короткие видеоролики длительностью 5 или 10 секунд.
Два режима работы:
Каждый вызов создаёт асинхронную операцию. После запуска нужно отдельно проверять статус по id.
POST /api/v1/operationsAuthorization: Bearer brth_...id и стартовый статус операции.Режим работы определяется параметром model:
kling/v2-5-turbo-text-to-video-pro - видео из текста.kling/v2-5-turbo-image-to-video-pro - видео из изображения.{
"tool": "kling-2-5-turbo",
"input": {
"...": "..."
}
}
tool - slug нейросети, всегда "kling-2-5-turbo".input - параметры запуска. Все поля передаются напрямую внутри этого объекта.| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
model | enum | Да | Режим генерации. Варианты: kling/v2-5-turbo-text-to-video-pro (видео из текста), kling/v2-5-turbo-image-to-video-pro (видео из изображения). |
prompt | string | Да | Текстовое описание сцены: кто в кадре, что происходит, какой стиль и движение камеры. |
duration | enum | Да | Длительность видео. Варианты: 5 (5 сек), 10 (10 сек). |
image_url | string (url) | Да | Стартовое изображение для анимации. Только для режима kling/v2-5-turbo-image-to-video-pro. Допустимые расширения: .jpg, .jpeg, .png, .webp. |
aspect_ratio | enum | Да | Соотношение сторон видео. Только для режима kling/v2-5-turbo-text-to-video-pro. Варианты: 16:9, 9:16, 1:1. |
use_end_image | boolean | Нет | Включает конечный кадр. Только для режима kling/v2-5-turbo-image-to-video-pro. Если true, нужно передать tail_image_url. |
tail_image_url | string (url) | Да | Конечный кадр, к которому видео придёт в финале. Обязателен, если use_end_image = true. Допустимые расширения: .jpg, .jpeg, .png, .webp. |
negative_prompt | string | Нет | Описание того, чего не должно быть в видео. Например: blur, low quality, artifacts, text. |
cfg_scale | number | Нет | Сила следования промпту. От 0 до 1. Чем выше, тем строже нейросеть держится описания, но картинка может стать менее естественной. |
Параметры image_url, use_end_image и tail_image_url работают только в режиме видео из изображения. Параметр aspect_ratio работает только в режиме видео из текста.
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "kling-2-5-turbo",
"input": {
"model": "kling/v2-5-turbo-text-to-video-pro",
"prompt": "Ночной город, неоновые вывески отражаются в мокром асфальте, камера медленно движется вперёд",
"aspect_ratio": "16:9",
"duration": "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-5-turbo',
input: {
model: 'kling/v2-5-turbo-text-to-video-pro',
prompt: 'Ночной город, неоновые вывески отражаются в мокром асфальте, камера медленно движется вперёд',
aspect_ratio: '16:9',
duration: '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-5-turbo',
'input': {
'model': 'kling/v2-5-turbo-text-to-video-pro',
'prompt': 'Ночной город, неоновые вывески отражаются в мокром асфальте, камера медленно движется вперёд',
'aspect_ratio': '16:9',
'duration': '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-5-turbo",
"input": {
"model": "kling/v2-5-turbo-image-to-video-pro",
"prompt": "Камера медленно наезжает, лёгкий ветер шевелит волосы, мягкий солнечный свет",
"image_url": "https://cdn.example.com/image-1.jpg",
"duration": "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-5-turbo',
input: {
model: 'kling/v2-5-turbo-image-to-video-pro',
prompt: 'Камера медленно наезжает, лёгкий ветер шевелит волосы, мягкий солнечный свет',
image_url: 'https://cdn.example.com/image-1.jpg',
duration: '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-5-turbo',
'input': {
'model': 'kling/v2-5-turbo-image-to-video-pro',
'prompt': 'Камера медленно наезжает, лёгкий ветер шевелит волосы, мягкий солнечный свет',
'image_url': 'https://cdn.example.com/image-1.jpg',
'duration': '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-5-turbo",
"input": {
"model": "kling/v2-5-turbo-image-to-video-pro",
"prompt": "Плавный переход между двумя кадрами, мягкий свет, кинематографичное движение",
"image_url": "https://cdn.example.com/image-1.jpg",
"use_end_image": true,
"tail_image_url": "https://cdn.example.com/tail-image-1.jpg",
"duration": "10"
}
}'
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-5-turbo',
input: {
model: 'kling/v2-5-turbo-image-to-video-pro',
prompt: 'Плавный переход между двумя кадрами, мягкий свет, кинематографичное движение',
image_url: 'https://cdn.example.com/image-1.jpg',
use_end_image: true,
tail_image_url: 'https://cdn.example.com/tail-image-1.jpg',
duration: '10',
},
}),
})
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-5-turbo',
'input': {
'model': 'kling/v2-5-turbo-image-to-video-pro',
'prompt': 'Плавный переход между двумя кадрами, мягкий свет, кинематографичное движение',
'image_url': 'https://cdn.example.com/image-1.jpg',
'use_end_image': True,
'tail_image_url': 'https://cdn.example.com/tail-image-1.jpg',
'duration': '10',
},
},
timeout=30,
)
print(response.status_code)
print(response.json())
{
"id": "op_uuid-123",
"status": "queued",
"tool": "kling-2-5-turbo",
"cost": 40,
"balance_after": 495,
"created_at": "2026-03-13T12:00:00Z"
}
{
"id": "op_uuid-123",
"status": "completed",
"tool": "kling-2-5-turbo",
"cost": 40,
"created_at": "2026-03-13T12:00:00Z",
"completed_at": "2026-03-13T12:02:30Z",
"result": {
"type": "video",
"urls": [
"https://storage.bratuha.ru/results/kling-2-5-turbo/result.mp4"
]
},
"error_message": null
}
После создания операции сохраните id из ответа и проверяйте статус отдельным запросом:
GET /api/v1/operations/{id}
curl -H "Authorization: Bearer brth_ваш_ключ" \
https://bratuha.ru/api/v1/operations/op_uuid-123
const status = await fetch(
'https://bratuha.ru/api/v1/operations/op_uuid-123',
{
headers: { Authorization: 'Bearer brth_ваш_ключ' },
},
)
const result = await status.json()
После завершения Kling 2.5 Turbo Pro возвращает:
{
"type": "video",
"urls": [
"https://storage.bratuha.ru/results/kling-2-5-turbo/result.mp4"
]
}
type - всегда "video".urls - массив с одной ссылкой на готовый видеоролик.Если операция завершилась с ошибкой, result будет null, а текст ошибки вернётся в error_message.
Цена зависит от длительности видео:
| Длительность | Цена |
|---|---|
| 5 сек | 40 ₽ |
| 10 сек | 80 ₽ |
image_url и tail_image_url разрешены только внешние http/https URL с расширениями .jpg, .jpeg, .png, .webp.HEIC/HEIF, которые поддерживаются при загрузке файлов в UI, в Public API по URL не принимаются.blur, low quality, artifacts, text, watermark.POST /api/v1/operations не идемпотентен: повторный запрос создаёт новую операцию.queued, затем проверяете статус по id.