Для обработки ошибок проверяйте HTTP-статус, поле status и машинный код code. Текст message предназначен для пояснения: он может уточняться или переводиться, поэтому не используйте его как условие в коде.
Формат ответа
Передавайте заголовок Accept: application/json, чтобы получать ошибки в JSON. При явном предпочтении text/html сервис может вернуть HTML-страницу ошибки.
{
"status": "error",
"code": "DUPLICATE_ORDER_ERROR",
"message": "Order already exists"
}| Поле | Значение |
|---|---|
status | error — запрос завершился ошибкой. Это не платёжный статус операции. |
code | Код для обработки ошибки в вашей интеграции. Учитывайте возможность неизвестного кода или отсутствия значения. |
message | Пояснение ошибки. Формулировка зависит от причины и настроек подключения. |
field_errors | Необязательный объект: имя поля → список сообщений. При ошибке валидации запроса сервис сообщает о первом найденном ошибочном поле. |
Пример отсутствующего обязательного поля, HTTP 400:
{
"status": "error",
"code": "VALIDATION_ERROR",
"message": "Field required",
"field_errors": {
"merchant_id": ["Field required"]
}
}HTTP-статус и результат операции
| Ответ | Как обработать |
|---|---|
HTTP 400 | Ошибка параметров, доступа или обработки операции. Используйте code для выбора дальнейших действий. |
HTTP 500 и другие 5xx | Ошибка сервиса. Операция могла быть создана: уточните её статус перед повторной отправкой. |
HTTP 200 с status: "error" | В отдельных методах ошибка возвращается в теле успешного HTTP-ответа. Одного response.ok недостаточно. |
| Нет ответа или истекло время ожидания | Результат запроса неизвестен. Проверьте статус операции или дождитесь webhook. |
HTTP-статус и код ошибки не заменяют статус Invoice, Refund или Withdrawal. При неопределённом результате проверяйте существующую операцию через соответствующий метод статуса или webhook. Не создавайте новую операцию с новым order, пока не выяснен результат предыдущей. При ошибке дублирования сначала найдите уже созданную операцию.
Единый каталог ошибок
Ниже — 63 кода общего каталога. Описания взяты из кода сервиса; фактический message может содержать уточнение. Все записи текущего каталога имеют базовый HTTP-статус 400, но фактический HTTP-ответ зависит от метода и обработчика, как описано выше. Доступные коды зависят от подключения; не каждый код встречается у каждого метода.
В сообщениях MID означает мерчанта, WL — список разрешённых IP-адресов, BIN — первые цифры карты, определяющие банк-эмитент.
Общие ошибки
| Код | Описание |
|---|---|
WRONG_SIGNATURE_ERROR | Неверная подпись запроса |
VALIDATION_ERROR | Ошибка входных параметров/валидации |
IP_DENIED_ERROR | IP не разрешен (при включенном WL) |
NOT_ALLOWED | Операция запрещена настройками MID |
INVALID_AMOUNT | Сумма транзакции недействительна или вне допустимого диапазона. |
INVALID_CURRENCY | Указанная валюта не поддерживается для этой транзакции. |
AMOUNT_BELOW_ZERO | Сумма выплаты меньше 0 |
WITHDRAWAL_DENIED_ERROR | Выплаты для merchant/endpoint запрещены |
DUPLICATE_ORDER_ERROR | Дубликат заказа |
ROUTE_ERROR | Не удалось подобрать терминал/реквизит |
BIN_BLOCKED | Карта заблокирована по BIN/issuer |
PAYMENT_SYSTEM_ERROR | Ошибка на стороне платежной системы. Проверьте статус транзакции. |
PROVIDER_ERROR | Провайдер не завершил операцию. Проверьте статус транзакции. |
LIMIT_EXCEEDED | Превышен лимит |
BALANCE_ERROR | Недостаточно баланса для операции |
NOT_EXISTS | Сущность не найдена |
ENDPOINT_NOT_PROVIDED | Не передан endpoint/product |
COMMON_ERROR | Ошибка при проведении оплаты. |
Ошибки карт
| Код | Описание |
|---|---|
CARD_EXPIRED | Срок действия карты истёк. |
INSUFFICIENT_FUNDS | Недостаточно средств для завершения транзакции. |
CARD_ERROR | Невалидные данные карты |
CVV_ERROR | Неверный CVV/CVC |
CARD_LIMIT_ERROR | Превышен лимит карты |
ISSUER_ERROR | Банк-эмитент отклонил операцию |
OPERATION_ERROR | Операция не поддерживается картой |
AUTHENTICATION_ERROR | Не пройдена 3DS-аутентификация |
THREEDS_ERROR | Ошибка / недоступность 3DS |
UNSUPPORTED_ERROR | Карта не поддерживается |
Другие ошибки платежей и выплат
| Код | Описание |
|---|---|
INVALID_REQUEST | Запрос содержит отсутствующие или некорректные данные. |
INVALID_PAYMENT_DETAILS | Платёжные или реквизитные данные недействительны. |
INVALID_COUNTRY | Транзакция не поддерживается для указанной страны. |
METHOD_UNSUPPORTED | Выбранный способ оплаты не поддерживается для этой транзакции. |
AF_DECLINED | Транзакция отклонена проверками безопасности. |
OTP_CODE_INVALID | Код подтверждения недействителен или истёк. |
RATELIMIT_ERROR | Превышен лимит частоты запросов или лимит транзакций. |
CANCELLED | Транзакция отменена. |
TRANSACTION_EXPIRED | Время на завершение транзакции истекло. |
DUPLICATE_TRANSACTION | Обнаружена дублирующая транзакция. Проверьте статус существующей транзакции. |
TRANSACTION_NOT_FOUND | Транзакция по указанному идентификатору не найдена. |
PAYMENT_INSTRUMENT_RESTRICTED | Выбранная карта или счёт не могут быть использованы для этой транзакции. |
PAYMENT_METHOD_NOT_SUPPORTED | Выбранный способ оплаты не поддерживается для этой транзакции. |
CURRENCY_NOT_SUPPORTED | Указанная валюта не поддерживается для этой транзакции. |
COUNTRY_NOT_SUPPORTED | Транзакция не поддерживается для указанной страны. |
VERIFICATION_FAILED | Необходимые проверки верификации не пройдены. |
MERCHANT_BALANCE_INSUFFICIENT | Недостаточный баланс мерчанта для завершения выплаты. |
PAYMENT_DECLINED | Транзакция отклонена. |
TRANSACTION_NOT_PERMITTED | Запрошенная транзакция не разрешена. |
RISK_DECLINED | Транзакция отклонена проверками безопасности. |
COMPLIANCE_RESTRICTION | Транзакция не может быть обработана из-за ограничений комплаенса. |
AUTHENTICATION_FAILED | Аутентификация клиента не была успешно завершена. |
AUTHENTICATION_TIMEOUT | Время на аутентификацию клиента истекло. |
VERIFICATION_CODE_INVALID | Код подтверждения недействителен или истёк. |
AUTHENTICATION_ATTEMPTS_EXCEEDED | Превышено допустимое число попыток аутентификации. |
NO_AVAILABLE_ROUTE | Нет доступного маршрута обработки для этой транзакции. |
PAYMENT_DETAILS_UNAVAILABLE | Платёжные реквизиты не могут быть предоставлены для этой транзакции. |
SERVICE_UNAVAILABLE | Необходимый сервис обработки временно недоступен. |
INTEGRATION_ERROR | Ошибка интеграции платёжной системы. Обратитесь в поддержку. |
PROCESSING_ERROR | Ошибка при обработке запроса. Проверьте статус транзакции. |
PROCESSING_TIMEOUT | Таймаут обработки запроса. Проверьте статус транзакции. |
TRANSACTION_CANCELLED | Транзакция отменена. |
INVALID_TRANSACTION_STATE | Запрошенное действие недопустимо в текущем состоянии транзакции. |
TRANSACTION_RESULT_UNKNOWN | Результат транзакции ещё не подтверждён. Не повторяйте запрос; проверьте статус. |
UNKNOWN_ERROR | Причина ошибки не определена. Проверьте статус транзакции. |
Ошибки с неопределённым результатом
В каталоге как неокончательные отмечены PAYMENT_SYSTEM_ERROR, PROVIDER_ERROR, COMMON_ERROR, PAYMENT_DETAILS_UNAVAILABLE, SERVICE_UNAVAILABLE, INTEGRATION_ERROR, PROCESSING_ERROR, PROCESSING_TIMEOUT, INVALID_TRANSACTION_STATE, TRANSACTION_RESULT_UNKNOWN, UNKNOWN_ERROR и THREEDS_ERROR.
Для них сначала уточните статус существующей операции. Такая ошибка не является разрешением автоматически повторить платёж или выплату. Признак is_final — характеристика каталога, он не передаётся в JSON ошибки. Остальные коды также не заменяют платёжный статус операции.
Дополнительные коды API
В отдельных методах также встречаются коды ниже. Обычно они возвращаются с HTTP 400. Для DUPLICATE_ORDER действия с двухэтапной выплатой могут вернуть HTTP 200 с status: "error".
| Код | Описание |
|---|---|
TEMPORARY_ERROR | Временная ошибка соединения при обработке запроса. Проверьте статус операции перед повтором. |
DUPLICATE_ORDER | Заказ с таким номером уже существует. Этот код встречается при работе с выплатами; учитывайте также DUPLICATE_ORDER_ERROR из общего каталога. |
REFUND_AMOUNT_EXCEEDS | Сумма возврата превышает сумму платежа. |
REFUND_INCOMPLETE_INVOICE | Возврат невозможен для незавершённого платежа. |
TARGET_REQUISITE_UNSUPPORTED | Выбранный канал не поддерживает передачу target_requisite_id. Это не означает, что реквизит не найден. |
CUSTOMER_INVOICE_RATE_LIMIT | Превышен лимит запросов для клиента. Код может возвращаться при выборе маршрута платежа. |
Если получен незнакомый код, сохраните идентификатор операции, HTTP-статус и ответ API для диагностики. Не считайте неизвестную ошибку успешным выполнением операции; при неопределённом результате уточните её статус.