# Stripe: subscription stuck in past_due

> A Stripe subscription is past_due: the latest invoice payment failed. Email the customer, update the right payment method, and set what happens after retries.

Canonical: https://app369.com/fix/stripe-subscription-past-due/
Last updated: 2026-11-09

past_due is the Stripe subscription status for a renewal whose latest invoice payment failed or wasn’t attempted. Stripe may retry, by default up to 8 times in 2 weeks for new accounts. It stays past_due until the invoice is settled, or until your settings move it to canceled or unpaid after the last retry.

**Short answer**

Listen for invoice.payment_failed and email the customer a link to update their card. Update the payment method on the field Stripe charges, then pay the open invoice. In Dashboard settings, choose what happens after the last retry: cancel, mark unpaid, or stay past_due.

Rather not fix it yourself? [**Stripe Billing Fix and Setup**](https://app369.com/fixed-price/stripe-billing-setup/) handles it at a fixed price, agreed before work starts.

## **Why the subscription stays past_due, and the fix**

1. 01 ### **Nobody told the customer**
  > “When a recurring subscription payment fails, listen for invoice.payment_failed.” [**Stripe, How subscriptions work**](https://docs.stripe.com/billing/subscriptions/overview) Without an email, the customer doesn’t know the card failed. Handle invoice.payment_failed and send a link to the customer portal or the hosted invoice page.
2. 02 ### **The new card went on the wrong field**
  > “When you update payment methods after a failed payment attempt, update the field where the previous payment failed.” [**Stripe, Automate payment retries**](https://docs.stripe.com/billing/revenue-recovery/smart-retries) If the subscription has its own default payment method, updating the customer’s default doesn’t help. Update the subscription, then pay the open invoice.```
await stripe.subscriptions.update(subscriptionId, { default_payment_method: paymentMethodId });
// pay only the invoice you mean to collect
await stripe.invoices.pay(openInvoiceId, { payment_method: paymentMethodId });
```
3. 03 ### **Retries stopped**
  > “Stripe might retry payment while the subscription is past_due, but this status doesn’t guarantee another payment attempt.” [**Stripe, How subscriptions work (statuses)**](https://docs.stripe.com/billing/subscriptions/overview) Retries end after the last scheduled attempt, and Stripe skips retries for hard declines or when no payment method is available. The invoice then waits for the customer.
4. 04 ### **Your app gives access by the wrong status** Decide what past_due means in your app, for example a grace period with a banner, and remove access on unpaid or canceled. Read the status from customer.subscription.updated, not from the checkout redirect.

Checked against the vendor’s docs on November 9, 2026: [Stripe docs: How subscriptions work](https://docs.stripe.com/billing/subscriptions/overview); [Stripe docs: Automate payment retries](https://docs.stripe.com/billing/revenue-recovery/smart-retries).

## **Rather hand it over?**

Fixed scope, fixed price, paid upfront. The work happens in writing; no call needed.

- [$950**Stripe Billing Fix and Setup**Subscriptions, webhooks, customer portal and failed payments set up or fixed, tested in Stripe test mode.**See scope and start**](https://app369.com/fixed-price/stripe-billing-setup/)
- [from $450**App Fix Ticket**One reproducible bug in an existing mobile or web app, diagnosed and fixed.**See scope and start**](https://app369.com/fixed-price/flutter-firebase-bug-fix/)
- [from $450**AI-Built App Rescue**A Lovable, Bolt or Cursor app checked end to end in 3 days, then its worst problems fixed at a fixed price.****No issues worth fixing, no charge.**** If the Launch Check finds nothing rated medium or higher, Simon refunds the full $450. You keep the report either way. This applies to the first 10 Launch Checks bought after October 30, 2026.**See scope and start**](https://app369.com/fixed-price/ai-app-rescue/)

[**All 127 Fiverr reviews**](https://app369.com/reviews/)

Related: [**Stripe subscription canceled, access wrong**](https://app369.com/fix/stripe-subscription-canceled-access-wrong/) · [**Stripe subscription incomplete**](https://app369.com/fix/stripe-subscription-incomplete-requires-action/) · [**Stripe no default payment method**](https://app369.com/fix/stripe-no-default-payment-method/) · [**Stripe card_not_supported**](https://app369.com/fix/stripe-card-not-supported/)

Questions

## **More on this error**

<details>

<summary>**What happens after the last retry? **+</summary>

Your Dashboard settings decide: the subscription can be canceled, marked unpaid, or left past_due. Pick the one that matches how your app handles access.

</details>

<details>

<summary>**Does past_due stop new invoices? **+</summary>

No. It keeps creating invoices. Check older open ones: pay what you intend to collect, and only void or write off what you won’t charge.

</details>

<details>

<summary>**Can you fix it for me? **+</summary>

If one bug is the whole problem, the App Fix Ticket covers it: a written diagnosis first, then the fix. If the app has more going on, the Launch Check is a written check of the whole app. Each issue found is rated critical, high, medium or low, with where it is and how it was confirmed. No issues worth fixing, no charge. If the Launch Check finds nothing rated medium or higher, Simon refunds the full $450. You keep the report either way. This applies to the first 10 Launch Checks bought after October 30, 2026.

</details>

A different error?

## **Describe it and get a written quote**

Send the error and what you were doing. You get a written scope, a fixed price and a timeline; Simon replies by email, usually within one business day.

[**Describe your problem **→](https://app369.com/contact/) [**All fixes**](https://app369.com/fix/)