Checkout broken for Link users with saved bank accounts: confirmation token carries us_bank_account, PaymentIntent creation rejects it — buyers cannot pay
Summary
Buyers who have a Stripe Link profile with a saved US bank account cannot pay on Polar checkouts. They select Card, Link (embedded inside the card form) substitutes their saved bank account, and the confirmation token reaches your backend carrying a us_bank_account payment method. PaymentIntent creation then fails because us_bank_account is not among the allowed payment method types resolved for the intent, and the buyer sees a raw Stripe error. The failed attempt leaves no trace on the checkout, so merchants can't even see the lost revenue (see "Secondary issue").
Exact error shown to the buyer
The payment failed: The PaymentMethod provided (us_bank_account) is not allowed for this PaymentIntent. Please attach a PaymentMethod of one of the following types: card, link, cashapp. Alternatively, update the allowed payment_method_types for this PaymentIntent to include "us_bank_account". Please try again with a different payment method.
The buyer insists they paid by credit card — and our checkout data agrees: the failing checkout has payment_method_type: "card" while the error names us_bank_account. That is Link swapping the saved bank account in under the card flow (Instant Bank Payments, enabled by default for Link-enabled Stripe accounts since Oct 6, 2025).
Where it happens in code
At confirm, the PaymentIntent is created with automatic_payment_methods: {"enabled": True} plus the browser's confirmation token:
https://github.com/polarsource/polar/blob/e1df40cfd7be61be3fb60ba5a5b2e43694d291dc/server/polar/checkout/service.py#L1188-L1214
With automatic_payment_methods, the allowed types resolve from the platform Stripe payment-method configuration (card, link, cashapp per the error). But the Payment Element's Link integration surfaces Instant Bank Payments, so the confirmation token can legitimately carry us_bank_account — which intent creation then rejects. Per Stripe's docs, IBP is shown unless us_bank_account is explicitly offered, so this combination makes the rejection systematic for any Link user whose wallet resolves to a bank account. The SetupIntent path has the same shape:
https://github.com/polarsource/polar/blob/e1df40cfd7be61be3fb60ba5a5b2e43694d291dc/server/polar/checkout/service.py#L1217-L1236
Secondary issue: these failures are invisible to merchants
PaymentError is raised before any intent info is persisted on the checkout — the payment_processor_metadata write happens only in the success branch:
https://github.com/polarsource/polar/blob/e1df40cfd7be61be3fb60ba5a5b2e43694d291dc/server/polar/checkout/service.py#L1242
https://github.com/polarsource/polar/blob/e1df40cfd7be61be3fb60ba5a5b2e43694d291dc/server/polar/checkout/service.py#L1246
So a blocked buyer's checkout stays open and later reads as expired — indistinguishable from ordinary abandonment in the dashboard and API. We only discovered this because one buyer emailed us the error.
Impact on our organization
- Organization:
171259ad-f1da-4b93-aebf-fc9ba37ae845(details.so) - In the window we can measure (Jul 24–28, 2026): at least 10 distinct buyers reached payment and never succeeded, several retrying repeatedly (up to 4 attempts), across card / Google Pay / Apple Pay — including two $490 one-time purchases. ≈ $2,300 of attempted revenue in 5 days, for a small store.
- Example affected checkout ids (same buyer, card attempt then Google Pay retry):
fc81494c-824e-488d-9661-394828ed46fa,36eba587-c412-492a-8ef2-b90ab8b37f32. Buyer email available privately on request. - We also see repeated Apple Pay / Google Pay attempts that never complete in the same window (including our own test purchase). Possibly the same root cause, possibly a separate wallet configuration issue — please check.
- We contacted support by email first; no response yet, and payments are actively failing, hence the public report.
Reproduction
- Buyer with a Stripe Link account whose Link profile contains a linked US bank account (anyone who has used Instant Bank Payments on any Stripe-powered site).
- Open any Polar checkout and enter the Link-enrolled email; the card form's Link integration offers/preselects the saved bank account.
- Confirm payment → error above, checkout left
open/expiredwith no failure trace.
Asks
- Fix the mismatch: either allow
us_bank_accountfor these intents, or disable Link Instant Bank Payments on the platform Stripe account so Link only offers cards. - Size the blast radius: your Stripe request logs will show PaymentIntent creations failing with this exact error across all organizations — merchants cannot see this themselves.
- Make payment failures visible: persist failed attempts on the checkout (status or attempt log) in the dashboard/API.
- A timeline — every day this is live silently costs merchants conversions.
Source: polarsource/polar