| AUTHENTICATION_REQUIRED | 401 | Authentication is missing. Provide client_id and client_secret via Basic Auth. |
| INVALID_CREDENTIALS | 401 / 403 | Credentials are invalid, or the caller lacks required access |
| INVALID_HMAC_SIGNATURE | 401 | HMAC signature is invalid. |
| HMAC_SIGNATURE_REQUIRED | 401 | HMAC signature is required but was not provided. |
| TRANSACTION_NOT_OWNED | 403 | The transaction does not belong to the authenticated account. |
| COUNTRY_NOT_SUPPORTED_BY_ACCOUNT | 403 | The account does not support the requested country/corridor. |
| KYC_REQUIRED | 403 | KYC verification is required before the operation can proceed. |
| INVALID_REQUEST | 400 | The request is malformed or fails validation. |
| MISSING_REQUIRED_FIELD | 400 | One or more required fields are missing. |
| MISSING_REQUIRED_FIELDS | 400 | Multiple required fields are missing (often includes missing_fields). |
| INVALID_QR_FORMAT | 400 | The QR payload is missing or invalid. |
| INVALID_COUNTRY_CODE | 400 | The country code is invalid or unsupported for this operation. |
| UNSUPPORTED_QR_TYPE | 400 | The QR is recognised but cannot be paid: a retired scheme (VNPAY, ask the payer for a VietQR code) or an Indonesian QRIS that carries a tip or convenience fee. |
| INVALID_AMOUNT | 400 | The amount is invalid (e.g. missing, ≤ 0, or out of range). |
| INVALID_CURRENCY | 400 | The currency is invalid or unsupported. |
| INVALID_STATUS | 400 | The status filter/value is invalid. |
| INVALID_LIMIT | 400 | The pagination limit value is invalid. |
| INVALID_START_AFTER | 400 | The pagination cursor (start_after) is invalid. |
| TRANSACTION_NOT_PENDING | 400 | The transaction is not in PENDING status (often includes current_status). |
| QUOTATION_EXPIRED | 400 | The quotation has expired; call getQuotation again before payout. |
| DAILY_LIMIT_EXCEEDED | 400 | The sender’s payouts so far today (UTC) plus this amount would exceed the per-sender daily limit; details carry limit_usd, used_usd, remaining_usd and resets_at. |
| MONTHLY_LIMIT_EXCEEDED | 400 | The sender’s payouts so far this month (UTC) plus this amount would exceed the per-sender monthly limit; same details as the daily code. |
| METHOD_NOT_ALLOWED | 405 | HTTP method is not allowed for this endpoint. |
| IDEMPOTENCY_KEY_REQUIRED | 400 | X-Idempotency-Key header is required. |
| CUSTOMER_NOT_ELIGIBLE | 400 | Customer cannot transact: required sender profile fields are missing, or the identity document is not accepted for the customer’s country (Latin America; message names the accepted document). |
| CUSTOMER_BLOCKED | 403 | The registered customer is blocked from transacting. Contact support; the block is cleared on our side, not by re-registering the customer. |
| TRANSACTION_NOT_FOUND | 404 | The requested transaction was not found. |
| RESOURCE_NOT_FOUND | 404 | The requested resource was not found (e.g. customer, account). |
| RECIPIENT_LOOKUP_UNAVAILABLE | 503 | The recipient account name could not be resolved from the bank (our lookup, not your input). Nothing was locked; retry from decodeQr or supply recipient_name. |
| INSUFFICIENT_FUNDS | 402 | Account balance is insufficient for the requested payout. |
| ACCOUNT_PAYOUTS_LOCKED | 402 | Payouts are locked because the account balance is negative. Fund the account above zero and payouts resume automatically; includes available. |
| INTERNAL_SERVER_ERROR | 500 | Unexpected server error. |
| PROVIDER_ERROR | 400 / 500 | Upstream payment-provider failure. |
| WEBHOOK_SECRET_NOT_CONFIGURED | 500 | Webhook signing secret is not configured (inbound webhook handlers). |
| INVALID_WEBHOOK_SIGNATURE | 401 / 400 | Inbound webhook signature verification failed. |
| RATE_LIMIT_EXCEEDED | 429 | Too many requests. See Rate limits on the Availability page; retry with exponential backoff. |