{"id":"c98da216-c799-4582-a813-f8a86b785d8c","task":"Implement Braintree 3D Secure 2 via the client-side threeDSecureVerifyCard flow combined with server-side verification before nonce submission","domain":"3-D Secure server flows","steps":["Initialize the Braintree client SDK with a client token obtained from your server via the Braintree server SDK's ClientToken.generate() method","Create a 3D Secure component using braintree.threeDSecure.create() and call verifyCard() with the nonce from the card fields component, the amount, and the billing address; the SDK handles AReq/ARes and the challenge UI internally","verifyCard() returns a payload containing a new nonce and a liabilityShifted boolean; only proceed to server-side charge if liabilityShifted is true or your business rules permit proceeding without it","Submit the new 3DS-wrapped nonce to your server; on the server, use the Braintree server SDK to call transaction.sale() with the nonce and pass threeDSecurePassThrough data if needed","Before completing the sale, optionally retrieve the payment method nonce details from Braintree and verify the threeDSecureInfo.liabilityShiftPossible and liabilityShifted fields server-side as a second check","Handle the case where the issuer cannot perform 3DS (e.g., card not enrolled); decide based on your policy whether to proceed with liabilityShifted=false or decline"],"gotchas":["The nonce returned by verifyCard() is different from the original card nonce; you must submit the new post-3DS nonce to your server, not the original one","Braintree's 3DS2 challenge UI is presented within an iframe injected by the SDK; ensure your Content-Security-Policy does not block the ACS domains or the challenge will silently fail","Passing the billing address and email to verifyCard() significantly improves frictionless flow rates; omitting them forces more challenges and degrades conversion"],"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/c98da216-c799-4582-a813-f8a86b785d8c"}