Resolving `do_not_honor` and Bank Holds: Frictionless SCA & Multi-Channel Recovery

By Palash Sarker, Founder & Software Architect, Revenue Recovery Labs5 min read Verified by RRLabs

The code that explains nothing

`do_not_honor` — ISO response code 05 — is the issuer declining the transaction without telling you why. It is the catch-all bucket for risk decisions, internal limits, unrecognised recurring merchants, travel flags, velocity rules and a dozen other conditions the bank considers none of your business.

Because the reason is hidden, every downstream decision you make is a probability bet rather than a diagnosis. That is uncomfortable, but it has a clear strategic implication: stop trying to fix the current card and start offering a different path.

Recovery on this code sits well below the others, commonly 30-45% within fourteen days. Teams that treat it like insufficient funds — patient retries, reassuring copy about trying again — consistently land at the bottom of that range.

What is usually behind it

The most common real causes, in rough order: an issuer risk rule triggered by a merchant descriptor or country mismatch; a card-level limit on recurring or online transactions; a temporary hold after suspicious activity; a soft block the cardholder can lift with one phone call; and occasionally a genuine account problem.

Notice that several of these are lifted by the cardholder rather than by you. That is unusual among decline codes and it changes what the message must accomplish: it needs to prompt a human action at the bank, not just at your checkout.

It also explains why the same card often succeeds two days later with no change on your side. Some holds simply expire.

Retry policy: two attempts, then change strategy

One retry at roughly 36 hours is worth making, because temporary holds do expire and a modest share of these recover with no intervention at all.

A second retry several days later is defensible on high-value subscriptions. A third is not. Grinding authorisations against an issuer that is actively declining you accumulates failed-authorisation ratios that acquirers and card networks monitor, and in the worst case it degrades approval rates on your healthy traffic.

Set a hard cap in code rather than in a runbook. Cadence limits that live in someone's head are always exceeded during a revenue-pressure week.

Lead with the alternate card

Because you cannot diagnose the block, the fastest reliable fix is a different credential. Say so immediately, in neutral language that assigns no fault: 'Your bank declined the renewal without giving a reason. This is usually a temporary hold — trying a different card is the quickest fix, or your bank can lift it in a two-minute call.'

That sentence does three things at once. It sets accurate expectations, it removes the implication that the customer did something wrong, and it offers two concrete actions with different effort levels.

Put the update-payment-method link as the primary action. Unlike short balances, waiting is not a strategy here, so the passive option should not be the highlighted one.

Where SCA and frictionless authentication help

Some do-not-honor declines on European and UK cards are the issuer signalling that it wants a strong customer authentication challenge rather than refusing outright. Re-presenting the transaction with 3-D Secure — where your platform supports on-session authentication — converts a portion of these.

The practical route is to send the customer to a hosted payment page where the charge can be completed on-session, so the issuer can challenge them directly, rather than retrying off-session and receiving the same silent refusal.

Frictionless flow matters here: an authentication that resolves without a challenge screen keeps the conversion, while a heavyweight redirect on a mobile browser loses a meaningful share of customers mid-flow.

Multi-channel sequencing

Send email plus WhatsApp on this code, and send them close together. Unlike short balances there is no future moment that is obviously better; you want reach, not timing.

WhatsApp earns its place here specifically because the required action is non-trivial. A customer who reads at 90%+ and replies within fifteen minutes can ask a question — 'which card should I use?' — and a reply that resolves it recovers a subscription that email would have lost silently.

Keep the total sequence to three touches. This code has a lower ceiling than the others, and pushing past three converts almost nobody while generating the majority of your complaint volume.

Decline code to retry window decision treeDark-mode SVG decision tree by Palash Sarker (Founder & Software Architect, RRLabs) mapping the insufficient_funds, expired_card and do_not_honor decline codes to their retry windows and recovery channels.DECLINE CODE ROUTINGDecline code receivedinsufficient_fundsretry in 48haligned to payday liquidityexpired_cardno retry — 24h askone-tap card update linkdo_not_honorretry in 72hescalate to alternate cardEvery branch pairs the retry with a WhatsApp or email touch timed to the same window.
Decline code decision tree: insufficient_funds, expired_card and do_not_honor mapped to their retry windows.

