Failed transactions are not lost customers. In most stores, a meaningful share of failures are soft declines, expired cards or interrupted authentication — all of which recover if the shopper hears about them quickly on a channel they actually read.
# TL;DR
- Failed checkout payments and abandoned carts are different problems and need different messages.
- Recovery is driven by webhooks from your store or processor, not by polling.
- WhatsApp works because it is read quickly, but only send to customers who opted in.
- Timing matters more than copy: the first message should land within minutes, the second the next day.
- Attribute recovered revenue to the attempt that preceded it, or you cannot tell what worked.
# Why the channel changes the outcome
Email dunning has a structural problem: the message competes with everything else in the inbox, and it often lands in a promotions tab. A payment failure is a transactional, time-sensitive event. A short WhatsApp message with a single link to update the payment method removes almost all of the friction between the failure and the fix.
The trade-off is consent. WhatsApp Business messaging requires an opt-in and approved templates. Treat that as a hard constraint, not a growth hack: send only to customers who agreed, and keep the consent record with the contact.
# Step 1 — Capture the failure event
Subscribe to the events that describe a genuine payment failure rather than general browsing behaviour.
{
"type": "invoice.payment_failed",
"data": {
"object": {
"customer": "cus_123",
"amount_due": 4900,
"attempt_count": 1,
"last_payment_error": { "decline_code": "insufficient_funds" }
}
}
}
Verify the signature before you do anything with the payload, then classify:
- Soft decline (insufficient funds, issuer timeout) — retry later, message gently.
- Hard decline (card closed, stolen) — do not retry, ask for a new payment method.
- Authentication required — send the authentication link, not a retry.
# Step 2 — Build the cadence
A cadence that respects the reason for the failure outperforms a fixed schedule:
- Minute 5 — a short WhatsApp note: the payment did not go through, here is the link.
- Hour 24 — a retry attempt for soft declines, plus an email as a fallback channel.
- Day 3 — a final reminder before the order or subscription lapses.
Stop everything the moment the payment succeeds. Nothing damages trust faster than a reminder to pay for something already paid.
Send in the customer's local daytime hours. A 3am recovery message is a support ticket, not a recovery.
# Step 3 — Write the message
Keep it to three parts: what happened, what it means, one action.
Hi Sara — your renewal for £49 didn't go through (your bank declined it). Your account stays active until Friday. Update your card here: rrlabs.online/pay/…
No urgency theatre, no discount, no guilt. The customer already wants the product.
# Step 4 — Measure it honestly
The only number that matters is recovered revenue attributable to an attempt. Record, per failure:
- the decline reason,
- every message sent and the channel,
- whether a later charge succeeded and when.
Without that link, "recovery rate" is just your baseline self-heal rate wearing a costume.
# FAQ
# How quickly should the first message go out?
Within minutes of the failure event. The shopper still remembers the purchase and the intent is intact.
# Is WhatsApp better than email for payment recovery?
It is usually read faster, which matters for time-sensitive failures. It is not a replacement for email — the strongest setups use WhatsApp first and email as a fallback for customers who did not opt in.
# Do I need consent to send WhatsApp payment reminders?
Yes. WhatsApp Business messaging requires an opt-in and pre-approved templates for business-initiated messages. Store the consent record alongside the contact.
# What should I do with hard declines?
Do not retry them. The charge will fail again and repeated attempts can flag your account with the issuer. Ask for a new payment method instead.