Ошибки и повторные запросы

HTTP-статусы и коды ошибок API, частичная доступность перевозчиков, idempotency и X-Request-ID.

Единый формат ошибки

{
  "error": {
    "code": "insufficient_credits",
    "message": "Недостаточно запросов на балансе.",
    "request_id": "req_example"
  }
}

Ответ содержит заголовок X-Request-ID. Сохраняйте его при ошибке и передавайте поддержке. Текст сообщения предназначен человеку, логику клиента стройте по HTTP-статусу и error.code.

HTTPКодДействие
422invalid_requestИсправьте параметры запроса
401invalid_api_key / api_key_revokedПроверьте ключ или создайте новый
403invalid_api_keyПодтвердите email аккаунта
402insufficient_creditsПополните баланс пакетом
429rate_limit_exceededПодождите Retry-After секунд
409idempotency_conflict / idempotency_in_progressИспользуйте исходное тело либо новый ключ
503carrier_unavailableВсе службы завершились технической ошибкой; запрос возвращён
500 / 503internal_errorПовторите позже с тем же Idempotency-Key

Ошибки аутентификации, валидации, нехватка баланса и ограничения частоты не списывают запрос.

Частичный результат

Если хотя бы часть перевозчиков ответила, API возвращает HTTP 200. Доступные тарифы находятся в rates, причины по остальным — в unavailable. Не отклоняйте весь результат из-за непустого unavailable.

Возможные причины: timeout, circuit_open, not_configured, unavailable, invalid_response, no_rates, postal_code_required, declared_value_required, ambiguous_city, rate_limited, upstream_auth_error, invalid_request, upstream_error. Новые значения могут добавляться: неизвестную причину обрабатывайте как недоступность конкретной службы.

Идемпотентный повтор

Передайте уникальный Idempotency-Key (например, UUID) для операции расчёта. При повторе с тем же ключом и параметрами сервер вернёт сохранённый результат без нового списания. Область ключа — аккаунт. Не используйте один ключ для разных отправлений.

Idempotency-Key: 5d0b7008-59de-43ef-a14d-f8d0ca0a45ae

Конфликт тела запроса возвращает 409. Повтор во время ещё выполняющегося расчёта также может вернуть 409; подождите перед повтором. Хранение ключа ограничено 24 часами: после этого не полагайтесь на повтор без списания.

Повторы без перегрузки

Для 429 следуйте Retry-After. Для временных 503 применяйте увеличивающуюся задержку с небольшим случайным отклонением. Ошибки 401, 402 и 422 не исправляются автоматическим повтором.