Перейти к содержимому
API-документация

Ошибки

Форматы ответов с ошибкой, все коды и что с ними делать.

Два формата

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

Проверка подписи и лимитов — до разбора запроса. Код в поле error:

{
  "error": "unauthorized",
  "message": "unauthorized: X-Timestamp is outside the ±5 minute window — check the server clock"
}

Обработка запроса — RFC 9457, Content-Type: application/problem+json. Код в errors[0].value:

{
  "title": "Payment Required",
  "status": 402,
  "detail": "partner_balance_exhausted",
  "errors": [
    { "message": "balance_exhausted", "location": "error.code", "value": "balance_exhausted" }
  ]
}

Ветвитесь по коду, а не по тексту. message, detail и title — для людей и могут меняться. Код читается одной строкой:

const code = body?.error ?? body?.errors?.[0]?.value ?? `http_${status}`;
code = body.get("error") or (body.get("errors") or [{}])[0].get("value") or f"http_{status}"
$code = $body['error'] ?? ($body['errors'][0]['value'] ?? "http_$status");

Ошибки схемы

Если тело или параметры не соответствуют схеме (нет обязательного поля, неверный тип, нет заголовка Idempotency-Key), ответ — 422 без кода; что не так, написано в errors[].location и errors[].message:

{
  "title": "Unprocessable Entity",
  "status": 422,
  "detail": "validation failed",
  "errors": [
    {
      "message": "expected required property email to be present",
      "location": "body",
      "value": { "external_id": "cust-42", "first_name": "Ivan", "last_name": "Petrov" }
    }
  ]
}

Коды подписи и лимитов

Формат с полем error.

HTTPerrorЧто значитЧто делать
401unauthorizedНет заголовков подписи, время вне окна ±5 минут, неизвестный ключ или подпись не совпалаСм. частые ошибки подписи
401partner_replayЭта подпись уже использоваласьПодписать запрос заново
403partner_suspendedАккаунт приостановленСвязаться с менеджером
403partner_ip_not_allowedЗапрос с адреса вне списка разрешённых для ключаСвязаться с менеджером
429rate_limitedПревышен лимит запросов ключа в минутуПодождать и повторить

Коды обработки

Формат RFC 9457, код в errors[0].value.

HTTPКодЧто значитПовторять?
400validation_failedЗначения не прошли бизнес-проверку — подробности в detailНет, исправить запрос
400idempotency_key_requiredIdempotency-Key пустойНет, передать ключ
402balance_exhaustedavailable не покрывает операциюПосле пополнения счёта
403forbiddenУ ключа нет нужного scopeНет
403card_secret_not_allowedНет scope cards:secret или доступа к реквизитамНет
404not_foundОбъекта нет в вашем аккаунтеНет
404tariff_not_availableТариф неизвестен, выключен или снят; для eSIM — не подключён к аккаунтуНет. Карточный тариф — из GET /tariffs, для eSIM — обратиться к менеджеру
404esim_package_not_availableПакет eSIM не найден, скрыт или сейчас не может быть выданНет, выбрать пакет из GET /esim/packages
404esim_price_below_costЦена пакета для аккаунта не выше нашей стоимости. Настройка на нашей сторонеНет, сообщить менеджеру
404wallet_missingСчёт аккаунта не настроенСвязаться с менеджером
409idempotency_conflictКлюч Idempotency-Key или external_id уже использован для другого запросаНет. Для новой покупки — новый ключ и новый external_id
422amount_below_limitСумма на карту ниже min_topupНет, увеличить сумму
422amount_above_limitСумма выше max_topup или лимита аккаунта на операциюНет, уменьшить сумму
422card_not_activeКарта не в состоянии activeПосле того как карта станет active
429daily_issue_limitДостигнут суточный лимит выпусков карт или покупок eSIM за 24 часаЗавтра или после повышения лимита
429card_secret_rate_limitedПревышен лимит запросов реквизитовЧерез минуту
502provider_unavailableПровайдер eSIM не ответил на обновление использования. Денег это не касаетсяПозже
503maintenanceТехнические работы на направлении; деньги не двигалисьПозже, с тем же Idempotency-Key
503card_secret_reveal_disabledВыдача реквизитов временно выключенаПозже
500—Внутренняя ошибкаДа, с тем же Idempotency-Key

Код error в формате RFC 9457 означает ошибку без отдельного кода: ориентируйтесь на HTTP-статус и detail.

Коды неудачной операции

Если операция завершилась failed или needs_review, причина — в error_code операции и события.

error_codeЗначитПовторять?
provider_unavailableЭмитент не ответил, деньги не двигалисьДа, с новым ключом
maintenanceНаправление закрыто на работыДа, позже, с новым ключом
provider_rejectedЭмитент отклонил запросНе сразу — сначала разобраться
tariff_not_availableНа тарифе больше нельзя выпускатьНет, другой тариф
order_expiredОперация не завершилась вовремяДа, с новым ключом
refundedСредства возвращеныПо ситуации
issue_not_startedВыпуск не началсяДа, с новым ключом
unknown_order_statusИтог не удалось определитьНет, обратитесь в поддержку
needs_reviewСредства ушли эмитенту или провайдеру, а результата нет: карты или eSIMНет. Мы разбираемся

Коды provider_unavailable, maintenance, tariff_not_available и issue_not_started относятся к картам. Покупка eSIM завершается неуспешно с provider_rejected, refunded, needs_review или unknown_order_status; подробности — в разделе eSIM.