How much of your involuntary churn is recoverable?

Compares a 40% single-channel baseline against the 63.8% RRLabs platform average.

At risk / month
$5,600
Extra recovered / month
$1,333
Annualised, less $3,000 plan
$12,994

RRLabs vs legacy dunning tools

Churn Buster, Baremetrics Recover, Stripe native dunning and Gravy compared with Revenue Recovery Labs.

Feature comparison between legacy dunning tools and Revenue Recovery Labs
FeatureLegacy toolsRevenue Recovery Labs
Recovery channelsEmail and basic SMS onlyNative Meta WhatsApp Cloud API (your number) + email
Pricing architecture$129–$629+/mo, or a percentage cut of recovered cashFlat $100 / $250 / $500 per month — you keep 100%
Retry logicFixed calendar dunning (day 1, 3, 7)Retry window derived per decline code, persisted at ingestion
Copy engineStatic templates you edit by hand4-tier cascade: cache → primary model → fallback model → deterministic templates
White-labelUnavailable or enterprise-onlyFlat +$300/mo with custom domain and no vendor watermark
Audit trailSend logs at bestTier, model, latency and recovery score on every message

When to escalate to a human

Escalation is economic. Above roughly a few hundred dollars of annual value at risk, a personal message from a real account owner materially outperforms automation on this code, because the customer often needs reassurance rather than a link.

Below that threshold, automation plus an alternate-card prompt is the right ceiling, and the correct response to a non-recovery is a graceful downgrade or pause rather than continued pursuit.

Whatever the threshold, decide it in advance and encode it. Ad hoc escalation always concentrates on the loudest customers rather than the most valuable ones.

Measuring a code with a low ceiling

Do not judge your recovery programme on blended numbers that include this code without segmentation — it drags the average down and hides genuine wins elsewhere.

Track it separately with its own target. A 30-45% band is the realistic range; consistently exceeding it usually means your alternate-card prompt is early and prominent, and consistently missing it usually means your copy is apologising instead of instructing.

Also track how many of these recover on the first passive retry with no message. That share is your free recovery, and it should shape how aggressive the first touch needs to be.

Descriptor hygiene as prevention

A meaningful slice of do-not-honor declines trace back to the merchant descriptor. If the string on the statement does not resemble the product the customer bought, issuers see an unrecognised recurring merchant and cardholders dispute charges they do not recognise.

Set the descriptor to your product name, keep it stable, and include a support contact where the processor allows a second descriptor field. Changing a descriptor mid-life resets the recognition you have built, so pick one and leave it alone.

Descriptor fixes are unglamorous and they reduce both this decline code and your chargeback rate at the same time, which is a rare combination.

Chargeback risk on aggressive retries

Every additional authorisation against a card the issuer is blocking raises the chance the cardholder disputes the eventual successful charge. Disputes are far more expensive than a lost subscription: fees, evidence work, and a ratio that acquirers watch.

That asymmetry is the real reason to cap this code at two attempts. It is not politeness, it is risk management.

Where a customer has already contacted support about the charge, suspend automated attempts entirely and let the human thread finish. Automation racing a support conversation is the most reliable way to produce a dispute.

Where RRLabs fits

Revenue Recovery Labs treats do-not-honor as its own routing bucket: a single retry at roughly 36 hours, an alternate-card prompt in the first message on both email and WhatsApp, and a hard cap enforced in code rather than in policy.

Every generated message is logged with its tier, latency and recovery score, so you can see exactly how this code performs against the others instead of hiding it inside a blended average.

Flat pricing at $100, $250 or $500 per month means the lowest-recovering decline code does not cost you more to attempt than it returns.

Frequently asked questions

Why does the same card work a few days later?
Many do_not_honor declines are temporary issuer holds or risk-rule triggers that expire on their own. That is why one retry at around 36 hours is worthwhile, and why a third retry rarely is.
Is it safe to retry do_not_honor repeatedly?
No. Repeated authorisations against an issuer that is actively declining raises your failed-authorisation ratio, which acquirers monitor and which can depress approval rates on otherwise healthy traffic.
Should the message tell the customer to call their bank?
Yes, as a secondary option. Lead with trying a different card because it is faster and fully in the customer's control, and mention the bank call as the alternative for people who want to keep the existing card.