> ## Documentation Index
> Fetch the complete documentation index at: https://docs.waffo.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Payment Error Codes

> Reference for every payment failure reason surfaced in the Waffo dashboard

When a transaction fails, the **Error code** link in the dashboard's transaction details jumps to the matching entry here.

<CardGroup cols={2}>
  <Card title="Customer needs to fix input" href="#customer-needs-to-fix-input">
    19 error codes
  </Card>

  <Card title="Customer needs a new payment method" href="#customer-needs-a-new-payment-method">
    26 error codes
  </Card>

  <Card title="Transient issues — retry later" href="#transient-issues-retry-later">
    23 error codes
  </Card>

  <Card title="Terminal — no action available" href="#terminal-no-action-available">
    5 error codes
  </Card>

  <Card title="Other" href="#other">
    1 error codes
  </Card>
</CardGroup>

<a id="customer-needs-to-fix-input" />

## Customer needs to fix input

*Your customer needs to correct something on the checkout (card details, CVV, address, OTP, etc.) and retry.*

<table>
  <thead>
    <tr>
      <th>Code</th>
      <th>Meaning</th>
      <th>Why it failed</th>
      <th>Recommended action</th>
    </tr>
  </thead>

  <tbody>
    <tr id="CARD_ABNORMAL_CARDNUMBER">
      <td><code>CARD\_ABNORMAL\_CARDNUMBER</code></td>
      <td>Invalid card number</td>
      <td>**Cause:** The card number entered is invalid or does not exist</td>
      <td>Ask the customer to re-enter it.</td>
    </tr>

    <tr id="CARD_ABNORMAL_NOTACTIVATED">
      <td><code>CARD\_ABNORMAL\_NOTACTIVATED</code></td>
      <td>Card not yet activated</td>
      <td>**Cause:** The customer's card hasn't been activated</td>
      <td>Ask them to activate it with their bank.</td>
    </tr>

    <tr id="CARD_ABNORMAL_NOTACTIVATED_ACCOUNT">
      <td><code>CARD\_ABNORMAL\_NOTACTIVATED\_ACCOUNT</code></td>
      <td>Bank account not activated</td>
      <td>**Cause:** The customer's bank account is inactive</td>
      <td>Ask them to contact their bank.</td>
    </tr>

    <tr id="CARD_AMOUNTOVERLIMIT">
      <td><code>CARD\_AMOUNTOVERLIMIT</code></td>
      <td>Exceeds card transaction limit</td>
      <td>**Cause:** Amount exceeds the card's per-transaction or daily limit</td>
      <td>Customer may split the charge or use another card.</td>
    </tr>

    <tr id="CARD_AUTHENTICATION_FAILED">
      <td><code>CARD\_AUTHENTICATION\_FAILED</code></td>
      <td>Card details verification failed</td>
      <td>**Cause:** Couldn't initiate bank verification with the card details</td>
      <td>Ask the customer to recheck number, expiry, and CVV.</td>
    </tr>

    <tr id="CARD_AUTHENTICATION_FAILED_ADDRESS">
      <td><code>CARD\_AUTHENTICATION\_FAILED\_ADDRESS</code></td>
      <td>Billing address mismatch</td>
      <td>**Cause:** The billing address doesn't match the issuer's records</td>
      <td>Ask the customer to correct it.</td>
    </tr>

    <tr id="CARD_AUTHENTICATION_FAILED_CVV2">
      <td><code>CARD\_AUTHENTICATION\_FAILED\_CVV2</code></td>
      <td>Incorrect CVV</td>
      <td>**Cause:** The card's security code is wrong</td>
      <td>Ask the customer to re-enter it.</td>
    </tr>

    <tr id="CARD_AUTHENTICATION_FAILED_NEED_ADDITIONAL_AUTH">
      <td><code>CARD\_AUTHENTICATION\_FAILED\_NEED\_ADDITIONAL\_AUTH</code></td>
      <td>Additional verification required</td>
      <td>**Cause:** The bank requires extra verification</td>
      <td>The customer should contact their bank or complete verification on retry.</td>
    </tr>

    <tr id="CARD_AUTHENTICATION_FAILED_VERIFICATIONDATA">
      <td><code>CARD\_AUTHENTICATION\_FAILED\_VERIFICATIONDATA</code></td>
      <td>Verification data mismatch</td>
      <td>**Cause:** Information provided during verification didn't match the issuer's records</td>
      <td>Ask the customer to retry.</td>
    </tr>

    <tr id="CARD_AUTHENTICATION_FAILED_VERIFICATIONDATA__tds_mismatch">
      <td><code>CARD\_AUTHENTICATION\_FAILED\_VERIFICATIONDATA</code></td>
      <td>3-D Secure data mismatch</td>
      <td>**Cause:** Information provided during 3-D Secure didn't match the issuer's records</td>
      <td>Ask the customer to retry.</td>
    </tr>

    <tr id="CARD_AUTHENTICATION_FAILED_VERIFICATIONDATA__otp_wrong">
      <td><code>CARD\_AUTHENTICATION\_FAILED\_VERIFICATIONDATA</code></td>
      <td>One-time code incorrect</td>
      <td>**Cause:** The customer's one-time verification code from the bank was wrong</td>
      <td>Ask them to request a new code and retry.</td>
    </tr>

    <tr id="CARD_BANK_REJECT_ISSUER_CONTACT">
      <td><code>CARD\_BANK\_REJECT\_ISSUER\_CONTACT</code></td>
      <td>Issuer requires customer contact</td>
      <td>**Cause:** The customer's bank wants them to call to verify or lift a restriction before retrying</td>
      <td>Ask the customer to contact their bank.</td>
    </tr>

    <tr id="CARD_BANK_REJECT_ISSUER_URGENT">
      <td><code>CARD\_BANK\_REJECT\_ISSUER\_URGENT</code></td>
      <td>Bank flagged abnormality</td>
      <td>**Cause:** The customer's bank flagged something and wants them to call immediately</td>
      <td>Ask the customer to contact their bank right away.</td>
    </tr>

    <tr id="CARD_OVERLIMIT">
      <td><code>CARD\_OVERLIMIT</code></td>
      <td>Exceeds bank limit</td>
      <td>**Cause:** Amount exceeds the customer's credit limit or per-transaction cap</td>
      <td>Suggest splitting the charge or using another card.</td>
    </tr>

    <tr id="CARD_PIN_INVALID">
      <td><code>CARD\_PIN\_INVALID</code></td>
      <td>PIN or CVV incorrect</td>
      <td>**Cause:** The PIN or CVV entered was wrong</td>
      <td>Ask the customer to re-verify.</td>
    </tr>

    <tr id="EXCEED_DAILY_LIMIT">
      <td><code>EXCEED\_DAILY\_LIMIT</code></td>
      <td>Daily limit reached</td>
      <td>**Cause:** The customer's daily spending hit the bank's cap</td>
      <td>Suggest retrying tomorrow or using another card.</td>
    </tr>

    <tr id="INITIATE_AUTHENTICATION_FAILED">
      <td><code>INITIATE\_AUTHENTICATION\_FAILED</code></td>
      <td>Verification could not start</td>
      <td>**Cause:** Couldn't start bank verification with this card number</td>
      <td>Ask the customer to recheck the card number.</td>
    </tr>

    <tr id="USER_CPF_INVALID">
      <td><code>USER\_CPF\_INVALID</code></td>
      <td>Brazilian Tax ID (CPF) invalid</td>
      <td>**Cause:** The Brazilian Tax ID the customer entered is malformed or doesn't exist</td>
      <td>Ask them to correct it.</td>
    </tr>

    <tr id="CREATE_ORDER_EXPIRED_TOKEN">
      <td><code>CREATE\_ORDER\_EXPIRED\_TOKEN</code></td>
      <td>Checkout page expired</td>
      <td>**Cause:** The customer took too long on the checkout page</td>
      <td>Ask them to start a new checkout.</td>
    </tr>
  </tbody>
