What past_due means in Stripe, and what to do next
Updated October 28, 2026
A subscription showing past_due in Stripe isn't a cancellation. It's a pause in the middle of a story: a renewal didn't go through, and Stripe may still be trying. Here's what the status means, how it differs from unpaid and canceled, and what you can do while it lasts.
The short definition
Stripe's subscription docs define past_due like this: payment on the latest finalized invoice either failed or wasn't attempted. While a subscription is past due:
- it keeps creating invoices each billing period;
- Stripe might retry the payment, but the status alone doesn't guarantee another attempt;
- your Dashboard settings decide what happens next.
In practice, most subscriptions become past_due because a renewal charge on a saved card was declined. To see why, check the decline code on the failed payment. Our decline code guide explains the common ones.
How it compares to the other statuses
| Status | What it means (per Stripe) |
|---|---|
active | In good standing. |
past_due | The latest finalized invoice failed or wasn't attempted. Invoices keep coming, and retries may happen. |
unpaid | Only used if your settings choose it after the final retry. The subscription stays in place and keeps generating invoices, but Stripe doesn't attempt payment. Stripe advises revoking access at this point. |
canceled | Terminal. Stripe stops automatically charging any unpaid invoices, and the subscription can't be updated. |
incomplete | The first payment hasn't succeeded yet. The customer has 23 hours to pay, or the payment needs an action such as authentication. |
incomplete_expired | The first payment never succeeded within those 23 hours. It doesn't bill. |
The short version: incomplete is about a brand-new subscription. past_due is about a renewal. unpaid is what past_due can become once retries are over.
What happens while it's past due
If you use Smart Retries or a custom retry schedule, Stripe re-attempts the charge on that schedule. Smart Retries' recommended default is 8 tries within 2 weeks; a custom schedule allows up to three retries. Each failure sends an invoice.payment_failed event with an attempt_count. The invoice's next_payment_attempt tells you when the next try is due.
Two cases where waiting won't help:
- Hard declines, such as
lost_card,stolen_card,transaction_not_allowedorauthentication_required. Stripe keeps the retries scheduled but only runs them once a new payment method is added. - Expired cards. The customer needs to add a new card.
In both cases, the subscription will sit in past_due until your customer acts or the retry window ends. A gentle reminder early on gives them the best chance to fix it.
What happens after the last retry
Stripe gives you four choices for when retries run out:
- Cancel the subscription. It becomes
canceled. - Mark it as unpaid. It becomes
unpaid. Invoices keep being generated and stay in draft. - Leave it past due. It stays
past_due. Invoices keep being generated and charged based on your retry settings. - Pause it, if the subscription is eligible. No new invoices are created until it resumes.
After the final attempt, Stripe makes no further payment attempts, and changing your settings only affects future retries. So it's worth choosing on purpose rather than finding out later.
One practical detail: Stripe's hosted "update your payment method" link from its customer emails stops working once the subscription is canceled, incomplete_expired or unpaid, or the renewal period has ended. Reminders work best while the subscription is still past_due.
How to get back to active
A past_due subscription returns to active when the right invoices are settled. Stripe lets you decide whether that means only the most recent invoice or all outstanding ones. When it's based on the most recent invoice, paying it or marking it as uncollectible moves the subscription back to active. The same goes for unpaid.
From your customer's side, that usually means one of two things:
- They update their card. The next retry, or a payment they make on the hosted page, settles the invoice.
- They pay the open invoice directly from the link you send.
A calm checklist for past_due subscriptions
- Decide on access. Many founders keep access during the retry window and only restrict it at
unpaid, which matches Stripe's advice to revoke access at that point. - Listen for the right events. Stripe suggests handling
invoice.payment_failedand watching subscription updates for moves topast_dueorunpaid. Verify webhook signatures. - Remind early, and kindly. Don't wait for the last retry. A short note on day one, with a link to update the card, is the friendliest version.
- Don't stack messages. If you send your own reminders, turn off Stripe's failed-payment email. More on that in Smart Retries vs dunning emails.
- Look back at the last 90 days. It's useful to know how many subscriptions passed through
past_due, and why.
See your own failed payments, for free
Calmretry reads your Stripe account with a restricted, read-only key and shows the failed subscription payments from the last 90 days: what was paid later, what is still open, and the decline reasons. It never touches funds or card data.
Sources
- Stripe Docs: How subscriptions work (subscription statuses)
- Stripe Docs: Automate payment retries
- Stripe Docs: Automate customer emails
- Stripe Docs: Using webhooks with subscriptions