expired_cardhighAffects MRR

Stripe expired_card Error — Causes, Fix & MRR Impact

The Stripe expired_card error occurs when the card's expiration date has passed and the issuer declines the charge, causing failed renewals and MRR loss for SaaS businesses processing subscription payments.

What this means

The card has expired. The customer needs to update their card with the new expiration date (and new number if they received a replacement card).

Why it happens

Card past expiration date

The card's exp_month and exp_year are in the past; the issuer declines any charge on that card.

Renewal after card expiry

The subscription renewed after the card expired; the customer may have a new card but has not updated it in your app.

Customer did not update before expiry

You did not collect or prompt for an updated card before the expiry date, so the next charge failed.

New card issued with new expiry

The issuer reissued the card with a new expiry (and possibly new number); the old payment method on file is no longer valid.

MRR Impact

Failed renewals from expired cards reduce MRR. Proactive expiry checks and update prompts improve recovery.

Expired card is a top cause of avoidable failed renewals; proactive reminders and update flows protect MRR.

Avg. recovery rate: High recovery potential when you prompt for update quickly; many customers will add the new card.

Urgency: within 24h

How to fix it

  1. 1

    Detect expired_card in your flow

    In your webhook or payment handler, check for decline_code === 'expired_card'. Route to your 'update payment method' flow instead of generic decline.

    if (err?.decline_code === 'expired_card') { redirectToUpdatePayment(customerId); }
  2. 2

    Show clear update-card messaging

    Tell the customer their card has expired and they need to update it. Link directly to the billing page or a modal where they can enter the new expiry and card details.

  3. 3

    Warn before expiry

    Use the card's exp_month and exp_year to warn customers 30–60 days before expiry. Email or in-app: 'Your card expires soon; update it to avoid interruption.'

  4. 4

    Send dunning email with update link

    After the first failed charge, send an email that the payment failed because the card expired and include a one-click link to update the payment method.

  5. 5

    Do not retry without update

    Do not retry the same PaymentMethod for expired_card; it will keep failing. Only retry after the customer has updated their card.

Detect expired_card automatically

Track expired_card volume; correlate with renewal dates. Consider proactive expiry reminders to reduce this decline type.

Monitor your Stripe health free →

FAQ

What is the Stripe expired_card decline code?
expired_card means the card's expiration date has passed. The issuer declines the charge. For SaaS, this often happens on renewal when the customer's card expired since the last successful payment. Fix by prompting the customer to update their card with the new expiry (and optionally the new number if the card was reissued).
Can I prevent expired_card on renewals?
You can reduce it by validating expiry before renewal (e.g. warning when exp_ month/year is within the next 30–60 days) and prompting an update. Stripe and many issuers do not allow charging an expired card; prevention is about getting the updated card on file in advance.
Should I retry after expired_card?
No. Retrying the same card will not work until the customer updates the expiration (and possibly the card number if the issuer sent a new card). Prompt for a payment method update and send a dunning email with a link to update.
How does expired_card affect MRR?
Failed renewals due to expired cards directly reduce MRR. Proactive expiry warnings and a simple update flow significantly improve recovery. Many customers will update if reminded before or right after the first failure.

Related errors