Guide
What do_not_honor actually means
Last updated 28 July 2026 · written by Bruce McGinley, who builds RecoverFlow
do_not_honor means the card was declined for an unknown reason. That is not a summary, it is the whole content of the message. The issuing bank refused and chose not to say why.
Stripe's recommended next step is that the customer contacts their card issuer. It is not one of the nine codes that block retries, so Stripe will keep attempting it, and sometimes those attempts work.
On this page
Why the bank will not tell you
do_not_honor is a catch-all. Issuers use it when they have declined for a reason they do not want to publish to a merchant: a fraud model fired, an internal limit was hit, the account has a flag on it, the transaction looked wrong in a way their system will not itemise.
They are not being obstructive. Telling merchants precisely why a card was refused is a good way to teach card fraudsters what to avoid. The opacity is deliberate and it is not going to change, so the useful question is not what it means but what to do.
It has two close relatives, and they need different handling
| Code | Stripe's description | Stripe's recommended next step |
|---|---|---|
do_not_honor | The card was declined for an unknown reason. | The customer needs to contact their card issuer. |
generic_decline | Declined for an unknown reason, or Stripe Radar or Adaptive Acceptance blocked the payment. | The customer needs to contact their card issuer. |
try_again_later | The card was declined for an unknown reason. | Ask the customer to attempt the payment again. If subsequent payments are declined, they need to contact their issuer. |
The one to separate out is generic_decline, because it has a second meaning the others do not: it can be Stripe's own Radar blocking the payment rather than the bank. If you are seeing a lot of generic_decline on renewals for customers who have paid you happily for a year, look at your Radar rules before you write a single dunning email. That is not a customer problem.
try_again_later is the only one of the three where Stripe explicitly suggests simply trying again, which makes it the mildest of the group.
Is it worth retrying?
Yes, and you do not have to do anything to make that happen. do_not_honor is not on the list of nine codes that stop Stripe executing retries, so Smart Retries will work through its schedule normally.
Whether those retries succeed is genuinely unpredictable. The underlying cause might be a temporary hold that clears in a day, or a permanent block that will never clear. From outside the bank these look identical, which is the central frustration of this code.
The one signal you have: a customer whose payments have succeeded for months and now returns do_not_honor is a different case from a brand new customer whose first payment returns it. The first is worth patient retries. The second is often a card that was never going to work, and the 23 hour window on incomplete subscriptions means you do not have long to find out.
What to write to the customer
Do not paste the code into the email. "Your payment was declined with do_not_honor" tells the customer nothing they can act on and makes you sound like a log file.
The message that works says three things: the payment did not go through, you do not know why because the bank did not say, and the two things that usually fix it are trying a different card or calling the number on the back of the current one. That last part is Stripe's own recommended next step and it is the only genuinely useful instruction available.
Unlike the lost and stolen codes, there is no security reason to be vague here. You can be completely straight about not knowing, and being straight tends to read better than a vague apology. The dunning email generator on this site produces reason-aware copy including this case.
Questions people actually ask
What does do_not_honor mean on Stripe?
It means the card was declined for an unknown reason. The issuing bank refused the charge and did not provide a reason. Stripe's recommended next step is for the customer to contact their card issuer.
Is do_not_honor a hard decline?
Not in the sense that matters on Stripe. It is not one of the nine decline codes that stop Stripe executing retries, so retries proceed normally on the usual schedule. Whether they succeed depends on a cause the bank will not disclose.
What is the difference between do_not_honor and generic_decline?
Both mean an unknown decline, but generic_decline can also indicate that Stripe Radar or Adaptive Acceptance blocked the payment rather than the bank. A cluster of generic_decline on long-standing customers is a reason to review your Radar rules.
How do I fix a do_not_honor decline?
You cannot fix it from your side. The customer either uses a different payment method or contacts their card issuer. Both are worth offering in the same email, because some customers will do one and not the other.
Should I keep retrying do_not_honor?
Stripe will, by default, and that is reasonable. Some causes are temporary holds that clear. The judgement call is when to stop treating it as a retry problem and start treating it as a conversation, which for an established customer is usually after the schedule has had a fair run.
Where this came from
Checked against primary sources on 28 July 2026. If Stripe changes something and this page has not caught up, tell us and it gets fixed.
- Stripe: Decline codes reference
- Stripe: Smart Retries — the source for the 8 tries in 2 weeks default, the configurable window, and the nine code list.
- Stripe: Declines
If you would rather not build this yourself
RecoverFlow watches your Stripe account for failed subscription payments, stops retrying the ones that cannot succeed, and emails the customers whose card simply needs replacing. It charges 25% of what it actually recovers, with a $29 monthly floor, and nothing at all if it recovers nothing.
It is early. It is run by one person. If Stripe's own free retry settings are enough for you, use those instead, and there is a page on this site that says exactly when that is the right call.
See how the pricing works
Recover