← Decline Codes
Soft Decline

Stripe Decline Code · Glossary

do_not_honor

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.

Recoverable·20–35% with smart handling·Updated May 2026

What It Means

What do_not_honor actually 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

The root causes.

  • 1Suspected fraud or unusual activityThe bank's risk engine flagged the transaction as out-of-pattern (new merchant, large amount, foreign currency, odd timing)
  • 2Insufficient funds disguisedSome banks, especially prepaid or neobank issuers, return do_not_honor instead of insufficient_funds to avoid revealing balance data
  • 3Card temporarily locked or restrictedCustomer may have a spending limit set, travel block active, or the card is locked via their banking app (e.g., CashApp, Revolut card freeze)
  • 4Account-level issuesOverdue balance, account under review, or the card has been reported lost/stolen without the customer knowing yet
  • 5Incorrect card detailsWrong expiry, CVV, or billing address triggering a silent bank-side rejection before details are even verified

What NOT to Do

Common mistakes that make it worse.

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

Optimal retry schedule.

AttemptTimingRationale
ImmediateDay 0Send empathetic email asking customer to contact their bank — no retry yet
Retry 124–48 hours after failureSingle retry only if customer confirms bank contact
Retry 25–7 days after failureIf Retry 1 fails, one final attempt — otherwise prompt alternate payment method
EscalationDay 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

What good looks like.

MetricResult
Overall recovery rate20–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

How to handle it at scale.

Automated

  • Webhook trigger: On invoice.payment_failed → check failure_code === 'do_not_honor' → tag as "bank-block failure" segment, separate from funds-related failures
  • Email sequence — Day 0: Fire a bank-contact email immediately. Subject: "Quick action needed on your payment" — body explains the bank blocked it and provides the 3 things they need to tell their bank: charge amount, date/time, your company name
  • Retry gate: Do NOT schedule a retry until 24 hours have passed — use a delay node in your automation (n8n, Zapier) to enforce this hard floor
  • Alternate method prompt — Day 3: If no recovery, trigger a payment method update flow — offer card update, PayPal, or regional alternatives

Manual Escalation

  • High-ACV accounts: After Retry 1 fails, route to a human for personal outreach — phone or Slack message works better than email for accounts over your MRR threshold
  • New customers (first charge fails): Flag for manual review before any retry — a first-charge do_not_honor on a new account has higher fraud correlation; verify account legitimacy before retrying
  • Repeat occurrence (same customer, 2nd month): Stop all retries. Offer a permanent payment method switch — the card may be systematically restricted for your merchant category

FAQs

Frequently asked questions.

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.

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.

See what do_not_honor costs me →

Stop leaving revenue on the table

do_not_honor is recoverable. Most teams don't have the retry logic to prove it.

Recurflux handles code-specific retry scheduling, adaptive dunning, and dispute intelligence across all 30 Stripe decline codes. Connect in under 5 minutes.