Ошибки и коды
Отказ — это статус и стабильный code:
{ "status": 409, "code": "idempotency_conflict" }Решайте по code, а не по тексту. В рамках v1 могут появиться новые коды: незнакомый код обрабатывайте по его
статусу — 4xx: исправьте запрос; 5xx: повторите с тем же Idempotency-Key.
Некоторые ответы приходят от HTTP-слоя ещё до чтения запроса, в виде application/problem+json
{title, status, detail}: любой 401, 400 request body is required (команда отправлена без тела),
413 (тело больше лимита) и 422 validation failed (limit — не число). На неизвестный путь приходит
простой 404, на неверный метод — 405.
| Код | Статус | Значение | Что делать |
|---|---|---|---|
authentication failed |
401 | Ключ неизвестен, отозван или приостановлен; неверны подпись, хеш тела или метка времени (±5 мин); или nonce уже использован. Один ответ на все случаи. | Проверьте подпись. Подписывайте каждый повтор заново. |
rate_limited |
429 | Больше 100 запросов за эту секунду для ключа. Ничего не выполнено. | Подождите Retry-After, повторите с тем же ключом. |
invalid_request |
400 | Тело или параметр не соответствуют API: неизвестное поле, неверный тип, сумма не с двумя знаками после точки, нет Idempotency-Key, тело там, где оно не принимается. |
Исправьте запрос. |
idempotency_conflict |
409 | Idempotency-Key, merchant_order_id или merchant_payout_id уже относится к запросу с другим телом. |
Новый ключ для нового запроса. |
currency_unavailable |
422 | Ни один провайдер не принимает эту валюту. | Используйте LKR. |
method_unavailable |
422 | payment_method указывает метод или банк, которых нет в предложении. |
Укажите метод и банк из списка, other или ничего. |
payment_not_found |
404 | Такого платежа в этом проекте нет. | Проверьте id. |
payment_not_cancellable |
409 | Оплачен, завершён или на проверке. | Прочитайте его; после succeeded — оформите возврат. |
payment_busy |
409 | Идёт другое изменение платежа. Содержит Retry-After: 1. |
Повторите после паузы с тем же ключом. |
payment_version_conflict |
409 | Корректировка указывает версию, из которой платёж уже вышел. | Прочитайте платёж и корректируйте по его текущей версии. |
payment_not_correctable |
409 | Платёж не ждёт денег. | Отмените и создайте новый. |
amount_unchanged |
409 | Корректировка указывает текущую сумму. | Ничего делать не нужно. |
payment_not_refundable |
409 | Не succeeded, или его провайдер не умеет возвраты. |
Возвращайте только успешные платежи. |
refund_exceeds_payment |
422 | Больше полученного за вычетом уже возвращённого и возвратов в пути. | Возвращайте не больше остатка. |
insufficient_available_balance |
422 | Возврат или выплата с комиссией превышает available. Ничего не удержано. |
Дождитесь зачислений или уменьшите сумму. |
payment_unavailable |
503 | Результат неизвестен. | Повторите с тем же ключом или прочитайте платёж. |
payout_method_unavailable |
422 | Для вашего проекта не задана ставка выплат. | Обратитесь к вашему менеджеру. |
payout_not_found |
404 | Такой выплаты в этом проекте нет. | Проверьте id. |
payout_not_cancellable |
409 | Агент её взял, или она завершена. | Дождитесь результата. |
payout_unavailable |
503 | Результат неизвестен. | Повторите с тем же ключом или GET /v1/payouts?merchant_payout_id=. |
balance_unavailable |
503 | Не удалось прочитать баланс. | Повторите. |
endpoint_not_found |
404 | Эндпоинт вебхуков не задан. | Сначала PUT /v1/webhook-endpoint. |
url_not_allowed |
422 | Не HTTPS на публичный хост с именем на порту 443 или 8443. | Используйте публичный HTTPS-адрес. |
endpoint_disabled |
409 | Тест выключенного эндпоинта. | Сначала включите его. |
delivery_not_found |
404 | Такой доставки нет, или неверный cursor. |
Проверьте id; начните список заново. |
delivery_not_retryable |
409 | Доставка ещё идёт по расписанию. | Дождитесь, пока она будет доставлена или завершится неудачей. |
webhooks_unavailable |
503 | Настройки вебхуков сейчас недоступны. | Повторите. |
read_only |
503 | Техобслуживание: обслуживаются только чтения. Тело {code, message, request_id, retryable}, с Retry-After. |
Повторите после паузы. |