WooCommerce Subscription Card Expired? Causes & Fix
A renewal was declined, the subscription is drifting toward On hold, and nobody raised a hand. Almost always the saved card expired or was replaced, and the off-session charge had nothing valid to bill. Here's how to confirm it and get the customer paying again.
Last updated: 16 Jul 2026 · ~7 min read
The most common cause is that the stored card expired or was reissued, so the off-session renewal charge was declined — typically with an expired_card or card_declined code at the gateway. WooCommerce Subscriptions then works through its failed-payment retry rules before giving up and putting the subscription On hold. The fix is to get the customer to add a new card, then process the renewal manually.
What an expired-card decline actually looks like
Renewals are off-session: nobody is at the checkout. WooCommerce asks the gateway to charge a saved token, the gateway looks at the card behind that token, sees an expiry date in the past (or a card the issuer has since replaced), and declines. No customer is present to be told, so the only trace is a failed renewal order, a gateway decline code, and — if retries are enabled — a queue of scheduled retry attempts.
From the owner's side, this is the quietest failure in the whole store. The subscription list still looks broadly healthy while retries run, and the money simply doesn't arrive. From the customer's side, nothing happened at all — unless a retry email reaches them, they have no idea their card is dead. That asymmetry is why expired cards bleed MRR for months before anyone notices the pattern.
The most common causes (most likely first)
- The saved card has passed its expiry dateThe gateway shows the declined renewal with an expired-card decline code, and the card's expiry month/year on the subscription is in the past. The plainest version of the problem.
- The issuer replaced the card, so the old token no longer worksThe card hasn't technically expired, but the charge is still declined — the customer was reissued a card after loss, fraud or a bank migration, and the stored token points at the dead one.
- The retry system is still running, so it looks like nothing is wrong yetThe renewal order is Pending or Failed, the subscription is On hold, and there are scheduled retry actions queued. The decline already happened; the store is just not finished admitting it.
- Retries are disabled, so a single decline ends the subscription immediatelyRenewal fails once and the subscription goes straight to On hold with no second attempt — check whether automatic retry is switched on at all in the Subscriptions settings.
- The retry emails are not reaching the customerRetries ran, the subscription is On hold, and the customer swears they were never told. The decline is real but the recovery path is broken — that's a mail-delivery problem sitting on top of a card problem.
- Automatic card updating is off or unsupported for that cardEvery expiry becomes a manual fire drill. Some gateways can pull reissued card details from the card networks automatically; if that feature is off, or the card brand isn't covered, every renewal after an expiry fails.
Where to look first
- Open the failed renewal order and read the order notes — they usually carry the gateway's decline reason verbatim. An expired-card or declined code there confirms cause 1 or 2 and you can stop looking at your store.
- Cross-check in the gateway dashboard. Find the declined charge and read the decline code. If the gateway never received a charge attempt at all, this isn't an expired card — it's a renewal that never fired, which is a different fault.
- Check
WooCommerce → Status → Scheduled Actionsfor retry actions against this subscription. Pending retries mean the retry rules are still walking; failed or complete ones mean the store has already given up. - Check
WooCommerce → Settings → Subscriptionsand confirm automatic retry of failed payments is enabled. If it isn't, one bad card equals one lost customer with no second chance (cause 4). - Get a new card on the subscription, then charge it. The customer can update it themselves from
My Account → Subscriptionsusing the change-payment-method link in the renewal email. Once a valid card is saved, process the outstanding renewal and the subscription reactivates.
How many of these are quietly running right now?
That's the real question with expired cards — not this one subscription, but the other ones declining next month that nobody has looked at. Checking every saved card's expiry and every queued retry by hand is a spreadsheet job. DiagnosticIQ's free dashboard watches the renewal path, and Renewal Guard is built for exactly this failure: declined renewals, exhausted retries and subscriptions sliding to On hold, surfaced before the MRR is already gone.
Get the free plugin →Made by Prima Digital — the team behind this guide. Free forever; no card to install.
How to know you fixed it
The subscription shows a new card, the outstanding renewal order moves to Processing or Completed with a matching successful charge in the gateway, and the subscription returns to Active with the next payment date scheduled.
Frequently asked
Was the customer charged?
No. An expired-card decline means the gateway refused the charge — no money moved. Check the gateway for a successful charge before assuming otherwise; a failed renewal order with a decline note is exactly that, a failure.
Will the subscription cancel itself?
Not usually. Once retries are exhausted, WooCommerce Subscriptions puts the subscription On hold rather than cancelling it, so it can be recovered as soon as a working card is added. Some stores add their own cancellation rules on top, so check any automation you've configured.
Can I just update the card for them?
Only in limited ways — most gateways won't let you type a customer's new card into the admin, because you shouldn't be handling raw card details. The supported route is the change-payment-method link, which sends the customer to the gateway's own form.
Why didn't I hear about this?
Because nothing errors on the store side. The renewal order fails, the retry queue absorbs it, and unless you read failed-order emails or watch the subscriptions list, an expired card looks identical to a quiet month.