ДокументацияОшибки

Ошибки

Разберитесь в кодах ошибок API и транскрибации. Узнайте, когда исправить запрос, а когда повторить попытку.

Сначала определите, где произошла ошибка. Если API не принял запрос, вы получите HTTP-ошибку. Если запрос прошёл, но расшифровать запись не удалось, у созданной задачи будет status=failed.

Формат ошибки

Для всех ошибок запросов к /v1 API использует один формат:

{
  "error": {
    "code": "insufficient_minutes",
    "message": "Not enough minutes",
    "retryable": false,
    "action_url": "https://transcript1.com/dashboard/billing",
    "minutes_needed": 20,
    "minutes_remaining": 3
  }
}

Логику обработки привязывайте к code, а message показывайте пользователю. На текст сообщения полагаться нельзя: мы можем его изменить. Значение retryable=true означает, что повторный запрос позже может пройти.

В зависимости от ошибки рядом с retryable могут быть дополнительные поля:

ПолеКод ошибкиЧто содержит
action_urlinsufficient_minutes, no_active_plan, topup_needs_userСсылку для подключения тарифа или покупки минут.
minutes_needed, minutes_remaininginsufficient_minutesСколько минут требуется и сколько осталось. Если длительность ещё неизвестна, в первом поле будет null.
reason, packstopup_needs_userПочему оплата с карты не списана и сколько пакетов было запрошено.
supported_platformsunsupported_platformСписок допустимых платформ: ["youtube", "x", "tiktok", "instagram", "facebook", "bluesky", "twitch", "dailymotion", "pinterest", "linkedin", "snapchat"].
missing_chunksupload_incompleteИндексы недостающих частей файла.
max_bytesmedia_too_largeВаш лимит размера файла в байтах.
paramsinvalid_requestОшибки в полях тела запроса или query-параметрах. Ключ объекта — имя поля, значение — описание проблемы.

Ошибки запроса

HTTP-кодcodeПовторить без изменений?Причина и действие
400, 422invalid_requestНетНе хватает параметра или поля, либо значение недопустимо. Например, нельзя сочетать diarize с source: "captions", а reuse_recent — с webhook_url. Невалидный JSON даёт тот же код.
422invalid_urlНетПроверьте ссылку и её соответствие platform. Подойдут YouTube, X, TikTok, Instagram, Facebook, Bluesky и другие платформы из раздела «Источники и параметры».
422unsupported_platformНетAPI не поддерживает указанное значение platform.
422unsupported_mediaНетРасширение загруженного файла не входит в список поддерживаемых.
401unauthorizedНетКлюч или токен не передан, неверен, истёк или отозван. Для загрузки — токен неверен или истёк.
403insufficient_scopeНетВ OAuth-токене нет нужного разрешения: transcriptions:read или transcriptions:write.
403email_not_verifiedНетДля создания задач и live-сессий сначала подтвердите почту.
402insufficient_minutesНетНа балансе 0 минут или их не хватает на запись либо меньше одной начатой минуты live-сессии. Если включено автопополнение, transcript1 сначала пробует пополнить баланс. Купите минуты по ссылке из action_url или поручите это ИИ-агенту через POST /v1/topups или MCP-инструмент top_up.
402no_active_planНетДля покупки дополнительных минут нужен активный платный тариф. Ошибку возвращают POST /v1/topups и платёжные эндпоинты личного кабинета, но не эндпоинты транскрибации.
402topup_needs_userТолько для pending и in_progressPOST /v1/topups не списал оплату с карты. Причина — в reason: not_allowed (учётным данным нельзя покупать пополнения или их владелец не администратор команды), cap_reached (в месячном лимите для ИИ-агентов не осталось запаса), card_declined, authentication_required или no_card. Пользователь может купить пакеты по ссылке из action_url. При pending (платёж ещё не подтверждён) и in_progress (идёт другое пополнение) платёж ещё может пройти: повторите попытку позже с тем же Idempotency-Key, а не отправляйте пользователя покупать.
404not_foundНетЗадача не найдена или принадлежит другой команде.
409upload_incompleteНетЗагрузите недостающие части файла и снова вызовите завершение загрузки.
409invalid_stateНетЗадача больше не ждёт загрузки. Отправлять части или завершать её уже нельзя.
409session_endedНетLive-сессия завершена, поэтому POST /v1/live/sessions/:id/token не может выдать токен. Также приходит как событие error в WebSocket.
422unsupported_languageНетЗначение language live-сессии не поддерживается.
422unsupported_translationНетЯзык translate_to live-сессии не поддерживается, либо live-перевод недоступен.
409idempotency_conflictНетЭтот Idempotency-Key ранее передали с другим набором параметров.
413media_too_largeНетРазмер файла превышает ваш лимит — см. «Загрузка файлов».
413invalid_requestНетТело JSON превышает 1 МБ. Для слишком большого файла используется другой код: media_too_large.
429rate_limitedДаИсчерпан лимит запросов в минуту. Число секунд до повтора указано в Retry-After.
429too_many_active_jobsДаДостигнут лимит выполняющихся задач или открытых загрузок. Подождите столько секунд, сколько указано в Retry-After.
429too_many_live_sessionsДаЗаняты все одновременные live-сессии вашего тарифа. Подождите столько секунд, сколько указано в Retry-After (30).
500internal_errorДаОшибка на стороне transcript1. Попробуйте ещё раз чуть позже.
503service_unavailableДаСервис временно недоступен. Попробуйте ещё раз чуть позже.
503live_capacityДаВся ёмкость live занята. Подождите столько секунд, сколько указано в Retry-After (30), и создайте сессию снова.
503live_unavailableНетРасшифровка в реальном времени сейчас недоступна.

