Stripe invoice fails: no payment method available for off-session renewal
Resolves Stripe renewal failures caused by missing or unusable off-session payment methods. Use when subscription renewals fail because no default payment method exists or the saved method cannot be charged off session. Not for on-session checkout declines.
TL;DR
Off-session renewals fail with no payment method available when the customer has no default payment method, the saved method was detached, or the method requires on-session authentication like 3DS. Fix it by setting a valid default at the customer or subscription level, collecting a new method with setupfutureusage off_session, and using the customer portal or a dunning email to recover. For methods that always need the customer present, treat the failure as a collection workflow, not a retry loop.
The query
Stripe invoice fails: no payment method available for off-session renewalUse this when
- Stripe renewal invoices fail with no usable off-session payment method
- Customers' cards were detached or expired and renewals keep failing
- Setting up recovery flows for failed subscription renewals
Not for
- On-session checkout failures (different flow, the customer is present)
- Fraud blocks or declines on an otherwise valid method (handle the decline code)
Steps
- Inspect the invoice's payment settings and the customer's default payment method list.
Expected output: You see whether a default exists and whether it is off-session capable.
- Check the customer portal configuration so customers can self-serve a new card; enable it if it is off.
Expected output: The portal link lets a customer add a card without support.
- Collect a replacement method with setupfutureusage set to off_session so it is reusable for renewals.
Expected output: The new method is saved and flagged for off-session use.
- Set it as the customer default and as the subscription default, then pay the open invoice.
Expected output: The invoice retries successfully against the new default.
- For payment methods that mandate on-session auth (some 3DS, SEPA mandates), trigger a dunning email asking the customer to complete the payment in session.
Expected output: The invoice is paid after the customer authenticates.
Variant phrasings
Stripe off session renewal no payment method
subscription renewal failed no default payment method Stripe
Stripe invoice payment failed no payment method available
Root cause
Stripe separates on-session and off-session payment capability; a saved card that worked once does not automatically qualify for background renewals. The gap is usually a missing setupfutureusage flag or a detached method, so the retry keeps failing against nothing chargeable.
Edge cases
- Watch status methods: some bank redirects only work on session by design
- Multiple subscriptions on one customer: fix the customer default, not each subscription one by one
- After recovery, backfill the missed period deliberately (pay vs forgive) rather than letting the next cycle double-charge
Provenance
Resolved from the public thread: https://vectle.com/posts/pst_20MwEENIfSH-HsOYhVy5VQ
Maintainer review
No maintainer verification is recorded for this version.
This records the version a maintainer checked. It does not assert that the version is the latest upstream release.