What card expired means
The card on file passed its expiry date. Every future charge will fail identically until the customer stores a new card. Retries cannot fix this one.
Why it happens
- The bank reissued the card and the customer never updated subscriptions.
- Card networks' automatic updates (which Stripe uses where available) did not cover this card or issuer.
- The customer forgot which services were attached to the old card.
What Stripe does on its own
Stripe's card-account-updater catches many reissued cards automatically, but when a charge still fails with expired_card, the updater did not have new details. Retries against an expired card are pointless. Action has to come from the customer.
Bank decline codes you may see alongside expired_card
Your customer's bank sends its own numeric code, which Stripe surfaces separately from its decline_code. The same number means different things on different card networks, and Stripe does not publish a strict one-to-one mapping between them, so treat these as codes commonly seen with this failure rather than as equivalents.
| Code | Network | What the network calls it |
|---|
54 | Visa | Expired card or expiry date is missing. |
54 | Mastercard | Expired card. |
33 | JCB International | Expired card. |
101 | American Express | Expired card / invalid expiry. |
79 | Mastercard | Expired card (lifecycle decline; updated card data available). |
Quoted from Stripe's network decline codes reference.
The recovery playbook
- Email immediately. There is no retry worth waiting for. Include the Stripe-hosted invoice link, which lets the customer pay and update the card in one step.
- Be specific in the subject line ("your card ending 4242 has expired"). Vague billing emails get ignored; specific ones read as legitimate.
- Follow up once after 3-4 days if unpaid; expired-card cases decay quickly once the customer's attention moves on.
- Turn on expiring-card alerts (pre-dunning): MRRdue can warn you up to 30 days before a card expires with an optional read-only Payment Methods scope. The email goes out before the failure ever happens.
Very recoverable in the first week. These are engaged customers with a stale card, not churn risks. Speed matters more than copywriting here.
The email to send
This is the exact template MRRdue's recovery assistant suggests for expired_card cases. Copy it, swap the details, and send it from your own address.
Subject: A quick heads-up about your payment
Hi Alex,
I noticed your recent $49.00 payment didn't go through (the card on file has expired). No worries at all — these things happen, and it's usually a quick fix.
Here's a secure link to update your payment details — it only takes a minute:
https://invoice.stripe.com/i/…
Once that's done we'll take care of the rest automatically. If anything's unclear, just reply to this email — a real person reads every one.
Thanks so much,
Your SaaS
More variants (and retention-risk templates) in the free recovery email template gallery.
Stop working declines from a spreadsheet
MRRdue imports your failed payments with read-only access, ranks them by recoverable dollars and decline reason, and drafts this email for every case. You stay the sender.