Создаёт видео в 720p длиной до 20 секунд по текстовому описанию или из одного изображения. Цена — 13 ₽/сек.
Общая документация Public API · API-ключ можно создать в настройках аккаунта
Kling 4.0 Flash подходит для коротких роликов, когда нужно быстро проверить идею: сцену для рекламы, вертикальное видео для соцсетей или оживление готового кадра. Ролик можно получить по текстовому описанию или начать с вашего изображения. Запрос создаёт асинхронную операцию, результат забирается по её id.
Отправьте POST https://bratuha.ru/api/v1/operations с заголовком Authorization: Bearer brth_ваш_ключ и JSON. В ответ сразу придут id операции и стартовый статус. Сохраните id, он нужен для проверки результата.
Два типа генерации: text - видео из текста, image - видео из изображения.
{
"tool": "kling-4-0-flash",
"input": {
"generation_type": "text",
"prompt": "Бумажный кораблик плывёт по луже после дождя, низкая камера следует за ним, на воде расходятся круги.",
"duration": 5,
"aspect_ratio": "9:16"
}
}
tool содержит kling-4-0-flash, а input - настройки запуска. У каждого нового запуска должен быть свой UUID в заголовке Idempotency-Key. Повтор того же запроса с тем же ключом в течение 24 часов возвращает исходную операцию. Необязательный max_price на верхнем уровне ограничивает допустимое списание в рублях.
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
generation_type | string | Да | Тип генерации: text или image. Без значения выбирается text. |
prompt | string | Да | Задание: сцена, действие, движение камеры, стиль. От 1 до 7900 символов. |
first_frame_url | string | В image | Ссылка на первый кадр, JPG или PNG. Соотношение сторон ролика будет как у этого изображения. |
duration | integer | Да | Длительность ролика, целое число от 3 до 20 секунд. Если не передано, 5. |
aspect_ratio | string | В text | 16:9, 9:16, 1:1 или 21:9. Если не передано, 16:9. В режиме image не используется. |
Разрешение всегда 720p, отдельного параметра нет. Файл передаётся доступной http или https ссылкой, данные файла в JSON не вставляются.
Замените примерную ссылку на собственный доступный файл.
cURL:
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: 6f1c2a54-8d3e-4b7a-9c10-2e5f7a8b9c01" \
-d '{
"tool": "kling-4-0-flash",
"input": {
"generation_type": "text",
"prompt": "Бумажный кораблик плывёт по луже после дождя, низкая камера следует за ним, на воде расходятся круги.",
"duration": 5,
"aspect_ratio": "9:16"
}
}'
JavaScript / TypeScript:
const response = await fetch("https://bratuha.ru/api/v1/operations", {
method: "POST",
headers: {
Authorization: "Bearer brth_ваш_ключ",
"Content-Type": "application/json",
"Idempotency-Key": crypto.randomUUID(),
},
body: JSON.stringify({
"tool": "kling-4-0-flash",
"input": {
"generation_type": "text",
"prompt": "Бумажный кораблик плывёт по луже после дождя, низкая камера следует за ним, на воде расходятся круги.",
"duration": 5,
"aspect_ratio": "9:16"
}
}),
});
const data = await response.json();
if (!response.ok) throw new Error(JSON.stringify(data));
console.log(data.id);
Python:
import json
import uuid
import requests
body = json.loads(r'''{
"tool": "kling-4-0-flash",
"input": {
"generation_type": "text",
"prompt": "Бумажный кораблик плывёт по луже после дождя, низкая камера следует за ним, на воде расходятся круги.",
"duration": 5,
"aspect_ratio": "9:16"
}
}''')
response = requests.post(
"https://bratuha.ru/api/v1/operations",
headers={"Authorization": "Bearer brth_ваш_ключ",
"Idempotency-Key": str(uuid.uuid4())},
json=body,
timeout=60,
)
response.raise_for_status()
print(response.json()["id"])
cURL:
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: 6f1c2a54-8d3e-4b7a-9c10-2e5f7a8b9c01" \
-d '{
"tool": "kling-4-0-flash",
"input": {
"generation_type": "image",
"prompt": "Лёгкий ветер шевелит листья, камера медленно поднимается к кроне дерева.",
"first_frame_url": "https://cdn.example.com/first-frame.jpg",
"duration": 5
}
}'
JavaScript / TypeScript:
const response = await fetch("https://bratuha.ru/api/v1/operations", {
method: "POST",
headers: {
Authorization: "Bearer brth_ваш_ключ",
"Content-Type": "application/json",
"Idempotency-Key": crypto.randomUUID(),
},
body: JSON.stringify({
"tool": "kling-4-0-flash",
"input": {
"generation_type": "image",
"prompt": "Лёгкий ветер шевелит листья, камера медленно поднимается к кроне дерева.",
"first_frame_url": "https://cdn.example.com/first-frame.jpg",
"duration": 5
}
}),
});
const data = await response.json();
if (!response.ok) throw new Error(JSON.stringify(data));
console.log(data.id);
Python:
import json
import uuid
import requests
body = json.loads(r'''{
"tool": "kling-4-0-flash",
"input": {
"generation_type": "image",
"prompt": "Лёгкий ветер шевелит листья, камера медленно поднимается к кроне дерева.",
"first_frame_url": "https://cdn.example.com/first-frame.jpg",
"duration": 5
}
}''')
response = requests.post(
"https://bratuha.ru/api/v1/operations",
headers={"Authorization": "Bearer brth_ваш_ключ",
"Idempotency-Key": str(uuid.uuid4())},
json=body,
timeout=60,
)
response.raise_for_status()
print(response.json()["id"])
После создания ролика на 5 секунд:
{"id":"123e4567-e89b-42d3-a456-426614174000","status":"queued","tool":"kling-4-0-flash","cost":65,"balance_after":935,"created_at":"2026-11-06T06:00:00Z"}
После завершения:
{"id":"123e4567-e89b-42d3-a456-426614174000","status":"completed","tool":"kling-4-0-flash","cost":65,"created_at":"2026-11-06T06:00:00Z","completed_at":"2026-11-06T06:03:00Z","result":{"type":"video","urls":["https://storage.bratuha.ru/results/example.mp4"]},"error_message":null}
Идентификаторы, баланс, время и адрес результата в этих ответах приведены для примера. Время готовности зависит от задания. При failed читайте error_message.
Запрашивайте GET /api/v1/operations/{id} по сохранённому идентификатору, например каждые 5-10 секунд:
curl -H "Authorization: Bearer brth_ваш_ключ" \
https://bratuha.ru/api/v1/operations/123e4567-e89b-42d3-a456-426614174000
При queued и processing продолжайте ожидание. При completed прочитайте результат, при failed или cancelled остановите опрос. Новый POST создаёт новую платную операцию, он не проверяет статус старой.
Готовое видео находится в result: type равен video, а urls содержит массив со ссылкой для скачивания. Сохраняйте файл у себя после завершения операции.
Цена одна для обоих режимов: 13 ₽ за каждую секунду результата. От соотношения сторон и наличия первого кадра она не зависит.
| Длительность | Цена |
|---|---|
| 3 секунды (минимум) | 39 ₽ |
| 5 секунд | 65 ₽ |
| 10 секунд | 130 ₽ |
| 20 секунд (максимум) | 260 ₽ |
http или https ссылке.image описывайте в задании движение и то, что должно произойти дальше, а не повторяйте содержимое картинки.