Stripe Decline Code · Glossary
do_not_honor is the most common and most ambiguous decline code in all of payment processing — the customer's issuing bank has flat-out refused the transaction without telling you, Stripe, or even the customer exactly why.
What It Means
What It Means
do_not_honor is the most common and most ambiguous decline code in all of payment processing — the customer's issuing bank has flat-out refused the transaction without telling you, Stripe, or even the customer exactly why. It's essentially the bank's way of saying "no" without explanation, and it accounts for an estimated 20–30% of all card declines across the payments industry.
Not sure if this code is recoverable for your specific situation? Use the Stripe Failure Lookup →
Why It Happens
Why It Happens
What NOT to Do
What NOT to Do
✕ Don't retry immediately — this is NOT a soft decline by default
Unlike insufficient_funds, do_not_honor leans closer to a hard decline behavior. Retrying within the same hour or same day almost never succeeds and can burn your relationship with the issuer. Retrying more than twice without the customer contacting their bank first can also forfeit your chargeback reversal rights on future disputes.
✕ Don't assume it's a card data problem and ask for a new card number
do_not_honor doesn't mean the card number is wrong. Sending a "please update your payment method" email without context frustrates customers who have a perfectly valid card — and tanks your email engagement rates for future dunning sequences.
✕ Don't leave it fully to automation
Because the root cause is unknown, a fully automated retry-only approach underperforms significantly. This code demands a customer-action step — specifically, contacting their bank — before any retry makes sense.
Retry Timing
Retry Timing
| Attempt | Timing | Rationale |
|---|---|---|
| Immediate | Day 0 | Send empathetic email asking customer to contact their bank — no retry yet |
| Retry 1 | 24–48 hours after failure | Single retry only if customer confirms bank contact |
| Retry 2 | 5–7 days after failure | If Retry 1 fails, one final attempt — otherwise prompt alternate payment method |
| Escalation | Day 7+ | Offer alternate payment method (new card, PayPal, bank transfer, UPI) |
Key rule: Maximum 2 retries for do_not_honor. Beyond that, the conversion probability drops below 10% and you risk the issuer flagging your merchant ID.
do_not_honor requires a bank-contact-first approach before any retry logic kicks in.
Smart signal: If the customer is high-tenure and this is their first do_not_honor, it's likely a temporary bank flag — a personal outreach email resolves ~25% of these. If it's a new customer's first charge, fraud probability is higher; weight toward asking for an alternate payment method instead of retrying.
Recovery Benchmark
Recovery Benchmark
| Metric | Result |
|---|---|
| Overall recovery rate | 20–35% with smart handling |
| Recovery with customer bank contact | ~40–50% (when customer acts) |
| Recovery via alternate payment method offer | +15–20% lift |
| Recovery with immediate blind retry only | ~8–12% (worst practice) |
| Share of all card declines | ~20–30% of all declines |
Given the ambiguity of the code, a 30–35% overall recovery rate is considered strong. The biggest lever is your customer communication — how clearly and quickly you guide them to either call their bank or switch payment method determines most of your recovery outcome.
At Scale
At Scale
Automated
Manual Escalation
FAQs
FAQs
What does the Stripe do_not_honor decline code mean?
The do_not_honor decline code means the customer's issuing bank has refused the transaction without providing a specific reason. It is a generic bank-side refusal that can mask several underlying issues including suspected fraud, insufficient funds, card restrictions, or account-level problems.
Why does Stripe show do_not_honor instead of a specific reason?
Stripe receives the do_not_honor code directly from the card-issuing bank. The bank deliberately withholds the specific reason, which can include suspected fraud, spending limits, a locked card, or an account under review. Stripe cannot access more detail beyond what the bank shares.
Should I retry a payment after a do_not_honor decline?
Not immediately. do_not_honor should be treated as a near-hard decline. Wait at least 24 hours, and only retry after the customer has contacted their bank. Limit retries to a maximum of 2 attempts — if both fail, prompt the customer to use an alternate payment method.
What are the most common causes of a do_not_honor decline?
Common causes include the bank flagging the transaction as suspicious, insufficient funds that the bank masks with a generic code, a frozen or restricted card, account-level issues like an overdue balance, or incorrect card details triggering a bank-side silent rejection.
What should I tell my customer when their payment shows do_not_honor?
Ask them to call their card-issuing bank and provide: the charge amount, the date and time of the attempted transaction, and your company name. The bank can identify and often resolve the internal block on their end. Do not ask the customer to update their card number — the card itself is typically valid.
What to do next
You are here
do_not_honor
Decline code reference
Check recoverability
Stripe Failure Lookup
See what's recoverable — and what isn't →
Then
Sign up for Recurflux
Automate recovery for every decline code →
Before you retry
Before you retry
Most do_not_honor failures are retried on the wrong schedule — which recovers the payment about 30% of the time. The other 70% leaves permanently. See what this code is actually costing at your MRR before deciding how to handle it.
Stop leaving revenue on the table
Recurflux handles code-specific retry scheduling, adaptive dunning, and dispute intelligence across all 30 Stripe decline codes. Connect in under 5 minutes.