</table>

<a id="customer-needs-a-new-payment-method" />

## Customer needs a new payment method

*This card can't be used. Ask the customer to use a different card or payment method.*

<table>
  <thead>
    <tr>
      <th>Code</th>
      <th>Meaning</th>
      <th>Why it failed</th>
      <th>Recommended action</th>
    </tr>
  </thead>

  <tbody>
    <tr id="CARD_ABNORMAL">
      <td><code>CARD\_ABNORMAL</code></td>
      <td>Card in abnormal status</td>
      <td>**Cause:** The customer's card has been reported lost or frozen</td>
      <td>Ask them to use another payment method.</td>
    </tr>

    <tr id="CARD_ABNORMAL_CLOSED">
      <td><code>CARD\_ABNORMAL\_CLOSED</code></td>
      <td>Bank account closed</td>
      <td>**Cause:** The customer's bank account is closed</td>
      <td>Ask them to use another payment method.</td>
    </tr>

    <tr id="CARD_ABNORMAL_CLOSED_FROMACCOUNT">
      <td><code>CARD\_ABNORMAL\_CLOSED\_FROMACCOUNT</code></td>
      <td>Source account closed</td>
      <td>**Cause:** The funding account linked to the customer's card is closed</td>
      <td>Ask them to use another method.</td>
    </tr>

    <tr id="CARD_ABNORMAL_EXPIRED">
      <td><code>CARD\_ABNORMAL\_EXPIRED</code></td>
      <td>Card expired</td>
      <td>**Cause:** The customer's card has expired</td>
      <td>Ask them to update it or use a different card.</td>
    </tr>

    <tr id="CARD_ABNORMAL_FRAUD">
      <td><code>CARD\_ABNORMAL\_FRAUD</code></td>
      <td>Issuer flagged as fraud</td>
      <td>**Cause:** The customer's bank blocked this on fraud suspicion</td>
      <td>Ask them to contact the bank or use another card.</td>
    </tr>

    <tr id="CARD_ABNORMAL_ISSUER">
      <td><code>CARD\_ABNORMAL\_ISSUER</code></td>
      <td>Issuer not registered</td>
      <td>**Cause:** The customer's bank isn't registered with the card network</td>
      <td>Ask them to use a different card.</td>
    </tr>

    <tr id="CARD_ABNORMAL_LOST">
      <td><code>CARD\_ABNORMAL\_LOST</code></td>
      <td>Card reported lost</td>
      <td>**Cause:** The customer's card was reported lost</td>
      <td>Ask them to use another payment method.</td>
    </tr>

    <tr id="CARD_ABNORMAL_NOCREDIT">
      <td><code>CARD\_ABNORMAL\_NOCREDIT</code></td>
      <td>No linked credit account</td>
      <td>**Cause:** Couldn't find a credit account tied to the customer's card</td>
      <td>Ask them to verify or use another card.</td>
    </tr>

    <tr id="CARD_ABNORMAL_STOLEN">
      <td><code>CARD\_ABNORMAL\_STOLEN</code></td>
      <td>Card reported stolen</td>
      <td>**Cause:** The customer's card has been reported lost or stolen</td>
      <td>Ask them to use another payment method.</td>
    </tr>

    <tr id="CARD_BANK_REJECT_BLOCK">
      <td><code>CARD\_BANK\_REJECT\_BLOCK</code></td>
      <td>Bank account blocked</td>
      <td>**Cause:** The customer's bank account is frozen</td>
      <td>Ask them to use another method or contact the bank.</td>
    </tr>

    <tr id="CARD_BANK_REJECT_FRAUD">
      <td><code>CARD\_BANK\_REJECT\_FRAUD</code></td>
      <td>Bank blocked for fraud</td>
      <td>**Cause:** The customer's bank flagged this transaction as fraud and blocked it</td>
      <td>Ask them to use another method.</td>
    </tr>

    <tr id="CARD_BANK_REJECT_LAW">
      <td><code>CARD\_BANK\_REJECT\_LAW</code></td>
      <td>Account restricted by law</td>
      <td>**Cause:** The customer's account is legally restricted from transactions</td>
      <td>Ask them to use another method.</td>
    </tr>

    <tr id="CARD_BANK_REJECT_REVOKEALL_ACCOUNT">
      <td><code>CARD\_BANK\_REJECT\_REVOKEALL\_ACCOUNT</code></td>
      <td>Account access revoked</td>
      <td>**Cause:** The customer's account access has been fully revoked</td>
      <td>Ask them to use another method.</td>
    </tr>

    <tr id="CARD_INSUFFICIENT_BALANCE">
      <td><code>CARD\_INSUFFICIENT\_BALANCE</code></td>
      <td>Insufficient funds</td>
      <td>**Cause:** The customer's card doesn't have enough funds</td>
      <td>Ask them to top up or use another card.</td>
    </tr>

    <tr id="CARD_INVALID_TRANSACTION">
      <td><code>CARD\_INVALID\_TRANSACTION</code></td>
      <td>Card type not supported</td>
      <td>**Cause:** The customer's card doesn't support this transaction type</td>
      <td>Ask them to use a different card.</td>
    </tr>

    <tr id="CARD_PAYMENT_RETRY_LIMIT">
      <td><code>CARD\_PAYMENT\_RETRY\_LIMIT</code></td>
      <td>Retry limit reached</td>
      <td>**Cause:** Too many failed attempts on this card; the network has blocked further retries</td>
      <td>Ask the customer to use a different card.</td>
    </tr>

    <tr id="CARD_ABNORMAL_NOCHECKING">
      <td><code>CARD\_ABNORMAL\_NOCHECKING</code></td>
      <td>Card couldn't be verified</td>
      <td>**Cause:** The issuer flagged the customer's card as abnormal and couldn't verify it</td>
      <td>Ask them to use another card.</td>
    </tr>

    <tr id="CARD_ABNORMAL_RESTRICTED">
      <td><code>CARD\_ABNORMAL\_RESTRICTED</code></td>
      <td>Card restricted in this region</td>
      <td>**Cause:** The customer's card is restricted or locked in this region</td>
      <td>Ask them to use another method.</td>
    </tr>

    <tr id="CARD_NOTALLOWED_TXN">
      <td><code>CARD\_NOTALLOWED\_TXN</code></td>
      <td>Transaction type not allowed</td>
      <td>**Cause:** The issuer prohibits this transaction type on this card (e.g. cross-border)</td>
      <td>Ask the customer to use a different card.</td>
    </tr>

    <tr id="PAYMENT_REJECTION">
      <td><code>PAYMENT\_REJECTION</code></td>
      <td>Blocked by Waffo risk</td>
      <td>**Cause:** This transaction was blocked by Waffo's risk rules</td>
      <td>Contact support if you think this is wrong.</td>
    </tr>

    <tr id="PAYMENT_CHANNEL_REJECTION">
      <td><code>PAYMENT\_CHANNEL\_REJECTION</code></td>
      <td>Payment rejected</td>
      <td>**Cause:** The payment service rejected this transaction on its own risk rules</td>
      <td>Ask the customer to use another method.</td>
    </tr>

    <tr id="PAYMENT_CHANNEL_REJECTION__mit_unverified">
      <td><code>PAYMENT\_CHANNEL\_REJECTION</code></td>
      <td>Subscription charge rejected</td>
      <td>**Cause:** The saved payment method for this subscription has not been verified</td>
      <td>Ask the customer to verify it in the customer portal.</td>
    </tr>

    <tr id="PAYMENT_CHANNEL_REJECTION__mit_card_expired">
      <td><code>PAYMENT\_CHANNEL\_REJECTION</code></td>
      <td>Subscription charge failed: card expired</td>
      <td>**Cause:** The card on file for this subscription has expired</td>
      <td>Ask the customer to update it in the customer portal.</td>
    </tr>

    <tr id="PAYMENT_CHANNEL_REJECTION__invalid_mobile">
      <td><code>PAYMENT\_CHANNEL\_REJECTION</code></td>
      <td>Invalid mobile number</td>
      <td>**Cause:** The customer's mobile number format is invalid</td>
      <td>Ask them to correct it.</td>
    </tr>

    <tr id="CREATE_ORDER_FAILED">
      <td><code>CREATE\_ORDER\_FAILED</code></td>
      <td>Payment service under maintenance</td>
      <td>**Cause:** The payment service is undergoing maintenance</td>
      <td>Ask the customer to retry later.</td>
    </tr>

    <tr id="CREATE_ORDER_FAILED__channel_rejected">
      <td><code>CREATE\_ORDER\_FAILED</code></td>
      <td>Payment service declined</td>
      <td>**Cause:** The payment service rejected this transaction on its own risk rules</td>
      <td>Ask the customer to use another method.</td>
    </tr>
  </tbody>
