Create a Stripe Customer and ensure their cash_balance.settings.reconciliation_mode is set appropriately ('automatic' or 'manual')
Create a PaymentIntent with payment_method_types=['customer_balance'], payment_method_data.type='customer_balance', amount, currency, and the customer ID
Confirm the PaymentIntent; Stripe generates a virtual bank account number (VBAN) for the customer to push funds to
Retrieve the PaymentIntent's next_action.display_bank_transfer_instructions to get the VBAN routing number, account number, and reference code to show the customer
When the customer wires or ACH-pushes funds to the VBAN, Stripe credits the customer's cash balance and automatically applies it to the open PaymentIntent
Listen for the payment_intent.succeeded webhook to confirm the PaymentIntent is funded
Known gotchas
VBANs for US bank transfers use ACH or domestic wire; availability of routing types (ABA, swift) depends on the currency and region; confirm the supported types for your account
If the customer sends more than the PaymentIntent amount, the excess stays in the customer cash balance and can be applied to future payments or refunded
Funding instructions can also be retrieved independently via the funding_instructions resource if you want to show them before creating a PaymentIntent
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp