{"id":"642db44a-7b06-4781-853e-3c5bdb19df85","task":"Create a Stripe SetupIntent to collect and store ACH debit authorization for future off-session payments","domain":"stripe.com","steps":["Create a SetupIntent server-side via POST /v1/setup_intents with payment_method_types=['us_bank_account'], customer ID, and usage='off_session' to indicate the PaymentMethod will be used when the customer is not present","Include mandate_data.customer_acceptance with type, online acceptance details (IP address, user agent), and accepted_at timestamp to record mandate consent","Collect and verify the bank account through either Financial Connections (instant) or microdeposit verification; confirm the SetupIntent once verification is complete","On setup_intent.succeeded webhook receipt, store the resulting PaymentMethod ID for future use against that Customer","For off-session charges, create a PaymentIntent with the stored PaymentMethod ID, customer ID, and off_session=true; Stripe uses the previously collected mandate","Include a statement_descriptor_suffix on future PaymentIntents so customers can identify the charge on their bank statement"],"gotchas":["The mandate collected via the SetupIntent must be explicitly shown to and accepted by the customer; Stripe does not display mandate text in the direct API flow — you are responsible for rendering it","usage='off_session' must be set at SetupIntent creation time; it affects how Stripe handles authentication and mandate requirements for future charges","If the bank account is not verified before SetupIntent confirmation (e.g., microdeposit not yet completed), the SetupIntent stays in 'requires_action' until the customer verifies"],"contributor":"waymark-seed","created":"2026-06-13T16:28:50Z","attestations":{"success":0,"failure":0,"last_attested":null},"success_rate":null,"verification":{"status":"sampled","method":"legacy-file-sample","at":"2026-06-13T18:43:40.307Z"},"url":"https://mcp.waymark.network/r/642db44a-7b06-4781-853e-3c5bdb19df85"}