</table>

<a id="transient-issues-retry-later" />

## Transient issues — retry later

*A temporary glitch in the bank, card network, or payment service. The customer can usually retry in a few minutes.*

<table>
  <thead>
    <tr>
      <th>Code</th>
      <th>Meaning</th>
      <th>Why it failed</th>
      <th>Recommended action</th>
    </tr>
  </thead>

  <tbody>
    <tr id="CARD_AUTHENTICATION_ERROR">
      <td><code>CARD\_AUTHENTICATION\_ERROR</code></td>
      <td>Verification protocol error</td>
      <td>**Cause:** A protocol or communication issue occurred during verification</td>
      <td>Ask the customer to retry shortly.</td>
    </tr>

    <tr id="CARD_BANK_REJECT_REVOKE_SINGLE">
      <td><code>CARD\_BANK\_REJECT\_REVOKE\_SINGLE</code></td>
      <td>Bank revoked this transaction</td>
      <td>**Cause:** The customer's bank revoked this specific authorization</td>
      <td>Ask them to retry.</td>
    </tr>

    <tr id="CARD_BANK_REJECT_SECURITY">
      <td><code>CARD\_BANK\_REJECT\_SECURITY</code></td>
      <td>Blocked by bank security</td>
      <td>**Cause:** The customer's bank blocked this for security</td>
      <td>Ask them to retry later or contact the bank.</td>
    </tr>

    <tr id="CARD_COUNTOVERLIMIT">
      <td><code>CARD\_COUNTOVERLIMIT</code></td>
      <td>Too many attempts</td>
      <td>**Cause:** The customer's card has hit a frequency limit</td>
      <td>Ask them to retry later.</td>
    </tr>

    <tr id="ISSUE_BANK_DECLINE">
      <td><code>ISSUE\_BANK\_DECLINE</code></td>
      <td>Issuer declined (no reason)</td>
      <td>**Cause:** The customer's bank declined without specifying why</td>
      <td>Ask them to retry later.</td>
    </tr>

    <tr id="RISK_TRANSACTION_LIMIT">
      <td><code>RISK\_TRANSACTION\_LIMIT</code></td>
      <td>Waffo risk control triggered</td>
      <td>**Cause:** Waffo's amount or velocity rules blocked this transaction</td>
      <td>Ask the customer to retry later or use another card.</td>
    </tr>

    <tr id="TIMEOUT_CHANNEL_CLOSE">
      <td><code>TIMEOUT\_CHANNEL\_CLOSE</code></td>
      <td>Payment service timed out</td>
      <td>**Cause:** The payment service didn't respond in time, so this attempt was auto-closed</td>
      <td>Ask the customer to retry.</td>
    </tr>

    <tr id="CARD_BANK_REJECT">
      <td><code>CARD\_BANK\_REJECT</code></td>
      <td>Bank declined</td>
      <td>**Cause:** The customer's bank declined this without a specific reason</td>
      <td>Ask them to retry later.</td>
    </tr>

    <tr id="CARD_GENERAL_ERROR">
      <td><code>CARD\_GENERAL\_ERROR</code></td>
      <td>Bank generic error</td>
      <td>**Cause:** The bank returned a non-specific error</td>
      <td>Ask the customer to retry or switch methods.</td>
    </tr>

    <tr id="CARD_ORG_OTHER_ERROR">
      <td><code>CARD\_ORG\_OTHER\_ERROR</code></td>
      <td>Card network error</td>
      <td>**Cause:** The card network (Visa, Mastercard, etc.) returned an internal error</td>
      <td>Ask the customer to retry.</td>
    </tr>

    <tr id="CARD_SYSTEMERROR">
      <td><code>CARD\_SYSTEMERROR</code></td>
      <td>Bank temporarily down</td>
      <td>**Cause:** The customer's bank is having transient issues</td>
      <td>Ask them to retry shortly.</td>
    </tr>

    <tr id="CREATE_ORDER_ERROR">
      <td><code>CREATE\_ORDER\_ERROR</code></td>
      <td>Payment initiation timed out</td>
      <td>**Cause:** Network timeout when creating the transaction</td>
      <td>Ask the customer to retry.</td>
    </tr>

    <tr id="PAYMENT_CHANNEL_ERROR">
      <td><code>PAYMENT\_CHANNEL\_ERROR</code></td>
      <td>Payment service communication error</td>
      <td>**Cause:** An unexpected error occurred communicating with the payment service</td>
      <td>Ask the customer to retry.</td>
    </tr>

    <tr id="PAYMENT_CHANNEL_ERROR__network">
      <td><code>PAYMENT\_CHANNEL\_ERROR</code></td>
      <td>Payment service network error</td>
      <td>**Cause:** The network connection to the payment service failed</td>
      <td>Ask the customer to retry.</td>
    </tr>

    <tr id="PAYMENT_CHANNEL_ERROR__communication">
      <td><code>PAYMENT\_CHANNEL\_ERROR</code></td>
      <td>Payment service communication error</td>
      <td>**Cause:** An unexpected error occurred communicating with the payment service</td>
      <td>Ask the customer to retry.</td>
    </tr>

    <tr id="PAYMENT_CHANNEL_ERROR__unexpected_response">
      <td><code>PAYMENT\_CHANNEL\_ERROR</code></td>
      <td>Unexpected payment service response</td>
      <td>**Cause:** The payment service returned an unparseable response</td>
      <td>Ask the customer to retry.</td>
    </tr>

    <tr id="PAYMENT_FAILED">
      <td><code>PAYMENT\_FAILED</code></td>
      <td>Payment failed</td>
      <td>**Cause:** See the transaction detail for the specific reason</td>
      <td>Contact support if unclear.</td>
    </tr>

    <tr id="PAYMENT_FAILED__user_abandoned">
      <td><code>PAYMENT\_FAILED</code></td>
      <td>Customer abandoned checkout</td>
      <td>**Cause:** The customer left the checkout page without finishing</td>
      <td>Reach out if you want to recover the sale.</td>
    </tr>

    <tr id="PAYMENT_FAILED__callback_failed">
      <td><code>PAYMENT\_FAILED</code></td>
      <td>Payment service notification failed</td>
      <td>**Cause:** The payment may have succeeded but the notification didn't arrive</td>
      <td>Check the order status again later.</td>
    </tr>

    <tr id="PAYMENT_FAILED__unspecified">
      <td><code>PAYMENT\_FAILED</code></td>
      <td>Payment service error</td>
      <td>**Cause:** The payment service didn't give specific details</td>
      <td>Ask the customer to retry or switch methods.</td>
    </tr>

    <tr id="SYSTEM_ERROR">
      <td><code>SYSTEM\_ERROR</code></td>
      <td>Internal system error</td>
      <td>**Cause:** A transient internal error in Waffo</td>
      <td>Ask the customer to retry; contact support if persistent.</td>
    </tr>

    <tr id="UNKNOWN_ERROR">
      <td><code>UNKNOWN\_ERROR</code></td>
      <td>Unknown error</td>
      <td>**Cause:** An undefined exception occurred</td>
      <td>Ask the customer to retry; contact support if it keeps happening.</td>
    </tr>

    <tr id="UNSPECIFIED_PAYMENT_FAILURE">
      <td><code>UNSPECIFIED\_PAYMENT\_FAILURE</code></td>
      <td>Payment failed (no specific reason)</td>
      <td>**Cause:** The bank or payment service didn't give a specific reason</td>
      <td>Ask the customer to try another method.</td>
    </tr>
  </tbody>
