Stripe Decline Code · Glossary
expired_card is one of the most straightforward — and most preventable — decline codes in Stripe: the card on file has passed its expiration date and the issuing bank is rejecting every charge attempt against it.
What It Means
What It Means
expired_card is one of the most straightforward — and most preventable — decline codes in Stripe: the card on file has passed its expiration date and the issuing bank is rejecting every charge attempt against it. Unlike insufficient_funds or do_not_honor, there is zero ambiguity here and zero point retrying — the card is dead until the customer updates their payment method with a new one.
Not sure if this code is recoverable for your specific situation? Use the Stripe Failure Lookup →
Why It Happens
Why It Happens
What NOT to Do
What NOT to Do
✕ Don't retry the same card — ever
expired_card is a hard decline, full stop. No retry interval, no paycheck cycle logic, no "try again in 3 days" — the card is expired and will be declined every single time until the customer updates it. Every retry wastes an attempt, adds latency to your recovery, and signals poor billing hygiene to card networks.
✕ Don't send a generic payment failure email
"Your payment failed — please try again" is the worst possible message for an expired card. The customer can't "try again" — they need to go into their account and enter a new card. Your email subject line, body copy, and CTA must be specific: update your payment method, not "retry" or "check your bank."
✕ Don't wait more than 24 hours to send the first email
Unlike insufficient_funds where you want to wait a few days, expired_card requires immediate action. Every hour of delay is revenue not collected. The customer already knows their card expired — they just haven't connected it to your subscription yet.
Retry Timing
Retry Timing
There is no retry timing for expired_card — there is only a card update sequence. All your automation effort goes into driving the customer back to update their payment method, not into scheduling retries.
Recovery Benchmark
Recovery Benchmark
| Metric | Result |
|---|---|
| Recovery with proactive pre-expiry email | 55–70% (before failure even occurs) |
| Recovery after failure — email sequence only | 45–60% |
| Recovery with in-app + email combined | 65–75% |
| Recovery with SMS/WhatsApp added | +10–15% additional lift |
| Recovery with no outreach (passive) | ~5–10% |
| Median time to recovery | 2–5 days after first email |
A best-in-class dunning system should recover 65%+ of expired card failures — and prevent another 30–40% entirely through pre-expiry interception. If you're recovering less than 40%, your email sequence is either too slow, too vague, or missing an in-app touchpoint.
At Scale
At Scale
Automated
Manual Escalation
FAQs
FAQs
What does the Stripe expired_card decline code mean?
The Stripe expired_card decline code means the credit or debit card on file has passed its expiration date and the issuing bank is rejecting all charge attempts. The card cannot be retried — the customer must update their payment method with a new, valid card.
What causes an expired_card error in Stripe?
Common causes include the customer forgetting to update their card after expiry, a bank reissuing a card with new details after a fraud event or program upgrade, prepaid or virtual cards with short expiry windows, Stripe Account Updater not being enabled, or annual plan customers whose card expired between billing cycles.
Should I retry a payment after a Stripe expired_card error?
No. expired_card is a hard decline and retrying will always fail until the customer updates their payment method. All recovery effort should go into a fast, clear card update email sequence — not retry scheduling.
How do I prevent expired_card failures before they happen?
Enable Stripe's Account Updater to automatically refresh card details for participating banks. Additionally, run a monthly query of your Stripe customers to identify cards expiring within 60 days and send a proactive pre-expiry email sequence. This pre-expiry approach eliminates 30–40% of expired card failures before they reach your billing system.
What is the recovery rate for Stripe expired_card failures?
With a proactive pre-expiry email sequence, 55–70% of at-risk cards can be updated before a charge fails. After a failure, combining email, in-app banners, and SMS achieves 65–75% recovery. Without any outreach, passive recovery is only around 5–10%.
What to do next
You are here
expired_card
Decline code reference
Check recoverability
Stripe Failure Lookup
See what's recoverable — and what isn't →
Then
Sign up for Recurflux
Automate recovery for every decline code →
Before you retry
Before you retry
Most expired_card failures are retried on the wrong schedule — which recovers the payment about 30% of the time. The other 70% leaves permanently. See what this code is actually costing at your MRR before deciding how to handle it.
Stop leaving revenue on the table
Recurflux handles code-specific retry scheduling, adaptive dunning, and dispute intelligence across all 30 Stripe decline codes. Connect in under 5 minutes.