/ Learn · 02 · Risk types

Failed payment, grace period and expiring card aren't the same risk

WooCommerce subscription risk types: failed payment vs grace period vs expiring card

4 min read···Subscription Health Check

Not every subscription payment problem is the same problem. A card that's about to expire, a charge that just failed, and a subscription sitting in its grace period all look like "at risk" from a distance — but they call for different responses, on different timelines, and lumping them into one undifferentiated bucket is exactly how stores lose track of what actually needs a human today versus what can wait.

Failed payment — retries are already exhausted

WooCommerce moves a subscription to on-hold once its retry schedule runs out with nothing succeeding. By the time that happens, the automatic recovery window has already closed — it needs a person, not another retry. Subscription Health Check always scores this Critical for exactly that reason. One nuance: an on-hold subscription with zero recorded retry attempts is treated as healthy rather than flagged, since that combination usually means the subscription hasn't actually failed yet. A 12-month lookback (default) keeps very old failures out of new alerts.

Subscription Health Check dashboard tabs for Expiring Card, Failed Payment and Grace Period risk types in WooCommerce
Expiring card, failed payment and grace period are scored and filtered as three separate tabs, not one undifferentiated risk list.

Grace period — still active, still retrying

A subscription in its grace period is still active and WooCommerce is still attempting to collect. Severity here climbs with days elapsed — Info, then Warning at 3 days, then Critical at 7 (both configurable) — rather than being fixed at one level. Its lookback window defaults to 6 months.

Expiring card — a problem that hasn't happened yet

This one is different: it's not reacting to a failure, it's predicting one. The plugin compares the saved card's expiry to the subscription's next renewal date. If that card would no longer be valid by then, it's flagged — always Critical, because the fix (updating the card) needs to happen before the charge attempt, not after. The comparison only fires when renewal is due within a configurable window (30 days by default). If a subscription has no next-payment date on file, the plugin falls back to flagging already-expired or near-expiry cards directly, subject to a 3-month lookback.

Why non-card gateways don't show up here

Expiring-card detection depends on reading a saved payment token's expiry date. Gateways like PayPal don't store that kind of token, so subscriptions paying that way simply never enter this particular risk check — they're still covered by the failed-payment and grace-period checks, which don't depend on card data at all.

Quick reference
  • ▸Failed payment: always Critical, 12-month lookback (default)
  • ▸Grace period: Info / Warning / Critical by day count, 6-month lookback (default)
  • ▸Expiring card: always Critical, 30-day renewal window (default), 3-month lookback when there's no next payment date
  • ▸On-hold with zero retries is treated as healthy, not flagged
Common questions

What's the difference between a failed payment and a grace period in WooCommerce?

A grace period means WooCommerce is still actively retrying the charge and the subscription is still active. A failed payment (on-hold) means the retry schedule has already run out with nothing succeeding — the automatic recovery window has closed and it needs a person to step in.

Why is an expiring card flagged before anything has failed?

Because it's a prediction, not a reaction. The plugin compares the saved card's expiry to the subscription's next renewal date, and flags it as Critical if the card won't be valid by then — the fix needs to happen before the charge attempt, not after.

What happens to subscriptions paid via PayPal or other non-card gateways?

They're never evaluated for expiring-card risk, since that check depends on reading a saved card token's expiry date. They're still fully covered by the failed-payment and grace-period checks, neither of which depends on card data.

Subscription Health Check

See it flag your own subscriptions.

$129 per site, billed annually. Run the first scan on your own store's data, not a demo.

Buy now — $129/yr