Stripe decline code: do_not_honor
Stripe's wording is exact and deliberately unhelpful: "The card was declined for an unknown reason." The issuer refused the payment and disclosed nothing about why, and Stripe cannot tell you more than the issuer told it.
do_not_honorHard decline
Retrying the same request will fail the same way.
What it means
This is Stripe's rendering of the issuer's do-not-honour response — ISO 8583 field 39 value 05, the generic decline of card processing. Stripe's documented next step is that "the customer needs to contact their card issuer for more information", and that is not a brush-off: the issuer is the only party that knows the reason. It withholds it from Stripe, from you, and from anyone testing cards to find which ones are live.
Common causes
- The issuer's fraud or risk model scored the transaction badly — an unfamiliar merchant, an unusual amount, a new country or device.
- An account restriction the issuer will not describe: ecommerce or international use disabled, a card not yet activated, a compromise hold.
- Weak transaction data — no 3-D Secure, no AVS, no CVC result — pushing a marginal transaction the wrong way.
- A specific condition the issuer generalised rather than reporting precisely.
How to fix it
- Ask the customer to contact their issuer, which is what Stripe's own documentation prescribes.
- Offer another payment method rather than retrying the same card. An identical retry usually returns the same decline and counts against the card's velocity limits.
- Enable 3-D Secure and pass AVS and CVC where you can. Richer data is the one lever the merchant genuinely controls.
- If it spikes across many cards at once, investigate your own configuration — merchant category code, currency, a new acquirer — rather than the cards.
Tools that help
Frequently asked questions
- How is do_not_honor different from generic_decline?
- Stripe gives both the identical description — "The card was declined for an unknown reason" — and the identical next step. The difference is provenance: `do_not_honor` maps to the issuer's own do-not-honour response, while `generic_decline` also covers payments blocked by Stripe Radar or Adaptive Acceptance before the issuer was involved. If you are seeing `generic_decline`, your own Radar rules are worth checking; with `do_not_honor` they are not implicated.
- Is this the same as ISO 8583 response code 05?
- It is Stripe's name for it, yes. Stripe states that its decline codes expand on issuer decline codes, and `do_not_honor` is the direct counterpart of the field 39 value 05 an issuer returns over the card network.