Reference

Errors

All our HTTP codes and error.code values in one place, plus a failure_code reference for bank declines.

Every error is JSON in a single shape, with a suitable HTTP status:

{
  "error": {
    "code":    "method_not_supported_by_bank",
    "message": "bank does not support the chosen method"
  }
}

What you may encounter:

HTTPcodewhen
400bad_requestinvalid body or a required field is missing
401unauthorized / invalid_tokenno key, expired or invalid key
401signature_requiredshop requires signing, X-PSP-Signature header not provided
401invalid_signatureX-PSP-Signature does not match what we computed over the body
403live_not_enabledsk_live but the merchant has not been activated yet
403ip_not_allowedIP outside the shop allow-list
403aml_blockedpayment rejected by our AML scoring
403forbidden_purposedescription or order_id contains forbidden content; account is held for review
404not_foundobject not found or belongs to a different merchant
409not_pendingpayment is no longer in pending (cancel only)
409not_refundablerefund is only possible on a succeeded payment
409fully_refundedpayment is already fully refunded
422amount_too_largerefund amount exceeds the remaining balance
422route_not_configuredno connector configured for the (shop, method) pair
422method_not_supported_by_bankacquiring bank does not support the chosen method
429rate_limitedmerchant public-API limit exceeded; see Retry-After
500db_error / internalinternal error
502router_errorbank call failed

Failure codes

The POST /payments response and the payment.failed webhook contain a failure_code field. This is our unified code, not the raw bank response. Only we talk to the bank; the raw bank code is kept internally for audit and is not exposed.

failure_codewhen
insufficient_fundsnot enough funds on the payer’s account
card_declinedcard declined by the bank (generic case, no specifics)
card_expiredcard expired
do_not_honorbank refused to honor the operation (CVV fail, 3DS fail, etc.)
fraud_blockedblocked by anti-fraud (ours or the bank’s)
limit_exceededcard, merchant or sandbox limit exceeded
aml_blockedrejected by our AML scoring
customer_cancelledcustomer cancelled on the bank page
timeoutbank did not return a final status before the session TTL
bank_unavailablebank is down or returned 5xx; retry later
bank_unknownbank returned a non-standard code; check failure_message

failure_message is a human-readable description for UIs. Safe to show directly on an error page to the customer.