Every failed card payment comes with a decline code. Treating them all the same - retrying everything or emailing everyone - wastes recoveries.
| Code | Meaning | Retry? | Best action |
|---|---|---|---|
| insufficient_funds | Not enough balance or credit | Yes, in a few days | Retry near typical paydays; gentle email |
| generic_decline / do_not_honor | Issuer declined without a reason | Yes, a few times | Retry at a different time; then ask customer to call their bank or use another card |
| try_again_later | Temporary issue | Yes | Automatic retry |
| processing_error | Error on the network side | Yes | Automatic retry |
| expired_card | Card past expiry | No | Card-update email immediately |
| incorrect_cvc / incorrect_number | Wrong details | No | Ask for correct details |
| authentication_required | Bank needs 3-D Secure / OTP | No | Email with a link where the customer authenticates |
| card_not_supported / transaction_not_allowed | Card can't be used for this purchase (e.g. international, recurring) | No | Ask for another card or method |
| lost_card / stolen_card / pickup_card | Card blocked | Never | Ask for a new card; don't mention why |
| revocation_of_authorization | Customer told their bank to stop | Never | Treat as a cancellation; send a respectful win-back |
| highest_risk_level / fraudulent | Fraud filter | Never | Review the account |
Two rules
- Don't retry hard declines (lost, stolen, revoked, fraud). Repeated retries can get your merchant account flagged.
- Say less about why. "Your payment didn't go through" is better than "your bank says your card was stolen".
Writing the email
- Subject: Your [Product] payment didn't go through
- Body: what happened in one line, one button ("Update payment method"), when access ends, a reply-to address.
- Tone: helpful, not threatening.
Paste your decline codes into the free decline decoder to see which of your failed payments are recoverable.