Перейти к содержимому
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Тариф неизвестен, выключен или снятНет, взять тариф из GET /tariffs
404wallet_missingСчёт аккаунта не настроенСвязаться с менеджером
422amount_below_limitСумма на карту ниже min_topupНет, увеличить сумму
422amount_above_limitСумма выше max_topup или лимита аккаунта на операциюНет, уменьшить сумму
422card_not_activeКарта не в состоянии activeПосле того как карта станет active
429daily_issue_limitДостигнут суточный лимит выпусковЗавтра или после повышения лимита
429card_secret_rate_limitedПревышен лимит запросов реквизитовЧерез минуту
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Средства ушли эмитенту, а карта не появиласьНет. Мы разбираемся