The short answer
When your processor sends an authorization request to the issuing bank and the bank refuses, the refusal comes back with a decline code — a short alphanumeric identifier like "05," "51," "R0," or "CURRENCY_NOT_SUPPORTED." The code tells you why the bank said no. Some codes mean "this specific attempt failed, but retrying later or with different data might work" (soft decline). Others mean "never charge this card again" (hard decline). Treating them the same is the most expensive mistake in subscription billing.
The three families
- Soft declines (retriable). Temporary issues — insufficient funds, generic "do not honor," bank-side network blip, velocity limit, issuer rate-limit. Retrying the same card in 24-72 hours often succeeds.
- Hard declines (terminal). Card is closed, stolen, lost, expired with no updater, or the bank has permanently refused the merchant. Retrying wastes money (each retry costs you in auth fees and increases your velocity exposure).
- Fraud-flag declines. Bank thinks the transaction is fraudulent. Retrying without customer intervention escalates the fraud score. Route these to a customer-facing recovery flow (update card, verify identity).
The most common codes and what they mean
- 05 — Do not honor. The catch-all soft decline. Bank refused without specifying a reason. Retry in 24-72 hours. ~40% recovery rate.
- 51 — Insufficient funds. Soft. Retry in 3-5 days around typical paycheck dates. Highest recovery of any code.
- 54 — Expired card. Hard, but recoverable via account updater or customer update prompt. Retrying the same expired card never works.
- 57 — Transaction not permitted to cardholder. Hard. Card-type restriction. Don't retry.
- 61 — Activity amount limit exceeded. Soft. Customer hit daily spending limit. Retry next day.
- 62 — Restricted card. Usually hard — card is restricted from the MCC or geography. Investigate before retrying.
- 65 — Activity count limit exceeded. Soft. Customer hit daily transaction limit. Retry next day.
- 91 — Issuer unavailable. Soft — network or issuer system down. Retry in 5-30 minutes.
- R0/R1 — Stop payment order (recurring). Hard. Customer told their bank to block your charges. Never retry; contact the customer.
- N7 — CVV/CVC failure. Soft, but implies the customer has the wrong data. Prompt for updated card rather than blind retry.
- 14 — Invalid card number. Hard. Customer typed wrong card number. Prompt for correction.
- 41 — Lost card, capture. Hard. Card reported lost. Never retry.
- 43 — Stolen card, capture. Hard. Card reported stolen. Never retry.
What operators need to know
- Build retry logic off the code family, not the amount. A soft-decline retry at $80 is free money; a hard-decline retry at $80 is velocity risk. Classify first, retry second.
- Subscription businesses live and die on code handling. Industry benchmark: good decline handling recovers 35-45% of failed payments; bad handling recovers under 15%. The delta is your churn rate.
- Network-level retries burn quota. Visa and Mastercard impose retry caps (15 retries per card per year on Mastercard). Hard-decline retries count against the cap without ever succeeding.
- Use account updater for the hard-but-recoverable codes. "54 expired" and "14 invalid" are solved by running account updater, not by retrying.
- Log the decline code everywhere. Your dunning emails, your customer support view, and your analytics should all surface the code — not just "payment failed."
Why multi-brand operators care
Portfolios with multiple recurring-billing brands benefit from a centralized decline-code handling layer — one retry policy, one account updater integration, one dunning sequence. multiflow exposes the normalized decline code across every processor you're routed through, so your retry logic works the same whether the transaction cleared through Stripe, NMI, or an offshore acquirer. See soft decline vs hard decline and account updater.