Для браузерных запросов с cookie входа вместо Bearer-аутентификации проверяем также источник запроса. Вызов с другого сайта вернёт 403 forbidden_origin. К API-запросам с заголовком Authorization эта проверка не относится.

В любом ответе 429 есть Retry-After — время ожидания в секундах. Значения лимитов приведены в разделе «Тарифы и лимиты».

Когда повторять запрос

  • Автоматически повторяйте запрос только при retryable=true. Это ошибки rate_limited, too_many_active_jobs, too_many_live_sessions, live_capacity, internal_error, service_unavailable, а также topup_needs_user с reason pending или in_progress. Выдержите паузу из Retry-After, а если заголовка нет, увеличивайте интервал между попытками.
  • Для повторного POST /v1/transcriptions или POST /v1/topups сохраняйте прежний Idempotency-Key. Если первый запрос успел пройти, новая попытка не приведёт к повторному списанию.
  • Остальные ошибки требуют исправления запроса. Отправлять его без изменений не стоит.

Расшифровка в реальном времени

POST /v1/live/sessions и остальные эндпоинты live используют тот же формат ошибки. К ним применимы также invalid_request, unsupported_language, insufficient_minutes и email_not_verified, а вместе с ними — live-коды из таблицы выше. Создание сессии не идемпотентно, поэтому повтор после too_many_live_sessions или live_capacity создаст новую сессию.

После создания сессии проблемы приходят по WebSocket как события error и коды закрытия, а не как HTTP-ошибки. Все события описаны в разделе «Расшифровка в реальном времени».

Код закрытияЗначение
1000Обычное закрытие после session.ended.
1011Неожиданная ошибка сервера. Возобновите сессию с новым токеном.
1012Перезапуск сервера, после reconnect. Возобновите сессию с новым токеном.
4001Токен неверен, истёк или уже использован.
4004Сессия не найдена или уже завершена.
4008Нарушение протокола: звуковой кадр нечётной длины или слишком большого размера.
4010Заменено более новым подключением к той же сессии.

Live-сессия, которая завершилась по причине вроде balance_exhausted или idle_timeout, ошибкой не считается: она отправляет session.ended с причиной завершения и сохраняется. См. «Причины завершения».

Если транскрибация завершилась с ошибкой

Задача со status=failed содержит error: { "code", "message" }. HTTP-запрос к этому моменту мог давно завершиться успешно. Поэтому проверяйте error, когда запрашиваете статус или получаете вебхук transcription.failed. Если перевод не удался, отправляется вебхук transcription.translation.failed, а сама транскрипция из-за этого никогда не завершается ошибкой.

error.codeЧто случилосьЧто делать
media_unavailableВидео удалено, не существует или недоступно.Проверьте URL. Повтор без изменений не поможет.
media_privateДоступ к видео закрыт.Нужен публичный пост. Для YouTube подойдёт также видео с доступом по ссылке.
login_requiredДля просмотра нужен вход в аккаунт.Не повторяйте: это постоянная ошибка, автоматических повторов нет.
no_audioУ видео нет звуковой дорожки.Не повторяйте: это постоянная ошибка, автоматических повторов нет.
age_restrictedПросмотр ограничен по возрасту.Вместо повторного запроса загрузите файл.
live_streamТрансляция ещё идёт или не началась.Попробуйте после её завершения.
no_captionsВ режиме captions не нашлось подходящей дорожки субтитров.Смените source на "auto" или "stt".
media_too_longЗапись длиннее 5 часов — лимита распознавания речи.Разделите запись. Повтор целиком не поможет.
unsupported_mediaНе удалось прочитать файл или в нём нет аудиодорожки.Отправьте файл в поддерживаемом формате.
no_speechРечь не обнаружена.Не повторяйте.
unsupported_languageЯзык записи не поддерживается.Укажите в language поддерживаемый код или "auto". Без изменений не повторяйте.
insufficient_minutesК моменту списания на балансе не хватило минут, а автопополнение, если оно включено, не смогло их добавить.Пополните баланс и попробуйте снова.
fetch_failedНесколько попыток скачать запись не удались.Попробуйте ещё раз позже.
transcription_failedРаспознать речь не удалось даже после повторных попыток.Попробуйте ещё раз позже.

Если транскрибация завершилась с ошибкой или вы её отменили, платить не нужно. Уже списанные минуты вернём на баланс.

Дата обновления 5 ноября 2026 г.