DunningKit

← All decline codes · Articles

Stripe decline code: do_not_honor

Do not honor — The issuer chose not to authorize the charge. This is the most common 'soft' issuer decline.

Common cause

Issuer-side block, often related to risk scoring on the cardholder or the merchant.

Recovery strategy

Retry strategyRetry after a delay
Customer-facing actionAsk customer to contact their issuer
Recovery rate (retry only)~30%
Recovery rate (with customer flow)~50%

What to do, in order

Retry at +24h and +7d. Customer-side resolution: have the cardholder call the issuer's number on the back of the card to authorize. Surprisingly effective for high-value B2B customers.

Code example

The recommended Stripe Customer Portal session for the recovery flow:

session = stripe.billing_portal.Session.create(
    customer=customer_id,
    return_url="https://yourapp.com/billing/thanks",
    flow_data={"type": "payment_method_update"},
)
update_link = session.url

Where this fits in the bigger picture

do_not_honor is one of dozens of decline codes Stripe returns; recovery rates vary by code by 5x or more. The recovery-rate reference covers the full set; the card-update flow article covers the customer-facing side; dunning emails covers how to write the messages.

DunningKit's open-source CLI parses your Stripe failed-charges CSV and gives you the breakdown by code, with recoverable-revenue estimates. pip install dunningkit.

Notify me when v0.1 ships: