Перейти к содержимому

Коды ошибок

При ошибке проверьте HTTP статус и поле message.

Бизнес-ошибки всегда возвращают машиночитаемый code для программной обработки. Некорректные параметры (валидация) и несуществующие маршруты возвращают стандартный формат Laravel: { “message”: ”…”, “errors”: { … } }. Проверяйте входные данные до отправки.

{
"code": "insufficient_balance",
"message": "Insufficient balance. Please top up and try again."
}
codeHTTPОписание
unauthorized401API-ключ отсутствует, неверен или деактивирован.
account_banned403Аккаунт заблокирован. Обратитесь в поддержку.
invalid_realtime_request400Некорректный realtime-запрос (например, номер без международного префикса +, если country не указан).
idempotency_key_required400Realtime-запросы требуют заголовок Idempotency-Key.
invalid_idempotency_key422Недопустимый Idempotency-Key: 1-128 символов из букв, цифр и . _ : -
idempotency_conflict409Тот же Idempotency-Key использован с другим содержимым запроса.
request_in_progress409Идентичный realtime-запрос ещё обрабатывается. Повторите чуть позже (Retry-After: 1).
empty_input422Загруженный файл не содержит пригодных строк.
product_not_found422Указанный slug продукта не существует или неактивен.
product_mode_not_supported422Этот эндпоинт не принимает такой режим продукта (realtime-продукты не для массовых эндпоинтов).
invalid_country422Продукт не поддерживает указанную страну.
too_few_numbers422Отправка ниже минимума продукта.
too_many_numbers422Отправка превышает максимум платформы.
insufficient_balance402Недостаточно средств. Пополните баланс и повторите.
realtime_disabled403Realtime-проверка не включена для этого аккаунта.
realtime_rate_limited429Превышен лимит realtime-запросов. Соблюдайте retry_after.
product_pricing_unavailable503Цены для этого продукта ещё не настроены. Обратитесь в поддержку.
detection_capacity_unavailable503Сейчас нет доступной ёмкости для проверки. Повторите позже.
realtime_route_unavailable503Нет доступного realtime-маршрута. Повторите позже.
realtime_fact_cache_unavailable503Зависимость realtime временно недоступна. Повторите позже.
realtime_rate_limiter_unavailable503Лимитер временно недоступен. Повторите позже.
internal_error500Внутренняя ошибка сервера. Повтор с тем же Idempotency-Key безопасен.

Не у каждого сбоя есть code. Эндпоинты задач сообщают о четырёх условиях только статусом HTTP и message, потому что эти сбои возникают раньше, чем срабатывает путь бизнес-ошибок:

HTTPУсловиеТело
404task_id не существует или принадлежит другому аккаунтутолько message
404GET /v1/tasks/{token}/download — файл результата недоступен, истёк или больше не подлежит скачиваниютолько message
422GET /v1/tasks/{token}/result — результат не готов: задача не завершена, файл не сформирован или истёктолько message
422Параметры запроса не прошли валидацию{ "message": …, "errors": { … } }

В этих случаях ориентируйтесь на статус HTTP. message — для логов и для человека, разбирающего инцидент, а не для логики.

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

Повтор без изменений воспроизведёт ту же ошибку.

unauthorized, account_banned, invalid_realtime_request, idempotency_key_required, invalid_idempotency_key, idempotency_conflict, empty_input, product_not_found, product_mode_not_supported, invalid_country, too_few_numbers, too_many_numbers, insufficient_balance, realtime_disabled, product_pricing_unavailable

Временная ошибка — тот же запрос должен пройти позже.

realtime_rate_limited, request_in_progress, detection_capacity_unavailable, realtime_route_unavailable, realtime_fact_cache_unavailable, realtime_rate_limiter_unavailable

Запрос мог примениться, а мог и нет. Повторите с тем же ключом.

internal_error