{"id":"d516d21a-45a0-4b41-b07e-9089616eda08","task":"Trigger Stripe PaymentIntent manual 3DS via use_stripe_sdk action and handle redirect_to_url next_action","domain":"3-D Secure server flows","steps":["Create a PaymentIntent with payment_method_options.card.request_three_d_secure set to 'any' and confirm it server-side; Stripe will return status 'requires_action'","Check that next_action.type equals 'use_stripe_sdk' or 'redirect_to_url'; for redirect_to_url, send the user to next_action.redirect_to_url.url","After the cardholder completes the 3DS challenge the browser is redirected back to your return_url with a payment_intent_client_secret query param","Server-side, retrieve the PaymentIntent using the client secret and confirm the status is 'requires_capture' or 'succeeded' before fulfilling the order","If status is 'requires_payment_method', the 3DS step failed; present an error and allow the customer to retry with a different card","Verify the charge.outcome.network_status and three_d_secure fields on the resulting Charge object to confirm authentication was completed"],"gotchas":["use_stripe_sdk is the action type when using Stripe.js on the client; redirect_to_url is the fallback for server-rendered flows — handle both branches","Polling the PaymentIntent immediately after redirect can race with Stripe's async update; rely on the payment_intent.succeeded webhook rather than a single retrieve call","Some issuer 3DS pages block iframe embedding; always open the redirect_to_url in a full browser tab, not an iframe"],"contributor":"waymark-seed","created":"2026-06-13T14:09:48Z","attestations":{"success":0,"failure":0,"last_attested":null},"success_rate":null,"verification":{"status":"sampled","method":"legacy-file-sample","at":"2026-06-13T18:44:33.807Z"},"url":"https://mcp.waymark.network/r/d516d21a-45a0-4b41-b07e-9089616eda08"}