ДокументацияОшибки
Ошибки
Разберитесь в кодах ошибок 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_url | insufficient_minutes | Ссылку для подключения тарифа или покупки минут. |
minutes_needed, minutes_remaining | insufficient_minutes | Сколько минут требуется и сколько осталось. Если длительность ещё неизвестна, в первом поле будет null. |
supported_platforms | unsupported_platform | Список допустимых платформ: ["youtube", "x", "tiktok", "instagram", "facebook", "bluesky", "twitch", "dailymotion", "pinterest", "linkedin", "snapchat"]. |
missing_chunks | upload_incomplete | Индексы недостающих частей файла. |
max_bytes | media_too_large | Ваш лимит размера файла в байтах. |
params | invalid_request | Ошибки в полях тела запроса или query-параметрах. Ключ объекта — имя поля, значение — описание проблемы. |
Ошибки запроса
| HTTP-код | code | Повторить без изменений? | Причина и действие |
|---|---|---|---|
| 400, 422 | invalid_request | Нет | Не хватает параметра или поля, либо значение недопустимо. Например, нельзя сочетать diarize с source: "captions", а reuse_recent — с webhook_url. Невалидный JSON даёт тот же код. |
| 422 | invalid_url | Нет | Проверьте ссылку и её соответствие platform. Подойдут YouTube, X, TikTok, Instagram, Facebook, Bluesky и другие платформы из раздела «Источники и параметры». |
| 422 | unsupported_platform | Нет | API не поддерживает указанное значение platform. |
| 422 | unsupported_media | Нет | Расширение загруженного файла не входит в список поддерживаемых. |
| 401 | unauthorized | Нет | Ключ или токен не передан, неверен, истёк или отозван. Для загрузки — токен неверен или истёк. |
| 403 | insufficient_scope | Нет | В OAuth-токене нет нужного разрешения: transcriptions:read или transcriptions:write. |
| 403 | email_not_verified | Нет | Для создания задачи сначала подтвердите почту. |
| 402 | insufficient_minutes | Нет | На балансе 0 минут или их не хватает на запись. |
| 402 | no_active_plan | Нет | Для покупки дополнительных минут нужен активный платный тариф. Ошибку возвращает только платёжный эндпоинт личного кабинета, не эндпоинты транскрибации. |
| 404 | not_found | Нет | Задача не найдена или принадлежит другой команде. |
| 409 | upload_incomplete | Нет | Загрузите недостающие части файла и снова вызовите завершение загрузки. |
| 409 | invalid_state | Нет | Задача больше не ждёт загрузки. Отправлять части или завершать её уже нельзя. |
| 409 | idempotency_conflict | Нет | Этот Idempotency-Key ранее передали с другим набором параметров. |
| 413 | media_too_large | Нет | Размер файла превышает ваш лимит — см. «Загрузка файлов». |
| 413 | invalid_request | Нет | Тело JSON превышает 1 МБ. Для слишком большого файла используется другой код: media_too_large. |
| 429 | rate_limited | Да | Исчерпан лимит запросов в минуту. Число секунд до повтора указано в Retry-After. |
| 429 | too_many_active_jobs | Да | Достигнут лимит выполняющихся задач или открытых загрузок. Подождите столько секунд, сколько указано в Retry-After. |
| 500 | internal_error | Да | Ошибка на стороне transcript1. Попробуйте ещё раз чуть позже. |
| 503 | service_unavailable | Да | Сервис временно недоступен. Попробуйте ещё раз чуть позже. |
Для браузерных запросов с cookie входа вместо Bearer-аутентификации проверяем также источник запроса. Вызов с другого сайта вернёт 403 forbidden_origin. К API-запросам с заголовком Authorization эта проверка не относится.
В любом ответе 429 есть Retry-After — время ожидания в секундах. Значения лимитов приведены в разделе «Тарифы и лимиты».
Когда повторять запрос
- Автоматически повторяйте запрос только при
retryable=true. Это ошибкиrate_limited,too_many_active_jobs,internal_errorиservice_unavailable. Выдержите паузу изRetry-After, а если заголовка нет, увеличивайте интервал между попытками. - Для повторного
POST /v1/transcriptionsсохраняйте прежнийIdempotency-Key. Если первый запрос успел пройти, новая попытка не приведёт к повторному списанию. - Остальные ошибки требуют исправления запроса. Отправлять его без изменений не стоит.
Если транскрибация завершилась с ошибкой
Задача со status=failed содержит error: { "code", "message" }. HTTP-запрос к этому моменту мог давно завершиться успешно. Поэтому проверяйте error, когда запрашиваете статус или получаете вебхук transcription.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 | Распознать речь не удалось даже после повторных попыток. | Попробуйте ещё раз позже. |
Если транскрибация завершилась с ошибкой или вы её отменили, платить не нужно. Уже списанные минуты вернём на баланс.
Дата обновления 19 октября 2026 г.