Renewvane

Blog

Stripe Failed Payment Email Templates You Can Copy (Plain Text)

Disclosure: we run Renewvane, a failed payment recovery service for Stripe. Everything in this article works without us. Stripe details below were checked against Stripe's documentation on October 15, 2026. Settings move around, so confirm in your own Dashboard.

First, decide whether you need your own emails at all

Stripe can already email your customers when a subscription payment fails. In Stripe's words, when you enable Send emails when card payments fail, "Stripe automatically sends an email to your customer after each failed payment" and the email "gives them the opportunity to update their payment method so it can be retried successfully" (Stripe docs: customer emails).

Stripe can also send emails about expiring cards (one month before the card on file expires) and emails asking customers to confirm payments that need 3D Secure, with optional reminders (same page).

So why write your own? In our opinion, for three reasons:

  • Voice. Stripe's emails use your branding, but they read like billing notices. A short note from a named person often feels like service rather than collections.
  • Different failures need different words. An expired card and a bank asking for confirmation are different problems. Telling someone their card was "declined" when their bank only wants a confirmation confuses people.
  • Timing and stopping. Your own sequence can stop the moment the invoice is paid, and you can choose the gaps between emails.

If you write your own, turn off the overlapping Stripe email so customers do not get two of everything.

Which link to put in the email

Every template below has one link. You have three good choices, all hosted by Stripe, so card details never touch your servers:

  1. The Stripe hosted page from Stripe's own emails. No code. Stripe notes the link stops working if, for example, the subscription changes to cancelled, incomplete_expired or unpaid (Stripe docs).
  2. The hosted invoice page (hosted_invoice_url on the invoice). The customer can pay the open invoice right away, and Stripe handles 3D Secure on that page. Stripe says invoice URLs "expire 30 days after the due date" and never last longer than 120 days (Stripe docs: hosted invoice page).
  3. A customer portal deep link that opens straight to "update payment method" (flow_data[type]=payment_method_update). Portal session URLs are short lived, so create the session when the customer clicks, not when you send the email (Stripe docs: portal deep links).

Our rule of thumb: use the hosted invoice page when you want the money now, and the portal deep link when the card itself needs replacing. We cover the tradeoffs in our guide to Stripe card update links.

Template set A: the card failed

Use these when the failure is a decline, an expired card or a replaced card.

Email 1, the day it fails

Subject: Your [Product] payment did not go through

Hi [First name],

Your [Product] payment of [amount] on [date] did not go through. Most of the time it is an expired card or a bank check.

You can update your card here, it takes about a minute: [link]

If something else is going on, just reply and I will help.

[Your name], [Product]

Email 2, about 2 days later

Subject: Quick reminder about your [Product] card

Hi [First name],

Just a reminder that your last [Product] payment is still open. Here is the link to update your card: [link]

If you meant to cancel, reply and tell me. No hard feelings.

[Your name]

Email 3, about 5 days later

Subject: Still having trouble with the [Product] payment?

Hi [First name],

Your [Product] account still has an open payment of [amount]. If your bank keeps blocking it, a different card usually fixes it: [link]

[Your name]

Email 4, the day before access changes

Subject: Your [Product] access changes on [date]

Hi [First name],

We still have not been able to take your [Product] payment. On [date] your account will [say exactly what happens, for example "move to the free plan" or "pause"]. Your data stays [say what really happens to it].

Update your card here to keep things as they are: [link]

[Your name]

Only promise what your product really does on that date. A fake deadline might lift clicks once, and it costs trust every time after.

Template set B: the bank wants a confirmation

Use these when Stripe sends invoice.payment_action_required, which Stripe describes as "Sent when the invoice requires customer authentication" (Stripe docs: subscription webhooks). The card is fine. The customer has to approve the payment.

Email 1, the same day

Subject: Your bank needs you to confirm a [Product] payment

Hi [First name],

Your bank asked you to confirm your [amount] payment to [Product]. This is a normal security check, and your card was not declined.

Confirm it here: [link to the hosted invoice page]

[Your name]

Email 2, about 2 days later

Subject: Reminder: confirm your [Product] payment

Hi [First name],

The confirmation for your [Product] payment is still waiting. It usually takes a few seconds in your banking app: [link]

[Your name]

We go deeper on this case in Stripe payment_action_required: the email to send.

Template C: the card is about to expire

Subject: Your card for [Product] expires soon

Hi [First name],

The card you use for [Product] expires at the end of [month]. You can add the new one here so nothing gets interrupted: [link]

If your bank already sent you a new card, you may not need to do anything. Some cards update automatically.

[Your name]

That last line is honest for a reason. Stripe "automatically attempts to update saved card details whenever a customer receives a new card", and says this is "widely supported in the United States" while international support varies (Stripe docs: how cards work).

Rules that keep these emails working

  • One link, one job. No newsletter, no upsell, no "check out our new feature." The FTC describes transactional or relationship messages as those that consist "only of content that" facilitates or completes a transaction the recipient already agreed to, or notifies them about a change in an ongoing subscription or account, and says "the law views these categories narrowly" (FTC CAN SPAM guide). Mixing in promotion risks turning the email into a commercial one. This is not legal advice.
  • Stop the moment it is paid. Listen for invoice.paid and check the invoice status again right before every send.
  • Plain text, signed by a person. No images that break on phones.
  • Make the link work on a phone. Most people open these on their phone.
  • Say what really happens. If access pauses, say so. If nothing happens yet, do not invent urgency.

How to know whether your emails are working

Most teams count "recovered after an email was sent" and call it a win. The trouble is that Stripe's retries keep running in the background. Stripe's recommended Smart Retries setting is "8 tries within 2 weeks" (Stripe docs: Smart Retries), so some of those payments would have come back anyway.

The honest test is a holdout. Randomly leave 10 to 15% of failed invoices without your emails, let Stripe do its normal thing on them, and compare recovery rates after three weeks. The difference is what your emails add. It is the same idea behind our own monthly proof report, which shows that measured difference after a safety margin for chance, counting only payments made through our links, next to our flat $49 a month price.

Sources

  • Stripe docs, Automate customer emails: https://docs.stripe.com/billing/revenue-recovery/customer-emails
  • Stripe docs, Hosted invoice page: https://docs.stripe.com/invoicing/hosted-invoice-page
  • Stripe docs, Deep links in the customer portal: https://docs.stripe.com/customer-management/portal-deep-links
  • Stripe docs, Using webhooks with subscriptions: https://docs.stripe.com/billing/subscriptions/webhooks
  • Stripe docs, How cards work (automatic card updates): https://docs.stripe.com/payments/cards/overview
  • Stripe docs, Automate payment retries: https://docs.stripe.com/billing/revenue-recovery/smart-retries
  • FTC, CAN SPAM Act compliance guide for business: https://www.ftc.gov/business-guidance/resources/can-spam-act-compliance-guide-business

See your own number first. The free Leak Check takes a few totals from your own Stripe Dashboard and shows what is still lost after Stripe's retries. It runs in your browser with no Stripe access, and your numbers are never sent to us. If it is enough for our $49 a month plan to likely pay for itself (about $2,500 a month of failed payments across 20 or more failed payments), the plan will start with a 30 day free trial once it opens. The paid service is not open yet.

Run the free Leak Check