A Stripe subscription status tells you where a customer sits in the billing lifecycle: active is in good standing, past_due means the latest invoice failed or was not attempted, unpaid means retries are over and collection has stopped, and canceled is final. Stripe defines eight statuses in all, and the three that trip people up are the ones that look alike after a failed payment.
If you are building access control, a billing page or a recovery workflow on Stripe Billing, the status field is the single most important value on the subscription object — and it is easy to misread. This guide takes each status in turn from Stripe's subscription documentation, shows how a subscription moves between them, and gives a plain rule for what your app should do in each. If you are still working out why payments fail in the first place, start with our guides to involuntary churn and soft versus hard declines.
Key takeaways
- Stripe has eight subscription statuses; only
past_due,unpaidandcanceleddescribe a failed recurring payment. past_dueis the recovery window.unpaidandcanceledare what you land in after the last retry, depending on a setting you choose.- Stripe's own guidance: notify the customer on
past_due, revoke access oncanceledorunpaid. canceledcannot be undone;unpaidcan be returned toactiveby settling the governing invoice.
What are the Stripe subscription statuses?
The eight statuses are incomplete, incomplete_expired, trialing, active, past_due, canceled, unpaid and paused. Read them as three groups: statuses before the first payment succeeds, the healthy states, and the failure states you manage.
| Status | What it means | Does Stripe keep collecting? |
|---|---|---|
| incomplete | First payment not yet successful; the customer has 23 hours, or the payment needs action such as 3D Secure or is still processing | Waiting on the first payment |
| incomplete_expired | The initial payment failed and was not fixed within 23 hours; the invoice is voided | No: create a new subscription |
| trialing | In a trial period; moves to active when the first payment succeeds | Not yet billing |
| active | In good standing | Yes, on the normal cycle |
| past_due | Payment on the latest finalized invoice failed or was not attempted | Retries may run, not guaranteed |
| unpaid | Retries are over and your settings chose to keep the subscription | Invoices keep generating, payment is not attempted |
| canceled | The subscription is ended; terminal and cannot be updated | No: collection for unpaid invoices stops |
| paused | A trial ended without a payment method and the end behavior is set to pause | No invoices are created until you resume |
What does past_due mean, and is the customer still being charged?
past_due means a payment failed (or was not attempted) and the subscription is in its recovery window; the customer has not been billed successfully, and Stripe may still retry. The subscription keeps generating invoices, and Stripe's documentation is careful to say that the status "doesn't guarantee another payment attempt" — so do not read past_due as "a retry is scheduled." Look at the invoice's next payment attempt for that.
This is the status where recovery work belongs. Your retry policy is running (Stripe's recommended Smart Retries default is 8 tries within 2 weeks), and so should your customer emails; see how Smart Retries work and what Stripe's built-in recovery does and doesn't cover. A customer who fixes their card here goes straight back to active.
past_due vs unpaid vs canceled: where does a failed subscription end up?
After the final retry, it ends wherever your Stripe failed-payment setting says: canceled, unpaid, or left past_due. There is no default Stripe imposes on your product; this is a choice you make once in the Dashboard (and can override per segment with automations), and it shapes everything downstream.
Cancel the subscription
Ends as canceled
Cleanest ledger, hardest to win back. The subscription cannot be updated afterwards, so reactivating a customer means a new subscription and fresh payment details.
Mark the subscription unpaid
Ends as unpaid
Keeps the subscription and customer record. Invoices continue to be generated, stay in draft and are not charged. Settling the governing invoice moves it back to active.
Leave it past due
Ends as past_due
Stripe keeps creating invoices and charges the customer according to your retry settings. The most forgiving option — and the easiest to forget to clean up.
Which one should you pick?
unpaid preserves the relationship at the cost of a pile of draft invoices to reconcile. If your product is cheap to re-provision and you prefer a clean state, canceled is simpler — just remember there is no reactivation, and plan a win-back email instead. We cover that backlog in the historical recovery guide.Status resolution: most recent invoice or all invoices?
A second setting decides what "caught up" means. With the default, most recent invoice, Stripe looks at the latest non-voided invoice: pay it, or mark it uncollectible, and the subscription returns to active even if older invoices are still open. With all invoices, the subscription cannot become active while any applicable outstanding invoice remains, and Stripe checks invoices from the previous 37 months. The second setting is stricter and avoids customers skipping a month of fees, but it can leave a customer past due for an invoice they never saw. It changes status resolution only, not your retry schedule.

Why is a new subscription stuck in incomplete?
Because the first payment has not succeeded yet, and the customer has 23 hours to make it succeed. A subscription created with charge_automatically starts incomplete with an open invoice. It stays that way if the card is declined, if the payment needs the customer to authenticate, or while a payment is still processing. Past 23 hours it becomes incomplete_expired and the invoice is voided; Stripe keeps the status so you can track customers who never activated. If the cause is authentication, the fix is a prompt, not a retry — see SCA and 3D Secure explained.
When should your app revoke access?
Notify on past_due; revoke on canceled and unpaid. That is Stripe's own guidance, and it works because past_due is the one status in which your recovery system is still allowed to win. A sensible rule set:

- trialing, active: full access.
- past_due: keep access if you want a grace period; show an in-app banner and send recovery emails. This is a business decision, not a Stripe rule.
- unpaid, canceled: revoke access; send a win-back message that links to a fresh checkout or the billing portal.
- incomplete: do not provision yet; the customer may still pay or authenticate.
- incomplete_expired, paused: no access; show a clear path to start or resume.
One trap: slow payment methods can leave a subscription active
active, and if the payment fails later Stripe voids the invoice while the subscription remains active. If you accept bank debits, watch invoice and payment events as well as the status. Our ACH return codes guide covers what those late failures look like.Which webhooks should you listen to?
Listen to the failure itself and to the status changes, and verify every signature. Stripe tells you to monitor subscription status changes; in practice that means subscription events (an updated event carrying the new status, a deleted event on cancellation, and a trial-will-end event a few days before a trial converts) plus invoice.payment_failed for the failure. Revova starts its recovery from invoice.payment_failed and stops when the matching invoice.payment_succeeded arrives, so a customer who fixes their card mid-sequence is not emailed again. If events ever go missing or arrive out of order, read why missed webhooks quietly cost revenue.
Frequently asked questions
What does past_due mean in Stripe?
A subscription is past_due when payment on its latest finalized invoice either failed or was not attempted. The subscription keeps creating invoices, and Stripe may retry the payment while it is past_due, though the status itself does not guarantee another attempt. What happens after the last retry is decided by the failed-payment settings in your Stripe Dashboard: cancel the subscription, mark it unpaid, or leave it past_due.
What is the difference between past_due and unpaid in Stripe?
past_due means Stripe is still in the recovery window: payment failed and retries may still run. unpaid means that window has ended and your settings told Stripe to stop collecting while keeping the subscription in place. An unpaid subscription continues to generate invoices but does not attempt payment, and Stripe’s documentation says to revoke access to your product while it is unpaid.
What is the difference between unpaid and canceled?
canceled is terminal: automatic collection for all unpaid invoices stops, and the subscription cannot be updated again except for metadata and cancellation details. To bring the customer back you create a new subscription and collect payment details again. unpaid keeps the subscription alive; paying the governing invoice, or marking it uncollectible, moves it back to active without starting over.
Why is a new Stripe subscription stuck in incomplete?
When a subscription needs an immediate payment, it starts as incomplete and the customer has 23 hours to pay. It stays incomplete if the card fails, if the payment needs authentication such as 3D Secure, or while a payment is still processing. After 23 hours without a successful payment it becomes incomplete_expired, the invoice is voided, and you create a new subscription for the customer.
When should my app revoke access to a Stripe subscriber?
Stripe’s guidance is to notify the customer when a subscription becomes past_due and to revoke access when it becomes canceled or unpaid. Many teams keep access during the past_due window as a grace period, since that is when retries and recovery emails are still working — that is a business decision, not a Stripe rule. Whatever you choose, drive it from the subscription status you receive by webhook, not from a guess about whether the last payment worked.
Can a Stripe subscription stay active after a payment fails?
Yes, with payment methods that confirm slowly. For methods such as ACH Direct Debit, a subscription can move straight to active after creation without passing through incomplete, and if the payment fails later Stripe voids the invoice while the subscription remains active. If you accept those payment methods, watch invoice and payment events as well as the subscription status.
Which Stripe webhooks tell me a subscription status changed?
Stripe tells you to monitor subscription status changes, which arrive on subscription events such as customer.subscription.updated, with customer.subscription.deleted for cancellation and customer.subscription.trial_will_end shortly before a trial converts. For the failure itself, invoice.payment_failed is the event recovery tools such as Revova start from. Verify the signature on every event before you act on it.
What does the most recent invoice versus all invoices setting change?
It changes how Stripe decides a subscription is back in good standing. With the default, most recent invoice, paying (or marking uncollectible) the latest non-voided invoice returns the subscription to active even if older invoices are unpaid. With all invoices, the subscription cannot become active while an applicable outstanding invoice remains. The setting changes status resolution only; it does not change your retry schedule.
Turn past_due into active again
Revova emails customers while a subscription is past due and stops when the payment succeeds. Starter is $29/mo, Pro is $79/mo, and the 14-day free trial needs no card.
Start my 14-day free trial →No credit card · Free Lost Revenue scan · 30-day money-back guarantee




