Free Resource
8 Templates
No signup required
Dunning Email Templates · 8 Types · Free
Most SaaS teams send the same “payment failed, please update your card” email for every failure — whether they're on Stripe, Razorpay, Paddle, or Cashfree. That's the wrong message for insufficient_funds (the card works), wrong for do_not_honor (don't ask them to act), and actively harmful for hard declines. Here are 8 templates — one for each failure type. Copy and use immediately.
The Mistake
The Mistake
Each Stripe decline code tells you something specific about why the payment failed — and what the customer should (or shouldn't) do about it. A generic “payment failed, update your card” email ignores that signal. This is the core principle of dunning: match the message to the failure reason.
insufficient_funds✕ Wrong: "Please update your card"
✓ Right: The card works. Wait and retry. Don't create friction.
do_not_honor✕ Wrong: "There's an issue with your card"
✓ Right: Ambiguous bank block. Don't alarm. Don't ask to update. Retry quietly.
processing_error✕ Wrong: "Your payment method is invalid"
✓ Right: Technical error — not the customer's card. Blaming their card destroys trust.
Template 1 of 8
Soft DeclineFailure type
insufficient_fundsProcessor codes
Stripe: insufficient_funds · Razorpay: DEBIT_FAILED_INSUFFICIENT_BALANCE · Cashfree: INSUFFICIENT_FUNDS · Paddle: insufficient_funds
The card works. The balance is temporarily low. Retrying in 3–7 days catches most of these.
Subject line
Quick heads up about your {Product} payment
Email body
Hi {First Name},
We tried to charge your card for your {Product} subscription today, but the payment didn't go through.
The most common reason is a temporary balance issue — and these usually clear up within a few days. We'll retry your payment automatically, so you don't need to do anything right now.
Your subscription stays active while we retry.
If you'd like to update your payment method just in case, you can do that here:
→ {Payment Update Link}
Let us know if you have any questions.
{Your Name}
{Company Name}Never ask customers to update their card for insufficient_funds. The card is valid — asking them to "fix" something that isn't broken creates confusion and unnecessary churn. Calm tone + no urgency + retry promise preserves the relationship while you retry in the background.
Psychology behind it
Loss aversion at play: the customer doesn't want to "lose" their subscription. A calm email signals the situation is under control — which keeps them from actively cancelling while you retry.
Template 2 of 8
Soft DeclineFailure type
card_expiredProcessor codes
Stripe: expired_card · Razorpay: CARD_EXPIRED · Cashfree: CARD_EXPIRED · Paddle: card_expired
Card expiry is the one failure type where asking to update is exactly right. The card physically can't charge again.
Subject line
Your card has expired — 1-minute update keeps your {Product} going
Email body
Hi {First Name},
Your {Product} subscription payment didn't go through because your card on file has expired.
The fix is quick — update your card here and your subscription continues without interruption:
→ {Payment Update Link}
Takes about 60 seconds. Once updated, we'll process the payment automatically.
If you run into any trouble, reply to this email and we'll help.
{Your Name}
{Company Name}This is the only decline type where "please update your card" is the correct message. Retrying does nothing — the card expiry date has passed. Name the specific problem (expired, not just failed), give one clear action, and quantify the effort ("60 seconds") to reduce friction.
Psychology behind it
Specificity builds trust. "Your card has expired" is a concrete, non-alarming fact. Customers appreciate being told exactly what's wrong rather than a vague "payment issue." The "60 seconds" line uses completion psychology — a small, bounded task is easy to start.
Template 3 of 8
Hard DeclineFailure type
card permanently blockedProcessor codes
Stripe: fraudulent / do_not_honor (permanent) · Razorpay: PAYMENT_BLOCKED · Cashfree: HARD_DECLINE · Paddle: hard_decline
Card is permanently blocked — lost, stolen, or fraudulent. No retry will work. The customer needs a new card.
Subject line
Action needed: update your {Product} payment method
Email body
Hi {First Name},
We weren't able to process your payment for {Product}. The card on file can no longer accept charges.
To keep your subscription active, please add a new payment method here:
→ {Payment Update Link}
If you have any questions or need help, reply to this email — we're happy to assist.
{Your Name}
{Company Name}Hard declines are permanent — no retry will succeed. Don't explain why the card was blocked (the customer may not know it's been reported). Don't use alarming language. Just state clearly what's needed: a new payment method. One action, nothing else.
Psychology behind it
Customers who've had a card cancelled (especially due to fraud) are already stressed. A calm, matter-of-fact email that doesn't add to the stress — while giving them one clear action — respects their situation and maximizes the chance they update before giving up.
Template 4 of 8
Soft Decline — Action NeededFailure type
authentication_requiredProcessor codes
Stripe: authentication_required · Razorpay: 3DS_FAILURE · Cashfree: AUTHENTICATION_FAILED · Paddle: 3ds_required
The bank triggered a 3DS/SCA challenge. The customer needs to confirm the payment in their banking app.
Subject line
Your bank needs a quick confirmation for {Product}
Email body
Hi {First Name},
Your bank flagged our payment attempt for {Product} and is requesting a quick verification that it's you.
This takes about 30 seconds:
→ {Confirm Payment Link}
Click the link, confirm the charge in your banking app or via the SMS your bank sent, and your subscription continues normally.
This is a standard security step — your card and subscription are fine.
Let us know if you have any trouble.
{Your Name}
{Company Name}3DS challenges confuse customers — they don't know what "authentication required" means. Translate it into plain language: "your bank needs to verify it's you." Give one direct link to complete the authentication, state the time it takes, and reassure that this is a normal security step.
Psychology behind it
Confusion leads to inaction. The more a customer understands what to do and why, the more likely they act. "Your bank wants to verify it's you" is the clearest explanation possible. The 30-second estimate uses completion psychology — a small task is easy to start.
Template 5 of 8
Soft DeclineFailure type
do_not_honorProcessor codes
Stripe: do_not_honor · Razorpay: BANK_DECLINED · Cashfree: BANK_DECLINED · Paddle: do_not_honor
Generic bank block — could be velocity limit, brief policy hold, or temporary issue. Most resolve in 2–3 days with a retry.
Subject line
Temporary issue with your {Product} payment — no action needed
Email body
Hi {First Name},
There was a temporary issue processing your {Product} payment today. This isn't related to your card — it's typically a brief hold from your bank that clears on its own.
We'll retry your payment automatically over the next few days. You don't need to do anything right now.
If the payment still doesn't go through after a few attempts, we'll reach out with next steps.
Your subscription stays active in the meantime.
{Your Name}
{Company Name}do_not_honor is ambiguous — the bank rejected the charge without giving a specific reason. Don't alarm the customer and don't ask them to update their card (it's probably fine). "No action needed yet" is the key phrase — it respects their time and prevents unnecessary churn while you retry.
Psychology behind it
Vagueness from the bank means vagueness in your message is actually correct here. Telling customers there was "a temporary issue" and they "don't need to do anything" keeps them subscribed and passive — exactly what you want while retrying. Alarm creates action, and the action they might take is cancelling.
Template 6 of 8
Technical Soft DeclineFailure type
processing_errorProcessor codes
Stripe: processing_error · Razorpay: PROCESSING_ERROR · Cashfree: PROCESSING_ERROR · Paddle: processing_error
Technical error on the processor side — not a card problem. Retry usually succeeds within 24 hours.
Subject line
Technical error with your {Product} payment — we're on it
Email body
Hi {First Name},
Your {Product} payment ran into a technical error today. This isn't a problem with your card — it was a processing issue on our end (or your bank's payment systems).
We'll retry automatically within 24 hours. Your subscription stays active.
No action needed from you. If you keep seeing this issue, reply to this email and we'll sort it out directly.
{Your Name}
{Company Name}The worst message you can send for a processing_error is "there's an issue with your card." It's factually wrong and damages trust. Be honest: it was a technical error, not a customer problem. This transparency actually builds trust and reduces churn compared to blaming the customer's card.
Psychology behind it
Customers trust companies more when they're honest about technical problems. "There was a processing error on our end" signals reliability — you know what happened and you're handling it. Blaming the customer's card for a processor error is the fastest way to create a confused, frustrated customer who cancels.
Template 7 of 8
Final NoticeFailure type
final_noticeProcessor codes
Applies to all processors — send when grace period is about to expire, regardless of original failure code
Last email before account cancellation. Subtlety is over — specific date, specific consequence, one action.
Subject line
{Product} subscription cancels on {Cancel Date} — save it now
Email body
Hi {First Name},
This is the last email before your {Product} account is cancelled.
Your payment of {Amount} has been outstanding since {Failure Date}. If we don't receive payment by {Cancel Date}, your account will close.
Update your payment method to keep your account:
→ {Payment Update Link}
If you're having trouble or want to talk about other options, reply to this email. We'd rather find a solution than lose you as a customer.
{Your Name}
{Company Name}At this stage, vague language loses customers. Name the exact cancellation date, name the consequence (data loss), give one action, and leave a human exit ("reply if you want options"). "We'd rather find a solution" is the key humanizing line — it signals intent and reduces defenses. Apologizing for sending this email is the #1 mistake here.
Psychology behind it
Deadline pressure + loss aversion + a human escape hatch. The specific cancellation date creates urgency without being hostile. Mentioning data loss activates loss aversion — the fear of losing something you have is stronger than the motivation to gain something new. The "reply if you want options" line converts some of the no-action segment by giving them an easy, low-commitment way to re-engage.
Template 8 of 8
Post-CancelFailure type
post_cancel_winbackProcessor codes
Applies to all processors — send 3–7 days after subscription lapses due to failed payment
Account has lapsed. Low pressure, zero friction, one door back in. High pressure kills win-back.
Subject line
Your {Product} account is still here
Email body
Hi {First Name},
Your {Product} subscription was cancelled, but your account hasn't been deleted.
If you'd like to pick up where you left off:
→ {Reactivation Link}
Everything is still there. Takes about 30 seconds to reactivate.
If the timing wasn't right, no pressure — you can come back whenever makes sense.
{Your Name}
{Company Name}Post-cancel emails fail when they're desperate or guilt-inducing. This works because it removes friction ("30 seconds"), removes pressure ("no pressure"), and reframes reactivation as easy rather than significant. "Your account is still here" is the hook — it eliminates the fear that everything is gone.
Psychology behind it
The sunk cost in the existing account ("everything is still there") is a powerful motivator. Customers who cancelled due to a billing failure — not dissatisfaction — are highly likely to return when the path is easy. Low-pressure copy paradoxically increases reactivation by not triggering resistance. If they feel pushed, they push back. If they feel invited, they consider.
Timing
Timing
| Timing | Trigger | |
|---|---|---|
| Day 1 | Failure notice (code-specific) | Immediately after payment failure |
| Day 3–5 | Follow-up if retry failed | After first retry attempt fails |
| Day 7–10 | Urgency signal | Payment still outstanding |
| Day 14–21 | Final warning | Last email before cancellation |
| Post-cancel | Win-back | 3–7 days after account lapses |
Front-load the sequence. 50–60% of recoverable payments come back within the first 7 days. Beyond 6 emails, incremental recovery drops below 2% per additional email. Keep sequences tight.
FAQs
FAQs
Why does the email need to change based on the decline code?
Different decline codes mean different things for the customer's card and what action (if any) they need to take. Sending "please update your card" for an insufficient_funds failure is wrong — the card works, the balance is just temporarily low. Sending the same message for every failure confuses customers, creates unnecessary churn, and misses the specific action that would actually recover the payment.
When should I send each dunning email?
Email 1 should go out on the day of failure. Email 2 (if retry failed) on Day 3–5. Email 3 on Day 7–10. Final warning on Day 14–21. Win-back after cancellation. The exact timing depends on your retry schedule and grace period. Recurflux automates this sequence with the correct timing and the right email for each specific failure code.
How many emails should a dunning sequence have?
Three to six emails captures most recoverable revenue. Industry data shows that beyond six emails, incremental recovery drops below 2% per additional email. The key is front-loading the sequence — 50–60% of recoverable payments are captured within the first 7 days.
Can I send the same email for hard declines and soft declines?
No. Soft declines (insufficient_funds, do_not_honor, processing_error) are temporary and the card may work again. Hard declines mean the card is permanently blocked — retrying does nothing and sending the wrong message damages trust. Hard decline emails should always ask for a new payment method, not just retry.
What placeholders do I need to replace in these templates?
Replace: {First Name} with your customer's name, {Product} with your product name, {Amount} with the charge amount, {Failure Date} with the date the payment failed, {Cancel Date} with your grace period end date, {Payment Update Link} with your payment update portal URL, and {Your Name} with your support contact name.
How do I know which decline code a payment failure returned?
Every processor returns a failure code on a declined payment. Stripe: error.decline_code on the payment intent or charge. Razorpay: error_code in the payment error object. Cashfree: error_code in the order/payment response. Paddle: reason code in the transaction webhook. You can find these in your payment processor dashboard or via webhook events. Recurflux reads these codes automatically across all five processors and routes each customer to the correct email sequence without any manual work.
What is the best subject line for a dunning email?
The best dunning email subject lines are specific to the failure reason and avoid alarming language. For insufficient_funds: "Quick heads up about your [Product] payment" — calm, no urgency. For expired card: "Your card has expired — 1-minute update needed" — specific problem, specific action. For final warning: "[Product] subscription cancels on [Date]" — named deadline, no ambiguity. Generic subject lines like "Payment failed" have significantly lower open rates because they trigger alarm without giving the customer enough information to act.
Should I send dunning emails from my company domain or a no-reply address?
Always send from a monitored address your team actually reads — ideally [email protected] or [email protected]. Never use no-reply. Dunning emails frequently trigger customer responses: questions about the charge, requests for help updating payment methods, or explanations of why they're cancelling deliberately. A no-reply address kills those conversations and reduces recovery rate. Recurflux sends all dunning emails from your own domain and routes replies to your configured support address.
What is the difference between a dunning email and a payment failed notification?
A payment failed notification is a single automated message informing the customer their charge didn't go through. Dunning is the full sequence — multiple emails over 7–30 days, combined with retry logic, that systematically attempts to recover the payment before the subscription cancels. A dunning email is one step in that sequence, and its content varies based on where the customer is in the recovery window (day 1 vs day 14), what failure type occurred, and whether previous retries have already been attempted.
Can I use these templates for Paddle, Razorpay, or Cashfree subscriptions?
Yes — the email copy itself applies to any subscription billing failure, regardless of processor. The decline codes listed (insufficient_funds, expired_card, etc.) are Stripe-specific, but Paddle, Razorpay, and Cashfree have equivalent failure categories. Recurflux maps failure codes across all five processors (Stripe, Paddle, Razorpay, Cashfree, RevenueCat) to the appropriate email template automatically.
Stop copying and pasting manually
These templates work. But sending the right one at the right time for the right code — for every subscriber, every billing cycle — is what Recurflux automates. Connect in under 5 minutes.
Reads the payment failure code across Stripe, Paddle, Razorpay, Cashfree, and RevenueCat
Routes each customer to the correct email sequence automatically
Retries with code-specific timing (not a generic schedule)
Sends from your domain — customers never see Recurflux
$59/month flat — no % of recovered revenue