</table>

<a id="terminal-no-action-available" />

## Terminal — no action available

*The payment never went through and the transaction is closed. No remediation is possible; you can still reach out to the customer if you want to recover the sale.*

<table>
  <thead>
    <tr>
      <th>Code</th>
      <th>Meaning</th>
      <th>Why it failed</th>
      <th>Recommended action</th>
    </tr>
  </thead>

  <tbody>
    <tr id="CANCEL_CLOSE">
      <td><code>CANCEL\_CLOSE</code></td>
      <td>Order closed</td>
      <td>**Cause:** This order was closed</td>
      <td>No action needed.</td>
    </tr>

    <tr id="TIMEOUT_CLOSE">
      <td><code>TIMEOUT\_CLOSE</code></td>
      <td>Customer payment timeout</td>
      <td>**Cause:** The customer didn't pay in time and the order was closed</td>
      <td>Send a new payment link if needed.</td>
    </tr>

    <tr id="USER_CANCEL_CLOSE">
      <td><code>USER\_CANCEL\_CLOSE</code></td>
      <td>Customer canceled</td>
      <td>**Cause:** The customer canceled this order</td>
      <td>Reach out if you want to recover the sale.</td>
    </tr>

    <tr id="CARD_CARDHOLDER_REJECT">
      <td><code>CARD\_CARDHOLDER\_REJECT</code></td>
      <td>Customer declined at bank</td>
      <td>**Cause:** The customer canceled the payment at their bank</td>
      <td>Reach out if you want to recover the sale.</td>
    </tr>

    <tr id="MERCHANT_ORDER_TIMEOUT">
      <td><code>MERCHANT\_ORDER\_TIMEOUT</code></td>
      <td>Order expired</td>
      <td>**Cause:** The order's expiration passed without payment and was auto-closed</td>
      <td>Send a new payment link if needed.</td>
    </tr>
  </tbody>
</table>

<a id="other" />

## Other

*Bank-side duplicate detection.*

<table>
  <thead>
    <tr>
      <th>Code</th>
      <th>Meaning</th>
      <th>Why it failed</th>
      <th>Recommended action</th>
    </tr>
  </thead>

  <tbody>
    <tr id="CARD_BANK_REJECT_DUPLICATE">
      <td><code>CARD\_BANK\_REJECT\_DUPLICATE</code></td>
      <td>Duplicate transaction</td>
      <td>**Cause:** The bank detected this as a duplicate and blocked it to prevent double-charging</td>
      <td>The customer should contact the bank if it isn't.</td>
    </tr>
  </tbody>
</table>
