Initialize the 3DS SDK or invoke the 3DS Server API; collect device data (browser fingerprint or SDK device info) and send the AReq (Authentication Request) to your 3DS Server with card details, device data, and transaction context.
The 3DS Server forwards the AReq to the Directory Server (Visa or Mastercard), which routes to the Issuer's ACS (Access Control Server); the ACS evaluates risk and returns an ARes.
Parse the ARes transStatus: Y (authenticated, frictionless) means proceed to authorization without a challenge; C (challenge required) means you must present the challenge flow to the cardholder.
For challenge flows, redirect or display the challenge URL from the ARes in an iframe or the 3DS SDK challenge screen; the cardholder completes the challenge (OTP, biometric, or out-of-band approval) and the ACS sends a CReq/CRes exchange.
On challenge completion, retrieve the final authentication result via your 3DS Server; extract the CAVV (Cardholder Authentication Verification Value), ECI (Electronic Commerce Indicator), and authentication version.
Submit the authorization with CAVV and ECI in the appropriate fields; ECI 5 (Visa) or 2 (Mastercard) indicates fully authenticated with liability shift; ECI 6 or 1 indicates attempted authentication without full liability shift.
Known gotchas
A transStatus of A (attempted) means the ACS could not authenticate but the attempt was recorded; include the ECI and CAVV in the authorization anyway to claim partial liability shift — omitting them loses even the attempted protection.
Browser fingerprint data collected for the AReq must match the cardholder's actual browser at checkout; mismatches increase the likelihood of a challenge being triggered.
3DS2 challenge timeout is typically 10–15 minutes; if the cardholder does not complete the challenge in time, the authentication expires and must be restarted from the AReq.
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