Updated July 2026 · Sourced from Stripe docs

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.

By Daniel Borodin, founder of SubRevivalLast updated July 2026 · 10 min read

The card on file is dead

•••• 4242EXP 04/24 · EXPIREDRetryAlways failsUpdate card→ charge retries → recovered ✓

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

DimensionRetrying the expired cardThe real fix (updater + email)
Does it recover the payment?No, the card is deadYes, once a current card is on file
What it costs youWasted retry attempts, silent churnA ~30-second customer action
Card Account UpdaterNot applicableSilently fixes some cards before they fail
Does the customer know?No, the failure is invisible to themA branded email tells them exactly what to do
Speed to recoverNeverMinutes, instant retry when the new card saves
PreventionNonePre-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.

decline_code
expired_card
What it means
The card has passed its expiration date, so the charge can never succeed on the card currently on file.
Decline type
Hard decline
Does a retry help?
No, retrying the same card always fails
Retry window
None, act immediately instead of retrying
Stripe's next step
The customer needs to use another card
The fix
Card Account Updater (automatic) + a card-update email (for the rest)

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
The takeaway: treat the Card Account Updater as a silent first line that catches a meaningful chunk of expired cards automatically, then plan for everything it misses. Whatever it does not fix will still surface as an expired_card decline, and that is exactly when the customer email below takes over.

Watch

Stripe Billing and revenue recovery, explained

Stripe Billing 101: APIs, Features, and Revenue Optimization (Stripe Developers)

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.

1

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.

2

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.

3

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.

4

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.
⚠️ One email is not a sequence: if the customer does not act on the first send, follow up on Day 3 and Day 7 with the same one-click link and a slightly firmer note, then stop the moment the payment succeeds. The full cadence and per-code variants are in dunning email best practices.

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?
You can attempt it, but it will never succeed. expired_cardis a hard decline: the card has passed its expiry, so no retry can go through, and Stripe's guidance is the customer must use another card. Unlike a soft decline like insufficient_funds, timing does not help. The only fix is a current card on file, via the Card Account Updater or a customer email. See the full split in why Stripe payments fail.
Does Stripe automatically update expired cards?
Sometimes, through the Card Account Updater. When a customer gets a new card, Stripe can pull updated details from the issuer and refresh the saved card before the next charge, fixing many expired cards silently. But it misses non-participating issuers, closed or switched accounts, some wallet tokens, and updates that arrive too late. Treat it as a helpful first line, not a guarantee. For the rest, you still need a customer email, templated below.
How do I email a customer to update their expired card?
Send a short branded email the day the charge fails, with a one-click card-update page, not a login. Name the exact problem (the card expired), reassure them the account is still active, and make it a single button. Use the copy-paste template on this page, and follow up on Day 3 and Day 7 if they do not act. The craft behind the cadence is in dunning email best practices.
What is the retry window for an expired card?
There is none. For soft declines like insufficient_funds, a 2-7 day window helps. For an expired card, no waiting helps, the card is permanently invalid, so retrying in an hour or a week gives the same decline. The correct window is zero: trigger the Card Account Updater and email the customer immediately. Look up any code's retry behavior in our decline codes reference.
How do you prevent expired-card failures before they happen?
With pre-dunning: reminders sent before the card expires or the renewal charges, so the customer updates it in advance. Since ~30% of card accounts change yearly, some customers are always heading toward a failure you can see coming. A trial-ending or upcoming-renewal reminder, plus the Card Account Updater in the background, turns most expiring cards into charges that never fail. Prevention beats recovery, see what is involuntary churn.
How much of subscription churn is caused by expired cards?
Expired and reissued cards are one of the largest and most preventable causes of involuntary churn. Roughly 30% of card accounts change every year (Visa), so a slice of your subscribers are always on a soon-to-fail card. When those charges fail and no one acts, the customer churns without deciding to. It is high-ROI to recover, the intent to pay is there, and much is preventable with reminders.
Can you recover expired-card payments automatically?
Yes, with the right combination. The Card Account Updater fixes some silently; for the rest you need branded outreach. 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, hosts the update page, retries on save, and prevents many failures with expiry reminders.
What should the subject line of an expired-card email be?
Name the problem and the action plainly: "Your card on file expired, update it to keep [Product]" or "Action needed: your [Product] payment didn't go through." Avoid vague ("Important account update") or alarming ("Your account will be deleted") lines. A failed-payment email is transactional and high-intent, so a clear subject gets opened. Keep it under ~60 characters and include the product name. The full template is above.

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.

Start Recovering Revenue$19/mo flat. Expiry reminders + card-update emails. 21-day guarantee.

Keep reading