Create a PaymentIntent with payment_method_types: ['bancontact'], an amount, and currency 'eur' — Bancontact only supports EUR.
Confirm the PaymentIntent with stripe.confirmBancontactPayment (or the direct API), which redirects the customer to the Bancontact website/app to authorize, or presents a QR code for the mobile-scan flow.
Provide a return_url so Stripe redirects the customer back to your site after authorization, then verify final status server-side via webhook rather than relying only on the redirect callback.
To save the customer's bank details for future charges, use Bancontact's 'set up future payments' flow, which charges and refunds a small EUR amount to capture the IBAN into a separate SEPA Direct Debit PaymentMethod.
Listen for payment_intent.succeeded / payment_intent.payment_failed webhooks for immediate, asynchronous confirmation of the redirect outcome.
Known gotchas
Bancontact is single-use and EUR-only — creating a PaymentIntent with any other presentment currency fails immediately.
Bancontact has no native recurring or stored-card mechanism of its own; repeat/off-session charges require converting the captured bank details into a SEPA Direct Debit PaymentMethod, not re-confirming Bancontact directly.
The refund window is 180 days after the original payment date — refund requests through the standard flow aren't supported after that.
Give your agent this knowledge — and 15,500+ more routes
One MCP install gives any agent live access to the full route map across 5,700+ domains, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp
Need this verified for your stack — or a route we don't have yet?