Decline Codes Reference Guide
This guide provides a list of common decline and error codes encountered on the Exirom platform. These codes help technical users and developers understand why a transaction was declined or an error occurred. Each code has a brief description in simple terms. The codes are grouped into key categories for easier reference.
#Quick Reference: What To Do
| Action | Codes | What You Should Do |
|---|---|---|
| Retry the transaction | 1, 9, 12, 13, 61, 63, 70, 72, 73, 702, 1010, 1023, 3001, 3021 | Transient errors. Retry with same requestId, exponential backoff (2s, 4s, 8s). Max 3 retries. |
| Fix merchant-side issue | 8, 14, 17, 24–27, 30, 31, 65, 103, 105, 201–205, 502, 908, 909, 1011–1018, 3016, 3017, 3020, 3022, 4002, 4005, 4022, 4023, 4028, 20954 | Check your request payload. Fix the data and resubmit with a new requestId. Do not auto-retry. |
| Customer action needed | 3–6, 10, 19–23, 33, 34, 100, 104, 300–317, 500, 501, 700, 900–907, 910–915, 1001–1006, 1019–1022, 1024, 1025 | Show a user-friendly message. Do not auto-retry — let the customer try again. |
| Contact Exirom support | 7, 28, 29, 32, 62, 64, 66–69, 78, 101, 102, 400–404, 600–603, 701, 800, 801, 1000, 1007, 1008, 3008–3012, 3014, 3015, 4001, 4009–4012, 4015, 4016, 4024, 4025, 4032, 7777, 19991 | Include transactionId and traceId in your support ticket. Do not retry. |
#Customer-Facing Messages by Code
Use these messages (or similar) to guide customers when their payment fails:
| Code | Customer Message |
|---|---|
| 3, 10, 19–23 | "3D Secure verification failed. Please try again and complete the verification step." |
| 4, 9 | "Your session expired. Please try again." |
| 5, 33, 34 | "Insufficient funds. Please use a different card or top up your account." |
| 6 | "Your bank declined this transaction due to spending limits. Contact your bank or use another card." |
| 2, 11, 32, 75, 76, 82 | "Your card was declined. Please try a different card or contact your bank." |
| 79 | "Your card has expired. Please use a different card." |
| 1, 12, 13, 70, 72, 73 | "Something went wrong. Please try again in a moment." |
For a complete guide on retry logic and error recovery patterns, see the Error Recovery Patterns guide.
#Upstream Decline Codes
Upstream decline codes indicate issues reported by the issuing bank or payment gateway during processing. Common upstream codes include those for insufficient funds, fraud detection, 3-D Secure (3DS) errors, and technical failures.
| Code | Code Name | Description |
|---|---|---|
| 1 | UNEXPECTED_ERROR | A generic or unknown error occurred. |
| 2 | REJECTED_BY_ISSUER_BANK_ERROR | The issuer bank rejected the transaction. |
| 3 | THREE_DS_AUTHENTICATION_ERROR | An error occurred during 3‑D Secure authentication. |
| 4 | FORM_TIMEOUT_ERROR | The payment form session timed out or expired. |
| 5 | INSUFFICIENT_FUNDS_ERROR | The account or card has insufficient funds. |
| 6 | LIMITED_BY_ISSUER_BANK_ERROR | The issuer bank’s limit prevented the transaction. |
| 7 | ANTI_FRAUD_ERROR | Flagged as fraudulent by the anti-fraud system. |
| 8 | DATA_VALIDATION_ERROR | Provided payment/card data failed validation checks. |
| 9 | PREPAY_TIMEOUT_ERROR | A timeout occurred during the pre-payment process. |
| 10 | THREE_DS_PAGE_ERROR | The 3‑D Secure page encountered an error and halted. |
| 11 | PROCESSOR_DENIED | The payment processor denied the transaction. |
| 12 | GENERIC_PROCESSING_ERROR | A generic error occurred during processing. |
| 13 | TECHNICAL_GATEWAY_ERROR | A technical error occurred at the payment gateway. |
| 14 | DUPLICATED_ORDER_ID_ERROR | The provided order ID is already in use (duplicate order). |
| 15 | CURRENCY_EXCHANGE_NOT_ALLOWED_ERROR | Currency conversion is not permitted for this transaction. |
| 16 | GATE_NOT_FOUND_ERROR | The specified payment gateway or channel was not found. |
| 17 | ORDER_BILLING_ERROR | There was an error in the order’s billing details. |
| 18 | CARD_TIME_LIMIT_ERROR | The allowable time window for the card transaction was exceeded. |
| 19 | THREE_DS_TIMEOUT_ERROR | The 3‑D Secure process timed out. |
| 20 | THREE_DS_CANCEL_ERROR | The 3‑D Secure process was canceled by the user or system. |
| 21 | THREE_DS_REDIRECT_TIMEOUT | The 3‑D Secure redirect process timed out. |
| 22 | THREE_DS_REDIRECT_ERROR | An error occurred during the 3‑D Secure redirect. |
| 23 | THREE_DS_ABANDONED | The 3‑D Secure process was abandoned before completion. |
| 24 | CARD_INFORMATION_INVALID | The card details provided are invalid. |
| 25 | INVALID_CUSTOMER_REDIRECT_URL | The customer redirect URL provided is invalid. |
| 26 | INVALID_CALLBACK_URL | The callback URL provided is invalid. |
| 27 | CURRENCY_NOT_SUPPORTED | The selected currency is not supported for this transaction. |
| 28 | FRAUDULENT_TRANSACTION | The transaction was flagged as fraudulent and rejected. |
| 29 | MERCHANT_NOT_ACTIVE | The merchant account is inactive or disabled. |
| 30 | INVALID_CARD_HOLDER_DETAILS | Cardholder details are incorrect or missing. |
| 31 | INVALID_ORDER_AMOUNT | The order amount is invalid or not allowed. |
| 32 | PSP_GENERAL_DECLINE | The PSP declined the transaction for an unspecified reason. |
| 33 | ACCOUNT_EMPTY_BALANCE | The payout account has zero balance. |
| 34 | ACCOUNT_INSUFFICIENT_BALANCE | The payout account has insufficient balance for this transaction. |
| 61 | INTERNAL_UNEXPECTED_ERROR | An unknown error occurred in the internal system. |
| 62 | INTERNAL_VALIDATION_ERROR | The internal system failed a validation check. |
| 63 | GATEWAY_UNEXPECTED_ERROR | An unknown error occurred at the gateway. |
| 64 | GATEWAY_ANTI_FRAUD_ERROR | Flagged as fraudulent by the gateway’s anti-fraud system. |
| 65 | GATEWAY_VALIDATION_ERROR | Data failed validation checks at the gateway. |
| 66 | GATEWAY_FX_CONVERSION_ERROR | An error occurred during currency conversion at the gateway. |
| 67 | GATEWAY_NO_DOWNSTREAM_GATEWAY_ERROR | No downstream gateway was available to route the request. |
| 68 | GATEWAY_DOWNSTREAM_GATEWAY_ERROR | The downstream payment provider returned an error. |
| 69 | GATEWAY_TRANSACTION_LIMIT_ERROR | A gateway-imposed transaction limit blocked the request. |
| 70 | GATEWAY_PROCESSING_ERROR | A generic error occurred during gateway processing. |
| 71 | GATEWAY_AUTHENTICATION_ERROR | An authentication error occurred at the gateway. |
| 72 | GATEWAY_TECHNICAL_ERROR | A technical issue occurred at the gateway. |
| 73 | GATEWAY_TIMEOUT_ERROR | The gateway timed out while processing the transaction. |
| 74 | GATEWAY_INSUFFICIENT_FUNDS | The gateway reported insufficient funds. |
| 75 | GATEWAY_CARD_DECLINED | The gateway declined the card transaction. |
| 76 | GATEWAY_ISSUER_DECLINED | The card issuer (via gateway) declined the transaction. |
| 77 | GATEWAY_DUPLICATE_REQUEST | A duplicate transaction request was detected by the gateway. |
| 78 | GATEWAY_POLICY_VIOLATION | The transaction violated a gateway policy. |
| 79 | GATEWAY_CARD_EXPIRED | The card has expired. |
| 80 | GATEWAY_REDIRECT_ERROR | An error occurred during a gateway redirect. |
| 81 | GATEWAY_LIMIT_EXCEEDED | A gateway limit (threshold) was exceeded. |
| 82 | GATEWAY_GENERAL_DECLINE | The transaction was declined by the gateway for an unspecified reason. |
#Country Declines
Country-based declines occur when the customer's country fails the merchant's country routing rules (allowlist, blocklist, or origin-type constraints).
| Code | Code Name | Description |
|---|---|---|
| 100 | COUNTRY_CODE_IS_BLOCKED | The customer's country is on the merchant's blocklist. |
| 101 | COUNTRY_ORIGIN_TYPE_NOT_SUPPORTED | The country origin type (billing, IP, etc.) is not supported by the routing configuration. |
| 102 | COUNTRY_RESTRICTION_MODE_NOT_SUPPORTED | The country restriction mode is not supported. |
| 103 | COUNTRY_CODE_IS_MISSING_WHEN_NOT_OPEN_ALL | Country code is required but missing from the request. |
| 104 | COUNTRY_CODE_IS_NOT_ALLOW | The customer's country is not in the merchant's allowed list. |
| 105 | MULTIPLE_COUNTRIES_DETECTED | Conflicting countries detected across billing / IP / card BIN. |
#Domain & Redirect Declines
These errors relate to HTTP Referer validation and redirect URL constraints configured on the merchant account.
| Code | Code Name | Description |
|---|---|---|
| 201 | DOMAIN_NOT_ALLOWED | The request domain constraint blocked the transaction. |
| 202 | DOMAIN_REFERER_MISSING_OR_EMPTY | The HTTP Referer header is missing or empty while a domain constraint is active. |
| 203 | DOMAIN_REFERER_INVALID_FORMAT | The HTTP Referer header has an invalid format. |
| 204 | DOMAIN_REFERER_NOT_IN_ALLOWED_LIST | The HTTP Referer is not in the merchant's allowed domains list. |
| 205 | REDIRECT_URL_DECLINED | The provided redirect URL failed validation. |
#Risk Declines
Risk declines are raised by the Exirom risk engine based on configured rules. They evaluate signals such as AVS, CVV, device, email, shipping/billing, IP location, etc.
| Code | Code Name | Description |
|---|---|---|
| 300 | RISK_OVERALL_DECLINED | Declined by the overall risk score / rule. |
| 301 | RISK_AVS_DECLINED | Declined by AVS (Address Verification System) check. |
| 302 | RISK_BILLING_ADDRESS_DECLINED | Billing address failed risk check. |
| 303 | RISK_BROWSER_DECLINED | Browser fingerprint failed risk check. |
| 304 | RISK_CHARGEBACK_DECLINED | Declined due to prior chargeback history. |
| 305 | RISK_COUNTRY_DECLINED | Country failed risk-rule check. |
| 306 | RISK_COUNTRY_MISMATCH_DECLINED | Country mismatch detected (e.g., billing vs. IP). |
| 307 | RISK_CVV_DECLINED | CVV check failed. |
| 308 | RISK_DEVICE_DECLINED | Device failed risk check. |
| 309 | RISK_EMAIL_ADDRESS_DECLINED | Email address failed risk check. |
| 310 | RISK_EMAIL_DOMAIN_DECLINED | Email domain failed risk check. |
| 311 | RISK_EMAIL_LOCAL_PART_DECLINED | Email local part failed risk check. |
| 312 | RISK_ISSUER_ID_NUMBER_DECLINED | Card issuer ID number (BIN) failed risk check. |
| 313 | RISK_ORDER_AMOUNT_DECLINED | Order amount failed risk check. |
| 314 | RISK_PHONE_NUMBER_DECLINED | Phone number failed risk check. |
| 315 | RISK_SHIPPING_ADDRESS_DECLINED | Shipping address failed risk check. |
| 316 | RISK_SHIPPING_ADDRESS_DISTANCE_TO_IP_LOCATION_DECLINED | Shipping address is too far from the IP geolocation. |
| 317 | RISK_TIME_OF_DAY_DECLINED | Transaction blocked by a time-of-day risk rule. |
#Activable Decline Codes
Activable decline codes relate to account or configuration activation status. These errors occur if a required account or route is inactive or not properly set up.
| Code | Description |
|---|---|
| 400 | The merchant account is inactive (the merchant’s account is not active/enabled). |
| 401 | Account is inactive (the specific account or sub-account is not active). |
| 402 | External MID is inactive (the external merchant ID/account is not active). |
| 403 | Entity activation status undefined (the activation state of a required entity is not set). |
| 404 | Could not route transaction to upstream (no active route to any upstream processor). |
#First-Time Deposit (FTD) Declines
FTD declines are raised by first-time-deposit rules — typically requiring an existing successful transaction history or specific data for the customer's first deposit.
| Code | Code Name | Description |
|---|---|---|
| 500 | FTD_CONSTRAINT_DECLINED | The first-time-deposit constraint blocked the transaction. |
| 501 | FTD_NOT_ENOUGH_SUCCESS_TRANSACTIONS | The customer does not have enough successful transactions to bypass the FTD rule. |
| 502 | FTD_VALIDATION_FAILED_MISSING_DATA | FTD validation failed — required data was missing in the request. |
#FX Conversion Declines
FX declines are raised when currency conversion fails or is not allowed by the merchant account configuration.
| Code | Code Name | Description |
|---|---|---|
| 600 | FX_CONVERSION_RATE_MISSING | No FX rate available for the requested currency pair. |
| 601 | FX_CONVERSION_MERCHANT_ACCOUNT_NOT_SUPPORTED | FX conversion is not supported on the selected merchant account. |
| 602 | FX_CONVERSION_ERROR | An error occurred during FX conversion. |
| 603 | FX_PAYOUT_CONVERSION_MERCHANT_ACCOUNT_NOT_ALLOWED | FX conversion on payouts is not allowed for this merchant account. |
#Blacklist Declines
Blacklist declines are raised when the transaction or any of its attributes match an entry on the merchant's (or platform's) blacklist.
| Code | Code Name | Description |
|---|---|---|
| 700 | BLACKLIST_VALIDATION_DECLINED | Blacklist check matched — transaction blocked. |
| 701 | BLACKLIST_VALIDATION_FAILED | Blacklist validation failed (technical error). |
| 702 | BLACKLIST_CHECK_TIMEOUT | Blacklist check timed out. |
#Card Network Declines
Card network declines occur when the card brand (Visa/MC/Amex/etc.) is not enabled on the merchant or routing target.
| Code | Code Name | Description |
|---|---|---|
| 800 | NON_SUPPORTED_CARD_NETWORK | The card network/brand is not supported for this transaction. |
| 801 | MERCHANT_ACCOUNT_HAS_NO_SUPPORTED_CARD_NETWORKS_COUNT | The merchant account has no enabled card networks. |
#Limit / Counter Declines
Limit declines are raised when a transaction would exceed a configured daily/monthly limit (count or volume) on the merchant, account, card, or customer level.
| Code | Code Name | Description |
|---|---|---|
| 900 | DAILY_MAX_TRX_COUNT_DECLINED | Daily maximum transaction count reached on the merchant/account. |
| 901 | DAILY_MAX_VOLUME_DECLINED | Daily maximum transaction volume reached. |
| 902 | MONTHLY_MAX_TRX_COUNT_DECLINED | Monthly maximum transaction count reached. |
| 903 | MONTHLY_MAX_VOLUME_DECLINED | Monthly maximum transaction volume reached. |
| 904 | DAILY_MAX_CARD_TRX_COUNT_DECLINED | Daily maximum count of transactions for this card reached. |
| 905 | DAILY_MAX_CARD_VOLUME_DECLINED | Daily maximum volume for this card reached. |
| 906 | MONTHLY_MAX_CARD_TRX_COUNT_DECLINED | Monthly maximum count of transactions for this card reached. |
| 907 | MONTHLY_MAX_CARD_VOLUME_DECLINED | Monthly maximum volume for this card reached. |
| 908 | TRANSACTION_MIN_AMOUNT_DECLINED | Transaction is below the minimum allowed amount. |
| 909 | TRANSACTION_MAX_AMOUNT_DECLINED | Transaction is above the maximum allowed amount. |
| 910 | CUSTOMER_DAILY_MAX_TRX_COUNT_DECLINED | Daily maximum transaction count for the customer reached. |
| 911 | CUSTOMER_MONTHLY_MAX_TRX_COUNT_DECLINED | Monthly maximum transaction count for the customer reached. |
| 912 | CUSTOMER_DAILY_MAX_VOLUME_DECLINED | Daily maximum transaction volume for the customer reached. |
| 913 | CUSTOMER_MONTHLY_MAX_VOLUME_DECLINED | Monthly maximum transaction volume for the customer reached. |
| 914 | DAILY_MAX_CARD_FAILED_TRX_COUNT_DECLINED | Daily maximum count of failed transactions for this card reached. |
| 915 | DAILY_MAX_CUSTOMER_FAILED_TRX_COUNT_DECLINED | Daily maximum count of failed transactions for the customer reached. |
#3DS Authentication Declines
These codes are raised by the Exirom orchestration layer when 3-D Secure authentication fails. They are more granular than the upstream codes (3, 10, 19–23).
| Code | Code Name | Description |
|---|---|---|
| 1001 | AUTHENTICATION_FAILED | 3DS authentication failed. |
| 1002 | AUTHENTICATION_FAILED_TIMEOUT | 3DS authentication timed out. |
| 1003 | AUTHENTICATION_FAILED_INVALID_RESPONSE | 3DS authentication returned an invalid response. |
| 1004 | AUTHENTICATION_FAILED_ABORTED_BY_USER | 3DS authentication was aborted by the user. |
| 1005 | AUTHENTICATION_FAILED_ABORTED_BY_ISSUER | 3DS authentication was aborted by the issuer. |
| 1006 | AUTHENTICATION_FAILED_ABANDONED_BY_USER | 3DS authentication was abandoned by the user. |
| 1007 | THREE_DS_REDIRECT_ERROR | Error during 3DS redirect flow. |
| 1008 | THREE_DS_REDIRECT_TIMEOUT | 3DS redirect flow timed out. |
#Failed Sub-Reasons
Failed sub-reasons give a more specific reason for a downstream decline. They surface in addition to the broader upstream code so you can apply finer-grained retry / customer-message logic.
| Code | Code Name | Description |
|---|---|---|
| 1010 | DOWNSTREAM_TIMEOUT | Downstream PSP did not respond in time. |
| 1011 | DECLINED_INVALID_CVV | Declined — invalid CVV. |
| 1012 | DECLINED_INVALID_EXPIRY_DATE | Declined — invalid card expiry date. |
| 1013 | DECLINED_INVALID_CARD_NUMBER | Declined — invalid card number. |
| 1014 | DECLINED_INVALID_AMOUNT | Declined — invalid amount. |
| 1015 | DECLINED_INVALID_CURRENCY | Declined — invalid or unsupported currency. |
| 1016 | DECLINED_INVALID_MERCHANT | Declined — invalid merchant. |
| 1017 | DECLINED_INVALID_TRANSACTION | Declined — invalid transaction. |
| 1018 | DECLINED_UNSUPPORTED_BRAND | Declined — unsupported card brand. |
| 1019 | DECLINED_LIMIT_EXCEEDED | Declined — limit exceeded at the issuer/processor. |
| 1020 | DECLINED_SUSPECTED_FRAUD | Declined — suspected fraud. |
| 1021 | DECLINED_DO_NOT_HONOR | Declined — generic "do not honor" from the issuer. |
| 1022 | DECLINED_BY_BIN | Declined — blocked by BIN rule. |
| 1023 | DECLINED_BY_COMMUNICATION_ERROR | Declined — communication error with the processor. |
| 1024 | DECLINED_BY_BIN_CHECK_FAILED | Declined — BIN check failed. |
| 1025 | ABANDONED_TX_RISK_CHECK_DECLINED | Abandoned-transaction risk check declined the request. |
#Business / Orchestration Errors
These errors indicate system-level issues with the request (missing transaction, invalid state, duplicate request, configuration not found, etc.). Most are transient and may resolve on retry, but several indicate a misconfigured or invalid request and require a fix on your side.
| Code | Code Name | Description |
|---|---|---|
| 1000 | NO_PROCESSOR_AVAILABLE | No payment processor was available to handle the request. |
| 3001 | Downstream service timeout | An external service did not respond in time. |
| 3008 | PSP_ID_NOT_FOUND_ON_ROUTING_STAGE | The PSP could not be resolved at the routing stage. |
| 3009 | EXTERNAL_MID_NOT_FOUND_ON_ROUTING_STAGE | External MID could not be resolved at the routing stage. |
| 3010 | PROCESSORS_NOT_AVAILABLE | No payment processors were available to handle the request. |
| 3011 | BIN_CHECK_RESULT_NOT_FOUND | BIN check result was not found. |
| 3012 | PAYMENT_TX_NOT_FOUND_FOR_REFUND | The payment transaction referenced for the refund does not exist. |
| 3014 | MERCHANT_REDIRECT_ALLOWED_HOST_ERROR | The merchant's redirect host validation failed. |
| 3015 | APM_SERVICE_NOT_FOUND | No APM service was found for this transaction. |
| 3016 | INVALID_USER_TOKEN | The user token in the request is invalid or expired. |
| 3017 | SUCCEEDED_REFUND_ALREADY_EXISTS | A successful refund already exists for this payment. |
| 3020 | INVALID_INTENT_STATUS | The payment intent is in an invalid status for this operation. |
| 3021 | DECLINED_TIMEOUT_NO_PSP_RESPONSE | Declined — no response was received from the PSP within the timeout window. |
| 3022 | INVALID_APPLE_PAY_SESSION_REQUEST | The Apple Pay session request is invalid. |
#Routing Declines
Routing declines occur when Exirom cannot resolve a route to an upstream processor — typically because no routing condition matched, no route was assigned, or routing configuration is missing. Related routing codes also appear as 404 and 3008–3010. These indicate a configuration issue — do not retry; contact Exirom support.
| Code | Code Name | Description |
|---|---|---|
| 4009 | NO_PENDING_CASCADING_STEP_FOUND | No further cascading step was available to route the transaction. |
| 4010 | NO_ROOT_NODE_FOUND | The routing configuration has no root node defined. |
| 4011 | NO_MATCH_ROUTE_CONDITION_NOR_DEFAULT_NODE | No routing condition matched and no default route is configured. |
| 4012 | NO_ROUTING_CONFIG_FOUND | No routing configuration was found for this transaction. |
| 4015 | PSP_WAS_NOT_ASSIGNED | No PSP was assigned to the transaction during routing. |
| 4016 | EXTERNAL_MID_WAS_NOT_ASSIGNED | No external MID was assigned to the transaction during routing. |
| 4032 | EXPECTED_ROUTING_NO_MATCH | The transaction did not match any configured routing rule. |
#Request Validation Declines
Request validation declines are raised when a required field is missing or cannot be resolved from the request. Fix the indicated field and resubmit with a new requestId.
| Code | Code Name | Description |
|---|---|---|
| 4001 | CREATED_DATE_MISSING | The transaction's created date was missing. |
| 4002 | EMAIL_MISSING | A required email value was missing from the request. |
| 4005 | CARD_BRAND_MISSING | The card brand could not be determined from the request. |
| 4022 | DEVICE_IP_MISSING | The device IP address was missing from the request. |
| 4023 | EMAIL_FIELD_MISSING | The email field was missing from the request. |
| 4024 | PAYMENT_TX_DETAIL_MUST_PRESENT_FOR_REFUND | The original payment details required for the refund were missing. |
| 4025 | REDIRECTION_METADATA_MISSING | Redirection metadata required to continue the flow was missing. |
| 4028 | APM_PAYLOAD_METADATA_IS_ABSENT | The apmPayload metadata required for this APM was missing. |
#Special Codes
Reserved codes for specific business conditions.
| Code | Code Name | Description |
|---|---|---|
| 7777 | PAYMENT_WAS_DONE_BY_ANOTHER_MERCHANT | The payment referenced for a refund belongs to a different merchant. |
| 19991 | MERCHANT_NOT_ENOUGH_FUNDS | The merchant has insufficient funds for the requested payout/refund. |
| 20954 | REFUND_AMOUNT_MUST_BE_AT_MOST_PAYMENT_AMOUNT | The refund amount exceeds the original payment amount. |
ℹ️ The above list covers the most commonly encountered decline codes on Exirom. For further inquiries or detailed cases regarding decline codes, please contact the Exirom support team.
See also: Error Handling Guide | APM Error Handling