Документация / Справочник
Коды ошибок
Тело ошибки всегда одинаковое. Ориентируйтесь на code, а не на текст: текст написан для человека и может меняться.
JSON
{ "error": { "code": "duplicate_order", "message": "Счёт для этого order_id уже создан" } }Когда повторять безопасноПри
429, 500, 503, idempotency_in_progress и сетевых ошибках — с тем же Idempotency-Key: дубликата не будет.Запрос и доступ
| HTTP | code | Причина и что делать |
|---|---|---|
| 400 | bad_json, bad_body | Тело не JSON, лишние поля или сумма числом вместо строки — исправить запрос |
| 400 | bad_idempotency_key | Нет ключа или неверный формат: 8–128 печатных ASCII, не начинается с d: |
| 400 | bad_query | Неверные параметры списка |
| 401 | unauthorized | Подпись, время, nonce или ключ — см. CP-HMAC |
| 403 | merchant_suspended | Мерчант приостановлен — свяжитесь с поддержкой |
| 403 | merchant_not_approved | Подключение не завершено или заявка на рассмотрении — завершите мастер в кабинете |
| 403 | billing_suspended | Не оплачен счёт на комиссию — оплатите в кабинете, «Биллинг»; приостановка снимется сразу |
| 404 | not_found | Счёта нет или он чужой |
| 413 | body_too_large | Тело больше лимита — уменьшите metadata |
| 429 | rate_limited | Слишком много запросов — повторите с экспоненциальной паузой |
| 500 | internal | Внутренняя ошибка — повторите с тем же Idempotency-Key |
Счета и идемпотентность
| HTTP | code | Причина и что делать |
|---|---|---|
| 409 | duplicate_order | order_id уже использован — новый, например ORDER-1001-2 |
| 409 | idempotency_conflict | Тот же ключ с другим телом |
| 409 | idempotency_in_progress | Первый запрос ещё выполняется — повторить через 1–2 с |
| 409 | invoice_not_payable | Счёт истёк или закрыт — создать новый |
| 422 | invalid_order_id, invalid_price_amount, invalid_price_currency, invalid_return_url, invalid_expires_in_seconds, invalid_metadata | Поле не прошло проверку — текст подсказывает правило |
| 422 | invalid_allowed_assets | Ни один актив из списка недоступен — в тексте причина по каждому |
| 422 | no_assets | Нет ни одного доступного актива — проверьте кошельки и активы в кабинете |
| 422 | amount_too_small | Сумма меньше минимума всех доступных активов |
Выбор валюты на странице оплаты
Эти ошибки обрабатывает страница оплаты — вашему серверу они встречаются, только если вы вызываете select сами.
| HTTP | code | Причина |
|---|---|---|
| 409 | asset_locked | Смена валюты после платежа |
| 409 | wallet_not_configured | Нет действующего кошелька приёма этой сети |
| 409 | wallet_changed, address_conflict | Повторить выбор |
| 422 | asset_not_allowed | Актива нет в счёте или он больше не разрешён |
| 503 | rate_unavailable | Нет подтверждённого курса — предложите стейблкоин |
| 503 | network_unavailable | Приём в сети временно недоступен — выбрать другую |
Возвраты
| HTTP | code | Причина |
|---|---|---|
| 403 | merchant_inactive | Магазин приостановлен или ключ отозван |
| 409 | invoice_not_paid | У счёта не выбран актив — возвращать нечего |
| 409 | nothing_to_refund | Всё уже возвращено или запрошено |
| 409 | too_many_refunds | 20 открытых заявок по счёту |
| 409 | refund_executor | Возврат исполняет платформа, а не вы |
| 409 | invoice_status_changed | Статус счёта изменился после заявки — повторить с "ack_status_change": true |
| 422 | amount_exceeds_refundable | Сумма больше доступной — уменьшить или "full" |
| 422 | invalid_amount, invalid_address, invalid_tx_hash | Поле не прошло проверку |