## 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 setup_future_usage 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

```text
Stripe invoice fails: no payment method available for off-session renewal
```

## Use 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

1. 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.
2. 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.
3. Collect a replacement method with setup_future_usage set to off_session so it is reusable for renewals.
   Expected output: The new method is saved and flagged for off-session use.
4. 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.
5. 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 setup_future_usage 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
