POST /v1/video/transcriptions
Расшифровка или пересказ ролика YouTube по ссылке. Проверка ролика до запроса к модели, оплата по токенам.
Принимает ссылку на публичный ролик YouTube и возвращает дословную расшифровку с таймкодами или короткий пересказ. Скачивать видео не нужно: ролик по ссылке смотрит модель google/gemini-3.8-flash.
До запроса к модели Hubris проверяет ролик: удалённый, приватный, открытый только по ссылке, прямой эфир и ролик длиннее четырёх часов отклоняются сразу, и за них ничего не списывается.
Тот же сценарий без кода — инструмент «Видео по ссылке» с фиксированной ценой за ролик. У метода API цена другая: оплата по токенам, как у любого запроса к модели.
Эндпоинт
https://api.hubris.pw/v1/video/transcriptions| Заголовок | Значение |
|---|---|
Authorization | Bearer sk-gw-... (обязательно), ключ с правом chat:write |
Content-Type | application/json |
Тело запроса
| Поле | Тип | По умолчанию | Описание |
|---|---|---|---|
url | string | — | Ссылка на ролик: youtube.com/watch?v=…, youtu.be/…, youtube.com/shorts/…, youtube.com/live/…. |
mode | string | exact | exact — дословная расшифровка, каждая реплика с новой строки и таймкодом [HH:MM:SS]. fast — пересказ и ключевые мысли с таймкодами: быстрее и в несколько раз дешевле на длинном ролике, но таймкоды приблизительные. |
diarize | boolean | false | Только для exact: помечать реплики говорящими («Говорящий 1:», или по имени, если оно звучит в ролике). |
Пример
curl -s https://api.hubris.pw/v1/video/transcriptions \-H "Authorization: Bearer sk-gw-..." \-H "Content-Type: application/json" \-d '{"url": "https://youtu.be/ITL6WqcV6sE", "mode": "exact", "diarize": true}'import requestsr = requests.post( "https://api.hubris.pw/v1/video/transcriptions", headers={"Authorization": "Bearer sk-gw-..."}, json={"url": "https://youtu.be/ITL6WqcV6sE", "mode": "fast"}, timeout=900,)r.raise_for_status()print(r.json()["text"])const r = await fetch("https://api.hubris.pw/v1/video/transcriptions", {method: "POST",headers: { Authorization: "Bearer sk-gw-...", "Content-Type": "application/json",},body: JSON.stringify({ url: "https://youtu.be/ITL6WqcV6sE", mode: "fast" }),});const body = await r.json();if (!r.ok) throw new Error(body.error.message);console.log(body.text);Ответ приходит целиком, без стрима. Часовой ролик в режиме exact обрабатывается несколько минут, поэтому поставьте таймаут клиента не меньше 15 минут.
Ответ
{
"id": "vtr-3f9c1a7b2d4e5f60",
"object": "video.transcription",
"created": 1789550000,
"model": "google/gemini-3.8-flash",
"video": { "id": "ITL6WqcV6sE", "title": "Как подключить оплату через n8n", "duration_sec": 4375 },
"mode": "exact",
"diarize": true,
"text": "[00:00:07] Константин: Всем привет…\n[00:00:19] Константин: Сегодня…",
"truncated": false,
"usage": {
"prompt_tokens": 78120,
"completion_tokens": 16210,
"total_tokens": 94330,
"cost": 1840,
"requests": 1
}
}| Поле | Тип | Описание |
|---|---|---|
text | string | Расшифровка или пересказ. |
video | object | Идентификатор, название и длительность ролика в секундах. |
truncated | boolean | true — текст оборвался по лимиту длины ответа даже после продолжений. Бывает на очень длинных и плотных по речи роликах. |
usage.cost | integer | Стоимость в копейках — сумма всех запросов к модели. |
usage.requests | integer | Сколько запросов к модели понадобилось. Если ответ упирается в лимит длины, Hubris сам запрашивает продолжение с последнего таймкода и склеивает куски, всего до пяти запросов. |
HTTP-коды
| Код | error.code | Когда |
|---|---|---|
200 | — | Готово. |
400 | invalid_video_url | Ссылка не на ролик YouTube. |
400 | video_is_live | Идёт прямой эфир или премьера. |
400 | video_too_long | Ролик длиннее четырёх часов. |
401 | — | Ключ отсутствует, отозван или без права chat:write. |
402 | — | Недостаточно средств на балансе. |
404 | video_unavailable | Ролик удалён, приватный или открывается только по ссылке. |
429 | — | Превышен лимит расхода ключа. |
502 / 503 | — | Временный сбой модели или проверки ролика — повторите позже. |
Формат тела ошибки — Ошибки.
Видео в chat/completions
Если нужен свой промпт — например, вопросы по ролику, — передайте ссылку частью сообщения video_url в /v1/chat/completions с моделью Gemini:
{
"model": "google/gemini-3.8-flash",
"messages": [{
"role": "user",
"content": [
{ "type": "text", "text": "Какие платёжные системы подключают в ролике?" },
{ "type": "video_url", "video_url": { "url": "https://youtu.be/ITL6WqcV6sE" } }
]
}]
}Поле video_url.processing: "agentic" включает быструю обработку, как в режиме fast. В отличие от /v1/video/transcriptions, здесь ролик заранее не проверяется: за недоступную ссылку модель ответит текстом, и запрос будет оплачен.
Обновлено: