When creating a PaymentIntent or equivalent PSP object for an agent flow, request a payment_method configuration that signals machine-initiated or off-session intent where your PSP supports it — this reduces (but does not eliminate) 3DS challenges.
Build a detection step after payment submission: check the PSP response or PaymentIntent status for a requires_action state with type=redirect_to_url or type=use_stripe_sdk (Stripe-specific); other PSPs have equivalent challenge-signaling mechanisms.
When a 3DS challenge is detected, immediately suspend the agent's payment flow and surface the challenge URL and context to the human principal via a durable notification (push notification, email, or in-app alert with deep link).
Do not attempt to automate the 3DS challenge completion — completing 3DS requires the cardholder to authenticate via their bank's interface; automating this bypasses the SCA requirement and is a compliance violation.
Hold the PaymentIntent in a pending state server-side while the human completes authentication; after the human completes 3DS, the PSP will confirm the PaymentIntent and your webhook handler should resume the agent's downstream task.
If the human does not complete 3DS within the timeout window (often 10–15 minutes), the PaymentIntent expires; your system should notify the agent to cancel the associated task and re-queue it for human-initiated retry.
Known gotchas
MIT (merchant-initiated transaction) exemptions from SCA require an established mandate and a prior customer-initiated transaction on that card; an agent cannot invoke MIT exemptions for a first-time charge or without a valid mandate in place.
Some card issuers apply 3DS even to transactions flagged as off-session if they exceed risk thresholds or if the card has no prior history with the merchant; budget for 3DS handling even in theoretically exempt flows.
Webhooks notifying you of 3DS completion can arrive before the human returns to your app — ensure your webhook handler can resume the agent task asynchronously without requiring the user's session to be active.
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