{"title":"3D Secure 2 API integration","category":"default","creationDate":1776961627,"content":"<div class=\"sc-notice info\"><div>\n<p>This page describes 3D Secure 2 integration steps for version 46 or earlier of the  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Checkout\/latest\/post\/payments\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">\/payments<\/a> endpoint. If you are using a later version, refer <a href=\"\/pt\/checkout\/3d-secure\/native-3ds2\">Native 3D Secure 2 authentication<\/a>.<\/p>\n<\/div><\/div>\n<h2 id=\"how-it-works\">How it works<\/h2>\n<div class=\"sc-notice info\"><div>\n<p>If you are using 3D Secure for PSD2 compliance, read our <a href=\"\/pt\/checkout\/psd2-sca-compliance-and-implementation-guide\">comprehensive PSD2 SCA guide<\/a>.<\/p>\n<\/div><\/div>\n<p>A payment qualified for 3D Secure 2 can go through either a frictionless or a challenge authentication flow before it is authorised. To simplify your implementation,\u00a0use our web, Android, or iOS 3D Secure 2 Component in addition to your existing API\u00a0integration.<\/p>\n<p>Components are our pre-built modules that you can use to perform specific functions such as 3D Secure 2 authentication. To implement, submit API requests from your backend and then use our 3D Secure 2 Component to:<\/p>\n<ul>\n<li>Handle the device fingerprinting and challenge flows, including the data exchange\u00a0between your front end or client and the issuer's Access Control Server (ACS).<\/li>\n<li>Return the device fingerprinting and the challenge flow result.<\/li>\n<\/ul>\n<p>If you do not want to use the 3D Secure 2 Component and want to build the web-based implementation on your own, see\u00a0<a href=\"\/pt\/checkout-build-your-own-3ds2\">Build your own 3D Secure 2 implementation<\/a>. You can also choose to <a href=\"\/pt\/checkout-build-your-own-3ds2#optional-prefetch-device-fingerprinting-keys\">prefetch 3D Secure 2 device fingerprinting keys<\/a> to reduce the number of calls for each transaction.<\/p>\n<p>For an app-based implementation, we recommend that you use our 3D Secure 2 Android or iOS Component. Both our Android and iOS 3D Secure 2 Component implementations are approved and certified by EMVCo. If you want to build your own 3D Secure 2 mobile implementation, you will need to get an EMVCo certification.<\/p>\n<div class=\"sc-notice note\"><div>\n<p>3D Secure 2 is supported from v41 and later of  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Checkout\/latest\/post\/payments\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">\/payments<\/a> and  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Checkout\/latest\/post\/payments\/details\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">\/payments\/details<\/a> endpoints.<\/p>\n<\/div><\/div>\n<div class=\"sc-notice info\"><div>\n<p>If you only want to perform a 3D Secure 2 authentication and then authorise the payment later, see the\u00a0<a href=\"\/pt\/checkout\/3d-secure\/other-3ds-flows\/standalone-authentication\">Authentication-only<\/a>\u00a0integration page.<\/p>\n<\/div><\/div>\n<p>Here's a diagram for a 3D Secure 2 full implementation with the 3D Secure 2 Component:<\/p>\n<p><img alt=\"\" src=\"\/user\/pages\/docs\/02.online-payments\/19.3d-secure\/01.native-3ds2\/10.api-integration\/3ds2-checkout-api.png\" \/><\/p>\n<ul>\n<li><a href=\"#submit-a-payment-request\">Submit a payment request<\/a>\u00a0with the required 3D Secure 2 objects to start the authentication process.\u00a0Build your implementation depending on the\u00a0<code>resultCode<\/code>\u00a0returned in the response.<\/li>\n<li><a href=\"#get-the-3d-secure-2-device-fingerprint\">Get the 3D Secure 2 device fingerprint<\/a>. If you receive an\u00a0<strong>IdentifyShopper<\/strong>\u00a0<code>resultCode<\/code>, you need to get the shopper's 3D Secure 2 device fingerprint. Initialize the 3D Secure 2 Component for device fingerprinting and submit the result to Adyen. If after submitting the result you get a response with an\u00a0<strong>Authorised<\/strong>\u00a0<code>resultCode<\/code>, this indicates that the transaction was authenticated in a <strong>frictionless flow<\/strong>, and the payment was successfully completed.<\/li>\n<li><a href=\"#present-a-challenge\">Present a challenge to the shopper<\/a>.\u00a0If you receive\u00a0<strong>ChallengeShopper<\/strong>\u00a0<code>resultCode<\/code>, this means that the issuer requires further shopper interaction and is initiating a <strong>challenge flow<\/strong>. In a web-based integration, this result code can be returned after you submit a payment request or after you submit the device fingerprint result to Adyen, depending on the logic on the issuer's side.\u00a0To handle a challenge flow, initialize the 3D Secure 2 Component for the challenge flow and submit the result to Adyen.<\/li>\n<\/ul>\n<p>Based on issuer performance, Adyen's <a href=\"https:\/\/www.adyen.com\/knowledge-hub\/psd2-simplified-with-our-new-authentication-engine\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" class=\"external-link no-image\">Authentication Engine<\/a> might also route payments to the 3D Secure 2 redirect flow. This is indicated by a\u00a0<strong>RedirectShopper<\/strong>\u00a0<code>resultCode<\/code>\u00a0response. For more information, refer to <a href=\"\/pt\/online-payments\/3d-secure\/native-3ds2#payments-routed-to-redirect-flow\">Payments routed to 3D Secure 1<\/a>.<\/p>\n<p>For a complete list of\u00a0<code>resultCode<\/code>\u00a0values and the actions that you need to take, see\u00a0<a href=\"\/pt\/checkout\/payment-result-codes\">Result codes<\/a>.<\/p>\n<h2 id=\"before-you-begin\">Before\u00a0you begin<\/h2>\n<p>Before you begin to integrate, make sure you have followed the <a href=\"\/pt\/get-started-with-adyen\">Get started with Adyen guide<\/a> to:<\/p>\n<ul>\n<li>Get an overview of the steps needed to accept live payments.<\/li>\n<li>Create your test account.<\/li>\n<\/ul>\n<p>After you have created your test account:<\/p>\n<ol>\n<li><a href=\"\/pt\/development-resources\/api-credentials#generate-api-key\">Get your API Key<\/a>. Save a copy\u00a0as you'll need it for API calls you make to the Adyen payments platform.<\/li>\n<li>Read and understand the\u00a0<a href=\"\/pt\/checkout\/components-web\">Components integration<\/a> guide. You should already know how to collect shopper information, either with the\u00a0<a href=\"\/pt\/payment-methods\/cards\">Card component<\/a>\u00a0or with your\u00a0<a href=\"\/pt\/checkout\/api-only\">own payment form<\/a>\u00a0implementation.<\/li>\n<li>Install the 3D Secure Component depending on your current integration:\n<ul>\n<li>If you are using <strong>Adyen iOS and Adyen Android version 3.0.0 and later<\/strong>: Use the 3D Secure 2 Action Components for <a href=\"\/pt\/checkout\/3d-secure\/native-3ds2\/ios-component#3ds2-component\">iOS<\/a> or <a href=\"\/pt\/checkout\/3d-secure\/native-3ds2\/android-component#3ds2-component\">Android<\/a>.<\/li>\n<li>If you are using <strong>Adyen iOS and Adyen Android version 2.x.x and earlier<\/strong>: Use the 3D Secure 2 Components described on this page.<\/li>\n<\/ul><\/li>\n<\/ol>\n<h3 id=\"install-ios-3d-secure-2-component\">Install 3D Secure 2 Component for Adyen iOS version 2.6.0 to 2.8.4<\/h3>\n<p>Import the iOS 3D Secure 2 Component\u00a0to your project using either CocoaPods or Carthage:<\/p>\n<p><strong>CocoaPods<\/strong><\/p>\n<ol>\n<li>Add\u00a0<code>pod 'Adyen'<\/code>\u00a0to your\u00a0<code>Podfile<\/code>.<\/li>\n<li>Run\u00a0<code>pod install<\/code>.<\/li>\n<\/ol>\n<p><strong>Carthage<\/strong><\/p>\n<ol>\n<li>Add\u00a0<code>github \"adyen\/adyen-ios\"<\/code>\u00a0to your\u00a0<code>Cartfile<\/code>.<\/li>\n<li>Run\u00a0<code>carthage update<\/code>.<\/li>\n<li>Link the framework with your target as described in\u00a0<a href=\"https:\/\/github.com\/Carthage\/Carthage#adding-frameworks-to-an-application\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" class=\"external-link no-image\">Carthage Readme<\/a>.<\/li>\n<\/ol>\n<h3 id=\"install-android-3d-secure-2-component\">Install 3D Secure 2 Component for Adyen Android version 2.4.0 to 2.4.5<\/h3>\n<p>\u00a0Import the Android 3D Secure 2 Component by adding this line to your\u00a0<strong>build.gradle<\/strong>\u00a0file.<\/p>\n<pre><code>implementation \"com.adyen.checkout:threeds:&lt;latest-version&gt;\"<\/code><\/pre>\n<h2 id=\"integration-steps\">Integration steps<\/h2>\n<ol>\n<li>Collect the shopper's card payment details with your existing <a href=\"\/pt\/payment-methods\/cards#how-do-you-want-to-integrate\">Cards integration<\/a> - whether through Drop-in, Card Component, or your own UI for the API-only integration.<\/li>\n<li>Proceed to\u00a0<a href=\"#submit-a-payment-request\">submit a payment request<\/a>.\u00a0<\/li>\n<li>Use the <code>resultCode<\/code>\u00a0from the response to determine your next action. For example, to complete a 3D Secure 2 authentication flow, you might need to <a href=\"#get-the-3d-secure-2-device-fingerprint\">get the 3D Secure 2 device fingerprint<\/a>,\u00a0or <a href=\"#present-a-challenge\">present a challenge<\/a>\u00a0to the shopper, or both. Choose the integration steps for web, Android, or iOS.<\/li>\n<li><a href=\"#submit-the-3d-secure-2-device-fingerprinting-result\">Submit the 3D Secure device fingerprinting result<\/a> and in case of a challenge flow, <a href=\"#submit-the-challenge-result\">submit the challenge result<\/a>.<\/li>\n<\/ol>\n<p>To test your integration, see\u00a0<a href=\"#testing-3d-secure-2\">Testing 3D Secure 2<\/a>.<\/p>\n<h2 id=\"submit-a-payment-request\">Step 1: Submit a payment request<\/h2>\n<p>Submit a payment request with a POST\u00a0 <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Checkout\/latest\/post\/payments\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">\/payments<\/a>\u00a0call containing the shopper's card details. Include the following parameters\u00a0to indicate that you are ready to accept 3D Secure 2 authenticated payments:<\/p>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Parameter name<\/th>\n<th style=\"text-align: center;\">Required<\/th>\n<th style=\"text-align: left;\">Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\"> <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Checkout\/latest\/post\/payments#request-paymentMethod\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">paymentMethod<\/a><\/td>\n<td style=\"text-align: center;\"><img title=\"-white_check_mark-\" alt=\"-white_check_mark-\" class=\"smileys\" src=\"\/user\/data\/smileys\/emoji\/white_check_mark.png\" \/><\/td>\n<td style=\"text-align: left;\">Object that contains the shopper's card details. Include the cardholder's name. <br>  If you are <a href=\"\/pt\/development-resources\/pci-dss-compliance-guide\">fully PCI compliant<\/a> you can <a href=\"\/pt\/payment-methods\/cards\/raw-card-data\">pass raw card<\/a> data instead.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"> <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Checkout\/latest\/post\/payments#request-channel\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">channel<\/a><\/td>\n<td style=\"text-align: center;\"><img title=\"-white_check_mark-\" alt=\"-white_check_mark-\" class=\"smileys\" src=\"\/user\/data\/smileys\/emoji\/white_check_mark.png\" \/><\/td>\n<td style=\"text-align: left;\">Specify platform that you are using. Use <strong>Web<\/strong>, <strong>iOS<\/strong>, or <strong>Android<\/strong>.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><code>authenticationData.threeDSRequestData.nativeThreeDS<\/code><\/td>\n<td style=\"text-align: center;\"><img title=\"-white_check_mark-\" alt=\"-white_check_mark-\" class=\"smileys\" src=\"\/user\/data\/smileys\/emoji\/white_check_mark.png\" \/><\/td>\n<td style=\"text-align: left;\">Set to <strong>preferred<\/strong>. Indicates that your payment page can handle 3D Secure 2 transactions natively.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"> <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Checkout\/latest\/post\/payments#request-browserInfo\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">browserInfo<\/a><\/td>\n<td style=\"text-align: center;\"><img title=\"-white_check_mark-\" alt=\"-white_check_mark-\" class=\"smileys\" src=\"\/user\/data\/smileys\/emoji\/white_check_mark.png\" \/><\/td>\n<td style=\"text-align: left;\">Object that contains information about the shopper's browser.<ul><li markdown=\"1\">Full object required is for <code>channel<\/code> <strong>web<\/strong>.<\/li><li markdown=\"1\">For mobile integrations (<code>channel<\/code> <strong>iOS<\/strong> and <strong>Android<\/strong>), the <code>userAgent<\/code> and <code>acceptHeader<\/code> fields are required to indicate that your integration can handle <a href=\"\/pt\/online-payments\/3d-secure\/redirect-3ds2\">3D Secure 2 redirect authentication<\/a>. If your mobile integration is unable to generate this information, you can send the same data as in the code samples below.<\/li><ul><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"> <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Checkout\/latest\/post\/payments#request-returnUrl\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">returnUrl<\/a><\/td>\n<td style=\"text-align: center;\"><img title=\"-white_check_mark-\" alt=\"-white_check_mark-\" class=\"smileys\" src=\"\/user\/data\/smileys\/emoji\/white_check_mark.png\" \/><\/td>\n<td style=\"text-align: left;\">In case of a\u00a03D Secure 1 flow, this is the URL where the shopper will be redirected back to after completing 3D Secure 1 authentication. This URL can have a maximum of 1024 characters. See <a href=\"#return-url-formats\">Return URL formats<\/a> for each channel.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"> <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Checkout\/latest\/post\/payments#request-origin\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">origin<\/a><\/td>\n<td style=\"text-align: center;\"><\/td>\n<td style=\"text-align: left;\">Required for <code>channel<\/code> <strong>Web<\/strong>. The URL of the page where you are loading the 3D Secure 2 Component from. The <code>origin<\/code> should not include subdirectories and a trailing slash. You can also get this by opening the browser console and calling <code>window.location.origin<\/code>.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"> <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Checkout\/latest\/post\/payments#request-shopperIP\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">shopperIP<\/a><\/td>\n<td style=\"text-align: center;\"><\/td>\n<td style=\"text-align: left;\">The shopper's IP address.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"> <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Checkout\/latest\/post\/payments#request-billingAddress\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">billingAddress<\/a><\/td>\n<td style=\"text-align: center;\"><\/td>\n<td style=\"text-align: left;\">The cardholder's billing address.<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"> <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Checkout\/latest\/post\/payments#request-shopperEmail\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">shopperEmail<\/a><\/td>\n<td style=\"text-align: center;\"><\/td>\n<td style=\"text-align: left;\">The cardholder's email address.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h4>Return URL formats<\/h4>\n<ul>\n<li>For <strong>Web<\/strong>, the URL should include the protocol: <code>http:\/\/<\/code> or <code>https:\/\/<\/code>. For example, <code>https:\/\/your-company.example.com\/checkout\/<\/code>.<\/li>\n<li>For <strong>iOS<\/strong>, use the custom URL for your app. For example, <code>my-app:\/\/<\/code>. For more information on setting custom URL schemes, refer to the <a href=\"https:\/\/developer.apple.com\/documentation\/uikit\/inter-process_communication\/allowing_apps_and_websites_to_link_to_your_content\/defining_a_custom_url_scheme_for_your_app\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" class=\"external-link no-image\">Apple Developer documentation<\/a>.<\/li>\n<li>\n<p>For <strong>Android<\/strong>, if you are using the Android SDK, get the URL from <code>CheckoutSetupParameters.getReturnUrl()<\/code>. Otherwise, use a custom URL handled by an Activity on your app. You can configure it with an <a href=\"https:\/\/developer.android.com\/guide\/components\/intents-filters\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" class=\"external-link no-image\">intent filter<\/a>. For example, configure <code>my-app:\/\/your.package.name<\/code>, and then add that to your <code>manifest.xml<\/code> file.<\/p>\n<pre><code class=\"language-xml\">&lt;activity\nandroid:name=\".YourActivity\"&gt;\n&lt;intent-filter&gt;\n  &lt;action android:name=\"android.intent.action.VIEW\"\/&gt;\n\n  &lt;category android:name=\"android.intent.category.DEFAULT\"\/&gt;\n  &lt;category android:name=\"android.intent.category.BROWSABLE\"\/&gt;\n\n  &lt;data\n    android:host=\"${applicationId}\"\n    android:scheme=\"my-app\"\/&gt;\n&lt;\/intent-filter&gt;\n&lt;\/activity&gt;<\/code><\/pre>\n<\/li>\n<\/ul>\n<div class=\"sc-notice note\"><div>\n<p>We recommend that you provide all available information to increase the likelihood of achieving a frictionless flow and a higher authorisation rate. In addition to the regular parameters you provide to Adyen, send additional parameters in <a href=\"\/pt\/online-payments\/3d-secure\/api-reference#3d-secure-2-additional-data-objects\">this list<\/a>.<\/p>\n<\/div><\/div>\n<h4 id=\"request\">Request<\/h4>\n<div data-component-wrapper=\"code-sample\">\n    <code-sample :title=\"'Sample payment request for web'\" :id=\"'sample-payment-request-for-web-2431445577'\" :code-data=\"[{&quot;language&quot;:&quot;bash&quot;,&quot;tabTitle&quot;:&quot;curl&quot;,&quot;content&quot;:&quot;curl https:\\\/\\\/checkout-test.adyen.com\\\/v72\\\/payments \\\\\\n-H 'x-api-key: ADYEN_API_KEY' \\\\\\n-H 'content-type: application\\\/json' \\\\\\n-d '{\\n  \\&quot;amount\\&quot;:{\\n    \\&quot;currency\\&quot;:\\&quot;EUR\\&quot;,\\n    \\&quot;value\\&quot;:1000\\n  },\\n  \\&quot;reference\\&quot;:\\&quot;YOUR_ORDER_NUMBER\\&quot;,\\n  \\&quot;paymentMethod\\&quot;:{\\n    \\&quot;type\\&quot;:\\&quot;scheme\\&quot;,\\n    \\&quot;encryptedCardNumber\\&quot;:\\&quot;adyenjs_0_1_18$MT6ppy0FAMVMLH...\\&quot;,\\n    \\&quot;encryptedExpiryMonth\\&quot;:\\&quot;adyenjs_0_1_18$MT6ppy0FAMVMLH...\\&quot;,\\n    \\&quot;encryptedExpiryYear\\&quot;:\\&quot;adyenjs_0_1_18$MT6ppy0FAMVMLH...\\&quot;,\\n    \\&quot;encryptedSecurityCode\\&quot;:\\&quot;adyenjs_0_1_18$MT6ppy0FAMVMLH...\\&quot;,\\n    \\&quot;holderName\\&quot;: \\&quot;S. Hopper\\&quot;\\n  },\\n  \\&quot;authenticationData\\&quot;: {\\n    \\&quot;threeDSRequestData\\&quot;: {\\n     \\t\\&quot;nativeThreeDS\\&quot;: \\&quot;preferred\\&quot;\\n    }\\n  },\\n  \\&quot;browserInfo\\&quot;:{\\n    \\&quot;userAgent\\&quot;:\\&quot;Mozilla\\\\\\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\\\\\\/537.36 (KHTML, like Gecko) Chrome\\\\\\\/70.0.3538.110 Safari\\\\\\\/537.36\\&quot;,\\n    \\&quot;acceptHeader\\&quot;:\\&quot;text\\\\\\\/html,application\\\\\\\/xhtml+xml,application\\\\\\\/xml;q=0.9,image\\\\\\\/webp,image\\\\\\\/apng,*\\\\\\\/*;q=0.8\\&quot;,\\n    \\&quot;language\\&quot;:\\&quot;nl-NL\\&quot;,\\n    \\&quot;colorDepth\\&quot;:24,\\n    \\&quot;screenHeight\\&quot;:723,\\n    \\&quot;screenWidth\\&quot;:1536,\\n    \\&quot;timeZoneOffset\\&quot;:0,\\n    \\&quot;javaEnabled\\&quot;: true\\n  },\\n  \\&quot;shopperIP\\&quot;: \\&quot;192.0.2.1\\&quot;,\\n  \\&quot;channel\\&quot; : \\&quot;web\\&quot;,\\n  \\&quot;origin\\&quot; : \\&quot;https:\\\/\\\/your-company.example.com\\\/\\&quot;,\\n  \\&quot;returnUrl\\&quot; : \\&quot;https:\\\/\\\/your-company.example.com\\\/checkout\\\/\\&quot;,\\n  \\&quot;merchantAccount\\&quot;:\\&quot;YOUR_MERCHANT_ACCOUNT\\&quot;\\n}'&quot;},{&quot;language&quot;:&quot;java&quot;,&quot;tabTitle&quot;:&quot;Java&quot;,&quot;content&quot;:&quot;\\\/\\\/ Adyen Java API Library v26.3.0\\nimport com.adyen.Client;\\nimport com.adyen.enums.Environment;\\nimport com.adyen.model.checkout.*;\\nimport java.time.OffsetDateTime;\\nimport java.util.*;\\nimport com.adyen.model.RequestOptions;\\nimport com.adyen.service.checkout.*;\\n\\n\\\/\\\/ For the live environment, additionally include your liveEndpointUrlPrefix.\\nClient client = new Client(\\&quot;ADYEN_API_KEY\\&quot;, Environment.TEST);\\n\\n\\\/\\\/ Create the request object(s)\\nThreeDSRequestData threeDSRequestData = new ThreeDSRequestData()\\n  .nativeThreeDS(ThreeDSRequestData.NativeThreeDSEnum.PREFERRED);\\n\\nAuthenticationData authenticationData = new AuthenticationData()\\n  .threeDSRequestData(threeDSRequestData);\\n\\nAmount amount = new Amount()\\n  .currency(\\&quot;EUR\\&quot;)\\n  .value(1000L);\\n\\nCardDetails cardDetails = new CardDetails()\\n  .encryptedCardNumber(\\&quot;adyenjs_0_1_18$MT6ppy0FAMVMLH...\\&quot;)\\n  .holderName(\\&quot;S. Hopper\\&quot;)\\n  .encryptedSecurityCode(\\&quot;adyenjs_0_1_18$MT6ppy0FAMVMLH...\\&quot;)\\n  .encryptedExpiryYear(\\&quot;adyenjs_0_1_18$MT6ppy0FAMVMLH...\\&quot;)\\n  .encryptedExpiryMonth(\\&quot;adyenjs_0_1_18$MT6ppy0FAMVMLH...\\&quot;)\\n  .type(CardDetails.TypeEnum.SCHEME);\\n\\nBrowserInfo browserInfo = new BrowserInfo()\\n  .acceptHeader(\\&quot;text\\\/html,application\\\/xhtml+xml,application\\\/xml;q=0.9,image\\\/webp,image\\\/apng,*\\\/*;q=0.8\\&quot;)\\n  .screenWidth(1536)\\n  .javaEnabled(true)\\n  .screenHeight(723)\\n  .timeZoneOffset(0)\\n  .userAgent(\\&quot;Mozilla\\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\\/537.36 (KHTML, like Gecko) Chrome\\\/70.0.3538.110 Safari\\\/537.36\\&quot;)\\n  .language(\\&quot;nl-NL\\&quot;)\\n  .colorDepth(24);\\n\\nPaymentRequest paymentRequest = new PaymentRequest()\\n  .reference(\\&quot;YOUR_ORDER_NUMBER\\&quot;)\\n  .authenticationData(authenticationData)\\n  .amount(amount)\\n  .merchantAccount(\\&quot;YOUR_MERCHANT_ACCOUNT\\&quot;)\\n  .origin(\\&quot;https:\\\/\\\/your-company.example.com\\\/\\&quot;)\\n  .channel(PaymentRequest.ChannelEnum.WEB)\\n  .paymentMethod(new CheckoutPaymentMethod(cardDetails))\\n  .shopperIP(\\&quot;192.0.2.1\\&quot;)\\n  .returnUrl(\\&quot;https:\\\/\\\/your-company.example.com\\\/checkout\\\/\\&quot;)\\n  .browserInfo(browserInfo);\\n\\n\\\/\\\/ Send the request\\nPaymentsApi service = new PaymentsApi(client);\\nPaymentResponse response = service.payments(paymentRequest, new RequestOptions().idempotencyKey(\\&quot;UUID\\&quot;));&quot;},{&quot;language&quot;:&quot;php&quot;,&quot;tabTitle&quot;:&quot;PHP&quot;,&quot;content&quot;:&quot;\\\/\\\/ Adyen PHP API Library v18.2.1\\nuse Adyen\\\\Client;\\nuse Adyen\\\\Environment;\\nuse Adyen\\\\Model\\\\Checkout\\\\ThreeDSRequestData;\\nuse Adyen\\\\Model\\\\Checkout\\\\AuthenticationData;\\nuse Adyen\\\\Model\\\\Checkout\\\\Amount;\\nuse Adyen\\\\Model\\\\Checkout\\\\CheckoutPaymentMethod;\\nuse Adyen\\\\Model\\\\Checkout\\\\BrowserInfo;\\nuse Adyen\\\\Model\\\\Checkout\\\\PaymentRequest;\\nuse Adyen\\\\Service\\\\Checkout\\\\PaymentsApi;\\n\\n$client = new Client();\\n$client-&gt;setXApiKey(\\&quot;ADYEN_API_KEY\\&quot;);\\n\\\/\\\/ For the live environment, additionally include your liveEndpointUrlPrefix.\\n$client-&gt;setEnvironment(Environment::TEST);\\n\\n\\n\\\/\\\/ Create the request object(s)\\n$threeDSRequestData = new ThreeDSRequestData();\\n$threeDSRequestData\\n  -&gt;setNativeThreeDS(\\&quot;preferred\\&quot;);\\n\\n$authenticationData = new AuthenticationData();\\n$authenticationData\\n  -&gt;setThreeDSRequestData($threeDSRequestData);\\n\\n$amount = new Amount();\\n$amount\\n  -&gt;setCurrency(\\&quot;EUR\\&quot;)\\n  -&gt;setValue(1000);\\n\\n$checkoutPaymentMethod = new CheckoutPaymentMethod();\\n$checkoutPaymentMethod\\n  -&gt;setEncryptedCardNumber(\\&quot;adyenjs_0_1_18\\\\$MT6ppy0FAMVMLH...\\&quot;)\\n  -&gt;setHolderName(\\&quot;S. Hopper\\&quot;)\\n  -&gt;setEncryptedSecurityCode(\\&quot;adyenjs_0_1_18\\\\$MT6ppy0FAMVMLH...\\&quot;)\\n  -&gt;setEncryptedExpiryYear(\\&quot;adyenjs_0_1_18\\\\$MT6ppy0FAMVMLH...\\&quot;)\\n  -&gt;setEncryptedExpiryMonth(\\&quot;adyenjs_0_1_18\\\\$MT6ppy0FAMVMLH...\\&quot;)\\n  -&gt;setType(\\&quot;scheme\\&quot;);\\n\\n$browserInfo = new BrowserInfo();\\n$browserInfo\\n  -&gt;setAcceptHeader(\\&quot;text\\\/html,application\\\/xhtml+xml,application\\\/xml;q=0.9,image\\\/webp,image\\\/apng,*\\\/*;q=0.8\\&quot;)\\n  -&gt;setScreenWidth(1536)\\n  -&gt;setJavaEnabled(true)\\n  -&gt;setScreenHeight(723)\\n  -&gt;setTimeZoneOffset(0)\\n  -&gt;setUserAgent(\\&quot;Mozilla\\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\\/537.36 (KHTML, like Gecko) Chrome\\\/70.0.3538.110 Safari\\\/537.36\\&quot;)\\n  -&gt;setLanguage(\\&quot;nl-NL\\&quot;)\\n  -&gt;setColorDepth(24);\\n\\n$paymentRequest = new PaymentRequest();\\n$paymentRequest\\n  -&gt;setReference(\\&quot;YOUR_ORDER_NUMBER\\&quot;)\\n  -&gt;setAuthenticationData($authenticationData)\\n  -&gt;setAmount($amount)\\n  -&gt;setMerchantAccount(\\&quot;YOUR_MERCHANT_ACCOUNT\\&quot;)\\n  -&gt;setOrigin(\\&quot;https:\\\/\\\/your-company.example.com\\\/\\&quot;)\\n  -&gt;setChannel(\\&quot;web\\&quot;)\\n  -&gt;setPaymentMethod($checkoutPaymentMethod)\\n  -&gt;setShopperIP(\\&quot;192.0.2.1\\&quot;)\\n  -&gt;setReturnUrl(\\&quot;https:\\\/\\\/your-company.example.com\\\/checkout\\\/\\&quot;)\\n  -&gt;setBrowserInfo($browserInfo);\\n\\n$requestOptions['idempotencyKey'] = 'UUID';\\n\\n\\\/\\\/ Send the request\\n$service = new PaymentsApi($client);\\n$response = $service-&gt;payments($paymentRequest, $requestOptions);&quot;},{&quot;language&quot;:&quot;cs&quot;,&quot;tabTitle&quot;:&quot;C#&quot;,&quot;content&quot;:&quot;\\\/\\\/ Adyen .net API Library v17.0.0\\nusing Adyen;\\nusing Environment = Adyen.Model.Environment;\\nusing Adyen.Model;\\nusing Adyen.Model.Checkout;\\nusing Adyen.Service.Checkout;\\n\\n\\\/\\\/ For the live environment, additionally include your liveEndpointUrlPrefix.\\nvar config = new Config()\\n{\\n    XApiKey = \\&quot;ADYEN_API_KEY\\&quot;,\\n    Environment = Environment.Test\\n};\\nvar client = new Client(config);\\n\\n\\\/\\\/ Create the request object(s)\\nThreeDSRequestData threeDSRequestData = new ThreeDSRequestData\\n{\\n  NativeThreeDS = ThreeDSRequestData.NativeThreeDSEnum.Preferred\\n};\\n\\nAuthenticationData authenticationData = new AuthenticationData\\n{\\n  ThreeDSRequestData = threeDSRequestData\\n};\\n\\nAmount amount = new Amount\\n{\\n  Currency = \\&quot;EUR\\&quot;,\\n  Value = 1000\\n};\\n\\nCardDetails cardDetails = new CardDetails\\n{\\n  EncryptedCardNumber = \\&quot;adyenjs_0_1_18$MT6ppy0FAMVMLH...\\&quot;,\\n  HolderName = \\&quot;S. Hopper\\&quot;,\\n  EncryptedSecurityCode = \\&quot;adyenjs_0_1_18$MT6ppy0FAMVMLH...\\&quot;,\\n  EncryptedExpiryYear = \\&quot;adyenjs_0_1_18$MT6ppy0FAMVMLH...\\&quot;,\\n  EncryptedExpiryMonth = \\&quot;adyenjs_0_1_18$MT6ppy0FAMVMLH...\\&quot;,\\n  Type = CardDetails.TypeEnum.Scheme\\n};\\n\\nBrowserInfo browserInfo = new BrowserInfo\\n{\\n  AcceptHeader = \\&quot;text\\\/html,application\\\/xhtml+xml,application\\\/xml;q=0.9,image\\\/webp,image\\\/apng,*\\\/*;q=0.8\\&quot;,\\n  ScreenWidth = 1536,\\n  JavaEnabled = true,\\n  ScreenHeight = 723,\\n  TimeZoneOffset = 0,\\n  UserAgent = \\&quot;Mozilla\\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\\/537.36 (KHTML, like Gecko) Chrome\\\/70.0.3538.110 Safari\\\/537.36\\&quot;,\\n  Language = \\&quot;nl-NL\\&quot;,\\n  ColorDepth = 24\\n};\\n\\nPaymentRequest paymentRequest = new PaymentRequest\\n{\\n  Reference = \\&quot;YOUR_ORDER_NUMBER\\&quot;,\\n  AuthenticationData = authenticationData,\\n  Amount = amount,\\n  MerchantAccount = \\&quot;YOUR_MERCHANT_ACCOUNT\\&quot;,\\n  Origin = \\&quot;https:\\\/\\\/your-company.example.com\\\/\\&quot;,\\n  Channel = PaymentRequest.ChannelEnum.Web,\\n  PaymentMethod = new CheckoutPaymentMethod(cardDetails),\\n  ShopperIP = \\&quot;192.0.2.1\\&quot;,\\n  ReturnUrl = \\&quot;https:\\\/\\\/your-company.example.com\\\/checkout\\\/\\&quot;,\\n  BrowserInfo = browserInfo\\n};\\n\\n\\\/\\\/ Send the request\\nvar service = new PaymentsService(client);\\nvar response = service.Payments(paymentRequest, requestOptions: new RequestOptions { IdempotencyKey = \\&quot;UUID\\&quot;});&quot;},{&quot;language&quot;:&quot;js&quot;,&quot;tabTitle&quot;:&quot;NodeJS (JavaScript)&quot;,&quot;content&quot;:&quot;\\\/\\\/ Adyen Node API Library v17.3.0\\n\\\/\\\/ Require the parts of the module you want to use\\nconst { Client, CheckoutAPI } = require('@adyen\\\/api-library');\\n\\\/\\\/ Initialize the client object\\n\\\/\\\/ For the live environment, additionally include your liveEndpointUrlPrefix.\\nconst client = new Client({apiKey: \\&quot;ADYEN_API_KEY\\&quot;, environment: \\&quot;TEST\\&quot;});\\n\\n\\\/\\\/ Create the request object(s)\\nconst paymentRequest = {\\n  amount: {\\n    currency: \\&quot;EUR\\&quot;,\\n    value: 1000\\n  },\\n  reference: \\&quot;YOUR_ORDER_NUMBER\\&quot;,\\n  paymentMethod: {\\n    type: \\&quot;scheme\\&quot;,\\n    encryptedCardNumber: \\&quot;adyenjs_0_1_18$MT6ppy0FAMVMLH...\\&quot;,\\n    encryptedExpiryMonth: \\&quot;adyenjs_0_1_18$MT6ppy0FAMVMLH...\\&quot;,\\n    encryptedExpiryYear: \\&quot;adyenjs_0_1_18$MT6ppy0FAMVMLH...\\&quot;,\\n    encryptedSecurityCode: \\&quot;adyenjs_0_1_18$MT6ppy0FAMVMLH...\\&quot;,\\n    holderName: \\&quot;S. Hopper\\&quot;\\n  },\\n  authenticationData: {\\n    threeDSRequestData: {\\n      nativeThreeDS: \\&quot;preferred\\&quot;\\n    }\\n  },\\n  browserInfo: {\\n    userAgent: \\&quot;Mozilla\\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\\/537.36 (KHTML, like Gecko) Chrome\\\/70.0.3538.110 Safari\\\/537.36\\&quot;,\\n    acceptHeader: \\&quot;text\\\/html,application\\\/xhtml+xml,application\\\/xml;q=0.9,image\\\/webp,image\\\/apng,*\\\/*;q=0.8\\&quot;,\\n    language: \\&quot;nl-NL\\&quot;,\\n    colorDepth: 24,\\n    screenHeight: 723,\\n    screenWidth: 1536,\\n    timeZoneOffset: 0,\\n    javaEnabled: true\\n  },\\n  shopperIP: \\&quot;192.0.2.1\\&quot;,\\n  channel: \\&quot;web\\&quot;,\\n  origin: \\&quot;https:\\\/\\\/your-company.example.com\\\/\\&quot;,\\n  returnUrl: \\&quot;https:\\\/\\\/your-company.example.com\\\/checkout\\\/\\&quot;,\\n  merchantAccount: \\&quot;YOUR_MERCHANT_ACCOUNT\\&quot;\\n}\\n\\n\\\/\\\/ Send the request\\nconst checkoutAPI = new CheckoutAPI(client);\\nconst response = checkoutAPI.PaymentsApi.payments(paymentRequest, { idempotencyKey: \\&quot;UUID\\&quot; });&quot;},{&quot;language&quot;:&quot;go&quot;,&quot;tabTitle&quot;:&quot;Go&quot;,&quot;content&quot;:&quot;\\\/\\\/ Adyen Go API Library v10.4.0\\nimport (\\n  \\&quot;context\\&quot;\\n  \\&quot;github.com\\\/adyen\\\/adyen-go-api-library\\\/v9\\\/src\\\/common\\&quot;\\n  \\&quot;github.com\\\/adyen\\\/adyen-go-api-library\\\/v9\\\/src\\\/adyen\\&quot;\\n  \\&quot;github.com\\\/adyen\\\/adyen-go-api-library\\\/v9\\\/src\\\/checkout\\&quot;\\n)\\n\\\/\\\/ For the live environment, additionally include your liveEndpointUrlPrefix.\\nclient := adyen.NewClient(&amp;common.Config{\\n  ApiKey:      \\&quot;ADYEN_API_KEY\\&quot;,\\n  Environment: common.TestEnv,\\n})\\n\\n\\\/\\\/ Create the request object(s)\\nthreeDSRequestData := checkout.ThreeDSRequestData{\\n  NativeThreeDS: common.PtrString(\\&quot;preferred\\&quot;),\\n}\\n\\nauthenticationData := checkout.AuthenticationData{\\n  ThreeDSRequestData: &amp;threeDSRequestData,\\n}\\n\\namount := checkout.Amount{\\n  Currency: \\&quot;EUR\\&quot;,\\n  Value: 1000,\\n}\\n\\ncardDetails := checkout.CardDetails{\\n  EncryptedCardNumber: common.PtrString(\\&quot;adyenjs_0_1_18$MT6ppy0FAMVMLH...\\&quot;),\\n  HolderName: common.PtrString(\\&quot;S. Hopper\\&quot;),\\n  EncryptedSecurityCode: common.PtrString(\\&quot;adyenjs_0_1_18$MT6ppy0FAMVMLH...\\&quot;),\\n  EncryptedExpiryYear: common.PtrString(\\&quot;adyenjs_0_1_18$MT6ppy0FAMVMLH...\\&quot;),\\n  EncryptedExpiryMonth: common.PtrString(\\&quot;adyenjs_0_1_18$MT6ppy0FAMVMLH...\\&quot;),\\n  Type: common.PtrString(\\&quot;scheme\\&quot;),\\n}\\n\\nbrowserInfo := checkout.BrowserInfo{\\n  AcceptHeader: \\&quot;text\\\/html,application\\\/xhtml+xml,application\\\/xml;q=0.9,image\\\/webp,image\\\/apng,*\\\/*;q=0.8\\&quot;,\\n  ScreenWidth: 1536,\\n  JavaEnabled: true,\\n  ScreenHeight: 723,\\n  TimeZoneOffset: 0,\\n  UserAgent: \\&quot;Mozilla\\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\\/537.36 (KHTML, like Gecko) Chrome\\\/70.0.3538.110 Safari\\\/537.36\\&quot;,\\n  Language: \\&quot;nl-NL\\&quot;,\\n  ColorDepth: 24,\\n}\\n\\npaymentRequest := checkout.PaymentRequest{\\n  Reference: \\&quot;YOUR_ORDER_NUMBER\\&quot;,\\n  AuthenticationData: &amp;authenticationData,\\n  Amount: amount,\\n  MerchantAccount: \\&quot;YOUR_MERCHANT_ACCOUNT\\&quot;,\\n  Origin: common.PtrString(\\&quot;https:\\\/\\\/your-company.example.com\\\/\\&quot;),\\n  Channel: common.PtrString(\\&quot;web\\&quot;),\\n  PaymentMethod: checkout.CardDetailsAsCheckoutPaymentMethod(&amp;cardDetails),\\n  ShopperIP: common.PtrString(\\&quot;192.0.2.1\\&quot;),\\n  ReturnUrl: \\&quot;https:\\\/\\\/your-company.example.com\\\/checkout\\\/\\&quot;,\\n  BrowserInfo: &amp;browserInfo,\\n}\\n\\n\\\/\\\/ Send the request\\nservice := client.Checkout()\\nreq := service.PaymentsApi.PaymentsInput().IdempotencyKey(\\&quot;UUID\\&quot;).PaymentRequest(paymentRequest)\\nres, httpRes, err := service.PaymentsApi.Payments(context.Background(), req)&quot;},{&quot;language&quot;:&quot;py&quot;,&quot;tabTitle&quot;:&quot;Python&quot;,&quot;content&quot;:&quot;# Adyen Python API Library v12.5.1\\nimport Adyen\\n\\nadyen = Adyen.Adyen()\\nadyen.client.xapikey = \\&quot;ADYEN_API_KEY\\&quot;\\n# For the live environment, additionally include your liveEndpointUrlPrefix.\\nadyen.client.platform = \\&quot;test\\&quot; # The environment to use library in.\\n\\n# Create the request object(s)\\njson_request = {\\n  \\&quot;amount\\&quot;: {\\n    \\&quot;currency\\&quot;: \\&quot;EUR\\&quot;,\\n    \\&quot;value\\&quot;: 1000\\n  },\\n  \\&quot;reference\\&quot;: \\&quot;YOUR_ORDER_NUMBER\\&quot;,\\n  \\&quot;paymentMethod\\&quot;: {\\n    \\&quot;type\\&quot;: \\&quot;scheme\\&quot;,\\n    \\&quot;encryptedCardNumber\\&quot;: \\&quot;adyenjs_0_1_18$MT6ppy0FAMVMLH...\\&quot;,\\n    \\&quot;encryptedExpiryMonth\\&quot;: \\&quot;adyenjs_0_1_18$MT6ppy0FAMVMLH...\\&quot;,\\n    \\&quot;encryptedExpiryYear\\&quot;: \\&quot;adyenjs_0_1_18$MT6ppy0FAMVMLH...\\&quot;,\\n    \\&quot;encryptedSecurityCode\\&quot;: \\&quot;adyenjs_0_1_18$MT6ppy0FAMVMLH...\\&quot;,\\n    \\&quot;holderName\\&quot;: \\&quot;S. Hopper\\&quot;\\n  },\\n  \\&quot;authenticationData\\&quot;: {\\n    \\&quot;threeDSRequestData\\&quot;: {\\n      \\&quot;nativeThreeDS\\&quot;: \\&quot;preferred\\&quot;\\n    }\\n  },\\n  \\&quot;browserInfo\\&quot;: {\\n    \\&quot;userAgent\\&quot;: \\&quot;Mozilla\\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\\/537.36 (KHTML, like Gecko) Chrome\\\/70.0.3538.110 Safari\\\/537.36\\&quot;,\\n    \\&quot;acceptHeader\\&quot;: \\&quot;text\\\/html,application\\\/xhtml+xml,application\\\/xml;q=0.9,image\\\/webp,image\\\/apng,*\\\/*;q=0.8\\&quot;,\\n    \\&quot;language\\&quot;: \\&quot;nl-NL\\&quot;,\\n    \\&quot;colorDepth\\&quot;: 24,\\n    \\&quot;screenHeight\\&quot;: 723,\\n    \\&quot;screenWidth\\&quot;: 1536,\\n    \\&quot;timeZoneOffset\\&quot;: 0,\\n    \\&quot;javaEnabled\\&quot;: True\\n  },\\n  \\&quot;shopperIP\\&quot;: \\&quot;192.0.2.1\\&quot;,\\n  \\&quot;channel\\&quot;: \\&quot;web\\&quot;,\\n  \\&quot;origin\\&quot;: \\&quot;https:\\\/\\\/your-company.example.com\\\/\\&quot;,\\n  \\&quot;returnUrl\\&quot;: \\&quot;https:\\\/\\\/your-company.example.com\\\/checkout\\\/\\&quot;,\\n  \\&quot;merchantAccount\\&quot;: \\&quot;YOUR_MERCHANT_ACCOUNT\\&quot;\\n}\\n\\n# Send the request\\nresult = adyen.checkout.payments_api.payments(request=json_request, idempotency_key=\\&quot;UUID\\&quot;)&quot;},{&quot;language&quot;:&quot;rb&quot;,&quot;tabTitle&quot;:&quot;Ruby&quot;,&quot;content&quot;:&quot;# Adyen Ruby API Library v9.5.1\\nrequire \\&quot;adyen-ruby-api-library\\&quot;\\n\\nadyen = Adyen::Client.new\\nadyen.api_key = 'ADYEN_API_KEY'\\n# For the live environment, additionally include your liveEndpointUrlPrefix.\\nadyen.env = :test # Set to \\&quot;live\\&quot; for live environment\\n\\n# Create the request object(s)\\nrequest_body = {\\n  :amount =&gt; {\\n    :currency =&gt; 'EUR',\\n    :value =&gt; 1000\\n  },\\n  :reference =&gt; 'YOUR_ORDER_NUMBER',\\n  :paymentMethod =&gt; {\\n    :type =&gt; 'scheme',\\n    :encryptedCardNumber =&gt; 'adyenjs_0_1_18$MT6ppy0FAMVMLH...',\\n    :encryptedExpiryMonth =&gt; 'adyenjs_0_1_18$MT6ppy0FAMVMLH...',\\n    :encryptedExpiryYear =&gt; 'adyenjs_0_1_18$MT6ppy0FAMVMLH...',\\n    :encryptedSecurityCode =&gt; 'adyenjs_0_1_18$MT6ppy0FAMVMLH...',\\n    :holderName =&gt; 'S. Hopper'\\n  },\\n  :authenticationData =&gt; {\\n    :threeDSRequestData =&gt; {\\n      :nativeThreeDS =&gt; 'preferred'\\n    }\\n  },\\n  :browserInfo =&gt; {\\n    :userAgent =&gt; 'Mozilla\\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\\/537.36 (KHTML, like Gecko) Chrome\\\/70.0.3538.110 Safari\\\/537.36',\\n    :acceptHeader =&gt; 'text\\\/html,application\\\/xhtml+xml,application\\\/xml;q=0.9,image\\\/webp,image\\\/apng,*\\\/*;q=0.8',\\n    :language =&gt; 'nl-NL',\\n    :colorDepth =&gt; 24,\\n    :screenHeight =&gt; 723,\\n    :screenWidth =&gt; 1536,\\n    :timeZoneOffset =&gt; 0,\\n    :javaEnabled =&gt; true\\n  },\\n  :shopperIP =&gt; '192.0.2.1',\\n  :channel =&gt; 'web',\\n  :origin =&gt; 'https:\\\/\\\/your-company.example.com\\\/',\\n  :returnUrl =&gt; 'https:\\\/\\\/your-company.example.com\\\/checkout\\\/',\\n  :merchantAccount =&gt; 'YOUR_MERCHANT_ACCOUNT'\\n}\\n\\n# Send the request\\nresult = adyen.checkout.payments_api.payments(request_body, headers: { 'Idempotency-Key' =&gt; 'UUID' })&quot;},{&quot;language&quot;:&quot;ts&quot;,&quot;tabTitle&quot;:&quot;NodeJS (TypeScript)&quot;,&quot;content&quot;:&quot;\\\/\\\/ Adyen Node API Library v17.3.0\\n\\\/\\\/ Require the parts of the module you want to use\\nimport { Client, CheckoutAPI, Types } from \\&quot;@adyen\\\/api-library\\&quot;;\\n\\\/\\\/ Initialize the client object\\n\\\/\\\/ For the live environment, additionally include your liveEndpointUrlPrefix.\\nconst client = new Client({apiKey: \\&quot;ADYEN_API_KEY\\&quot;, environment: \\&quot;TEST\\&quot;});\\n\\n\\\/\\\/ Create the request object(s)\\nconst threeDSRequestData: Types.checkout.ThreeDSRequestData = {\\n  nativeThreeDS: Types.checkout.ThreeDSRequestData.NativeThreeDSEnum.Preferred\\n};\\n\\nconst authenticationData: Types.checkout.AuthenticationData = {\\n  threeDSRequestData: threeDSRequestData\\n};\\n\\nconst amount: Types.checkout.Amount = {\\n  currency: \\&quot;EUR\\&quot;,\\n  value: 1000\\n};\\n\\nconst cardDetails: Types.checkout.CardDetails = {\\n  encryptedCardNumber: \\&quot;adyenjs_0_1_18$MT6ppy0FAMVMLH...\\&quot;,\\n  holderName: \\&quot;S. Hopper\\&quot;,\\n  encryptedSecurityCode: \\&quot;adyenjs_0_1_18$MT6ppy0FAMVMLH...\\&quot;,\\n  encryptedExpiryYear: \\&quot;adyenjs_0_1_18$MT6ppy0FAMVMLH...\\&quot;,\\n  encryptedExpiryMonth: \\&quot;adyenjs_0_1_18$MT6ppy0FAMVMLH...\\&quot;,\\n  type: Types.checkout.CardDetails.TypeEnum.Scheme\\n};\\n\\nconst browserInfo: Types.checkout.BrowserInfo = {\\n  acceptHeader: \\&quot;text\\\/html,application\\\/xhtml+xml,application\\\/xml;q=0.9,image\\\/webp,image\\\/apng,*\\\/*;q=0.8\\&quot;,\\n  screenWidth: 1536,\\n  javaEnabled: true,\\n  screenHeight: 723,\\n  timeZoneOffset: 0,\\n  userAgent: \\&quot;Mozilla\\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\\/537.36 (KHTML, like Gecko) Chrome\\\/70.0.3538.110 Safari\\\/537.36\\&quot;,\\n  language: \\&quot;nl-NL\\&quot;,\\n  colorDepth: 24\\n};\\n\\nconst paymentRequest: Types.checkout.PaymentRequest = {\\n  reference: \\&quot;YOUR_ORDER_NUMBER\\&quot;,\\n  authenticationData: authenticationData,\\n  amount: amount,\\n  merchantAccount: \\&quot;YOUR_MERCHANT_ACCOUNT\\&quot;,\\n  origin: \\&quot;https:\\\/\\\/your-company.example.com\\\/\\&quot;,\\n  channel: Types.checkout.PaymentRequest.ChannelEnum.Web,\\n  paymentMethod: cardDetails,\\n  shopperIP: \\&quot;192.0.2.1\\&quot;,\\n  returnUrl: \\&quot;https:\\\/\\\/your-company.example.com\\\/checkout\\\/\\&quot;,\\n  browserInfo: browserInfo\\n};\\n\\n\\\/\\\/ Send the request\\nconst checkoutAPI = new CheckoutAPI(client);\\nconst response = checkoutAPI.PaymentsApi.payments(paymentRequest, { idempotencyKey: \\&quot;UUID\\&quot; });&quot;}]\" :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<h4 id=\"response\">Response<\/h4>\n<p>You'll receive a response containing:<\/p>\n<ul>\n<li><code>resultCode<\/code>:\u00a0<strong>IdentifyShopper<\/strong> or\u00a0<strong>ChallengeShopper<\/strong>. Perform the corresponding\u00a0<a href=\"#get-the-3d-secure-2-device-fingerprint\">3D Secure device fingerprinting<\/a>\u00a0or\u00a0<a href=\"#present-a-challenge\">present a challenge<\/a>\u00a0flows.\u00a0If the transaction is exempted from 3D Secure 2, you might get an\u00a0<strong>Authorised<\/strong>\u00a0<code>resultCode<\/code>.\u00a0<\/li>\n<li><code>threeds2.fingerprintToken<\/code>\u00a0or\u00a0<code>threeds2.challengeToken<\/code>: Use this to initiate the 3D Secure 2 Component. If you want to know the contents of the encoded string, see <a href=\"\/pt\/checkout\/3d-secure\/api-reference#payload-structure\">payload structure<\/a>.<\/li>\n<li><code>paymentData<\/code>: Use this for your next\u00a0POST\u00a0 <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Checkout\/latest\/post\/payments\/details\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">\/payments\/details<\/a>\u00a0request.<\/li>\n<\/ul>\n<p>For other possible\u00a0<code>resultCode<\/code>\u00a0values and the actions that you need to take, see\u00a0<a href=\"\/pt\/checkout\/payment-result-codes\">Result codes<\/a>.\u00a0<\/p>\n<div data-component-wrapper=\"code-sample\">\n    <code-sample :title=\"'Sample response with IdentifyShopper resultCode'\" :id=\"''\" :code-data='[{\"language\":\"json\",\"tabTitle\":\"\",\"content\":\"{\\n  \\\"resultCode\\\": \\\"IdentifyShopper\\\",\\n  \\\"authentication\\\": {\\n    \\\"threeds2.fingerprintToken\\\": \\\"eyJ0aH...\\\"\\n  },\\n  \\\"details\\\": [\\n    {\\n      \\\"key\\\": \\\"threeds2.fingerprint\\\",\\n      \\\"type\\\": \\\"text\\\"\\n    }\\n  ],\\n  \\\"paymentData\\\": \\\"Ab02b4c0!...\\\"\\n}\"}]' :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<h2 id=\"get-the-3d-secure-2-device-fingerprint\">Step 2: Get the 3D Secure 2 device fingerprint<\/h2>\n<p>If your server receives an\u00a0<strong>IdentifyShopper<\/strong> <code>resultCode<\/code>, perform the 3D Secure 2 device fingerprinting. Follow the 3D Secure device fingerprinting procedure for <a href=\"#collect-the-3d-secure-2-device-fingerprint-from-the-browser\">web<\/a>,\u00a0<a href=\"#collect-the-3d-secure-2-device-fingerprint-from-an-ios-app\">iOS<\/a>, or\u00a0<a href=\"#collect-the-3d-secure-2-device-fingerprint-from-an-android-app\">Android<\/a>.<\/p>\n<h3 id=\"collect-the-3d-secure-2-device-fingerprint-from-the-browser\">Collect the 3D Secure 2 device fingerprint with the Web Component<\/h3>\n<div class=\"sc-notice note\"><div>\n<p>If you are using v49 of our APIs with Adyen JS version 3.1.0 and later, use <code>createFromAction<\/code> to load the <a href=\"\/pt\/checkout\/components-web#step-4-additional-front-end\">3D Secure 2 Component<\/a> instead.<\/p>\n<\/div><\/div>\n<ol>\n<li>\n<p>Make sure that you have already added the <a href=\"\/pt\/online-payments\/build-your-integration\/advanced-flow\/?platform=Web&amp;integration=Components#add\">Components JavaScript file and the required configuration<\/a> on your payments page.<\/p>\n<\/li>\n<li>\n<p>Create a DOM element.<\/p>\n<pre><code>&lt;div id=\"threeDS2\"&gt;&lt;\/div&gt;<\/code><\/pre>\n<\/li>\n<li>\n<p>Initiate the 3D Secure 2 Component with the\u00a0<code>threeds2.fingerprintToken<\/code>\u00a0you received from the\u00a0 <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Checkout\/latest\/post\/payments\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">\/payments<\/a>\u00a0response, assign a function to handle the\u00a0<code>onComplete<\/code>\u00a0and\u00a0<code>onError<\/code>\u00a0events, and mount the 3D Secure 2 Component.<\/p>\n<pre><code class=\"language-js\">const threeDS2IdentifyShopper = checkout\n        .create('threeDS2DeviceFingerprint', {\n            fingerprintToken: resultObject.authentication['threeds2.fingerprintToken'],\n            onComplete: function() {}, \/\/ Called whenever a result is available, regardless if the outcome is successful or not.\n            onError: function() {} \/\/ Gets triggered on error.\n        })\n        .mount('#threeDS2');<\/code><\/pre>\n<\/li>\n<li>\n<p>When the\u00a0<code>onComplete<\/code>\u00a0event is triggered, get the result and proceed to submit the <a href=\"#submit-the-3d-secure-2-device-fingerprinting-result\">3D Secure 2 device fingerprinting result<\/a>.<\/p>\n<div class=\"sc-notice info\"><div>\n<p>If the 3D Secure 2 device fingerprinting failed, both <code>onComplete<\/code> and <code>onError<\/code> will be called.<\/p>\n<\/div><\/div>\n<div data-component-wrapper=\"code-sample\">\n<code-sample :title=\"'Sample &lt;code&gt;onComplete&lt;\/code&gt; event handler'\" :id=\"''\" :code-data='[{\"language\":\"java\",\"tabTitle\":\"\",\"content\":\"function onComplete(fingerprintData) {\\n    fingerprintResult = fingerprintData.data.details[\\\"threeds2.fingerprint\\\"];\\n}\"}]' :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<\/li>\n<\/ol>\n<h3 id=\"collect-the-3d-secure-2-device-fingerprint-from-an-ios-app\">Collect the 3D Secure 2 device fingerprint from an iOS app<\/h3>\n<div class=\"sc-notice note\"><div>\n<p>If you are using v49 of our APIs with Adyen iOS version 3.0.0 and later, use the <a href=\"\/pt\/checkout\/3d-secure\/native-3ds2\/ios-component#3ds2-component\">3D Secure 2 Action Component<\/a> instead.<\/p>\n<\/div><\/div>\n<ol>\n<li>\n<p>Create a\u00a0<code>Card3DS2Authenticator<\/code>\u00a0instance.\u00a0<\/p>\n<pre><code class=\"language-swift\">let authenticator = Card3DS2Authenticator()<\/code><\/pre>\n<\/li>\n<li>\n<p>Create a fingerprint with the\u00a0<code>threeds2.fingerprintToken<\/code>\u00a0you received from the\u00a0\u00a0 <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Checkout\/latest\/post\/payments\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">\/payments<\/a>\u00a0response.\u00a0<\/p>\n<pre><code class=\"language-swift\">authenticator.createFingerprint(usingToken: fingerprintToken) { result in\n     switch result {\n     case let .success(fingerprint):\n          \/\/ Submit fingerprint\n     case let .failure(error):\n          \/\/ Handle error\n     }\n}<\/code><\/pre>\n<\/li>\n<li>\n<p>If the\u00a0<code>success<\/code>\u00a0event is triggered, proceed to\u00a0<a href=\"#submit-the-3d-secure-2-device-fingerprinting-result\">submit the 3D Secure 2 device fingerprinting result<\/a>\u00a0with the value passed in\u00a0<code>success<\/code>. Otherwise, handle the\u00a0<code>failure<\/code>\u00a0event.\u00a0The\u00a0<code>failure<\/code>\u00a0event will be triggered in case of a timeout, user cancellation, or system failures such as a certificate validation error or an invalid response from the issuer.\u00a0<\/p>\n<\/li>\n<\/ol>\n<h3 id=\"collect-the-3d-secure-2-device-fingerprint-from-an-android-app\">Collect the 3D Secure 2 device fingerprint from an Android app<\/h3>\n<div class=\"sc-notice note\"><div>\n<p>If you are using v49 of our APIs with Adyen Android version 3.0.0 and later, use the <a href=\"\/pt\/checkout\/3d-secure\/native-3ds2\/android-component#3ds2-component\">3D Secure 2 Action Component<\/a> instead.<\/p>\n<\/div><\/div>\n<ol>\n<li>\n<p>Create a <code>Card3DS2Authenticator<\/code> instance and pass the current context.<\/p>\n<pre><code class=\"language-java\">mCard3DS2Authenticator = new Card3DS2Authenticator(\/* Activity *\/ this);<\/code><\/pre>\n<\/li>\n<li>\n<p>Create a fingerprint with the <code>threeds2.fingerprintToken<\/code> you received from the  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Checkout\/latest\/post\/payments\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">\/payments<\/a>\u00a0response.<\/p>\n<pre><code class=\"language-java\">mCard3DS2Authenticator.createFingerprint(fingerprintToken, new Card3DS2Authenticator.FingerprintListener() {\n@Override\npublic void onSuccess(@NonNull String fingerprint) {\n    \/\/ Submit fingerprint\n}\n\n@Override\npublic void onFailure(@NonNull ThreeDS2Exception e) {\n    mCard3DS2Authenticator.release();\n    \/\/ Handle error\n}\n});<\/code><\/pre>\n<\/li>\n<li>\n<p>If the\u00a0<code>onSuccess<\/code>\u00a0event is triggered, proceed to\u00a0<a href=\"#submit-the-3d-secure-2-device-fingerprinting-result\">submit the 3D Secure 2 device fingerprinting result<\/a>. Otherwise, handle the\u00a0<code>onFailure<\/code>\u00a0event. The <code>onFailure<\/code> event will be triggered in case of a timeout, user cancellation, or system failures such as a certificate validation error or an invalid response from the issuer.<\/p>\n<\/li>\n<\/ol>\n<h2 id=\"submit-the-3d-secure-2-device-fingerprinting-result\">Step 3: Submit the 3D Secure 2 device fingerprinting result<\/h2>\n<p>Make a POST\u00a0\u00a0 <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Checkout\/latest\/post\/payments\/details\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">\/payments\/details<\/a>\u00a0request from your server with the\u00a0<code>details<\/code>\u00a0object and the\u00a0<code>paymentData<\/code>\u00a0as parameters.<\/p>\n<ul>\n<li><code>threeds2.fingerprint<\/code>:\u00a0Pass the\u00a0<code>fingerprintResult<\/code>\u00a0from the\u00a0<code>onComplete<\/code>\u00a0event handler\u00a0for web,\u00a0<code>success<\/code>\u00a0from iOS, or <code>onSuccess<\/code>\u00a0for Android event handler.\u00a0<\/li>\n<li><code>paymentData<\/code>:\u00a0Pass the\u00a0<code>paymentData<\/code>\u00a0from the\u00a0<a href=\"#submit-a-payment-request\">initial payment response<\/a>.<\/li>\n<\/ul>\n<h6>Request<\/h6>\n<pre><code class=\"language-json\">{\n  \"details\": {\n    \"threeds2.fingerprint\": \"eyJ0aHJlZURTQ29tcEluZCI6ICJZIn0=\"\n  },\n  \"paymentData\": \"YOUR_PAYMENT_DATA...\"\n}<\/code><\/pre>\n<h6>Response<\/h6>\n<p>You'll receive a response containing any of the following\u00a0<code>resultCode<\/code>:<\/p>\n<ul>\n<li><strong>Authorised<\/strong>\u00a0\u2013\u00a0This indicates that the transaction was authenticated in a <strong>frictionless flow<\/strong>, and the payment was successfully completed. This state serves as an indicator to proceed with the delivery of goods and services.\u00a0<\/li>\n<li><strong>ChallengeShopper<\/strong>\u00a0\u2013 The issuer has requested further shopper interaction and is initiating a <strong>challenge flow<\/strong>. You will also get the <code>threeds2.challengeToken<\/code>\u00a0and the <code>paymentData<\/code> which you will need in the challenge flow.\u00a0If you want to know the contents of the encoded <code>threeds2.challengeToken<\/code> string, see\u00a0<a href=\"\/pt\/checkout\/3d-secure\/api-reference#payload-structure\">payload structure<\/a>.<\/li>\n<\/ul>\n<p>For other possible\u00a0<code>resultCode<\/code>\u00a0values and the actions that you need to take, see\u00a0<a href=\"\/pt\/checkout\/payment-result-codes\">Result codes<\/a>.<\/p>\n<pre><code class=\"language-json\">{\n  \"resultCode\": \"ChallengeShopper\",\n  \"authentication\": {\n    \"threeds2.challengeToken\": \"eyJ0aH...\"\n  },\n  \"details\": [\n    {\n      \"key\": \"threeds2.challengeResult\",\n      \"type\": \"text\"\n    }\n  ],\n  \"paymentData\": \"Ab02b4c0!...\"\n}<\/code><\/pre>\n<h2 id=\"present-a-challenge\">Step 4: Present a challenge<\/h2>\n<p>If your server receives a\u00a0<strong>ChallengeShopper<\/strong> <code>resultCode<\/code>,\u00a0this means that the issuer would like to perform additional checks in order to verify that the shopper is indeed the cardholder.\u00a0Follow the challenge flow procedure for\u00a0<a href=\"#present-a-challenge-in-the-browser\">web<\/a>,\u00a0<a href=\"#present-a-challenge-in-an-android-app\">Android<\/a>, or\u00a0<a href=\"#present-a-challenge-in-an-ios-app\">iOS<\/a>.<\/p>\n<h3 id=\"present-a-challenge-in-the-browser\">Present a challenge with the Web Component<\/h3>\n<div class=\"sc-notice note\"><div>\n<p>If you are using v49 of our APIs with Adyen JS version 3.1.0 and later, use <code>createFromAction<\/code> to load the <a href=\"\/pt\/checkout\/components-web#step-4-additional-front-end\">3D Secure 2 Component<\/a> instead.<\/p>\n<\/div><\/div>\n<ol>\n<li>\n<p>Make sure that you have already added the <a href=\"\/pt\/online-payments\/build-your-integration\/advanced-flow\/?platform=Web&amp;integration=Components#add\">Components JavaScript file and the required configuration<\/a> on your payments page.<\/p>\n<\/li>\n<li>\n<p>Create a DOM element, or reuse the existing one if you are proceeding from the device fingerprinting flow.<\/p>\n<pre><code>&lt;div id=\"threeDS2\"&gt;&lt;\/div&gt;<\/code><\/pre>\n<\/li>\n<li>\n<p>Initiate the 3D Secure 2 Component with the\u00a0<code>threeds2.challengeToken<\/code>\u00a0you received from\u00a0 <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Checkout\/latest\/post\/payments\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">\/payments<\/a>\u00a0response\u00a0or from\u00a0 <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Checkout\/latest\/post\/payments\/details\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">\/payments\/details<\/a>\u00a0if you are proceeding from the device fingerprinting flow. Assign a function to handle the\u00a0<code>onComplete<\/code>\u00a0and\u00a0<code>onError<\/code>\u00a0events, set the challenge window size, and then mount the 3D Secure 2 Component.<\/p>\n<pre><code class=\"language-js\"> const threeDS2Challenge = checkout\n        .create('threeDS2Challenge', {\n            challengeToken: resultObject.authentication['threeds2.challengeToken'],\n            onComplete: function() {}, \/\/ Called whenever a result is available, regardless if the outcome is successful or not.\n            onError: function() {}, \/\/ Gets triggered on error.\n            challengeWindowSize: '05' \/\/ Defaults to '02'\n        })\n        .mount('#threeDS2');<\/code><\/pre>\n<p>Set the\u00a0<code>challengeWindowSize<\/code>\u00a0to any of the following identifiers:<\/p>\n<table>\n<thead>\n<tr>\n<th>identifier<\/th>\n<th>size<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>01<\/td>\n<td>250px x 400px<\/td>\n<\/tr>\n<tr>\n<td>02<\/td>\n<td>390px x 400px<\/td>\n<\/tr>\n<tr>\n<td>03<\/td>\n<td>500px x 600px<\/td>\n<\/tr>\n<tr>\n<td>04<\/td>\n<td>600px x 400px<\/td>\n<\/tr>\n<tr>\n<td>05<\/td>\n<td>100% x 100%<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/li>\n<li>\n<p>When the <code>onComplete<\/code> event is triggered, always get the result and\u00a0proceed to\u00a0<a href=\"#submit-the-challenge-result\">submit the challenge result<\/a>.<\/p>\n<div class=\"sc-notice info\"><div>\n<p>If the challenge flow failed, both <code>onComplete<\/code> and <code>onError<\/code> will be called.<\/p>\n<\/div><\/div>\n<div data-component-wrapper=\"code-sample\">\n<code-sample :title=\"'Sample &lt;code&gt;onComplete&lt;\/code&gt; event handler'\" :id=\"''\" :code-data='[{\"language\":\"java\",\"tabTitle\":\"\",\"content\":\"function onComplete(challengeData) {\\n    challengeResult = challengeData.data.details[\\\"threeds2.challengeResult\\\"];\\n}\"}]' :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<\/li>\n<\/ol>\n<h3 id=\"present-a-challenge-in-an-ios-app\">Present a challenge in an iOS app<\/h3>\n<div class=\"sc-notice note\"><div>\n<p>If you are using v49 of our APIs with Adyen iOS version 3.0.0 and later, use the <a href=\"\/pt\/checkout\/3d-secure\/native-3ds2\/ios-component#3ds2-component\">3D Secure 2 Action Component<\/a> instead.<\/p>\n<\/div><\/div>\n<ol>\n<li>\n<p>Use the same\u00a0<code>Card3DS2Authenticator<\/code>\u00a0instance from the 3D Secure device fingerprinting flow. Pass the\u00a0<code>threeds2.challengeToken<\/code>\u00a0you received from\u00a0 <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Checkout\/latest\/post\/payments\/details\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">\/payments\/details<\/a>\u00a0to the\u00a0<code>presentChallenge()<\/code>\u00a0function.\u00a0<\/p>\n<pre><code class=\"language-swift\">authenticator.presentChallenge(usingToken: challengeToken) { result in\n     switch result {\n     case let .success(challengeResult):\n          let payload = challengeResult.payload\n          \/\/ Submit challenge result payload\n     case let .failure(error):\n          \/\/ Handle error\n     }\n}<\/code><\/pre>\n<\/li>\n<li>\n<p>If the\u00a0<code>success<\/code>\u00a0event is triggered, proceed to\u00a0<a href=\"#submit-the-challenge-result\">submit the challenge result<\/a>\u00a0with the\u00a0<code>payload<\/code>\u00a0value passed in the\u00a0<code>challengeResult<\/code>\u00a0of the\u00a0<code>success<\/code>\u00a0event. Otherwise, handle the\u00a0<code>failure<\/code>\u00a0event.\u00a0The\u00a0<code>failure<\/code>\u00a0event will be triggered in case of a timeout, user cancellation, or system failures such as a certificate validation error or an invalid response from the issuer.\u00a0<\/p>\n<\/li>\n<\/ol>\n<h3 id=\"present-a-challenge-in-an-android-app\">Present a challenge in an Android app<\/h3>\n<div class=\"sc-notice note\"><div>\n<p>If you are using v49 of our APIs with Adyen Android version 3.0.0 and later, use the <a href=\"\/pt\/checkout\/3d-secure\/native-3ds2\/android-component#3ds2-component\">3D Secure 2 Action Component<\/a> instead.<\/p>\n<\/div><\/div>\n<ol>\n<li>\n<p>Pass the\u00a0<code>threeds2.challengeToken<\/code>\u00a0you received\u00a0from the\u00a0 <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Checkout\/latest\/post\/payments\/details\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">\/payments\/details<\/a>\u00a0to the\u00a0<code>Card3DS2Authenticator<\/code>.\u00a0<\/p>\n<pre><code class=\"language-java\">mCard3DS2Authenticator.presentChallenge(challengeToken, new Card3DS2Authenticator.SimpleChallengeListener() {\n@Override\npublic void onSuccess(@NonNull ChallengeResult challengeResult) {\n    mCard3DS2Authenticator.release();\n    String payload = challengeResult.getPayload();\n    \/\/ Pass the challenge result payload\n}\n\n@Override\npublic void onFailure(@NonNull ThreeDS2Exception e) {\n    mCard3DS2Authenticator.release();\n    \/\/ Handle error\n}\n});<\/code><\/pre>\n<\/li>\n<li>\n<p>If the\u00a0<code>onSuccess<\/code>\u00a0event is triggered, proceed to\u00a0<a href=\"#submit-the-challenge-result\">submit the challenge result<\/a> with the <code>payload<\/code> value passed in the <code>challengeResult<\/code> of the <code>onSuccess<\/code> event.\u00a0Otherwise, handle the\u00a0<code>onFailure<\/code>\u00a0event.\u00a0The <code>onFailure<\/code> event will be triggered in case of a timeout, user cancellation, or system failures such as a certificate validation error or an invalid response from the issuer.<\/p>\n<\/li>\n<\/ol>\n<h2 id=\"submit-the-challenge-result\">Step 5: Submit the challenge result<\/h2>\n<p>Make a POST\u00a0\u00a0 <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Checkout\/latest\/post\/payments\/details\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">\/payments\/details<\/a>\u00a0request from your server and include\u00a0<code>details<\/code>\u00a0and the\u00a0<code>paymentData<\/code>\u00a0as parameters.<\/p>\n<ul>\n<li><code>threeds2.challengeResult<\/code>:\u00a0Pass the result from the\u00a0<code>challengeResult<\/code>\u00a0from the\u00a0<code>onComplete<\/code>\u00a0event handler\u00a0for web,\u00a0<code>onSuccess<\/code>\u00a0for Android, or the\u00a0<code>payload<\/code>\u00a0value in the\u00a0<code>challengeResult<\/code>\u00a0of the\u00a0<code>success<\/code>\u00a0iOS event handler.\u00a0<\/li>\n<li><code>paymentData<\/code>:\u00a0This is the\u00a0<code>paymentData<\/code>\u00a0from the latest API\u00a0response, either\u00a0from the\u00a0 <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Checkout\/latest\/post\/payments\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">\/payments<\/a>\u00a0or from the\u00a0 <a href=\"https:\/\/docs.adyen.com\/api-explorer\/Checkout\/latest\/post\/payments\/details\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">\/payments\/details<\/a>\u00a0response\u00a0if you are proceeding from the device fingerprinting flow.<\/li>\n<\/ul>\n<h4 id=\"request-2\">Request<\/h4>\n<pre><code class=\"language-json\">{\n  \"details\": {\n    \"threeds2.challengeResult\": \"eyJ0cmFuc1N0YXR1cyI6IlkifQ==\"\n  },\n  \"paymentData\": \"YOUR_PAYMENT_DATA\"\n}<\/code><\/pre>\n<h4 id=\"response-2\">Response<\/h4>\n<p>You'll receive\u00a0<strong>Authorised<\/strong>\u00a0as the\u00a0<code>resultCode<\/code>\u00a0if the payment was successful.<\/p>\n<pre><code class=\"language-json\">{\n    \"pspReference\": \"V4HZ4RBFJGXXGN82\",\n    \"resultCode\": \"Authorised\"\n}<\/code><\/pre>\n<h2>UI customizations for apps<\/h2>\n<h3>Customizing iOS UI<\/h3>\n<p>The 3D Secure 2 Component for Adyen iOS version 2.x.x inherits your app's theme to ensure the UI of the challenge flow fits your app's look and feel. If you require further UI customizations, the Component provides some customization options through the <code>ADYAppearanceConfiguration<\/code> class.<\/p>\n<p>To customize your UI, create an instance of\u00a0<code>ADYAppearanceConfiguration<\/code>, configure the desired properties, and pass it during initialization of the\u00a0<code>Card3DS2Authenticator<\/code>.<\/p>\n<pre><code class=\"language-swift\">let appearanceConfiguration = ADYAppearanceConfiguration()\n\/\/ Customize properties of appearanceConfiguration.\n\nlet authenticator = Card3DS2Authenticator(appearanceConfiguration: appearanceConfiguration)<\/code><\/pre>\n<div class=\"sc-notice info\"><div>\n<p>For a complete list of customizable properties, see the <a href=\"https:\/\/adyen.github.io\/adyen-3ds2-ios\/2.3.1\/documentation\/adyen3ds2\/adyappearanceconfiguration\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" class=\"external-link no-image\">ADYAppearanceConfiguration<\/a> class reference documentation.<\/p>\n<\/div><\/div>\n<h3>Customizing Android UI<\/h3>\n<h4 id=\"customize-the-sdk-theme\">Customize the SDK theme<\/h4>\n<p>The 3D Secure 2 Component for Adyen Android version 2.x.x  inherits your app's theme to ensure the UI of the challenge flow fits your app's look and feel. You can override the default SDK theme to inherit from one of AppCompat's theme variants. To do this, add the following XML snippet to your <code>styles.xml<\/code> file.<\/p>\n<pre><code class=\"language-xml\">&lt;style name=\"ThreeDS2Theme\" parent=\"Theme.AppCompat.Light.DarkActionBar\"&gt;\n    &lt;!-- Customize the SDK theme here. --&gt;\n    &lt;item name=\"colorPrimary\"&gt;@color\/colorPrimary&lt;\/item&gt;\n    &lt;item name=\"colorPrimaryDark\"&gt;@color\/colorPrimaryDark&lt;\/item&gt;\n    &lt;item name=\"colorAccent\"&gt;@color\/colorAccent&lt;\/item&gt;\n&lt;\/style&gt;<\/code><\/pre>\n<h4 id=\"using-uicustomization-class\">Using UiCustomization class<\/h4>\n<p>If you require further UI customizations, the 3D Secure 2 Component for Adyen Android version 2.x.x provides some customization options through the\u00a0<code>UiCustomization<\/code>\u00a0class.<\/p>\n<p>To use the\u00a0<code>UiCustomization<\/code>\u00a0class, create an instance of\u00a0<code>UiCustomization<\/code>, configure the desired properties, and pass it during initialization of the\u00a0<code>Card3DS2Authenticator<\/code>.<\/p>\n<pre><code class=\"language-java\">mCard3DS2Authenticator = new Card3DS2Authenticator(\/* Activity *\/ this, uiCustomization);<\/code><\/pre>\n<div class=\"sc-notice info\"><div>\n<p>For a complete list of customizable properties, see the <a href=\"https:\/\/adyen.github.io\/adyen-3ds2-android\/com\/adyen\/threeds2\/customization\/UiCustomization.html\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" class=\"external-link no-image\">UiCustomization<\/a> class reference documentation.<\/p>\n<\/div><\/div>\n<h2 id=\"testing-3d-secure-2\">Testing 3D Secure 2<\/h2>\n<p>To test how your integration handles different 3D Secure 2 authentication scenarios, you need to use a card number for the specific flow.<\/p>\n<p>When prompted for 3D Secure 2 text challenges, use the following credentials to authenticate:<\/p>\n<ul>\n<li>For native mobile integrations, use password: <strong>1234<\/strong><\/li>\n<li>For web and mobile browser integrations, use password: <strong>password<\/strong><\/li>\n<\/ul>\n<p>Depending on the <a href=\"\/pt\/online-payments\/3d-secure\/#implementation-options\">authentication option<\/a>, you can receive the following result codes:<\/p>\n<ul>\n<li><strong>RedirectShopper<\/strong>: you receive this result code if you are using the <a href=\"\/pt\/online-payments\/3d-secure\/redirect-3ds2\">Redirect authentication<\/a> flow.<\/li>\n<li><strong>IdentifyShopper<\/strong>: you receive this result code if you are using the <a href=\"\/pt\/online-payments\/3d-secure\/native-3ds2\/\">Native authentication<\/a> flow.<\/li>\n<li><strong>ChallengeShopper<\/strong>: you receive this result code after you submit the 3D Secure 2 device fingerprinting result in a Native authentication, unless you specify a <a href=\"\/pt\/online-payments\/3d-secure\/#frictionless-flow\">frictionless<\/a> flow.<\/li>\n<\/ul>\n<p>Depending on your integration, use the following test cards to simulate different authentication flows.<\/p>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Card Type<\/th>\n<th style=\"text-align: left;\">Card Number<\/th>\n<th style=\"text-align: left;\">Expiry Date<\/th>\n<th style=\"text-align: center;\">Security Code (CVC\/CVV\/CID)<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\">American Express<\/td>\n<td style=\"text-align: left;\">3714 4963 5398 431<\/td>\n<td style=\"text-align: left;\">03\/2030<\/td>\n<td style=\"text-align: center;\">7373<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\">Bancontact \/ Maestro<\/td>\n<td style=\"text-align: left;\">6703 4444 4444 4449<\/td>\n<td style=\"text-align: left;\">03\/2030<\/td>\n<td style=\"text-align: center;\"><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\">Bancontact \/ Visa<\/td>\n<td style=\"text-align: left;\">4871 0499 9999 9910<\/td>\n<td style=\"text-align: left;\">03\/2030<\/td>\n<td style=\"text-align: center;\">737<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\">Cartes Bancaires \/ Visa Debit<\/td>\n<td style=\"text-align: left;\">4035 5014 2814 6300<\/td>\n<td style=\"text-align: left;\">03\/2030<\/td>\n<td style=\"text-align: center;\">737<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\">Cartes Bancaires<\/td>\n<td style=\"text-align: left;\">4360 0000 0100 0005<\/td>\n<td style=\"text-align: left;\">03\/2030<\/td>\n<td style=\"text-align: center;\">737<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\">China UnionPay (Credit)<\/td>\n<td style=\"text-align: left;\">6250 9470 0000 0014<\/td>\n<td style=\"text-align: left;\">03\/2030<\/td>\n<td style=\"text-align: center;\">123<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\">China UnionPay (Debit)<\/td>\n<td style=\"text-align: left;\">6250 9460 0000 0016<\/td>\n<td style=\"text-align: left;\">03\/2030<\/td>\n<td style=\"text-align: center;\">123<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\">Diners<\/td>\n<td style=\"text-align: left;\">3056 9309 0259 04<\/td>\n<td style=\"text-align: left;\">03\/2030<\/td>\n<td style=\"text-align: center;\">737<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\">Discover<\/td>\n<td style=\"text-align: left;\">6011 1111 1111 1117<\/td>\n<td style=\"text-align: left;\">03\/2030<\/td>\n<td style=\"text-align: center;\">737<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\">Maestro<\/td>\n<td style=\"text-align: left;\">5000 5500 0000 0029<\/td>\n<td style=\"text-align: left;\">03\/2030<\/td>\n<td style=\"text-align: center;\"><em>n\/a<\/em><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\">Mastercard<\/td>\n<td style=\"text-align: left;\">5454 5454 5454 5454<\/td>\n<td style=\"text-align: left;\">03\/2030<\/td>\n<td style=\"text-align: center;\">737<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\">Mastercard Credit<\/td>\n<td style=\"text-align: left;\">2222 4000 1000 0008<\/td>\n<td style=\"text-align: left;\">03\/2030<\/td>\n<td style=\"text-align: center;\">737<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\">Visa<\/td>\n<td style=\"text-align: left;\">4917 6100 0000 0000<\/td>\n<td style=\"text-align: left;\">03\/2030<\/td>\n<td style=\"text-align: center;\">737<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\">Visa Classic<\/td>\n<td style=\"text-align: left;\">4166 6766 6766 6746<\/td>\n<td style=\"text-align: left;\">03\/2030<\/td>\n<td style=\"text-align: center;\">737<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h4>Challenge without fingerprint<\/h4>\n<p>To test the web-based flow where the device fingerprinting step is skipped (because the issuer's ACS has not configured a <code>threeDSMethodURL<\/code>), and you get a <strong>ChallengeShopper<\/strong> <code>resultCode<\/code> <em>immediately<\/em> after submitting the payment request, use the following card:<\/p>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Card Type<\/th>\n<th style=\"text-align: left;\">Card Number<\/th>\n<th style=\"text-align: left;\">Expiry Date<\/th>\n<th style=\"text-align: center;\">Security Code (CVC\/CVV\/CID)<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\">Visa<\/td>\n<td style=\"text-align: left;\">4212 3456 7891 0006<\/td>\n<td style=\"text-align: left;\">03\/2030<\/td>\n<td style=\"text-align: center;\">737<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h4>Fingerprint without challenge<\/h4>\n<p>To test the <a href=\"\/pt\/online-payments\/3d-secure\/#frictionless-flow\">frictionless flow<\/a>, in which you perform a fingerprint but no challenge, use the following test card number:<\/p>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Card number<\/th>\n<th style=\"text-align: left;\">Expiry Date<\/th>\n<th style=\"text-align: left;\">Security Code (CVC\/CVV\/CID)<\/th>\n<th style=\"text-align: left;\">Authentication scenario<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\">5201 2815 0512 9736<\/td>\n<td style=\"text-align: left;\">03\/2030<\/td>\n<td style=\"text-align: left;\">737<\/td>\n<td style=\"text-align: left;\">Fingerprint but no challenge<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h4 id=\"app-based-integration\">Native authentication<\/h4>\n<p>To test authentication scenarios for native mobile (app-based) integrations, use the following test cards:<\/p>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Card number<\/th>\n<th style=\"text-align: left;\">Expiry Date<\/th>\n<th style=\"text-align: left;\">Security Code (CVC\/CVV\/CID)<\/th>\n<th style=\"text-align: left;\">Authentication scenario<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\">5201 2855 6567 2311<\/td>\n<td style=\"text-align: left;\">03\/2030<\/td>\n<td style=\"text-align: left;\">737<\/td>\n<td style=\"text-align: left;\">Basic text authentication<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\">5201 2874 9905 2008<\/td>\n<td style=\"text-align: left;\">03\/2030<\/td>\n<td style=\"text-align: left;\">737<\/td>\n<td style=\"text-align: left;\">Basic single select<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\">5201 2815 9233 1633<\/td>\n<td style=\"text-align: left;\">03\/2030<\/td>\n<td style=\"text-align: left;\">737<\/td>\n<td style=\"text-align: left;\">Basic multi select<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\">5201 2888 2269 6974<\/td>\n<td style=\"text-align: left;\">03\/2030<\/td>\n<td style=\"text-align: left;\">737<\/td>\n<td style=\"text-align: left;\">Basic out-of-band (OOB) authentication<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\">5201 2895 0084 3268<\/td>\n<td style=\"text-align: left;\">03\/2030<\/td>\n<td style=\"text-align: left;\">737<\/td>\n<td style=\"text-align: left;\">HTML out-of-band (OOB) authentication<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\">5201 2861 5377 1465<\/td>\n<td style=\"text-align: left;\">03\/2030<\/td>\n<td style=\"text-align: left;\">737<\/td>\n<td style=\"text-align: left;\">App single select then text authentication<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\">4917 6100 0000 0042<\/td>\n<td style=\"text-align: left;\">03\/2030<\/td>\n<td style=\"text-align: left;\">737<\/td>\n<td style=\"text-align: left;\">Advanced: ACS sends an empty Challenge Response (<code>CRes<\/code>)<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\">4917 6100 0000 0067<\/td>\n<td style=\"text-align: left;\">03\/2030<\/td>\n<td style=\"text-align: left;\">737<\/td>\n<td style=\"text-align: left;\">Advanced: Invalid content in the <code>acsSignedContent<\/code> field in Authentication Response (<code>ARes<\/code>)<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\">4917 6100 0000 0059<\/td>\n<td style=\"text-align: left;\">03\/2030<\/td>\n<td style=\"text-align: left;\">737<\/td>\n<td style=\"text-align: left;\">Advanced: Challenge Response (<code>CRes<\/code>) timeout<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h4>Technical error<\/h4>\n<p>To test simulate an error due to a timeout during the 3D Secure 2 authentication on the issuer side, use the following test card:<\/p>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Card number<\/th>\n<th style=\"text-align: left;\">Expiry Date<\/th>\n<th style=\"text-align: left;\">Security Code (CVC\/CVV\/CID)<\/th>\n<th style=\"text-align: left;\">Scenario<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\">5201 2829 9900 5515<\/td>\n<td style=\"text-align: left;\">03\/2030<\/td>\n<td style=\"text-align: left;\">737<\/td>\n<td style=\"text-align: left;\">Depending on your configuration, the transaction might still proceed to a successful authorization.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2 id=\"see-also\">See also<\/h2>\n<ul>\n<li><a href=\"\/pt\/checkout\/components-web\">Web Component integration<\/a><\/li>\n<li><a href=\"\/pt\/checkout\/3d-secure\/api-reference#payload-structure\">3D Secure 2 payload structure<\/a><\/li>\n<\/ul>","url":"https:\/\/docs.adyen.com\/pt\/online-payments\/3d-secure\/native-3ds2\/api-integration","articleFields":{"description":"Support 3D Secure 2 authentication for web and in-app transactions with your online payments integration.","id":"47486108","type":"page","_expandable":{"operations":""},"status":"current","last_edit_on":"24-09-2019 17:28","robots":"noindex,nofollow"},"algolia":{"url":"https:\/\/docs.adyen.com\/pt\/online-payments\/3d-secure\/native-3ds2\/api-integration","title":"3D Secure 2 API integration","content":"\nThis page describes 3D Secure 2 integration steps for version 46 or earlier of the  \/payments endpoint. If you are using a later version, refer Native 3D Secure 2 authentication.\n\nHow it works\n\nIf you are using 3D Secure for PSD2 compliance, read our comprehensive PSD2 SCA guide.\n\nA payment qualified for 3D Secure 2 can go through either a frictionless or a challenge authentication flow before it is authorised. To simplify your implementation,\u00a0use our web, Android, or iOS 3D Secure 2 Component in addition to your existing API\u00a0integration.\nComponents are our pre-built modules that you can use to perform specific functions such as 3D Secure 2 authentication. To implement, submit API requests from your backend and then use our 3D Secure 2 Component to:\n\nHandle the device fingerprinting and challenge flows, including the data exchange\u00a0between your front end or client and the issuer's Access Control Server (ACS).\nReturn the device fingerprinting and the challenge flow result.\n\nIf you do not want to use the 3D Secure 2 Component and want to build the web-based implementation on your own, see\u00a0Build your own 3D Secure 2 implementation. You can also choose to prefetch 3D Secure 2 device fingerprinting keys to reduce the number of calls for each transaction.\nFor an app-based implementation, we recommend that you use our 3D Secure 2 Android or iOS Component. Both our Android and iOS 3D Secure 2 Component implementations are approved and certified by EMVCo. If you want to build your own 3D Secure 2 mobile implementation, you will need to get an EMVCo certification.\n\n3D Secure 2 is supported from v41 and later of  \/payments and  \/payments\/details endpoints.\n\n\nIf you only want to perform a 3D Secure 2 authentication and then authorise the payment later, see the\u00a0Authentication-only\u00a0integration page.\n\nHere's a diagram for a 3D Secure 2 full implementation with the 3D Secure 2 Component:\n\n\nSubmit a payment request\u00a0with the required 3D Secure 2 objects to start the authentication process.\u00a0Build your implementation depending on the\u00a0resultCode\u00a0returned in the response.\nGet the 3D Secure 2 device fingerprint. If you receive an\u00a0IdentifyShopper\u00a0resultCode, you need to get the shopper's 3D Secure 2 device fingerprint. Initialize the 3D Secure 2 Component for device fingerprinting and submit the result to Adyen. If after submitting the result you get a response with an\u00a0Authorised\u00a0resultCode, this indicates that the transaction was authenticated in a frictionless flow, and the payment was successfully completed.\nPresent a challenge to the shopper.\u00a0If you receive\u00a0ChallengeShopper\u00a0resultCode, this means that the issuer requires further shopper interaction and is initiating a challenge flow. In a web-based integration, this result code can be returned after you submit a payment request or after you submit the device fingerprint result to Adyen, depending on the logic on the issuer's side.\u00a0To handle a challenge flow, initialize the 3D Secure 2 Component for the challenge flow and submit the result to Adyen.\n\nBased on issuer performance, Adyen's Authentication Engine might also route payments to the 3D Secure 2 redirect flow. This is indicated by a\u00a0RedirectShopper\u00a0resultCode\u00a0response. For more information, refer to Payments routed to 3D Secure 1.\nFor a complete list of\u00a0resultCode\u00a0values and the actions that you need to take, see\u00a0Result codes.\nBefore\u00a0you begin\nBefore you begin to integrate, make sure you have followed the Get started with Adyen guide to:\n\nGet an overview of the steps needed to accept live payments.\nCreate your test account.\n\nAfter you have created your test account:\n\nGet your API Key. Save a copy\u00a0as you'll need it for API calls you make to the Adyen payments platform.\nRead and understand the\u00a0Components integration guide. You should already know how to collect shopper information, either with the\u00a0Card component\u00a0or with your\u00a0own payment form\u00a0implementation.\nInstall the 3D Secure Component depending on your current integration:\n\nIf you are using Adyen iOS and Adyen Android version 3.0.0 and later: Use the 3D Secure 2 Action Components for iOS or Android.\nIf you are using Adyen iOS and Adyen Android version 2.x.x and earlier: Use the 3D Secure 2 Components described on this page.\n\n\nInstall 3D Secure 2 Component for Adyen iOS version 2.6.0 to 2.8.4\nImport the iOS 3D Secure 2 Component\u00a0to your project using either CocoaPods or Carthage:\nCocoaPods\n\nAdd\u00a0pod 'Adyen'\u00a0to your\u00a0Podfile.\nRun\u00a0pod install.\n\nCarthage\n\nAdd\u00a0github \"adyen\/adyen-ios\"\u00a0to your\u00a0Cartfile.\nRun\u00a0carthage update.\nLink the framework with your target as described in\u00a0Carthage Readme.\n\nInstall 3D Secure 2 Component for Adyen Android version 2.4.0 to 2.4.5\n\u00a0Import the Android 3D Secure 2 Component by adding this line to your\u00a0build.gradle\u00a0file.\nimplementation \"com.adyen.checkout:threeds:&lt;latest-version&gt;\"\nIntegration steps\n\nCollect the shopper's card payment details with your existing Cards integration - whether through Drop-in, Card Component, or your own UI for the API-only integration.\nProceed to\u00a0submit a payment request.\u00a0\nUse the resultCode\u00a0from the response to determine your next action. For example, to complete a 3D Secure 2 authentication flow, you might need to get the 3D Secure 2 device fingerprint,\u00a0or present a challenge\u00a0to the shopper, or both. Choose the integration steps for web, Android, or iOS.\nSubmit the 3D Secure device fingerprinting result and in case of a challenge flow, submit the challenge result.\n\nTo test your integration, see\u00a0Testing 3D Secure 2.\nStep 1: Submit a payment request\nSubmit a payment request with a POST\u00a0 \/payments\u00a0call containing the shopper's card details. Include the following parameters\u00a0to indicate that you are ready to accept 3D Secure 2 authenticated payments:\n\n\n\nParameter name\nRequired\nDescription\n\n\n\n\n paymentMethod\n\nObject that contains the shopper's card details. Include the cardholder's name.   If you are fully PCI compliant you can pass raw card data instead.\n\n\n channel\n\nSpecify platform that you are using. Use Web, iOS, or Android.\n\n\nauthenticationData.threeDSRequestData.nativeThreeDS\n\nSet to preferred. Indicates that your payment page can handle 3D Secure 2 transactions natively.\n\n\n browserInfo\n\nObject that contains information about the shopper's browser.Full object required is for channel web.For mobile integrations (channel iOS and Android), the userAgent and acceptHeader fields are required to indicate that your integration can handle 3D Secure 2 redirect authentication. If your mobile integration is unable to generate this information, you can send the same data as in the code samples below.\n\n\n returnUrl\n\nIn case of a\u00a03D Secure 1 flow, this is the URL where the shopper will be redirected back to after completing 3D Secure 1 authentication. This URL can have a maximum of 1024 characters. See Return URL formats for each channel.\n\n\n origin\n\nRequired for channel Web. The URL of the page where you are loading the 3D Secure 2 Component from. The origin should not include subdirectories and a trailing slash. You can also get this by opening the browser console and calling window.location.origin.\n\n\n shopperIP\n\nThe shopper's IP address.\n\n\n billingAddress\n\nThe cardholder's billing address.\n\n\n shopperEmail\n\nThe cardholder's email address.\n\n\n\nReturn URL formats\n\nFor Web, the URL should include the protocol: http:\/\/ or https:\/\/. For example, https:\/\/your-company.example.com\/checkout\/.\nFor iOS, use the custom URL for your app. For example, my-app:\/\/. For more information on setting custom URL schemes, refer to the Apple Developer documentation.\n\nFor Android, if you are using the Android SDK, get the URL from CheckoutSetupParameters.getReturnUrl(). Otherwise, use a custom URL handled by an Activity on your app. You can configure it with an intent filter. For example, configure my-app:\/\/your.package.name, and then add that to your manifest.xml file.\n&lt;activity\nandroid:name=\".YourActivity\"&gt;\n&lt;intent-filter&gt;\n  &lt;action android:name=\"android.intent.action.VIEW\"\/&gt;\n\n  &lt;category android:name=\"android.intent.category.DEFAULT\"\/&gt;\n  &lt;category android:name=\"android.intent.category.BROWSABLE\"\/&gt;\n\n  &lt;data\n    android:host=\"${applicationId}\"\n    android:scheme=\"my-app\"\/&gt;\n&lt;\/intent-filter&gt;\n&lt;\/activity&gt;\n\n\n\nWe recommend that you provide all available information to increase the likelihood of achieving a frictionless flow and a higher authorisation rate. In addition to the regular parameters you provide to Adyen, send additional parameters in this list.\n\nRequest\n\n    \n\nResponse\nYou'll receive a response containing:\n\nresultCode:\u00a0IdentifyShopper or\u00a0ChallengeShopper. Perform the corresponding\u00a03D Secure device fingerprinting\u00a0or\u00a0present a challenge\u00a0flows.\u00a0If the transaction is exempted from 3D Secure 2, you might get an\u00a0Authorised\u00a0resultCode.\u00a0\nthreeds2.fingerprintToken\u00a0or\u00a0threeds2.challengeToken: Use this to initiate the 3D Secure 2 Component. If you want to know the contents of the encoded string, see payload structure.\npaymentData: Use this for your next\u00a0POST\u00a0 \/payments\/details\u00a0request.\n\nFor other possible\u00a0resultCode\u00a0values and the actions that you need to take, see\u00a0Result codes.\u00a0\n\n    \n\nStep 2: Get the 3D Secure 2 device fingerprint\nIf your server receives an\u00a0IdentifyShopper resultCode, perform the 3D Secure 2 device fingerprinting. Follow the 3D Secure device fingerprinting procedure for web,\u00a0iOS, or\u00a0Android.\nCollect the 3D Secure 2 device fingerprint with the Web Component\n\nIf you are using v49 of our APIs with Adyen JS version 3.1.0 and later, use createFromAction to load the 3D Secure 2 Component instead.\n\n\n\nMake sure that you have already added the Components JavaScript file and the required configuration on your payments page.\n\n\nCreate a DOM element.\n&lt;div id=\"threeDS2\"&gt;&lt;\/div&gt;\n\n\nInitiate the 3D Secure 2 Component with the\u00a0threeds2.fingerprintToken\u00a0you received from the\u00a0 \/payments\u00a0response, assign a function to handle the\u00a0onComplete\u00a0and\u00a0onError\u00a0events, and mount the 3D Secure 2 Component.\nconst threeDS2IdentifyShopper = checkout\n        .create('threeDS2DeviceFingerprint', {\n            fingerprintToken: resultObject.authentication['threeds2.fingerprintToken'],\n            onComplete: function() {}, \/\/ Called whenever a result is available, regardless if the outcome is successful or not.\n            onError: function() {} \/\/ Gets triggered on error.\n        })\n        .mount('#threeDS2');\n\n\nWhen the\u00a0onComplete\u00a0event is triggered, get the result and proceed to submit the 3D Secure 2 device fingerprinting result.\n\nIf the 3D Secure 2 device fingerprinting failed, both onComplete and onError will be called.\n\n\n\n\n\n\nCollect the 3D Secure 2 device fingerprint from an iOS app\n\nIf you are using v49 of our APIs with Adyen iOS version 3.0.0 and later, use the 3D Secure 2 Action Component instead.\n\n\n\nCreate a\u00a0Card3DS2Authenticator\u00a0instance.\u00a0\nlet authenticator = Card3DS2Authenticator()\n\n\nCreate a fingerprint with the\u00a0threeds2.fingerprintToken\u00a0you received from the\u00a0\u00a0 \/payments\u00a0response.\u00a0\nauthenticator.createFingerprint(usingToken: fingerprintToken) { result in\n     switch result {\n     case let .success(fingerprint):\n          \/\/ Submit fingerprint\n     case let .failure(error):\n          \/\/ Handle error\n     }\n}\n\n\nIf the\u00a0success\u00a0event is triggered, proceed to\u00a0submit the 3D Secure 2 device fingerprinting result\u00a0with the value passed in\u00a0success. Otherwise, handle the\u00a0failure\u00a0event.\u00a0The\u00a0failure\u00a0event will be triggered in case of a timeout, user cancellation, or system failures such as a certificate validation error or an invalid response from the issuer.\u00a0\n\n\nCollect the 3D Secure 2 device fingerprint from an Android app\n\nIf you are using v49 of our APIs with Adyen Android version 3.0.0 and later, use the 3D Secure 2 Action Component instead.\n\n\n\nCreate a Card3DS2Authenticator instance and pass the current context.\nmCard3DS2Authenticator = new Card3DS2Authenticator(\/* Activity *\/ this);\n\n\nCreate a fingerprint with the threeds2.fingerprintToken you received from the  \/payments\u00a0response.\nmCard3DS2Authenticator.createFingerprint(fingerprintToken, new Card3DS2Authenticator.FingerprintListener() {\n@Override\npublic void onSuccess(@NonNull String fingerprint) {\n    \/\/ Submit fingerprint\n}\n\n@Override\npublic void onFailure(@NonNull ThreeDS2Exception e) {\n    mCard3DS2Authenticator.release();\n    \/\/ Handle error\n}\n});\n\n\nIf the\u00a0onSuccess\u00a0event is triggered, proceed to\u00a0submit the 3D Secure 2 device fingerprinting result. Otherwise, handle the\u00a0onFailure\u00a0event. The onFailure event will be triggered in case of a timeout, user cancellation, or system failures such as a certificate validation error or an invalid response from the issuer.\n\n\nStep 3: Submit the 3D Secure 2 device fingerprinting result\nMake a POST\u00a0\u00a0 \/payments\/details\u00a0request from your server with the\u00a0details\u00a0object and the\u00a0paymentData\u00a0as parameters.\n\nthreeds2.fingerprint:\u00a0Pass the\u00a0fingerprintResult\u00a0from the\u00a0onComplete\u00a0event handler\u00a0for web,\u00a0success\u00a0from iOS, or onSuccess\u00a0for Android event handler.\u00a0\npaymentData:\u00a0Pass the\u00a0paymentData\u00a0from the\u00a0initial payment response.\n\nRequest\n{\n  \"details\": {\n    \"threeds2.fingerprint\": \"eyJ0aHJlZURTQ29tcEluZCI6ICJZIn0=\"\n  },\n  \"paymentData\": \"YOUR_PAYMENT_DATA...\"\n}\nResponse\nYou'll receive a response containing any of the following\u00a0resultCode:\n\nAuthorised\u00a0\u2013\u00a0This indicates that the transaction was authenticated in a frictionless flow, and the payment was successfully completed. This state serves as an indicator to proceed with the delivery of goods and services.\u00a0\nChallengeShopper\u00a0\u2013 The issuer has requested further shopper interaction and is initiating a challenge flow. You will also get the threeds2.challengeToken\u00a0and the paymentData which you will need in the challenge flow.\u00a0If you want to know the contents of the encoded threeds2.challengeToken string, see\u00a0payload structure.\n\nFor other possible\u00a0resultCode\u00a0values and the actions that you need to take, see\u00a0Result codes.\n{\n  \"resultCode\": \"ChallengeShopper\",\n  \"authentication\": {\n    \"threeds2.challengeToken\": \"eyJ0aH...\"\n  },\n  \"details\": [\n    {\n      \"key\": \"threeds2.challengeResult\",\n      \"type\": \"text\"\n    }\n  ],\n  \"paymentData\": \"Ab02b4c0!...\"\n}\nStep 4: Present a challenge\nIf your server receives a\u00a0ChallengeShopper resultCode,\u00a0this means that the issuer would like to perform additional checks in order to verify that the shopper is indeed the cardholder.\u00a0Follow the challenge flow procedure for\u00a0web,\u00a0Android, or\u00a0iOS.\nPresent a challenge with the Web Component\n\nIf you are using v49 of our APIs with Adyen JS version 3.1.0 and later, use createFromAction to load the 3D Secure 2 Component instead.\n\n\n\nMake sure that you have already added the Components JavaScript file and the required configuration on your payments page.\n\n\nCreate a DOM element, or reuse the existing one if you are proceeding from the device fingerprinting flow.\n&lt;div id=\"threeDS2\"&gt;&lt;\/div&gt;\n\n\nInitiate the 3D Secure 2 Component with the\u00a0threeds2.challengeToken\u00a0you received from\u00a0 \/payments\u00a0response\u00a0or from\u00a0 \/payments\/details\u00a0if you are proceeding from the device fingerprinting flow. Assign a function to handle the\u00a0onComplete\u00a0and\u00a0onError\u00a0events, set the challenge window size, and then mount the 3D Secure 2 Component.\n const threeDS2Challenge = checkout\n        .create('threeDS2Challenge', {\n            challengeToken: resultObject.authentication['threeds2.challengeToken'],\n            onComplete: function() {}, \/\/ Called whenever a result is available, regardless if the outcome is successful or not.\n            onError: function() {}, \/\/ Gets triggered on error.\n            challengeWindowSize: '05' \/\/ Defaults to '02'\n        })\n        .mount('#threeDS2');\nSet the\u00a0challengeWindowSize\u00a0to any of the following identifiers:\n\n\n\nidentifier\nsize\n\n\n\n\n01\n250px x 400px\n\n\n02\n390px x 400px\n\n\n03\n500px x 600px\n\n\n04\n600px x 400px\n\n\n05\n100% x 100%\n\n\n\n\n\nWhen the onComplete event is triggered, always get the result and\u00a0proceed to\u00a0submit the challenge result.\n\nIf the challenge flow failed, both onComplete and onError will be called.\n\n\n\n\n\n\nPresent a challenge in an iOS app\n\nIf you are using v49 of our APIs with Adyen iOS version 3.0.0 and later, use the 3D Secure 2 Action Component instead.\n\n\n\nUse the same\u00a0Card3DS2Authenticator\u00a0instance from the 3D Secure device fingerprinting flow. Pass the\u00a0threeds2.challengeToken\u00a0you received from\u00a0 \/payments\/details\u00a0to the\u00a0presentChallenge()\u00a0function.\u00a0\nauthenticator.presentChallenge(usingToken: challengeToken) { result in\n     switch result {\n     case let .success(challengeResult):\n          let payload = challengeResult.payload\n          \/\/ Submit challenge result payload\n     case let .failure(error):\n          \/\/ Handle error\n     }\n}\n\n\nIf the\u00a0success\u00a0event is triggered, proceed to\u00a0submit the challenge result\u00a0with the\u00a0payload\u00a0value passed in the\u00a0challengeResult\u00a0of the\u00a0success\u00a0event. Otherwise, handle the\u00a0failure\u00a0event.\u00a0The\u00a0failure\u00a0event will be triggered in case of a timeout, user cancellation, or system failures such as a certificate validation error or an invalid response from the issuer.\u00a0\n\n\nPresent a challenge in an Android app\n\nIf you are using v49 of our APIs with Adyen Android version 3.0.0 and later, use the 3D Secure 2 Action Component instead.\n\n\n\nPass the\u00a0threeds2.challengeToken\u00a0you received\u00a0from the\u00a0 \/payments\/details\u00a0to the\u00a0Card3DS2Authenticator.\u00a0\nmCard3DS2Authenticator.presentChallenge(challengeToken, new Card3DS2Authenticator.SimpleChallengeListener() {\n@Override\npublic void onSuccess(@NonNull ChallengeResult challengeResult) {\n    mCard3DS2Authenticator.release();\n    String payload = challengeResult.getPayload();\n    \/\/ Pass the challenge result payload\n}\n\n@Override\npublic void onFailure(@NonNull ThreeDS2Exception e) {\n    mCard3DS2Authenticator.release();\n    \/\/ Handle error\n}\n});\n\n\nIf the\u00a0onSuccess\u00a0event is triggered, proceed to\u00a0submit the challenge result with the payload value passed in the challengeResult of the onSuccess event.\u00a0Otherwise, handle the\u00a0onFailure\u00a0event.\u00a0The onFailure event will be triggered in case of a timeout, user cancellation, or system failures such as a certificate validation error or an invalid response from the issuer.\n\n\nStep 5: Submit the challenge result\nMake a POST\u00a0\u00a0 \/payments\/details\u00a0request from your server and include\u00a0details\u00a0and the\u00a0paymentData\u00a0as parameters.\n\nthreeds2.challengeResult:\u00a0Pass the result from the\u00a0challengeResult\u00a0from the\u00a0onComplete\u00a0event handler\u00a0for web,\u00a0onSuccess\u00a0for Android, or the\u00a0payload\u00a0value in the\u00a0challengeResult\u00a0of the\u00a0success\u00a0iOS event handler.\u00a0\npaymentData:\u00a0This is the\u00a0paymentData\u00a0from the latest API\u00a0response, either\u00a0from the\u00a0 \/payments\u00a0or from the\u00a0 \/payments\/details\u00a0response\u00a0if you are proceeding from the device fingerprinting flow.\n\nRequest\n{\n  \"details\": {\n    \"threeds2.challengeResult\": \"eyJ0cmFuc1N0YXR1cyI6IlkifQ==\"\n  },\n  \"paymentData\": \"YOUR_PAYMENT_DATA\"\n}\nResponse\nYou'll receive\u00a0Authorised\u00a0as the\u00a0resultCode\u00a0if the payment was successful.\n{\n    \"pspReference\": \"V4HZ4RBFJGXXGN82\",\n    \"resultCode\": \"Authorised\"\n}\nUI customizations for apps\nCustomizing iOS UI\nThe 3D Secure 2 Component for Adyen iOS version 2.x.x inherits your app's theme to ensure the UI of the challenge flow fits your app's look and feel. If you require further UI customizations, the Component provides some customization options through the ADYAppearanceConfiguration class.\nTo customize your UI, create an instance of\u00a0ADYAppearanceConfiguration, configure the desired properties, and pass it during initialization of the\u00a0Card3DS2Authenticator.\nlet appearanceConfiguration = ADYAppearanceConfiguration()\n\/\/ Customize properties of appearanceConfiguration.\n\nlet authenticator = Card3DS2Authenticator(appearanceConfiguration: appearanceConfiguration)\n\nFor a complete list of customizable properties, see the ADYAppearanceConfiguration class reference documentation.\n\nCustomizing Android UI\nCustomize the SDK theme\nThe 3D Secure 2 Component for Adyen Android version 2.x.x  inherits your app's theme to ensure the UI of the challenge flow fits your app's look and feel. You can override the default SDK theme to inherit from one of AppCompat's theme variants. To do this, add the following XML snippet to your styles.xml file.\n&lt;style name=\"ThreeDS2Theme\" parent=\"Theme.AppCompat.Light.DarkActionBar\"&gt;\n    &lt;!-- Customize the SDK theme here. --&gt;\n    &lt;item name=\"colorPrimary\"&gt;@color\/colorPrimary&lt;\/item&gt;\n    &lt;item name=\"colorPrimaryDark\"&gt;@color\/colorPrimaryDark&lt;\/item&gt;\n    &lt;item name=\"colorAccent\"&gt;@color\/colorAccent&lt;\/item&gt;\n&lt;\/style&gt;\nUsing UiCustomization class\nIf you require further UI customizations, the 3D Secure 2 Component for Adyen Android version 2.x.x provides some customization options through the\u00a0UiCustomization\u00a0class.\nTo use the\u00a0UiCustomization\u00a0class, create an instance of\u00a0UiCustomization, configure the desired properties, and pass it during initialization of the\u00a0Card3DS2Authenticator.\nmCard3DS2Authenticator = new Card3DS2Authenticator(\/* Activity *\/ this, uiCustomization);\n\nFor a complete list of customizable properties, see the UiCustomization class reference documentation.\n\nTesting 3D Secure 2\nTo test how your integration handles different 3D Secure 2 authentication scenarios, you need to use a card number for the specific flow.\nWhen prompted for 3D Secure 2 text challenges, use the following credentials to authenticate:\n\nFor native mobile integrations, use password: 1234\nFor web and mobile browser integrations, use password: password\n\nDepending on the authentication option, you can receive the following result codes:\n\nRedirectShopper: you receive this result code if you are using the Redirect authentication flow.\nIdentifyShopper: you receive this result code if you are using the Native authentication flow.\nChallengeShopper: you receive this result code after you submit the 3D Secure 2 device fingerprinting result in a Native authentication, unless you specify a frictionless flow.\n\nDepending on your integration, use the following test cards to simulate different authentication flows.\n\n\n\nCard Type\nCard Number\nExpiry Date\nSecurity Code (CVC\/CVV\/CID)\n\n\n\n\nAmerican Express\n3714 4963 5398 431\n03\/2030\n7373\n\n\nBancontact \/ Maestro\n6703 4444 4444 4449\n03\/2030\n\n\n\nBancontact \/ Visa\n4871 0499 9999 9910\n03\/2030\n737\n\n\nCartes Bancaires \/ Visa Debit\n4035 5014 2814 6300\n03\/2030\n737\n\n\nCartes Bancaires\n4360 0000 0100 0005\n03\/2030\n737\n\n\nChina UnionPay (Credit)\n6250 9470 0000 0014\n03\/2030\n123\n\n\nChina UnionPay (Debit)\n6250 9460 0000 0016\n03\/2030\n123\n\n\nDiners\n3056 9309 0259 04\n03\/2030\n737\n\n\nDiscover\n6011 1111 1111 1117\n03\/2030\n737\n\n\nMaestro\n5000 5500 0000 0029\n03\/2030\nn\/a\n\n\nMastercard\n5454 5454 5454 5454\n03\/2030\n737\n\n\nMastercard Credit\n2222 4000 1000 0008\n03\/2030\n737\n\n\nVisa\n4917 6100 0000 0000\n03\/2030\n737\n\n\nVisa Classic\n4166 6766 6766 6746\n03\/2030\n737\n\n\n\nChallenge without fingerprint\nTo test the web-based flow where the device fingerprinting step is skipped (because the issuer's ACS has not configured a threeDSMethodURL), and you get a ChallengeShopper resultCode immediately after submitting the payment request, use the following card:\n\n\n\nCard Type\nCard Number\nExpiry Date\nSecurity Code (CVC\/CVV\/CID)\n\n\n\n\nVisa\n4212 3456 7891 0006\n03\/2030\n737\n\n\n\nFingerprint without challenge\nTo test the frictionless flow, in which you perform a fingerprint but no challenge, use the following test card number:\n\n\n\nCard number\nExpiry Date\nSecurity Code (CVC\/CVV\/CID)\nAuthentication scenario\n\n\n\n\n5201 2815 0512 9736\n03\/2030\n737\nFingerprint but no challenge\n\n\n\nNative authentication\nTo test authentication scenarios for native mobile (app-based) integrations, use the following test cards:\n\n\n\nCard number\nExpiry Date\nSecurity Code (CVC\/CVV\/CID)\nAuthentication scenario\n\n\n\n\n5201 2855 6567 2311\n03\/2030\n737\nBasic text authentication\n\n\n5201 2874 9905 2008\n03\/2030\n737\nBasic single select\n\n\n5201 2815 9233 1633\n03\/2030\n737\nBasic multi select\n\n\n5201 2888 2269 6974\n03\/2030\n737\nBasic out-of-band (OOB) authentication\n\n\n5201 2895 0084 3268\n03\/2030\n737\nHTML out-of-band (OOB) authentication\n\n\n5201 2861 5377 1465\n03\/2030\n737\nApp single select then text authentication\n\n\n4917 6100 0000 0042\n03\/2030\n737\nAdvanced: ACS sends an empty Challenge Response (CRes)\n\n\n4917 6100 0000 0067\n03\/2030\n737\nAdvanced: Invalid content in the acsSignedContent field in Authentication Response (ARes)\n\n\n4917 6100 0000 0059\n03\/2030\n737\nAdvanced: Challenge Response (CRes) timeout\n\n\n\nTechnical error\nTo test simulate an error due to a timeout during the 3D Secure 2 authentication on the issuer side, use the following test card:\n\n\n\nCard number\nExpiry Date\nSecurity Code (CVC\/CVV\/CID)\nScenario\n\n\n\n\n5201 2829 9900 5515\n03\/2030\n737\nDepending on your configuration, the transaction might still proceed to a successful authorization.\n\n\n\nSee also\n\nWeb Component integration\n3D Secure 2 payload structure\n","type":"page","locale":"pt","boost":16,"hierarchy":{"lvl0":"Home","lvl1":"Online payments","lvl2":"3D Secure 2 authentication","lvl3":"Native 3D Secure 2 authentication","lvl4":"3D Secure 2 API integration"},"hierarchy_url":{"lvl0":"https:\/\/docs.adyen.com\/pt","lvl1":"https:\/\/docs.adyen.com\/pt\/online-payments","lvl2":"https:\/\/docs.adyen.com\/pt\/online-payments\/3d-secure","lvl3":"https:\/\/docs.adyen.com\/pt\/online-payments\/3d-secure\/native-3ds2","lvl4":"\/pt\/online-payments\/3d-secure\/native-3ds2\/api-integration"},"levels":5,"category":"Online Payments","category_color":"green","tags":["Secure","integration"]},"articleFiles":{"3ds2-checkout-api.png":"<img alt=\"\" src=\"https:\/\/docs.adyen.com\/user\/pages\/docs\/02.online-payments\/19.3d-secure\/01.native-3ds2\/10.api-integration\/3ds2-checkout-api.png\" \/>","sample-payment-request-for-web-2431445577.js":"<p alt=\"\">sample-payment-request-for-web-2431445577.js<\/p>"}}
