
stripe expired card
Stripe Expired Card: Decline Codes & Prevention
What Is a Stripe Expired Card Failure
A Stripe expired card failure occurs when a customer attempts to pay with a credit or debit card whose expiration date has already passed, causing Stripe to reject the transaction with the decline code expired_card before the payment ever reaches the card network for authorization.
Expired card declines are classified as hard declines in Stripe's decline taxonomy, meaning retry attempts will continue to fail until the customer provides updated payment information. These failures are detected during Stripe's pre-authorization validation checks, not by the issuing bank, making them preventable through proactive card update mechanisms.
How Stripe Detects Expired Cards
Stripe validates the expiration date during the payment method creation process by comparing the exp_month and exp_year parameters against the current date. When a card's expiration date is in the past, Stripe immediately returns a decline without sending the authorization request to the card network.
The API returns a charge object with status: failed and a decline code of expired_card. The raw decline code from the card network will be null because the transaction never reaches network processing. This pre-validation saves processing fees and reduces unnecessary network traffic.
Common Scenarios for Expired Card Failures
Subscription renewals account for the majority of expired card failures, particularly for annual or infrequent billing cycles where customers forget to update their payment methods. Industry estimates suggest 20-30% of subscription payment failures stem from expired cards.
One-time purchases with saved payment methods also generate expired card declines when customers return to a merchant after their stored card has expired. E-commerce platforms with tokenized checkout experiences must handle these failures gracefully to avoid cart abandonment.
Manual card entry errors occasionally produce false expired card failures when customers accidentally enter incorrect expiration dates, though these represent a smaller percentage of total occurrences.
Stripe's Automatic Card Updater
Stripe offers an Automatic Card Updater service that proactively refreshes expired card details through partnerships with card networks. This feature works through Account Updater programs operated by Visa, Mastercard, American Express, and Discover.
When enabled, Stripe automatically receives updated card numbers and expiration dates from card networks when issuers replace expired or compromised cards. The service updates stored payment methods before the expiration date arrives, reducing decline rates by an estimated 30-40% for subscription businesses.
The updater runs automatically for Payment Methods and Sources stored in Stripe. No additional API calls are required, though businesses should monitor customer.source.expiring webhook events to trigger supplementary customer communications.
Preventing Expired Card Declines
Implement expiration reminder emails 30-45 days before cards expire by monitoring the exp_month and exp_year fields on stored payment methods. Stripe's recommended approach uses webhooks to trigger notifications when expiration dates approach.
The customer.source.expiring webhook fires three times: three months before expiration, one month before, and at expiration. Configure these webhooks to prompt customers through email or in-app notifications to update their payment information.
For subscription businesses, enable Smart Retries in Stripe Billing settings. This feature automatically retries failed payments using machine learning to determine optimal retry timing, though it cannot overcome expired card failures without customer intervention.
Handling Expired Card Failures
When an expired_card decline occurs, immediately notify the customer through their preferred communication channel. The notification should clearly state the card has expired and provide a direct link to update payment information.
Stripe's Customer Portal offers a self-service option for customers to update their own payment methods without merchant intervention. This reduces support burden and accelerates payment method updates.
For high-value transactions or enterprise customers, implement fallback logic to attempt charges against alternative payment methods stored in the customer record. The Stripe API allows multiple payment methods per customer, enabling automatic failover to backup cards.
Decline Code Reference
The decline code expired_card appears in the outcome.reason field of failed charge objects. This code is distinct from card_declined, which indicates issuer-side rejections.
In webhook payloads, expired card failures trigger charge.failed events with the specific decline code accessible at data.object.outcome.reason. Parse this field to route customers to appropriate update flows rather than generic decline messaging.
Stripe's API documentation categorizes expired_card as a do_not_honor equivalent in card network terminology, though the failure mechanism differs because validation occurs before network submission.
Related
Free diagnostic
See exactly what's happening in your Stripe account
Connect your Stripe account and get a breakdown of every failed payment — which ones can be retried, which ones need customer outreach, and how much is recoverable. Takes 5 minutes. No credit card required until we recover $49.
Run free diagnostic