Short answer
Save the card to a Customer while the customer is present: create the PaymentIntent with customer and setup_future_usage: off_session, or collect it with a SetupIntent. Then charge later with the same customer and payment_method. Calling attach after the first payment is too late, and a detached PaymentMethod can’t be reused: collect the card again.
Why Stripe refuses the PaymentMethod, and the fix
01
The first payment didn’t save the card
“These approaches will perform any necessary steps to set up the PaymentMethod for future payments.” Stripe, Attach a PaymentMethod to a Customer
A PaymentIntent created without customer and setup_future_usage charges the card and leaves the PaymentMethod unattached, so it is spent. Save it during that first payment.
const pi = await stripe.paymentIntents.create({ amount, currency: 'usd', customer: customerId, setup_future_usage: 'off_session', automatic_payment_methods: { enabled: true }, });02
Saving a card without charging it
“You should always set up reusable payment methods for future use to reduce the chance of future declines and payment friction” Stripe, Payment methods overview (Single-use or reusable)
For a trial or a card on file, use a SetupIntent with the customer. It attaches the PaymentMethod and handles authentication up front, so later off-session charges are less likely to fail.
const si = await stripe.setupIntents.create({ customer: customerId, automatic_payment_methods: { enabled: true }, }); // later await stripe.paymentIntents.create({ amount, currency: 'usd', customer: customerId, payment_method: pmId, off_session: true, confirm: true, });03
The PaymentMethod was detached
Removing a card from a customer (detach, or a customer portal removal) ends it for good. Ask the customer to add the card again through a SetupIntent; reattaching the old ID won’t work.
04
A single-use payment method type
“Single-use payment methods (for example, some kinds of bank transfers) can’t be attached to customers because they’re consumed after a payment attempt.” Stripe, Payment methods overview (Single-use or reusable)
Some payment method types can only be used once and can never be attached. Check the type before you build a recurring flow on it.
Checked against the vendor’s docs on : Stripe docs: Attach a PaymentMethod to a Customer; Stripe docs: Payment methods overview; Stripe docs: Error codes.
Rather hand it over?
Fixed scope, fixed price, paid upfront. The work happens in writing; no call needed.
- $950Stripe Billing Fix and SetupSubscriptions, webhooks, customer portal and failed payments set up or fixed, tested in Stripe test mode.See scope and start
- from $450App Fix TicketOne reproducible bug in an existing mobile or web app, diagnosed and fixed.See scope and start
- from $450AI-Built App RescueA 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
Related: Stripe “no default payment method” on renewal · Stripe subscription stuck incomplete · Stripe “No such PaymentMethod” · Stripe “Must provide source or customer”