Делает текстовый разбор видео по вашему вопросу: может описать, что происходит в кадре, какие действия выполняют люди и какие объекты видны. Цена - 0,3 ₽ за 1 секунду видео.
Общая документация Public API · API-ключ можно создать в настройках аккаунта
Нейросеть смотрит ролик и отвечает текстом на ваш вопрос о нём: что происходит в кадре, кто в нём, что делают люди, какие видны предметы и обстановка. Вопрос задаёте вы, поэтому одну и ту же нейросеть можно использовать для очень разных задач.
Примеры задач:
Результат приходит обычным текстом в поле result.text. Вызов создаёт асинхронную операцию: сразу приходит id, ответ забирается проверкой статуса. Короткий ролик разбирается меньше чем за минуту.
POST /api/v1/operationsAuthorization: Bearer brth_...id операции и стартовый статус queued.Сценария два, цена у них одинаковая:
detailed_analysis: false или поле не передаётся;detailed_analysis: true.{
"tool": "analyze-video",
"input": {
"prompt": "Опиши, что происходит в ролике",
"video_url": "https://cdn.example.com/source-video-1.mp4"
}
}
tool - slug нейросети, всегда "analyze-video".input - параметры запуска. Поля передаются прямо внутри этого объекта, без дополнительной вложенности.| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
prompt | string | Да | Вопрос или задание по видео, от 3 до 2000 символов. Например: что происходит в ролике, какие действия выполняет человек, какие объекты видны в кадре. |
video_url | string (url) | Да | Ссылка на видео. Один файл, только внешний http/https URL с расширением .mp4, .mov или .webm. Длительность до 2 минут (122 секунды), размер файла не больше 128 МиБ. |
detailed_analysis | boolean | Нет | true - ответ будет подробнее: нейросеть разберёт содержание видео детальнее. По умолчанию false. На цену не влияет. |
Длительность вы не передаёте: сервер сам определяет её по файлу и по ней считает цену.
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "analyze-video",
"input": {
"prompt": "Опиши, что происходит в ролике: кто в кадре, что делает человек, какие объекты и обстановка видны.",
"video_url": "https://cdn.example.com/source-video-1.mp4",
"detailed_analysis": 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: 'analyze-video',
input: {
prompt:
'Опиши, что происходит в ролике: кто в кадре, что делает человек, какие объекты и обстановка видны.',
video_url: 'https://cdn.example.com/source-video-1.mp4',
detailed_analysis: false,
},
}),
})
const operation = await response.json()
console.log(operation.id, operation.cost)
import requests
response = requests.post(
'https://bratuha.ru/api/v1/operations',
headers={
'Authorization': 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
json={
'tool': 'analyze-video',
'input': {
'prompt': 'Опиши, что происходит в ролике: кто в кадре, что делает человек, какие объекты и обстановка видны.',
'video_url': 'https://cdn.example.com/source-video-1.mp4',
'detailed_analysis': False,
},
},
timeout=60,
)
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": "analyze-video",
"input": {
"prompt": "Разбери ролик по шагам: какие действия выполняет человек и в каком порядке.",
"video_url": "https://cdn.example.com/screen-recording-1.mov",
"detailed_analysis": 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: 'analyze-video',
input: {
prompt:
'Разбери ролик по шагам: какие действия выполняет человек и в каком порядке.',
video_url: 'https://cdn.example.com/screen-recording-1.mov',
detailed_analysis: true,
},
}),
})
const operation = await response.json()
import requests
response = requests.post(
'https://bratuha.ru/api/v1/operations',
headers={
'Authorization': 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
json={
'tool': 'analyze-video',
'input': {
'prompt': 'Разбери ролик по шагам: какие действия выполняет человек и в каком порядке.',
'video_url': 'https://cdn.example.com/screen-recording-1.mov',
'detailed_analysis': True,
},
},
timeout=60,
)
print(response.json())
Для ролика длиной 5 секунд:
{
"id": "op_uuid-123",
"status": "queued",
"tool": "analyze-video",
"cost": 1.5,
"balance_after": 498.5,
"created_at": "2026-09-30T12:45:19.119408+00:00"
}
{
"id": "op_uuid-123",
"status": "completed",
"tool": "analyze-video",
"cost": 1.5,
"created_at": "2026-09-30T12:45:19.119408+00:00",
"completed_at": "2026-09-30T12:46:03.645474+00:00",
"result": {
"type": "text",
"text": "В ролике показана женщина средних лет с каштановыми волосами, одетая в серый свитер крупной вязки. Она сидит за деревянным столом и обращается к камере, разговаривая и жестикулируя руками.\n\nНа столе перед ней находятся следующие объекты:\n* Слева виден белый монитор компьютера или ноутбука.\n* Стоит кружка с надписью \"TEA\", из которой идет легкий пар.\n* Рядом с кружкой стоит стакан с водой.\n\nЗа спиной женщины находится деревянный книжный шкаф, заполненный книгами. В целом обстановка выглядит уютной и располагающей к работе или общению."
},
"error_message": null
}
Пока видео разбирается, status будет queued или processing, а result - null. При ошибке придёт status: "failed", result: null и текст причины в error_message.
Сохраните id из ответа на создание и запрашивайте операцию по нему:
GET /api/v1/operations/{id}
curl -H "Authorization: Bearer brth_ваш_ключ" \
https://bratuha.ru/api/v1/operations/op_uuid-123
Пример ожидания ответа на JavaScript / TypeScript:
async function waitForAnswer(id: string): Promise<string> {
while (true) {
const res = await fetch(`https://bratuha.ru/api/v1/operations/${id}`, {
headers: { Authorization: 'Bearer brth_ваш_ключ' },
})
const op = await res.json()
if (op.status === 'completed') return op.result.text
if (op.status === 'failed') throw new Error(op.error_message)
await new Promise((r) => setTimeout(r, 5000))
}
}
Одну операцию можно опрашивать не чаще раза в секунду, иначе придёт 429. Здесь хватит запроса раз в 5 секунд.
{
"type": "text",
"text": "В ролике показана женщина средних лет..."
}
type - всегда "text".text - ответ нейросети одной строкой. Абзацы разделены \n\n, внутри могут встречаться списки в разметке Markdown (строки, начинающиеся с *).Ссылок и файлов в результате нет. Если показываете ответ на сайте, прогоните его через Markdown-рендерер или хотя бы замените переводы строк на <br>.
Цена - 0,3 ₽ за секунду видео. Режим detailed_analysis и длина вопроса на цену не влияют. Длительность берётся из самого файла в целых секундах, сумма списывается при создании операции и приходит в поле cost.
| Длительность ролика | Цена |
|---|---|
| 5 секунд | 1,5 ₽ |
| 30 секунд | 9 ₽ |
| 1 минута | 18 ₽ |
| 2 минуты (122 секунды, максимум) | 36,6 ₽ |
POST /api/v1/operations не идемпотентен: повторный запрос создаёт новую операцию и списывает деньги ещё раз. Если ответ на POST потерялся, не повторяйте его вслепую.queued, ответ забирайте через GET /api/v1/operations/{id}.video_url принимаются только внешние http/https ссылки на .mp4, .mov или .webm, доступные без авторизации. Ссылки на localhost и внутренние адреса отклоняются.validation_error, операция не создастся и деньги не спишутся.status: "failed" и сообщением о превышении длительности; списанная сумма в этом случае возвращается на баланс. Длинные записи режьте на части до 2 минут и отправляйте отдельными операциями.prompt.