Stripe decline code
expired_cardThe card has passed its expiration date. This is a hard decline: retrying will never succeed until the card is replaced.
Type
Recoverable
Frequency
Very Commonexpired_card is one of the most preventable dunning causes. Cards expire on predictable schedules (every 3-5 years), and Stripe emits the invoice.upcoming event before renewal. By combining the expiration date on file with Stripe Account Updater (which automatically refreshes many cards in the background), you can prevent roughly 40-60% of expired_card declines before they happen.
Do not retry an expired_card. Every retry will fail with the same code and wastes API quota. Instead, immediately email the customer with a card update link and follow up on days 1, 3, 7, and 10 until they update.
Communicate urgency without being alarmist: "Your card on file has expired, please update it to keep your subscription active." Include a one-click secure link to a payment update page. Do not ask for the full card number; use Stripe Elements or a Checkout session to tokenize safely.
Permanent issue. The card cannot be charged. Customer must provide a new payment method.
Sometimes. Account Updater pulls new expiration dates and card numbers from participating networks (Visa, Mastercard). It works for roughly 40-60% of cards. The other 40-60% still need the customer to update manually.
A 30-day pre-expiration email is ideal for non-critical subscriptions. For annual subscriptions or high-value plans, send one at 30 days and another at 7 days.
Hard. The card cannot be charged until the customer provides a new expiration date or a new card entirely.
How Rebounce handles expired_card
Rebounce classifies every failed payment by its Stripe decline code and applies the optimal recovery strategy automatically. For expired_card, that means intelligent retries at the right times. Multi-channel follow-up through email, SMS, WhatsApp, and in-app banners ensures the customer actually sees the message.
invalid_expiry_monthHard declineThe expiration month submitted is not a valid value (not between 1 and 12).
invalid_expiry_yearHard declineThe expiration year is invalid, typically because it is in the past or is not a valid 4-digit year.
incorrect_numberHard declineThe card number is not valid. It likely failed the Luhn checksum or does not exist.