Short answer
Show the customer a plain message that the bank declined the card and ask them to contact the bank or try another card. In the Dashboard, check the payment’s CVC and address checks and the advice code. Don’t retry the same card in a loop, because card networks limit how often one charge can be retried.
Rather not fix it yourself? Stripe Billing Fix and Setup handles it at a fixed price, agreed before work starts.
What do_not_honor means, and what to do
01
The bank gave no reason
“The card was declined for an unknown reason.” Stripe, Decline codes (do_not_honor)
do_not_honor works like generic_decline. The issuer said no and didn’t say why.
02
Only the customer can get the reason
“The customer needs to contact their card issuer for more information.” Stripe, Decline codes (do_not_honor)
Banks don’t explain declines to the merchant. Tell the customer to call the number on the back of the card, then try again once the bank clears it.
03
Check CVC and address results first
“For example, if CVC or Address Verification Service (AVS) checks fail when your customer adds a card, ask your customer to verify both of these details before initiating another charge.” Stripe, Card declines
Open the payment in the Dashboard. If the CVC or postal code check failed, the customer may have typed a detail wrong, and fixing it may be enough.
04
Read the advice code before retrying
The decline code arrives on the error as decline_code. The charge behind it, the PaymentIntent’s latest_charge, can also carry an advice_code: do_not_try_again means stop charging that card for this payment, and try_again_later means a retry can work.
// after a failed confirm console.log(err.decline_code); // 'do_not_honor' const pi = await stripe.paymentIntents.retrieve(paymentIntentId); const charge = await stripe.charges.retrieve(pi.latest_charge); console.log(charge.outcome?.advice_code); // e.g. 'try_again_later'05
Retrying renewals too often
“Stripe recommends a maximum of eight retries for charges that permit retries.” Stripe, Card declines
For subscriptions, let Smart Retries or a set retry schedule handle it, and email the customer to update the card.
Checked against the vendor’s docs on : Stripe docs: Decline codes; Stripe docs: Card declines.
Rather hand it over?
Fixed scope, fixed price, paid upfront. The work happens in writing; no call needed.
- $950Stripe Billing Fix and SetupSubscriptions, webhooks, customer portal and failed payments set up or fixed, tested in Stripe test mode.See scope and start
- from $450App Fix TicketOne reproducible bug in an existing mobile or web app, diagnosed and fixed.See scope and start
- from $450AI-Built App RescueA Lovable, Bolt or Cursor app checked end to end in 3 days, then its worst problems fixed at a fixed price.No issues worth fixing, no charge. If the Launch Check finds nothing rated medium or higher, Simon refunds the full $450. You keep the report either way. This applies to the first 10 Launch Checks bought after October 30, 2026.See scope and start
“Working with Simon makes everything run so smoothly and better than I could ask for it. Amazingly communicative, extremely knowledgeable of coding and the backend processes. I strongly recommend.”
Related: Stripe incorrect_cvc · Stripe card declined (generic_decline) · Stripe insufficient_funds · Stripe authentication_required decline