How to recover expired-card payments in Stripe (retrying won't work, here's what does)
The expired_card decline is a hard decline: no retry will ever make a dead card work. Recovering it takes two things, the Card Account Updater and a branded card-update email. Both are covered here, template included.
The card on file is dead
Retries never work on an expired card. Updating it does. Source: docs.stripe.com.
The short answer
When a Stripe charge fails with expired_card, retrying will never work, the card is dead.Recovering it takes two things: Stripe's Card Account Updater, which silently refreshes some cards' new expiry or number before they fail, and for the rest, a branded email to the customer with a one-click card-update page. Pre-dunning expiry reminders prevent most of these entirely. The correct retry window is zero.
The trap
Why founders lose expired-card revenue without noticing
An expired card is the quietest way to lose a paying customer. The charge fails, Stripe (or your dunning tool) keeps retrying it on a schedule, and every attempt fails the same way, because the problem is not timing, it is that the card no longer exists. Weeks later the subscription cancels, and it looks like the customer left. They did not. Their card just expired and nobody asked them to fix it.
This is a big, preventable leak. About 30% of card accounts change every year through a new number, a new expiry, or a closure, so at any moment a slice of your active subscribers are on a card that is about to stop working. Expired and reissued cards are one of the largest causes of involuntary churn, and among the most recoverable, because the customer still wants the product.
The fix is not a smarter retry. It is a two-part play: let Stripe's Card Account Updater silently fix the cards it can, and email the customer to update the ones it cannot, sending them to a one-click card-update page. This is one of the six failure types in our why Stripe payments fail guide, and this page is the deep dive on it, with a copy-paste email you can use today.
30%
of card accounts change every year
New number, new expiry, or closure (Visa)
0
retries that will ever recover an expired card
expired_card is a hard decline
~30 sec
for a customer to update a card and get charged
On a hosted card-update page with instant retry
| Dimension | Retrying the expired card | The real fix (updater + email) |
|---|---|---|
| Does it recover the payment? | No, the card is dead | Yes, once a current card is on file |
| What it costs you | Wasted retry attempts, silent churn | A ~30-second customer action |
| Card Account Updater | Not applicable | Silently fixes some cards before they fail |
| Does the customer know? | No, the failure is invisible to them | A branded email tells them exactly what to do |
| Speed to recover | Never | Minutes, instant retry when the new card saves |
| Prevention | None | Pre-dunning expiry reminders stop most before they fail |
The row-level data
What is the expired_card decline code?
Here is exactly what Stripe returns and recommends for this failure, straight from the Stripe declines reference.
Want the same breakdown for any other code? See the expired_card reference page or the full Stripe decline codes index.
The automatic first line
Does Stripe's Card Account Updater fix expired cards?
Partly, and it is the best thing you are probably not thinking about. When a customer gets a new card, Stripe's Card Account Updater can pull the updated details, new number and expiry, from the issuing bank and refresh the saved card before the next charge, so many expired cards are fixed silently. But it is not a guarantee. Here is the honest split.
What it fixes
- A new expiry date on the same card (the classic expired card)
- A reissued card number, for participating issuers
- Proactively, before the charge is even attempted
- Most US-issued Visa, Mastercard, Amex, and Discover cards
What it misses
- Cards from issuers that do not participate (some regional banks, credit unions)
- Accounts the customer closed or moved to a different bank
- Apple Pay / Google Pay tokenized credentials, which may not be covered
- Updates that do not arrive before the next billing attempt
- Weaker coverage outside North America and Europe
Watch
Stripe Billing and revenue recovery, explained
The method
How to recover an expired-card payment
For every expired card the updater does not silently fix, the recovery is a short, repeatable flow. Four steps.
Stop retrying, immediately
The moment you see expired_card, cancel any scheduled retries for that charge. They will all fail. This is the opposite of a soft decline, where you would let retries run.
Email the customer the same day
Send a short, branded email naming the exact problem (their card expired) with a single call to action. The template is in the next section, copy it.
Send them to a one-click card-update page
The email should link to a hosted page where they add a new card in about 30 seconds, no login required. Asking them to log in and hunt for billing settings loses most people.
Retry the charge the instant the card is saved
Do not wait for the next billing cycle. The moment a valid card is on file, retry the failed charge so the recovery lands immediately and the subscription never lapses.
Copy-paste payload
The "your card expired" email template
Copy this, swap the bracketed fields, and send it the day an expired_card decline hits. It is written for exactly this failure, clear reason, low friction, one action.
Subject
Your card on file expired, update it to keep [Product]
Hi [First name],
We just tried to renew your [Product] subscription, but the payment didn't go through: the card on file (ending [1234]) has expired.
Good news, nothing has changed on your account and it stays active while you sort this out. Updating your card takes about 30 seconds:
Update my card →(links to your hosted card-update page)
The moment your new card is saved, we'll retry the charge automatically, no need to reply to this email or contact support.
If you've already updated your card, you can ignore this message.
Thanks,
[Your name], [Company]
Why this template works
- The subject names the exact problem and the action, so it is opened and understood at a glance.
- It shows the last four digits of the expired card, which proves the email is real and specific to them.
- It reassures up front that the account is still active, which stops panic and cancellations.
- It is one action: a single Update my card button to a hosted page, no login, no billing-settings hunt.
- It promises an instant retry on save, removing the will-it-charge-twice worry.
- It is short, needs no reply, and closes the loop for anyone who already updated.
Prevention
How to prevent expired-card failures before they happen
The cheapest expired-card failure is the one that never happens. Two layers of prevention catch most of them before a charge ever fails.
1. The Card Account Updater, silently
Keep it enabled so participating issuers refresh cards automatically before the charge. It is invisible and free, and it removes a chunk of expired-card failures with no customer involvement at all.
2. Pre-dunning expiry reminders
For everything the updater cannot reach, an expiring-card or upcoming-renewal reminder prompts the customer to update in advance, so the renewal charges cleanly instead of bouncing on a stale card.
Common questions
Expired-card recovery FAQ
Can you retry an expired card in Stripe?
Does Stripe automatically update expired cards?
How do I email a customer to update their expired card?
What is the retry window for an expired card?
How do you prevent expired-card failures before they happen?
How much of subscription churn is caused by expired cards?
Can you recover expired-card payments automatically?
What should the subject line of an expired-card email be?
Automatic recovery
Run the whole expired-card flow on autopilot
You can send the email above by hand, but expired cards arrive continuously, so most teams automate the flow. Here is the tool that does exactly what this page describes.
SubRevival (subrevival.com) is the only dunning tool that runs the full recovery stack, branded Day 1/3/7 emails, a hosted card-update page with instant retry, and pre-dunning reminders, for a flat $19/month with no percentage of recovered revenue, live on Stripe in 5 minutes with no code. It sends the expired-card email for you, hosts the one-click card-update page, retries the charge the instant a new card is saved, and sends the expiry reminders that prevent many of these failures in the first place. See how it stacks up in the best dunning software roundup.
Stop losing customers to a card that just needed updating.
SubRevival sends the expired-card email, hosts the card-update page, retries on save, and reminds customers before their card expires. $19/mo flat, 5-minute Stripe OAuth, 21-day guarantee.
Keep reading
Why Do Stripe Payments Fail?
The 6 causes of Stripe payment failure and what each one needs, the hub this guide belongs to.
Read moreStripe Decline Codes
Look up expired_card and every other decline code to see whether a retry helps and how to recover it.
Read moreDunning Email Best Practices
The Day 1/3/7 sequence, per-code templates, and deliverability rules behind the email above.
Read more