Reference
Card decline codes explained: what each one means and what to do
When a card payment fails, the issuing bank returns a decline code. The code decides the right next step: retry later, ask the customer to act, or stop retrying altogether. Retrying the wrong codes wastes attempts and can cost you network fees; not retrying the right ones leaves money on the table.
Soft vs hard declines
Soft declines are temporary: the card is fine but the payment could not go through right now (low balance, issuer outage, velocity limit). They often succeed on a later retry. Hard declines mean the card itself cannot be charged (lost, stolen, closed, invalid number). Retrying them will not work and card networks restrict repeated attempts, so the only fix is a new payment method from the customer.
Soft declines: retry later
Temporary problems with the bank or the account. A well-timed retry often succeeds without the customer doing anything.
| Code | Meaning | Retry? |
|---|---|---|
insufficient_funds | Insufficient funds | Yes, after a few days |
card_velocity_exceeded | Card velocity exceeded | Yes, after the limit resets |
withdrawal_count_limit_exceeded | Withdrawal count limit exceeded | Yes, after a few days |
processing_error | Processing error | Yes, soon |
issuer_not_available | Issuer not available | Yes, soon |
reenter_transaction | Re-enter transaction | Yes |
try_again_later | Try again later | Yes, later |
approve_with_id | Approve with ID | Once, then contact the customer |
duplicate_transaction | Duplicate transaction | Check first |
Needs the customer: contact the bank or confirm details
The issuer refused for a reason only the cardholder can clear up. Retries rarely help until the customer acts, so reach them quickly.
| Code | Meaning | Retry? |
|---|---|---|
do_not_honor | Do not honor | Rarely helps on its own |
generic_decline | Generic decline | Once or twice, spaced out |
card_declined | Card declined | Depends on the decline_code |
currency_not_supported | Currency not supported | No |
authentication_required | Authentication required | Not without the customer |
call_issuer | Call issuer | Not until the customer calls |
transaction_not_allowed | Transaction not allowed | No |
not_permitted | Not permitted | No |
service_not_allowed | Service not allowed | No |
incorrect_cvc | Incorrect CVC | Only with the correct CVC |
incorrect_number | Incorrect card number | Only with the correct number |
incorrect_zip | Incorrect postal code | Only with the correct postal code |
invalid_cvc | Invalid CVC | Only with the correct CVC |
invalid_number | Invalid card number | Only with a valid number |
invalid_expiry_month | Invalid expiry month | Only with the correct date |
invalid_expiry_year | Invalid expiry year | Only with the correct date |
invalid_amount | Invalid amount | Only after checking |
Hard declines: get a new payment method
The card can never be charged again. Stop retrying and ask the customer for a different card.
| Code | Meaning | Retry? |
|---|---|---|
expired_card | Expired card | No |
lost_card | Lost card | No |
stolen_card | Stolen card | No |
fraudulent | Suspected fraud | No |
pickup_card | Pick up card | No |
restricted_card | Restricted card | No |
card_not_supported | Card not supported | No |
stop_payment_order | Stop payment order | No |
revocation_of_authorization | Revocation of authorization | No |
revocation_of_all_authorizations | Revocation of all authorizations | No |
invalid_account | Invalid account | No |
new_account_information_available | New account information available | Not the old card |
merchant_blacklist | Merchant block list | No |
Recover failed payments on autopilot
Revnio retries failed payments at the right time and reaches customers by email and WhatsApp until the card is fixed. Works with Stripe, Chargebee and Paddle.