insufficient_balance | 409 | No document created |
ext_id_conflict | 409 | Same ext_id, different body |
product_unavailable | 409 | Card product not allowed for tenant |
offer_unavailable | 409 | Offer inactive / not sellable |
unknown_offer / offer_required | 422 | Bad / missing offer id |
invalid_address | 400 / 422 | Withdraw address |
invalid_amount / invalid_value | 400 / 422 | Amount rules |
invalid_quantity | 422 | quantity not in 1..20 |
invalid_cursor | 400 | Bad / foreign keyset cursor (e.g. GET /partner/cards) |
missing_required_field | 400 / 422 | Gift required fields |
catalog_stale | 503 | Refresh gift catalog and retry |
kyc_rejected / invalid_customer_data | 409 / 422 | Cardholder data (incl. ban_rus phone/country rules) |
cardholder_create_failed | 409 / terminal doc | Cardholder step failed with JSON body (not empty HTTP 500) |
issue_timeout | terminal doc / webhook | Stuck card_issue closed as failed; retry with new ext_id |
card_not_active / card_already_frozen | 409 | Card state |
purchase_failed / provider_rejected | 409 | Provider could not fulfill |
not_found / card_not_found | 404 | Resource missing for tenant |
unauthorized | 401 | Token |
forbidden | 403 | Scope / tenant state |
rate limit exceeded | 429 | RPS window |
catalog cooldown | 429 | Catalog min interval |
too many open documents | 429 | Inflight create cap |
withdraw_limit_exceeded | 409 | Daily withdraw cap |
catalog_disabled | 503 | eSIM/gift catalog off |
gift_disabled | 503 | Gift kill-switch |
withdrawals_disabled / card_issuing_disabled | 403 / 503 | Feature flag |