{"title":"Authentication-only integration","category":"default","creationDate":1678191960,"content":"<div class=\"sc-notice warning\"><div>\n<p><strong>Adyen is no longer developing the Classic API integration<\/strong><\/p>\n<p>This page is for the Classic API (<code>\/authorise<\/code>) integration, which we no longer accept new integrations with. <\/p>\n<p>We strongly recommend migrating to the newer <a href=\"\/online-payments\/3d-secure\/standalone-authentication\">3D Secure authentication-only on Checkout API<\/a> integration. To use this newer integration, you must also <a href=\"\/pt\/online-payments\/upgrade-your-integration\/migrate-to-checkout-api\">migrate to the Checkout API<\/a>.<\/p>\n<\/div><\/div>\n<p>In an authentication-only flow, you perform the 3D Secure 2 authentication independent of the payment authorisation flow. The transaction can go through either a frictionless or a challenge authentication flow. If the 3D Secure authentication is successful, you will get the authentication data that you will need to authorise the payment with another PSP or acquirer.<\/p>\n<p>If after the authentication you decide to\u00a0process the payment with us, we also provide a way so that you can <a href=\"#authorise-the-payment-with-adyen\">continue with the payment authorisation<\/a>.<\/p>\n<h3 id=\"3d-secure-1-authentication-only-fallback\">3D Secure 1 authentication-only fallback<\/h3>\n<p>It is possible that the authentication falls back to redirecting the shopper to the issuer's site. Therefore, we recommend that your integration also supports the <a href=\"\/pt\/online-payments\/classic-integrations\/classic-api-integration\/3d-secure-authentication\/3d-secure-1\">redirect flow<\/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 plataforma de pagamentos da Adyen.<\/li>\n<li>Install one of our\u00a0<a href=\"\/pt\/development-resources\/libraries\">Libraries<\/a>\u00a0to connect with the Adyen APIs. For more information on these steps, refer to\u00a0<a href=\"\/pt\/get-started-with-adyen\">Get started with Adyen<\/a>.<\/li>\n<li>Read and understand the full guides for\u00a0<a href=\"\/pt\/online-payments\/classic-integrations\/classic-api-integration\/3d-secure-authentication\/native-3ds2\/browser-based-integration\">web-based<\/a>,\u00a0<a href=\"\/pt\/online-payments\/classic-integrations\/classic-api-integration\/3d-secure-authentication\/native-3ds2\/ios-sdk-integration\">iOS 3D Secure 2 SDK<\/a>, or\u00a0<a href=\"\/pt\/online-payments\/classic-integrations\/classic-api-integration\/3d-secure-authentication\/native-3ds2\/android-sdk-integration\">Android 3D Secure 2 SDK<\/a> integration.<\/li>\n<\/ol>\n<h2 id=\"web-based-authentication-only\">Web-based authentication only<\/h2>\n<p>In web-based authentication-only flow, you need to submit a payment authentication request. The response will indicate if the authentication follows a frictionless or challenge flow, depending on issuer logic.<\/p>\n<h3 id=\"submit-a-payment-authentication-request\">Submit a payment authentication request<\/h3>\n<div class=\"sc-notice note\"><div>\n<p>If you are planning to authorize your transaction with another acquirer after a successful authentication, we strongly recommend that you include <a href=\"#provide-acquirer-data\">additional acquirer-related data<\/a> to avoid authorisation refusals. Issuing banks can refuse transactions if there is a mismatch of acquirer data between the authentication and authorisation requests.<\/p>\n<\/div><\/div>\n<p>Submit a payment request with a POST\u00a0<a href=\"https:\/\/docs.adyen.com\/api-explorer\/#\/Payment\/authorise\" class=\"codeLabel external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">\/authorise<\/a>\u00a0call. In addition to the required 3D Secure 2 objects, include the\u00a0<code>threeDSAuthenticationOnly<\/code>\u00a0parameter.<\/p>\n<ul>\n<li><code>threeDSAuthenticationOnly<\/code>:\u00a0<strong>true<\/strong><\/li>\n<\/ul>\n<div class=\"sc-notice note\"><div>\n<p>You can send <a href=\"\/pt\/online-payments\/classic-integrations\/classic-api-integration\/3d-secure-authentication\/native-3ds2\/api-reference-3d-secure-2#3d-secure-2-additional-parameters\">additional parameters<\/a> for better authorization rates, and to increase the chance of a frictionless flow. You do not have to send all the additional parameters.  Send parameters that you know you can provide accurately, or that are mandatory in specific scenarios.<\/p>\n<\/div><\/div>\n<h6>Request<\/h6>\n<pre><code class=\"language-json\">{\n  \"amount\":{\n    \"currency\":\"EUR\",\n    \"value\":1500\n  },\n  \"merchantAccount\":\"YOUR_MERCHANT_ACCOUNT\",\n  \"reference\":\"TEST\",\n  \"threeDS2RequestData\":{\n    \"deviceChannel\":\"browser\",\n    \"notificationURL\":\"https:\\\/\\\/www.example.com\\\/YOUR_3DS_NOTIFICATION_URL\"\n  },\n  \"threeDSAuthenticationOnly\": true,\n  \"browserInfo\":{\n    \"userAgent\":\"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\":\"text\\\/html,application\\\/xhtml+xml,application\\\/xml;q=0.9,image\\\/webp,image\\\/apng,*\\\/*;q=0.8\",\n    \"language\":\"en\",\n    \"colorDepth\":24,\n    \"screenHeight\":723,\n    \"screenWidth\":1536,\n    \"timeZoneOffset\":0,\n    \"javaEnabled\":false\n  },\n  \"card\":{\n    \"cvc\":\"737\",\n    \"expiryMonth\":\"03\",\n    \"expiryYear\":\"2030\",\n    \"holderName\":\"Simon Hopper\",\n    \"number\":\"4917610000000000\"\n  }\n}<\/code><\/pre>\n<h6>Response<\/h6>\n<p>You'll receive a response containing:\u00a0<\/p>\n<ul>\n<li>\n<p><code>resultCode<\/code>: Perform the following depending on the result code you receive:<\/p>\n<ul>\n<li><strong>IdentifyShopper<\/strong>: Perform the corresponding\u00a0<a href=\"#devicefingerprintinabrowser\">3D Secure device fingerprinting<\/a>.<\/li>\n<li><strong>ChallengeShopper<\/strong>: <a href=\"#challengeflowinabrowser\">Present the challenge<\/a>\u00a0flow.\u00a0<\/li>\n<li><strong>RedirectShopper<\/strong>: The payment is <a href=\"#3d-secure-1-authentication-only-fallback\">routed to 3D Secure 1<\/a>, based on issuer performance.<\/li>\n<li>\n<p><strong>AuthenticationNotRequired<\/strong>: You can already proceed to authorise the payment because the transaction does not require 3D Secure authentication. Check the <code>authenticationNotRequiredReason<\/code> parameter if you want to know why authentication was skipped.<\/p>\n<div class=\"sc-notice note\"><div>\n<p>If after you receive the <strong>AuthenticationNotRequired<\/strong> result code you decide to continue the payment authorisation with Adyen, proceed to <a href=\"#authorise-the-payment-with-adyen\">Authorise the payment with Adyen<\/a>.<\/p>\n<\/div><\/div>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>For a complete list of\u00a0<code>resultCode<\/code>\u00a0values and the actions that you need to do, see\u00a0<a href=\"\/pt\/online-payments\/payment-result-codes\">Result codes<\/a>.<\/p>\n<pre><code class=\"language-json\">{\n    \"additionalData\": {\n        \"threeds2.threeDSServerTransID\": \"f8062b92-66e9-4c5a-979a-f465e66a6e48\",\n        \"threeds2.threeDS2Token\": \"BQABAQBPCQZ98WKh3v7qGnBlUMGClVzDolIjs8w\/8L64WIAqaOGZipbZod7n+E=...\",\n        \"threeds2.threeDSMethodURL\": \"https:\/\/pal-test.adyen.com\/threeds2simulator\/acs\/threedsmethodURL.shtml\"\n    },\n    \"pspReference\": \"8835494629682519\",\n    \"resultCode\": \"IdentifyShopper\"\n}<\/code><\/pre>\n<p>For a complete list of\u00a0<code>resultCode<\/code>\u00a0values and the actions that you need to do, see\u00a0<a href=\"\/pt\/online-payments\/payment-result-codes\">Result codes<\/a>.<\/p>\n<h3 id=\"devicefingerprintinabrowser\">Get the 3D Secure 2 device fingerprint in a browser<\/h3>\n<p>If your server receives an\u00a0<strong>IdentifyShopper<\/strong><code>resultCode<\/code>,\u00a0<a href=\"\/pt\/online-payments\/classic-integrations\/classic-api-integration\/3d-secure-authentication\/native-3ds2\/browser-based-integration#get-the-3d-secure-2-device-fingerprint\">get the shopper's 3D Secure 2 device fingerprint<\/a>.<\/p>\n<p>In the step where you make a POST\u00a0<a href=\"https:\/\/docs.adyen.com\/api-explorer\/#\/Payment\/authorise3ds2\" class=\"codeLabel external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">\/authorise3ds2<\/a>\u00a0request,\u00a0\u00a0include the\u00a0<code>threeDSAuthenticationOnly<\/code>\u00a0parameter.<\/p>\n<ul>\n<li><code>threeDSAuthenticationOnly<\/code>:\u00a0<strong>true<\/strong><\/li>\n<\/ul>\n<h6>Request<\/h6>\n<pre><code class=\"language-json\">{\n   \"merchantAccount\":\"YOUR_MERCHANT_ACCOUNT\",\n   \"threeDS2RequestData\":{\n      \"threeDSCompInd\":\"Y\"\n   },\n   \"threeDSAuthenticationOnly\": true,\n   \"threeDS2Token\":\"BQABAQBPCQZ98WKh3v7qGnBlUMGClVzDolIjs8w\/8L64WIAqaOGZipbZod7n+E=...\"\n}<\/code><\/pre>\n<h6>Response<\/h6>\n<p>You'll receive a response containing a\u00a0<code>resultCode<\/code>:\u00a0<\/p>\n<ul>\n<li><strong>AuthenticationFinished<\/strong>:\u00a0\u00a0The authentication has been completed. Proceed to\u00a0<a href=\"#get-the-3d-secure-2-authenticated-data\">Get the authentication data.<\/a><\/li>\n<li><strong>ChallengeShopper<\/strong>: The issuer has requested further verification of the shopper. See\u00a0<a href=\"#challengeflowinabrowser\">Challenge flow<\/a>.<\/li>\n<\/ul>\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\/online-payments\/payment-result-codes\">Result codes<\/a>.<\/p>\n<pre><code class=\"language-json\">{\n   \"additionalData\" : {\n      \"threeds2.threeDS2Result.dsTransID\": \"780d3fab-c162-4f48-a249-a3ad...\",\n      \"threeds2.threeDS2Result.eci\" : \"05\",\n      \"threeds2.threeDS2Result.threeDSServerTransID\" : \"c4e59ceb-a382-4d6a-bc87-385d591fa09d\",\n      \"threeds2.threeDS2Token\" : \"BQABAQBPCQZ98WKh3v7qGnBlUMGClVzDolIjs8w\/8L64WIAqaOGZipbZod7n+E=...\",\n      \"threeds2.threeDS2Result.authenticationValue\" : \"3q2+78r+ur7erb7vyv66vv\\\/\\\/\\\/\\\/8=\",\n      \"threeds2.threeDS2Result.transStatus\" : \"Y\"\n   },\n   \"pspReference\" : \"9935500720947721\",\n   \"resultCode\" : \"AuthenticationFinished\"\n}<\/code><\/pre>\n<div class=\"sc-notice info\"><div>\n<p>See our <a href=\"\/pt\/online-payments\/classic-integrations\/classic-api-integration\/3d-secure-authentication\/native-3ds2\/api-reference-3d-secure-2#additionalData\">API reference<\/a> to learn more about the response parameters and how the values map to 3D Secure specifications.<\/p>\n<\/div><\/div>\n<h3 id=\"challengeflowinabrowser\">Present the challenge flow in a browser<\/h3>\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.\u00a0<a href=\"\/pt\/online-payments\/classic-integrations\/classic-api-integration\/3d-secure-authentication\/native-3ds2\/browser-based-integration#present-a-challenge\">Present the challenge flow to the shopper<\/a>.<\/p>\n<div class=\"sc-notice note\"><div>\n<p>If after performing the challenge you decide to continue the payment authorisation with Adyen, skip the step where you send the results in a POST\u00a0 request. Proceed to <a href=\"#authorise-the-payment-with-adyen\">authorise the payment with Adyen<\/a> instead.<\/p>\n<\/div><\/div>\n<p>After sending the challenge result with a POST\u00a0<a href=\"https:\/\/docs.adyen.com\/api-explorer\/#\/Payment\/authorise3ds2\" class=\"codeLabel external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">\/authorise3ds2<\/a>\u00a0request and\u00a0if the authentication was successful, you will get an\u00a0<strong>AuthenticationFinished<\/strong>\u00a0<code>resultCode<\/code>.\u00a0<\/p>\n<h6>Request<\/h6>\n<pre><code class=\"language-json\">{\n    \"merchantAccount\": \"YOUR_MERCHANT_ACCOUNT\",\n    \"threeDS2Result\": {\n        \"transStatus\": \"Y\"\n    },\n    \"threeDS2Token\": \"BQABAQBPCQZ98WKh3v7qGnBlUMGClVzDolIjs8w\/8L64WIAqaOGZipbZod7n+E=...\"\n}<\/code><\/pre>\n<h6>Response<\/h6>\n<pre><code class=\"language-json\">{\n   \"additionalData\" : {\n      \"threeds2.threeDS2Result.dsTransID\": \"780d3fab-c162-4f48-a249-a3ad...\",\n      \"threeds2.threeDS2Result.eci\" : \"05\",\n      \"threeds2.threeDS2Result.threeDSServerTransID\" : \"c4e59ceb-a382-4d6a-bc87-385d591fa09d\",\n      \"threeds2.threeDS2Token\" : \"BQABAQBPCQZ98WKh3v7qGnBlUMGClVzDolIjs8w\/8L64WIAqaOGZipbZod7n+E=...\",\n      \"threeds2.threeDS2Result.authenticationValue\" : \"3q2+78r+ur7erb7vyv66vv\\\/\\\/\\\/\\\/8=\",\n      \"threeds2.threeDS2Result.transStatus\" : \"Y\"\n   },\n   \"pspReference\" : \"9935500720947721\",\n   \"resultCode\" : \"AuthenticationFinished\"\n}<\/code><\/pre>\n<div class=\"sc-notice info\"><div>\n<p>See our <a href=\"\/pt\/online-payments\/classic-integrations\/classic-api-integration\/3d-secure-authentication\/native-3ds2\/api-reference-3d-secure-2#additionalData\">API reference<\/a> to learn more about the response parameters and how the values map to 3D Secure specifications.<\/p>\n<\/div><\/div>\n<p>Proceed to\u00a0<a href=\"#get-the-3d-secure-2-authenticated-data\">Get authentication data<\/a>\u00a0for the fields that you will need to pass on to your PSP or acquirer.<\/p>\n<h2 id=\"android-3d-secure-2-sdk-authentication-only\">Android 3D Secure 2 SDK authentication only<\/h2>\n<p>This section outlines the steps for implementing an authentication only flow on your Android app. First you will need to install our Android SDK, submit a payment authentication request, get the 3D Secure 2 device fingerprint, and present a challenge if required by the issuer.<\/p>\n<h3 id=\"submit-a-request-android\">Submit a payment authentication request<\/h3>\n<div class=\"sc-notice note\"><div>\n<p>If you are planning to authorize your transaction with another acquirer after a successful authentication, we strongly recommend that you include <a href=\"#provide-acquirer-data\">additional acquirer-related data<\/a> to avoid authorisation refusals. Issuing banks can refuse transactions if there is a mismatch of acquirer data between the authentication and authorisation requests.<\/p>\n<\/div><\/div>\n<p>\u00a0Submit a payment request with a POST\u00a0<a href=\"https:\/\/docs.adyen.com\/api-explorer\/#\/Payment\/authorise\" class=\"codeLabel external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">\/authorise<\/a>\u00a0call. In addition to the required 3D Secure 2 objects, include the\u00a0<code>threeDSAuthenticationOnly<\/code>\u00a0parameter.<\/p>\n<ul>\n<li><code>threeDSAuthenticationOnly<\/code>:\u00a0<strong>true <\/strong><\/li>\n<\/ul>\n<div class=\"sc-notice note\"><div>\n<p>You can send <a href=\"\/pt\/online-payments\/classic-integrations\/classic-api-integration\/3d-secure-authentication\/native-3ds2\/api-reference-3d-secure-2#3d-secure-2-additional-parameters\">additional parameters<\/a> for better authorization rates, and to increase the chance of a frictionless flow. You do not have to send all the additional parameters.  Send parameters that you know you can provide accurately, or that are mandatory in specific scenarios.<\/p>\n<\/div><\/div>\n<h6>Request<\/h6>\n<div data-component-wrapper=\"code-sample\">\n    <code-sample :title=\"''\" :id=\"'907470345'\" :code-data=\"[{&quot;language&quot;:&quot;bash&quot;,&quot;tabTitle&quot;:&quot;curl&quot;,&quot;content&quot;:&quot;curl https:\\\/\\\/pal-test.adyen.com\\\/pal\\\/servlet\\\/Payment\\\/v50\\\/authorise \\\\\\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;:1500\\n  },\\n  \\&quot;merchantAccount\\&quot;:\\&quot;YOUR_MERCHANT_ACCOUNT\\&quot;,\\n  \\&quot;reference\\&quot;:\\&quot;YOUR_ORDER_NUMBER\\&quot;,\\n  \\&quot;threeDS2RequestData\\&quot;:{\\n    \\&quot;deviceChannel\\&quot;:\\&quot;app\\&quot;\\n  },\\n  \\&quot;threeDSAuthenticationOnly\\&quot;: true,\\n  \\&quot;card\\&quot;:{\\n    \\&quot;cvc\\&quot;:\\&quot;737\\&quot;,\\n    \\&quot;expiryMonth\\&quot;:\\&quot;03\\&quot;,\\n    \\&quot;expiryYear\\&quot;:\\&quot;2030\\&quot;,\\n    \\&quot;holderName\\&quot;:\\&quot;Simon Hopper\\&quot;,\\n    \\&quot;number\\&quot;:\\&quot;4917610000000000\\&quot;\\n  },\\n  \\&quot;{hint:Required for 3D Secure 1}browserInfo{\\\/hint}\\&quot;: {\\n    \\&quot;userAgent\\&quot;:\\&quot;Mozilla\\\/5.0 (Linux; Android 6.0.1; Nexus 6P Build\\\/MMB29P) AppleWebKit\\\/537.36 (KHTML, like Gecko) Chrome\\\/47.0.2526.83 Mobile 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  }\\n}'&quot;},{&quot;language&quot;:&quot;java&quot;,&quot;tabTitle&quot;:&quot;Java&quot;,&quot;content&quot;:&quot;\\\/\\\/ Adyen Java API Library v32.0.0\\nimport com.adyen.Client;\\nimport com.adyen.enums.Environment;\\nimport com.adyen.model.payment.*;\\nimport java.time.OffsetDateTime;\\nimport java.util.*;\\nimport com.adyen.service.*;\\n\\nClient client = new Client(\\&quot;ADYEN_API_KEY\\&quot;, Environment.TEST);\\n\\n\\\/\\\/ Create the request object(s)\\nAmount amount = new Amount()\\n  .currency(\\&quot;EUR\\&quot;)\\n  .value(1500L);\\n\\nThreeDS2RequestData threeDS2RequestData = new ThreeDS2RequestData()\\n  .deviceChannel(\\&quot;app\\&quot;);\\n\\nCard card = new Card()\\n  .cvc(\\&quot;737\\&quot;)\\n  .number(\\&quot;4917610000000000\\&quot;)\\n  .holderName(\\&quot;Simon Hopper\\&quot;)\\n  .expiryMonth(\\&quot;03\\&quot;)\\n  .expiryYear(\\&quot;2030\\&quot;);\\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  .userAgent(\\&quot;Mozilla\\\/5.0 (Linux; Android 6.0.1; Nexus 6P Build\\\/MMB29P) AppleWebKit\\\/537.36 (KHTML, like Gecko) Chrome\\\/47.0.2526.83 Mobile Safari\\\/537.36\\&quot;);\\n\\nPaymentRequest paymentRequest = new PaymentRequest()\\n  .reference(\\&quot;YOUR_ORDER_NUMBER\\&quot;)\\n  .amount(amount)\\n  .merchantAccount(\\&quot;YOUR_MERCHANT_ACCOUNT\\&quot;)\\n  .threeDS2RequestData(threeDS2RequestData)\\n  .threeDSAuthenticationOnly(true)\\n  .card(card)\\n  .browserInfo(browserInfo);\\n\\n\\\/\\\/ Send the request\\npaymentApi service = new paymentApi(client);\\nPaymentResult response = service.authorise(paymentRequest, null);&quot;},{&quot;language&quot;:&quot;php&quot;,&quot;tabTitle&quot;:&quot;PHP&quot;,&quot;content&quot;:&quot;&lt;?php\\n\\\/\\\/ Adyen PHP API Library v23.0.0\\nuse Adyen\\\\Client;\\nuse Adyen\\\\Environment;\\nuse Adyen\\\\Model\\\\Payments\\\\Amount;\\nuse Adyen\\\\Model\\\\Payments\\\\ThreeDS2RequestData;\\nuse Adyen\\\\Model\\\\Payments\\\\Card;\\nuse Adyen\\\\Model\\\\Payments\\\\BrowserInfo;\\nuse Adyen\\\\Model\\\\Payments\\\\PaymentRequest;\\nuse Adyen\\\\Service\\\\Payments\\\\PaymentsApi;\\n\\n$client = new Client();\\n$client-&gt;setXApiKey(\\&quot;ADYEN_API_KEY\\&quot;);\\n$client-&gt;setEnvironment(Environment::TEST);\\n\\n\\n\\\/\\\/ Create the request object(s)\\n$amount = new Amount();\\n$amount\\n  -&gt;setCurrency(\\&quot;EUR\\&quot;)\\n  -&gt;setValue(1500);\\n\\n$threeDS2RequestData = new ThreeDS2RequestData();\\n$threeDS2RequestData\\n  -&gt;setDeviceChannel(\\&quot;app\\&quot;);\\n\\n$card = new Card();\\n$card\\n  -&gt;setCvc(\\&quot;737\\&quot;)\\n  -&gt;setNumber(\\&quot;4917610000000000\\&quot;)\\n  -&gt;setHolderName(\\&quot;Simon Hopper\\&quot;)\\n  -&gt;setExpiryMonth(\\&quot;03\\&quot;)\\n  -&gt;setExpiryYear(\\&quot;2030\\&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;setUserAgent(\\&quot;Mozilla\\\/5.0 (Linux; Android 6.0.1; Nexus 6P Build\\\/MMB29P) AppleWebKit\\\/537.36 (KHTML, like Gecko) Chrome\\\/47.0.2526.83 Mobile Safari\\\/537.36\\&quot;);\\n\\n$paymentRequest = new PaymentRequest();\\n$paymentRequest\\n  -&gt;setReference(\\&quot;YOUR_ORDER_NUMBER\\&quot;)\\n  -&gt;setAmount($amount)\\n  -&gt;setMerchantAccount(\\&quot;YOUR_MERCHANT_ACCOUNT\\&quot;)\\n  -&gt;setThreeDS2RequestData($threeDS2RequestData)\\n  -&gt;setThreeDSAuthenticationOnly(true)\\n  -&gt;setCard($card)\\n  -&gt;setBrowserInfo($browserInfo);\\n\\n\\\/\\\/ Send the request\\n$service = new PaymentsApi($client);\\n$response = $service-&gt;authorise($paymentRequest);&quot;},{&quot;language&quot;:&quot;cs&quot;,&quot;tabTitle&quot;:&quot;C#&quot;,&quot;content&quot;:&quot;\\\/\\\/ Adyen .net API Library v26.0.0\\nusing Adyen;\\nusing Environment = Adyen.Model.Environment;\\nusing Adyen.Model;\\nusing Adyen.Model.Payment;\\nusing Adyen.Service;\\n\\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)\\nAmount amount = new Amount\\n{\\n  Currency = \\&quot;EUR\\&quot;,\\n  Value = 1500\\n};\\n\\nThreeDS2RequestData threeDS2RequestData = new ThreeDS2RequestData\\n{\\n  DeviceChannel = \\&quot;app\\&quot;\\n};\\n\\nCard card = new Card\\n{\\n  Cvc = \\&quot;737\\&quot;,\\n  Number = \\&quot;4917610000000000\\&quot;,\\n  HolderName = \\&quot;Simon Hopper\\&quot;,\\n  ExpiryMonth = \\&quot;03\\&quot;,\\n  ExpiryYear = \\&quot;2030\\&quot;\\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  UserAgent = \\&quot;Mozilla\\\/5.0 (Linux; Android 6.0.1; Nexus 6P Build\\\/MMB29P) AppleWebKit\\\/537.36 (KHTML, like Gecko) Chrome\\\/47.0.2526.83 Mobile Safari\\\/537.36\\&quot;\\n};\\n\\nPaymentRequest paymentRequest = new PaymentRequest\\n{\\n  Reference = \\&quot;YOUR_ORDER_NUMBER\\&quot;,\\n  Amount = amount,\\n  MerchantAccount = \\&quot;YOUR_MERCHANT_ACCOUNT\\&quot;,\\n  ThreeDS2RequestData = threeDS2RequestData,\\n  ThreeDSAuthenticationOnly = true,\\n  Card = card,\\n  BrowserInfo = browserInfo\\n};\\n\\n\\\/\\\/ Send the request\\nvar service = new PaymentService(client);\\nvar response = service.Authorise(paymentRequest);&quot;},{&quot;language&quot;:&quot;js&quot;,&quot;tabTitle&quot;:&quot;NodeJS (JavaScript)&quot;,&quot;content&quot;:&quot;\\\/\\\/ Adyen Node API Library v22.1.0\\n\\\/\\\/ Require the parts of the module you want to use\\nconst { Client, PaymentAPI } = require('@adyen\\\/api-library');\\n\\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: 1500\\n  },\\n  merchantAccount: \\&quot;YOUR_MERCHANT_ACCOUNT\\&quot;,\\n  reference: \\&quot;YOUR_ORDER_NUMBER\\&quot;,\\n  threeDS2RequestData: {\\n    deviceChannel: \\&quot;app\\&quot;\\n  },\\n  threeDSAuthenticationOnly: true,\\n  card: {\\n    cvc: \\&quot;737\\&quot;,\\n    expiryMonth: \\&quot;03\\&quot;,\\n    expiryYear: \\&quot;2030\\&quot;,\\n    holderName: \\&quot;Simon Hopper\\&quot;,\\n    number: \\&quot;4917610000000000\\&quot;\\n  },\\n  browserInfo: {\\n    userAgent: \\&quot;Mozilla\\\/5.0 (Linux; Android 6.0.1; Nexus 6P Build\\\/MMB29P) AppleWebKit\\\/537.36 (KHTML, like Gecko) Chrome\\\/47.0.2526.83 Mobile 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  }\\n}\\n\\n\\\/\\\/ Send the request\\nconst paymentAPI = new PaymentAPI(client);\\nconst response = paymentAPI.authorise(paymentRequest);&quot;},{&quot;language&quot;:&quot;go&quot;,&quot;tabTitle&quot;:&quot;Go&quot;,&quot;content&quot;:&quot;\\\/\\\/ Adyen Go API Library v16.1.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\\\/payments\\&quot;\\n)\\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)\\namount := payments.Amount{\\n  Currency: \\&quot;EUR\\&quot;,\\n  Value: 1500,\\n}\\n\\nthreeDS2RequestData := payments.ThreeDS2RequestData{\\n  DeviceChannel: \\&quot;app\\&quot;,\\n}\\n\\ncard := payments.Card{\\n  Cvc: common.PtrString(\\&quot;737\\&quot;),\\n  Number: common.PtrString(\\&quot;4917610000000000\\&quot;),\\n  HolderName: common.PtrString(\\&quot;Simon Hopper\\&quot;),\\n  ExpiryMonth: common.PtrString(\\&quot;03\\&quot;),\\n  ExpiryYear: common.PtrString(\\&quot;2030\\&quot;),\\n}\\n\\nbrowserInfo := payments.BrowserInfo{\\n  AcceptHeader: \\&quot;text\\\/html,application\\\/xhtml+xml,application\\\/xml;q=0.9,image\\\/webp,image\\\/apng,*\\\/*;q=0.8\\&quot;,\\n  UserAgent: \\&quot;Mozilla\\\/5.0 (Linux; Android 6.0.1; Nexus 6P Build\\\/MMB29P) AppleWebKit\\\/537.36 (KHTML, like Gecko) Chrome\\\/47.0.2526.83 Mobile Safari\\\/537.36\\&quot;,\\n}\\n\\npaymentRequest := payments.PaymentRequest{\\n  Reference: \\&quot;YOUR_ORDER_NUMBER\\&quot;,\\n  Amount: amount,\\n  MerchantAccount: \\&quot;YOUR_MERCHANT_ACCOUNT\\&quot;,\\n  ThreeDS2RequestData: &amp;threeDS2RequestData,\\n  ThreeDSAuthenticationOnly: common.PtrBool(true),\\n  Card: &amp;card,\\n  BrowserInfo: &amp;browserInfo,\\n}\\n\\n\\\/\\\/ Send the request\\nservice := client.Payments()\\nreq := service.PaymentsApi.AuthoriseInput().PaymentRequest(paymentRequest)\\nres, httpRes, err := service.PaymentsApi.Authorise(context.Background(), req)&quot;},{&quot;language&quot;:&quot;py&quot;,&quot;tabTitle&quot;:&quot;Python&quot;,&quot;content&quot;:&quot;# Adyen Python API Library v13.2.0\\nimport Adyen\\n\\nadyen = Adyen.Adyen()\\nadyen.client.xapikey = \\&quot;ADYEN_API_KEY\\&quot;\\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;: 1500\\n  },\\n  \\&quot;merchantAccount\\&quot;: \\&quot;YOUR_MERCHANT_ACCOUNT\\&quot;,\\n  \\&quot;reference\\&quot;: \\&quot;YOUR_ORDER_NUMBER\\&quot;,\\n  \\&quot;threeDS2RequestData\\&quot;: {\\n    \\&quot;deviceChannel\\&quot;: \\&quot;app\\&quot;\\n  },\\n  \\&quot;threeDSAuthenticationOnly\\&quot;: True,\\n  \\&quot;card\\&quot;: {\\n    \\&quot;cvc\\&quot;: \\&quot;737\\&quot;,\\n    \\&quot;expiryMonth\\&quot;: \\&quot;03\\&quot;,\\n    \\&quot;expiryYear\\&quot;: \\&quot;2030\\&quot;,\\n    \\&quot;holderName\\&quot;: \\&quot;Simon Hopper\\&quot;,\\n    \\&quot;number\\&quot;: \\&quot;4917610000000000\\&quot;\\n  },\\n  \\&quot;browserInfo\\&quot;: {\\n    \\&quot;userAgent\\&quot;: \\&quot;Mozilla\\\/5.0 (Linux; Android 6.0.1; Nexus 6P Build\\\/MMB29P) AppleWebKit\\\/537.36 (KHTML, like Gecko) Chrome\\\/47.0.2526.83 Mobile 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  }\\n}\\n\\n# Send the request\\nresult = adyen.payment.payments_api.authorise(request=json_request)&quot;},{&quot;language&quot;:&quot;rb&quot;,&quot;tabTitle&quot;:&quot;Ruby&quot;,&quot;content&quot;:&quot;# Adyen Ruby API Library v10.1.0\\nrequire \\&quot;adyen-ruby-api-library\\&quot;\\n\\nadyen = Adyen::Client.new\\nadyen.api_key = 'ADYEN_API_KEY'\\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; 1500\\n  },\\n  :merchantAccount =&gt; 'YOUR_MERCHANT_ACCOUNT',\\n  :reference =&gt; 'YOUR_ORDER_NUMBER',\\n  :threeDS2RequestData =&gt; {\\n    :deviceChannel =&gt; 'app'\\n  },\\n  :threeDSAuthenticationOnly =&gt; true,\\n  :card =&gt; {\\n    :cvc =&gt; '737',\\n    :expiryMonth =&gt; '03',\\n    :expiryYear =&gt; '2030',\\n    :holderName =&gt; 'Simon Hopper',\\n    :number =&gt; '4917610000000000'\\n  },\\n  :browserInfo =&gt; {\\n    :userAgent =&gt; 'Mozilla\\\/5.0 (Linux; Android 6.0.1; Nexus 6P Build\\\/MMB29P) AppleWebKit\\\/537.36 (KHTML, like Gecko) Chrome\\\/47.0.2526.83 Mobile Safari\\\/537.36',\\n    :acceptHeader =&gt; 'text\\\/html,application\\\/xhtml+xml,application\\\/xml;q=0.9,image\\\/webp,image\\\/apng,*\\\/*;q=0.8'\\n  }\\n}\\n\\n# Send the request\\nresult = adyen.payment.payments_api.authorise(request_body)&quot;},{&quot;language&quot;:&quot;ts&quot;,&quot;tabTitle&quot;:&quot;NodeJS (TypeScript)&quot;,&quot;content&quot;:&quot;\\\/\\\/ Adyen Node API Library v22.1.0\\n\\\/\\\/ Require the parts of the module you want to use\\nimport { Client, PaymentAPI, Types } from \\&quot;@adyen\\\/api-library\\&quot;;\\n\\nconst client = new Client({ apiKey: \\&quot;ADYEN_API_KEY\\&quot;, environment: \\&quot;TEST\\&quot; });\\n\\n\\\/\\\/ Create the request object(s)\\nconst amount: Types.payment.Amount = {\\n  currency: \\&quot;EUR\\&quot;,\\n  value: 1500\\n};\\n\\nconst threeDS2RequestData: Types.payment.ThreeDS2RequestData = {\\n  deviceChannel: \\&quot;app\\&quot;\\n};\\n\\nconst card: Types.payment.Card = {\\n  cvc: \\&quot;737\\&quot;,\\n  number: \\&quot;4917610000000000\\&quot;,\\n  holderName: \\&quot;Simon Hopper\\&quot;,\\n  expiryMonth: \\&quot;03\\&quot;,\\n  expiryYear: \\&quot;2030\\&quot;\\n};\\n\\nconst browserInfo: Types.payment.BrowserInfo = {\\n  acceptHeader: \\&quot;text\\\/html,application\\\/xhtml+xml,application\\\/xml;q=0.9,image\\\/webp,image\\\/apng,*\\\/*;q=0.8\\&quot;,\\n  userAgent: \\&quot;Mozilla\\\/5.0 (Linux; Android 6.0.1; Nexus 6P Build\\\/MMB29P) AppleWebKit\\\/537.36 (KHTML, like Gecko) Chrome\\\/47.0.2526.83 Mobile Safari\\\/537.36\\&quot;\\n};\\n\\nconst paymentRequest: Types.payment.PaymentRequest = {\\n  reference: \\&quot;YOUR_ORDER_NUMBER\\&quot;,\\n  amount: amount,\\n  merchantAccount: \\&quot;YOUR_MERCHANT_ACCOUNT\\&quot;,\\n  threeDS2RequestData: threeDS2RequestData,\\n  threeDSAuthenticationOnly: true,\\n  card: card,\\n  browserInfo: browserInfo\\n};\\n\\n\\\/\\\/ Send the request\\nconst paymentAPI = new PaymentAPI(client);\\nconst response = paymentAPI.authorise(paymentRequest);&quot;}]\" :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<h6>Response<\/h6>\n<p>You'll receive a response containing:\u00a0<\/p>\n<ul>\n<li>\n<p><code>resultCode<\/code>: Perform the following depending on the result code you receive:<\/p>\n<ul>\n<li><strong>IdentifyShopper<\/strong>:\u00a0Perform the\u00a0<a href=\"#devicefingerprintinandroid\">3D Secure 2 device fingerprinting process<\/a>.<\/li>\n<li><strong>RedirectShopper<\/strong>: The payment is <a href=\"#3d-secure-1-authentication-only-fallback\">routed to 3D Secure 1<\/a>, based on issuer performance.<\/li>\n<li><strong>AuthenticationNotRequired<\/strong>: You can already proceed to authorise the payment because the transaction does not require 3D Secure authentication. Check the <code>authenticationNotRequiredReason<\/code> parameter if you want to know why authentication was skipped.<\/li>\n<\/ul>\n<div class=\"sc-notice note\"><div>\n<p>If after you receive the <strong>AuthenticationNotRequired<\/strong> result code you decide to continue the payment authorisation with Adyen, proceed to <a href=\"#authorise-the-payment-with-adyen\">Authorise the payment with Adyen<\/a>.<\/p>\n<\/div><\/div>\n<\/li>\n<\/ul>\n<p>For a complete list of\u00a0<code>resultCode<\/code>\u00a0values and the actions that you need to do, see\u00a0<a href=\"\/pt\/online-payments\/payment-result-codes\">Result codes<\/a>.<\/p>\n<pre><code class=\"language-json\">{\n    \"additionalData\": {\n        \"threeds2.threeDSServerTransID\": \"055fadfb-9fe4-4e70-99f0-9b8935bf1eb2\",\n        \"threeds2.threeDS2DirectoryServerInformation.algorithm\": \"RSA\",\n        \"threeds2.threeDS2Token\": \"BQABAQBPCQZ98WKh3v7qGnBlUMGClVzDolIjs8w\/8L64WIAqaOGZipbZod7n+E=...\",\n        \"threeds2.threeDS2DirectoryServerInformation.directoryServerId\": \"A000000003\",\n        \"threeds2.threeDS2DirectoryServerInformation.publicKey\": \"eyJrdHkiOiJSU0EiLCJlIjoiQVFBQiIsIm4iOiI4VFBxZkFQ==...\"\n    },\n    \"pspReference\": \"8835495304426403\",\n    \"resultCode\": \"IdentifyShopper\"\n}<\/code><\/pre>\n<h3 id=\"devicefingerprintinandroid\">Get the 3D Secure 2 device fingerprint with an Android app<\/h3>\n<p>If your server receives an\u00a0<strong>IdentifyShopper<\/strong> <code>resultCode<\/code>,\u00a0<a href=\"\/pt\/online-payments\/classic-integrations\/classic-api-integration\/3d-secure-authentication\/native-3ds2\/android-sdk-integration#get-the-3d-secure-2-device-fingerprint\">get the shopper's 3D Secure 2 device fingerprint<\/a>.<\/p>\n<p>In the step where you make a POST\u00a0<a href=\"https:\/\/docs.adyen.com\/api-explorer\/#\/Payment\/authorise3ds2\" class=\"codeLabel external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">\/authorise3ds2<\/a>\u00a0request,\u00a0\u00a0include the\u00a0<code>threeDSAuthenticationOnly<\/code>\u00a0parameter.<\/p>\n<ul>\n<li><code>threeDSAuthenticationOnly<\/code>:\u00a0<strong>true<\/strong><\/li>\n<\/ul>\n<h6>Request<\/h6>\n<pre><code class=\"language-json\">{\n    \"merchantAccount\": \"YOUR_MERCHANT_ACCOUNT\",\n    \"threeDS2RequestData\": {\n        \"deviceChannel\": \"app\",\n        \"sdkAppID\": \"9063b12c-fcde-43c7-b28e-8d0af5520e8a\",\n        \"sdkEncData\": \"&lt;device-fingerprint&gt;\",\n        \"sdkEphemPubKey\": {\n            \"crv\": \"P-256\",\n            \"kty\": \"EC\",\n            \"x\": \"LYImJkRzS92vogM6AUPCBhJ20VagSe8IL0Q9SdisUSo\",\n            \"y\": \"Rav4sKHnLUIUHVdyR4dyV7G2_EeAnuCn_6621ZhqZYU\"\n        },\n        \"sdkReferenceNumber\": \"3DS_LOA_SDK_ADBV_739485_94783\",\n        \"sdkTransID\": \"b60c9879-ac77-4918-a317-7b01c4317053\"\/8Q==..\"\n    \"threeDSAuthenticationOnly\": true\n}<\/code><\/pre>\n<h6>Response<\/h6>\n<p>You'll receive a response containing a\u00a0<code>resultCode<\/code>:<\/p>\n<ul>\n<li><strong>AuthenticationFinished<\/strong>:\u00a0The authentication has been completed. Proceed to\u00a0<a href=\"#get-the-3d-secure-2-authenticated-data\">Get the authentication data.<\/a><\/li>\n<li><strong>ChallengeShopper<\/strong>: The issuer has requested further shopper interaction. Perform the\u00a0<a href=\"#challengeflowinandroid\">Challenge flow<\/a>.<\/li>\n<\/ul>\n<p>For a complete list of\u00a0<code>resultCode<\/code>\u00a0values, see\u00a0<a href=\"\/pt\/online-payments\/payment-result-codes\">Result codes<\/a>.<\/p>\n<pre><code class=\"language-json\">{\n    \"additionalData\": {\n        \"threeds2.threeDS2ResponseData.acsSignedContent\": \"eyJhbGciOiJQUzI1NiIsIngPVEFOQmdrcWhraUc5dtw4I-RBJ8_OUt8yIZEsoc...\",\n        \"threeds2.threeDS2ResponseData.transStatus\": \"C\",\n        \"threeds2.threeDS2ResponseData.acsChallengeMandated\": \"Y\",\n        \"threeds2.threeDS2ResponseData.acsURL\": \"https:\/\/pal-test.adyen.com\/threeds2simulator\/services\/ThreeDS2Simulator\/v1\/handle\/83e78317-e73f-4a6f-j738-7hj09p07n178\",\n        \"threeds2.threeDS2ResponseData.threeDSServerTransID\": \"930h2k09-1986-4hl2-800a-c8d7783918bf\",\n        \"threeds2.threeDS2ResponseData.authenticationType\": \"01\",\n        \"threeds2.threeDS2ResponseData.messageVersion\": \"2.1.0\",\n        \"threeds2.threeDS2Token\": \"BQABAQBPCQZ98WKh3v7qGnBlUMGClVzDolIjs8w\/8L64WIAqaOGZipbZod7n+E=...\",\n        \"threeds2.threeDS2ResponseData.acsTransID\": \"45e79886-e60c-4c6d-a962-7aa43d59b150\",\n        \"threeds2.threeDS2ResponseData.acsReferenceNumber\": \"ADYEN-ACS-SIMULATOR\"\n    },\n    \"pspReference\": \"8825495326513370\",\n    \"resultCode\": \"ChallengeShopper\"\n}<\/code><\/pre>\n<h3 id=\"challengeflowinandroid\">Present the challenge flow within your Android app<\/h3>\n<p>If your server receives a\u00a0<strong>ChallengeShopper<\/strong>\u00a0<code>resultCode<\/code>, this means that the issuer would like to perform additional checks in order to verify that the shopper is indeed the cardholder.\u00a0<a href=\"\/pt\/online-payments\/classic-integrations\/classic-api-integration\/3d-secure-authentication\/native-3ds2\/android-sdk-integration#present-a-challenge\">Present the challenge flow to the shopper<\/a>.<\/p>\n<div class=\"sc-notice note\"><div>\n<p>If after performing the challenge you decide to continue the payment authorisation with Adyen, skip the step where you send the results in a POST\u00a0 request. Proceed to <a href=\"#authorise-the-payment-with-adyen\">authorise the payment with Adyen<\/a> instead.<\/p>\n<\/div><\/div>\n<p>After sending the challenge result with a POST\u00a0<a href=\"https:\/\/docs.adyen.com\/api-explorer\/#\/Payment\/authorise3ds2\" class=\"codeLabel external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">\/authorise3ds2<\/a>\u00a0request and\u00a0If the authentication was successful, you will get a\u00a0<strong>AuthenticationFinished<\/strong>\u00a0<code>resultCode<\/code>.\u00a0<\/p>\n<h6>Request<\/h6>\n<pre><code class=\"language-json\">{\n    \"merchantAccount\": \"YOUR_MERCHANT_ACCOUNT\",\n    \"threeDS2Result\": {\n        \"transStatus\": \"Y\"\n    },\n    \"threeDS2Token\": \"BQABAQBPCQZ98WKh3v7qGnBlUMGClVzDolIjs8w\/8L64WIAqaOGZipbZod7n+E=...\"\n}<\/code><\/pre>\n<h6>Response<\/h6>\n<p>You'll receive\u00a0<strong>AuthenticationFinished<\/strong>\u00a0as the\u00a0<code>resultCode<\/code>\u00a0if the transaction was successfully authenticated.<\/p>\n<pre><code class=\"language-json\">{\n   \"additionalData\" : {\n      \"threeds2.threeDS2Result.dsTransID\": \"780d3fab-c162-4f48-a249-a3ad...\",\n      \"threeds2.threeDS2Result.eci\" : \"05\",\n      \"threeds2.threeDS2Result.threeDSServerTransID\" : \"c4e59ceb-a382-4d6a-bc87-385d591fa09d\",\n      \"threeds2.threeDS2Token\" : \"BQABAQBPCQZ98WKh3v7qGnBlUMGClVzDolIjs8w\/8L64WIAqaOGZipbZod7n+E=...\",\n      \"threeds2.threeDS2Result.authenticationValue\" : \"3q2+78r+ur7erb7vyv66vv\\\/\\\/\\\/\\\/8=\",\n      \"threeds2.threeDS2Result.transStatus\" : \"Y\"\n   },\n   \"pspReference\" : \"9935500720947721\",\n   \"resultCode\" : \"AuthenticationFinished\"\n}<\/code><\/pre>\n<div class=\"sc-notice info\"><div>\n<p>See our <a href=\"\/pt\/online-payments\/classic-integrations\/classic-api-integration\/3d-secure-authentication\/native-3ds2\/api-reference-3d-secure-2#additionalData\">API reference<\/a> to learn more about the response parameters and how the values map to 3D Secure specifications.<\/p>\n<\/div><\/div>\n<p>Proceed to\u00a0<a href=\"#get-the-3d-secure-2-authenticated-data\">Get authentication data<\/a>\u00a0for the fields that you will need to pass on to your PSP or acquirer.<\/p>\n<h2 id=\"ios-3d-secure-2-sdk-authentication-only\">iOS 3D Secure 2 SDK authentication only<\/h2>\n<p>This section outlines the steps for implementing an authentication only flow on your iOS app. First you will need to install our iOS SDK, submit a payment authentication request, get the 3D Secure 2 device fingerprint, and present a challenge if required by the issuer.<\/p>\n<h3 id=\"submit-a-payment-ios\">Submit a\u00a0payment authentication request<\/h3>\n<div class=\"sc-notice note\"><div>\n<p>If you are planning to authorize your transaction with another acquirer after a successful authentication, we strongly recommend that you include <a href=\"#provide-acquirer-data\">additional acquirer-related data<\/a> to avoid authorisation refusals. Issuing banks can refuse transactions if there is a mismatch of acquirer data between the authentication and authorisation requests.<\/p>\n<\/div><\/div>\n<p>Submit a payment request with a POST\u00a0<a href=\"https:\/\/docs.adyen.com\/api-explorer\/#\/Payment\/authorise\" class=\"codeLabel external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">\/authorise<\/a>\u00a0call. In addition to the required 3D Secure 2 objects, include the\u00a0<code>threeDSAuthenticationOnly<\/code>\u00a0parameter.<\/p>\n<ul>\n<li><code>threeDSAuthenticationOnly<\/code>:\u00a0<strong>true<\/strong><\/li>\n<\/ul>\n<div class=\"sc-notice note\"><div>\n<p>You can send <a href=\"\/pt\/online-payments\/classic-integrations\/classic-api-integration\/3d-secure-authentication\/native-3ds2\/api-reference-3d-secure-2#3d-secure-2-additional-parameters\">additional parameters<\/a> for better authorization rates, and to increase the chance of a frictionless flow. You do not have to send all the additional parameters.  Send parameters that you know you can provide accurately, or that are mandatory in specific scenarios.<\/p>\n<\/div><\/div>\n<h6>Request<\/h6>\n<div data-component-wrapper=\"code-sample\">\n    <code-sample :title=\"''\" :id=\"'1715442810'\" :code-data=\"[{&quot;language&quot;:&quot;bash&quot;,&quot;tabTitle&quot;:&quot;curl&quot;,&quot;content&quot;:&quot;curl https:\\\/\\\/pal-test.adyen.com\\\/pal\\\/servlet\\\/Payment\\\/v50\\\/authorise \\\\\\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;:1500\\n  },\\n  \\&quot;merchantAccount\\&quot;:\\&quot;YOUR_MERCHANT_ACCOUNT\\&quot;,\\n  \\&quot;reference\\&quot;:\\&quot;YOUR_ORDER_NUMBER\\&quot;,\\n  \\&quot;threeDS2RequestData\\&quot;:{\\n    \\&quot;deviceChannel\\&quot;:\\&quot;app\\&quot;\\n  },\\n  \\&quot;threeDSAuthenticationOnly\\&quot;: true,\\n  \\&quot;card\\&quot;:{\\n    \\&quot;cvc\\&quot;:\\&quot;737\\&quot;,\\n    \\&quot;expiryMonth\\&quot;:\\&quot;03\\&quot;,\\n    \\&quot;expiryYear\\&quot;:\\&quot;2030\\&quot;,\\n    \\&quot;holderName\\&quot;:\\&quot;Simon Hopper\\&quot;,\\n    \\&quot;number\\&quot;:\\&quot;4917610000000000\\&quot;\\n  },\\n  \\&quot;{hint:Required for 3D Secure 1}browserInfo{\\\/hint}\\&quot;: {\\n    \\&quot;userAgent\\&quot;:\\&quot;Mozilla\\\/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit\\\/604.1.38 (KHTML, like Gecko) Version\\\/11.0 Mobile\\\/15A5370a Safari\\\/604.1\\&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 }\\n}'&quot;},{&quot;language&quot;:&quot;java&quot;,&quot;tabTitle&quot;:&quot;Java&quot;,&quot;content&quot;:&quot;\\\/\\\/ Adyen Java API Library v25.0.0\\nimport com.adyen.Client;\\nimport com.adyen.enums.Environment;\\nimport com.adyen.model.payment.*;\\nimport java.time.OffsetDateTime;\\nimport java.util.*;\\nimport com.adyen.service.*;\\n\\nClient client = new Client(\\&quot;ADYEN_API_KEY\\&quot;, Environment.TEST);\\n\\n\\\/\\\/ Create the request object(s)\\nAmount amount = new Amount()\\n  .currency(\\&quot;EUR\\&quot;)\\n  .value(1500L);\\n\\nThreeDS2RequestData threeDS2RequestData = new ThreeDS2RequestData()\\n  .deviceChannel(\\&quot;app\\&quot;);\\n\\nCard card = new Card()\\n  .cvc(\\&quot;737\\&quot;)\\n  .number(\\&quot;4917610000000000\\&quot;)\\n  .holderName(\\&quot;Simon Hopper\\&quot;)\\n  .expiryMonth(\\&quot;03\\&quot;)\\n  .expiryYear(\\&quot;2030\\&quot;);\\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  .userAgent(\\&quot;Mozilla\\\/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit\\\/604.1.38 (KHTML, like Gecko) Version\\\/11.0 Mobile\\\/15A5370a Safari\\\/604.1\\&quot;);\\n\\nPaymentRequest paymentRequest = new PaymentRequest()\\n  .reference(\\&quot;YOUR_ORDER_NUMBER\\&quot;)\\n  .amount(amount)\\n  .merchantAccount(\\&quot;YOUR_MERCHANT_ACCOUNT\\&quot;)\\n  .threeDS2RequestData(threeDS2RequestData)\\n  .threeDSAuthenticationOnly(true)\\n  .card(card)\\n  .browserInfo(browserInfo);\\n\\n\\\/\\\/ Make the API call\\npaymentApi service = new paymentApi(client);\\nPaymentResult response = service.authorise(paymentRequest, null);&quot;},{&quot;language&quot;:&quot;php&quot;,&quot;tabTitle&quot;:&quot;PHP&quot;,&quot;content&quot;:&quot;\\\/\\\/ Adyen PHP API Library v17.4.0\\nuse Adyen\\\\Client;\\nuse Adyen\\\\Environment;\\nuse Adyen\\\\Model\\\\Payments\\\\Amount;\\nuse Adyen\\\\Model\\\\Payments\\\\ThreeDS2RequestData;\\nuse Adyen\\\\Model\\\\Payments\\\\Card;\\nuse Adyen\\\\Model\\\\Payments\\\\BrowserInfo;\\nuse Adyen\\\\Model\\\\Payments\\\\PaymentRequest;\\nuse Adyen\\\\Service\\\\Payments\\\\PaymentsApi;\\n\\n$client = new Client();\\n$client-&gt;setXApiKey(\\&quot;ADYEN_API_KEY\\&quot;);\\n$client-&gt;setEnvironment(Environment::TEST);\\n\\n\\n\\\/\\\/ Create the request object(s)\\n$amount = new Amount();\\n$amount\\n  -&gt;setCurrency(\\&quot;EUR\\&quot;)\\n  -&gt;setValue(1500);\\n\\n$threeDS2RequestData = new ThreeDS2RequestData();\\n$threeDS2RequestData\\n  -&gt;setDeviceChannel(\\&quot;app\\&quot;);\\n\\n$card = new Card();\\n$card\\n  -&gt;setCvc(\\&quot;737\\&quot;)\\n  -&gt;setNumber(\\&quot;4917610000000000\\&quot;)\\n  -&gt;setHolderName(\\&quot;Simon Hopper\\&quot;)\\n  -&gt;setExpiryMonth(\\&quot;03\\&quot;)\\n  -&gt;setExpiryYear(\\&quot;2030\\&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;setUserAgent(\\&quot;Mozilla\\\/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit\\\/604.1.38 (KHTML, like Gecko) Version\\\/11.0 Mobile\\\/15A5370a Safari\\\/604.1\\&quot;);\\n\\n$paymentRequest = new PaymentRequest();\\n$paymentRequest\\n  -&gt;setReference(\\&quot;YOUR_ORDER_NUMBER\\&quot;)\\n  -&gt;setAmount($amount)\\n  -&gt;setMerchantAccount(\\&quot;YOUR_MERCHANT_ACCOUNT\\&quot;)\\n  -&gt;setThreeDS2RequestData($threeDS2RequestData)\\n  -&gt;setThreeDSAuthenticationOnly(true)\\n  -&gt;setCard($card)\\n  -&gt;setBrowserInfo($browserInfo);\\n\\n\\\/\\\/ Make the API call\\n$service = new PaymentsApi($client);\\n$response = $service-&gt;authorise($paymentRequest);&quot;},{&quot;language&quot;:&quot;cs&quot;,&quot;tabTitle&quot;:&quot;C#&quot;,&quot;content&quot;:&quot;\\\/\\\/ Adyen .net API Library v14.4.0\\nusing Adyen;\\nusing Environment = Adyen.Model.Environment;\\nusing Adyen.Model;\\nusing Adyen.Model.Payment;\\nusing Adyen.Service;\\n\\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)\\nAmount amount = new Amount\\n{\\n  Currency = \\&quot;EUR\\&quot;,\\n  Value = 1500\\n};\\n\\nThreeDS2RequestData threeDS2RequestData = new ThreeDS2RequestData\\n{\\n  DeviceChannel = \\&quot;app\\&quot;\\n};\\n\\nCard card = new Card\\n{\\n  Cvc = \\&quot;737\\&quot;,\\n  Number = \\&quot;4917610000000000\\&quot;,\\n  HolderName = \\&quot;Simon Hopper\\&quot;,\\n  ExpiryMonth = \\&quot;03\\&quot;,\\n  ExpiryYear = \\&quot;2030\\&quot;\\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  UserAgent = \\&quot;Mozilla\\\/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit\\\/604.1.38 (KHTML, like Gecko) Version\\\/11.0 Mobile\\\/15A5370a Safari\\\/604.1\\&quot;\\n};\\n\\nPaymentRequest paymentRequest = new PaymentRequest\\n{\\n  Reference = \\&quot;YOUR_ORDER_NUMBER\\&quot;,\\n  Amount = amount,\\n  MerchantAccount = \\&quot;YOUR_MERCHANT_ACCOUNT\\&quot;,\\n  ThreeDS2RequestData = threeDS2RequestData,\\n  ThreeDSAuthenticationOnly = true,\\n  Card = card,\\n  BrowserInfo = browserInfo\\n};\\n\\n\\\/\\\/ Make the API call\\nvar service = new PaymentService(client);\\nvar response = service.Authorise(paymentRequest);&quot;},{&quot;language&quot;:&quot;js&quot;,&quot;tabTitle&quot;:&quot;NodeJS (JavaScript)&quot;,&quot;content&quot;:&quot;\\\/\\\/ Adyen Node API Library v16.2.0\\n\\\/\\\/ Require the parts of the module you want to use\\nconst { Client, PaymentAPI } = require('@adyen\\\/api-library');\\n\\\/\\\/ Initialize the client object\\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: 1500\\n  },\\n  merchantAccount: \\&quot;YOUR_MERCHANT_ACCOUNT\\&quot;,\\n  reference: \\&quot;YOUR_ORDER_NUMBER\\&quot;,\\n  threeDS2RequestData: {\\n    deviceChannel: \\&quot;app\\&quot;\\n  },\\n  threeDSAuthenticationOnly: true,\\n  card: {\\n    cvc: \\&quot;737\\&quot;,\\n    expiryMonth: \\&quot;03\\&quot;,\\n    expiryYear: \\&quot;2030\\&quot;,\\n    holderName: \\&quot;Simon Hopper\\&quot;,\\n    number: \\&quot;4917610000000000\\&quot;\\n  },\\n  browserInfo: {\\n    userAgent: \\&quot;Mozilla\\\/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit\\\/604.1.38 (KHTML, like Gecko) Version\\\/11.0 Mobile\\\/15A5370a Safari\\\/604.1\\&quot;,\\n    acceptHeader: \\&quot;text\\\/html,application\\\/xhtml+xml,application\\\/xml;q=0.9,image\\\/webp,image\\\/apng,*\\\/*;q=0.8\\&quot;\\n  }\\n}\\n\\n\\\/\\\/ Make the API call\\nconst paymentAPI = new PaymentAPI(client);\\nconst response = paymentAPI.authorise(paymentRequest);&quot;},{&quot;language&quot;:&quot;go&quot;,&quot;tabTitle&quot;:&quot;Go&quot;,&quot;content&quot;:&quot;\\\/\\\/ Adyen Go API Library v9.3.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\\\/payments\\&quot;\\n)\\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)\\namount := payments.Amount{\\n  Currency: \\&quot;EUR\\&quot;,\\n  Value: 1500,\\n}\\n\\nthreeDS2RequestData := payments.ThreeDS2RequestData{\\n  DeviceChannel: \\&quot;app\\&quot;,\\n}\\n\\ncard := payments.Card{\\n  Cvc: common.PtrString(\\&quot;737\\&quot;),\\n  Number: common.PtrString(\\&quot;4917610000000000\\&quot;),\\n  HolderName: common.PtrString(\\&quot;Simon Hopper\\&quot;),\\n  ExpiryMonth: common.PtrString(\\&quot;03\\&quot;),\\n  ExpiryYear: common.PtrString(\\&quot;2030\\&quot;),\\n}\\n\\nbrowserInfo := payments.BrowserInfo{\\n  AcceptHeader: \\&quot;text\\\/html,application\\\/xhtml+xml,application\\\/xml;q=0.9,image\\\/webp,image\\\/apng,*\\\/*;q=0.8\\&quot;,\\n  UserAgent: \\&quot;Mozilla\\\/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit\\\/604.1.38 (KHTML, like Gecko) Version\\\/11.0 Mobile\\\/15A5370a Safari\\\/604.1\\&quot;,\\n}\\n\\npaymentRequest := payments.PaymentRequest{\\n  Reference: \\&quot;YOUR_ORDER_NUMBER\\&quot;,\\n  Amount: amount,\\n  MerchantAccount: \\&quot;YOUR_MERCHANT_ACCOUNT\\&quot;,\\n  ThreeDS2RequestData: &amp;threeDS2RequestData,\\n  ThreeDSAuthenticationOnly: common.PtrBool(true),\\n  Card: &amp;card,\\n  BrowserInfo: &amp;browserInfo,\\n}\\n\\n\\\/\\\/ Make the API call\\nservice := client.Payments()\\nreq := service.PaymentsApi.AuthoriseInput().PaymentRequest(paymentRequest)\\nres, httpRes, err := service.PaymentsApi.Authorise(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.2.0\\nimport Adyen\\n\\nadyen = Adyen.Adyen()\\nadyen.client.xapikey = \\&quot;ADYEN_API_KEY\\&quot;\\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;: 1500\\n  },\\n  \\&quot;merchantAccount\\&quot;: \\&quot;YOUR_MERCHANT_ACCOUNT\\&quot;,\\n  \\&quot;reference\\&quot;: \\&quot;YOUR_ORDER_NUMBER\\&quot;,\\n  \\&quot;threeDS2RequestData\\&quot;: {\\n    \\&quot;deviceChannel\\&quot;: \\&quot;app\\&quot;\\n  },\\n  \\&quot;threeDSAuthenticationOnly\\&quot;: True,\\n  \\&quot;card\\&quot;: {\\n    \\&quot;cvc\\&quot;: \\&quot;737\\&quot;,\\n    \\&quot;expiryMonth\\&quot;: \\&quot;03\\&quot;,\\n    \\&quot;expiryYear\\&quot;: \\&quot;2030\\&quot;,\\n    \\&quot;holderName\\&quot;: \\&quot;Simon Hopper\\&quot;,\\n    \\&quot;number\\&quot;: \\&quot;4917610000000000\\&quot;\\n  },\\n  \\&quot;browserInfo\\&quot;: {\\n    \\&quot;userAgent\\&quot;: \\&quot;Mozilla\\\/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit\\\/604.1.38 (KHTML, like Gecko) Version\\\/11.0 Mobile\\\/15A5370a Safari\\\/604.1\\&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  }\\n}\\n\\n# Make the API call\\nresult = adyen.payment.payments_api.authorise(request=json_request)&quot;},{&quot;language&quot;:&quot;rb&quot;,&quot;tabTitle&quot;:&quot;Ruby&quot;,&quot;content&quot;:&quot;# Adyen Ruby API Library v9.3.0\\nrequire \\&quot;adyen-ruby-api-library\\&quot;\\n\\nadyen = Adyen::Client.new\\nadyen.api_key = 'ADYEN_API_KEY'\\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; 1500\\n  },\\n  :merchantAccount =&gt; 'YOUR_MERCHANT_ACCOUNT',\\n  :reference =&gt; 'YOUR_ORDER_NUMBER',\\n  :threeDS2RequestData =&gt; {\\n    :deviceChannel =&gt; 'app'\\n  },\\n  :threeDSAuthenticationOnly =&gt; true,\\n  :card =&gt; {\\n    :cvc =&gt; '737',\\n    :expiryMonth =&gt; '03',\\n    :expiryYear =&gt; '2030',\\n    :holderName =&gt; 'Simon Hopper',\\n    :number =&gt; '4917610000000000'\\n  },\\n  :browserInfo =&gt; {\\n    :userAgent =&gt; 'Mozilla\\\/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit\\\/604.1.38 (KHTML, like Gecko) Version\\\/11.0 Mobile\\\/15A5370a Safari\\\/604.1',\\n    :acceptHeader =&gt; 'text\\\/html,application\\\/xhtml+xml,application\\\/xml;q=0.9,image\\\/webp,image\\\/apng,*\\\/*;q=0.8'\\n  }\\n}\\n\\n# Make the API call\\nresult = adyen.payment.payments_api.authorise(request_body)&quot;},{&quot;language&quot;:&quot;ts&quot;,&quot;tabTitle&quot;:&quot;NodeJS (TypeScript)&quot;,&quot;content&quot;:&quot;\\\/\\\/ Adyen Node API Library v16.2.0\\n\\\/\\\/ Require the parts of the module you want to use\\nimport { Client, PaymentAPI, Types } from \\&quot;@adyen\\\/api-library\\&quot;;\\n\\\/\\\/ Initialize the client object\\nconst client = new Client({apiKey: \\&quot;ADYEN_API_KEY\\&quot;, environment: \\&quot;TEST\\&quot;});\\n\\n\\\/\\\/ Create the request object(s)\\nconst amount: Types.payment.Amount = {\\n  currency: \\&quot;EUR\\&quot;,\\n  value: 1500\\n};\\n\\nconst threeDS2RequestData: Types.payment.ThreeDS2RequestData = {\\n  deviceChannel: \\&quot;app\\&quot;\\n};\\n\\nconst card: Types.payment.Card = {\\n  cvc: \\&quot;737\\&quot;,\\n  number: \\&quot;4917610000000000\\&quot;,\\n  holderName: \\&quot;Simon Hopper\\&quot;,\\n  expiryMonth: \\&quot;03\\&quot;,\\n  expiryYear: \\&quot;2030\\&quot;\\n};\\n\\nconst browserInfo: Types.payment.BrowserInfo = {\\n  acceptHeader: \\&quot;text\\\/html,application\\\/xhtml+xml,application\\\/xml;q=0.9,image\\\/webp,image\\\/apng,*\\\/*;q=0.8\\&quot;,\\n  userAgent: \\&quot;Mozilla\\\/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit\\\/604.1.38 (KHTML, like Gecko) Version\\\/11.0 Mobile\\\/15A5370a Safari\\\/604.1\\&quot;\\n};\\n\\nconst paymentRequest: Types.payment.PaymentRequest = {\\n  reference: \\&quot;YOUR_ORDER_NUMBER\\&quot;,\\n  amount: amount,\\n  merchantAccount: \\&quot;YOUR_MERCHANT_ACCOUNT\\&quot;,\\n  threeDS2RequestData: threeDS2RequestData,\\n  threeDSAuthenticationOnly: true,\\n  card: card,\\n  browserInfo: browserInfo\\n};\\n\\n\\\/\\\/ Make the API call\\nconst paymentAPI = new PaymentAPI(client);\\nconst response = paymentAPI.authorise(paymentRequest);&quot;}]\" :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<h6>Response<\/h6>\n<p>You'll receive a response containing:\u00a0<\/p>\n<ul>\n<li>\n<p><code>resultCode<\/code>: Perform the following depending on the result code you receive:<\/p>\n<ul>\n<li><strong>IdentifyShopper<\/strong>.\u00a0Perform the\u00a0<a href=\"#devicefingerprintinios\">3D Secure 2 device fingerprinting process<\/a>.<\/li>\n<li><strong>RedirectShopper<\/strong>: The payment is <a href=\"#3d-secure-1-authentication-only-fallback\">routed to 3D Secure 1<\/a>, based on issuer performance.<\/li>\n<li><strong>AuthenticationNotRequired<\/strong>: You can already proceed to authorise the payment because the transaction does not require 3D Secure authentication. Check the <code>authenticationNotRequiredReason<\/code> parameter if you want to know why authentication was skipped.<\/li>\n<\/ul>\n<div class=\"sc-notice note\"><div>\n<p>If after you receive the <strong>AuthenticationNotRequired<\/strong> result code you decide to continue the payment authorisation with Adyen, proceed to <a href=\"#authorise-the-payment-with-adyen\">Authorise the payment with Adyen<\/a>.<\/p>\n<\/div><\/div>\n<\/li>\n<\/ul>\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\/online-payments\/payment-result-codes\">Result codes<\/a>.<\/p>\n<pre><code class=\"language-json\">{\n    \"additionalData\": {\n        \"threeds2.threeDSServerTransID\": \"055fadfb-9fe4-4e70-99f0-9b8935bf1eb2\",\n        \"threeds2.threeDS2DirectoryServerInformation.algorithm\": \"RSA\",\n        \"threeds2.threeDS2Token\": \"BQABAQBPCQZ98WKh3v7qGnBlUMGClVzDolIjs8w\/8L64WIAqaOGZipbZod7n+E=...\",\n        \"threeds2.threeDS2DirectoryServerInformation.directoryServerId\": \"A000000003\",\n        \"threeds2.threeDS2DirectoryServerInformation.publicKey\": \"eyJrdHkiOiJSU0EiLCJlIjoiQVFBQiIsIm4iOiI4VFBxZkFQ==...\"\n    },\n    \"pspReference\": \"8835495304426403\",\n    \"resultCode\": \"IdentifyShopper\"\n}<\/code><\/pre>\n<h3 id=\"devicefingerprintinios\">Get the 3D Secure 2 device fingerprint with an iOS app<\/h3>\n<p>If your server receives an\u00a0IdentifyShopper\u00a0<code>resultCode<\/code>,\u00a0<a href=\"\/pt\/online-payments\/classic-integrations\/classic-api-integration\/3d-secure-authentication\/native-3ds2\/ios-sdk-integration#get-the-3d-secure-2-device-fingerprint\">get the shopper's\u00a03D Secure 2\u00a0device fingerprint<\/a>.<\/p>\n<p>In the step where you make a POST\u00a0<a href=\"https:\/\/docs.adyen.com\/api-explorer\/#\/Payment\/authorise3ds2\" class=\"codeLabel external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">\/authorise3ds2<\/a>\u00a0request, include the\u00a0<code>threeDSAuthenticationOnly<\/code>\u00a0parameter.<\/p>\n<ul>\n<li><code>threeDSAuthenticationOnly<\/code>:\u00a0<strong>true<\/strong><\/li>\n<\/ul>\n<h6>Request<\/h6>\n<pre><code class=\"language-json\">{\n    \"merchantAccount\": \"YOUR_MERCHANT_ACCOUNT\",\n    \"threeDS2RequestData\": {\n        \"deviceChannel\": \"app\",\n        \"sdkAppID\": \"9063b12c-fcde-43c7-b28e-8d0af5520e8a\",\n        \"sdkEncData\": \"&lt;device-fingerprint&gt;\",\n        \"sdkEphemPubKey\": {\n            \"crv\": \"P-256\",\n            \"kty\": \"EC\",\n            \"x\": \"LYImJkRzS92vogM6AUPCBhJ20VagSe8IL0Q9SdisUSo\",\n            \"y\": \"Rav4sKHnLUIUHVdyR4dyV7G2_EeAnuCn_6621ZhqZYU\"\n            }\n        },\n        \"sdkReferenceNumber\": \"3DS_LOA_SDK_ADBV_739485_94783\",\n        \"sdkTransID\": \"b60c9879-ac77-4918-a317-7b01c4317053\/8Q==..\",\n    \"threeDSAuthenticationOnly\": true\n}<\/code><\/pre>\n<h6>Response<\/h6>\n<p>You'll receive a response containing a\u00a0<code>resultCode<\/code>:<\/p>\n<ul>\n<li><strong>AuthenticationFinished<\/strong>:\u00a0 The authentication has been completed. Proceed to\u00a0<a href=\"#get-the-3d-secure-2-authenticated-data\">Get the authentication data.<\/a>\u00a0<\/li>\n<li><strong>ChallengeShopper<\/strong>: The issuer has requested further verification of the shopper. Perform the\u00a0<a href=\"#challenge-flow-in-your-ios\">Challenge flow<\/a>.<\/li>\n<\/ul>\n<p>For a complete list of\u00a0<code>resultCode<\/code>\u00a0values, see\u00a0<a href=\"\/pt\/online-payments\/payment-result-codes\">Result codes<\/a>.<\/p>\n<pre><code class=\"language-json\">{\n    \"additionalData\": {\n        \"threeds2.threeDS2ResponseData.acsSignedContent\": \"eyJhbGciOiJQUzI1NiIsIngPVEFOQmdrcWhraUc5dtw4I-RBJ8_OUt8yIZEsoc...\",\n        \"threeds2.threeDS2ResponseData.transStatus\": \"C\",\n        \"threeds2.threeDS2ResponseData.acsChallengeMandated\": \"Y\",\n        \"threeds2.threeDS2ResponseData.acsURL\": \"https:\/\/pal-test.adyen.com\/threeds2simulator\/services\/ThreeDS2Simulator\/v1\/handle\/83e78317-e73f-4a6f-j738-7hj09p07n178\",\n        \"threeds2.threeDS2ResponseData.threeDSServerTransID\": \"930h2k09-1986-4hl2-800a-c8d7783918bf\",\n        \"threeds2.threeDS2ResponseData.authenticationType\": \"01\",\n        \"threeds2.threeDS2ResponseData.messageVersion\": \"2.1.0\",\n        \"threeds2.threeDS2Token\": \"BQABAQBPCQZ98WKh3v7qGnBlUMGClVzDolIjs8w\/8L64WIAqaOGZipbZod7n+E=...\",\n        \"threeds2.threeDS2ResponseData.acsTransID\": \"45e79886-e60c-4c6d-a962-7aa43d59b150\",\n        \"threeds2.threeDS2ResponseData.acsReferenceNumber\": \"ADYEN-ACS-SIMULATOR\"\n    },\n    \"pspReference\": \"8825495326513370\",\n    \"resultCode\": \"ChallengeShopper\"\n}<\/code><\/pre>\n<h3 id=\"challenge-flow-in-your-ios\">Present the challenge flow in your iOS app<\/h3>\n<p>If your server receives\u00a0<strong>ChallengeShopper<\/strong> <code>resultCode<\/code>, this means that the issuer would like to perform additional checks in order to verify that the shopper is indeed the cardholder. Present the <a href=\"\/pt\/online-payments\/classic-integrations\/classic-api-integration\/3d-secure-authentication\/native-3ds2\/ios-sdk-integration#present-a-challenge\">challenge flow<\/a> to the shopper.<\/p>\n<div class=\"sc-notice note\"><div>\n<p>If after performing the challenge you decide to continue the payment authorisation with Adyen, skip the step where you send the results in a POST <code>\/authorise3ds2<\/code>\u00a0request. Proceed to <a href=\"#authorise-the-payment-with-adyen\">authorise the payment with Adyen<\/a> instead.<\/p>\n<\/div><\/div>\n<p>After sending the challenge result with a POST\u00a0<a href=\"https:\/\/docs.adyen.com\/api-explorer\/#\/Payment\/authorise3ds2\" class=\"codeLabel external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">\/authorise3ds2<\/a>\u00a0request and\u00a0If the authentication was successful, you will get an\u00a0<strong>AuthenticationFinished<\/strong>\u00a0<code>resultCode<\/code>.\u00a0<\/p>\n<h6>Request<\/h6>\n<pre><code class=\"language-json\">{\n    \"merchantAccount\": \"YOUR_MERCHANT_ACCOUNT\",\n    \"threeDS2Result\": {\n        \"transStatus\": \"Y\"\n    },\n    \"threeDS2Token\": \"BQABAQBPCQZ98WKh3v7qGnBlUMGClVzDolIjs8w\/8L64WIAqaOGZipbZod7n+E=...\"\n}<\/code><\/pre>\n<h6>Response<\/h6>\n<p>You'll receive\u00a0<strong>AuthenticationFinished<\/strong>\u00a0as the\u00a0<code>resultCode<\/code>\u00a0if the transaction was successfully authenticated.<\/p>\n<pre><code class=\"language-json\">{\n   \"additionalData\" : {\n      \"threeds2.threeDS2Result.dsTransID\": \"780d3fab-c162-4f48-a249-a3ad...\",\n      \"threeds2.threeDS2Result.eci\" : \"05\",\n      \"threeds2.threeDS2Result.threeDSServerTransID\" : \"c4e59ceb-a382-4d6a-bc87-385d591fa09d\",\n      \"threeds2.threeDS2Token\" : \"BQABAQBPCQZ98WKh3v7qGnBlUMGClVzDolIjs8w\/8L64WIAqaOGZipbZod7n+E=...\",\n      \"threeds2.threeDS2Result.authenticationValue\" : \"3q2+78r+ur7erb7vyv66vv\\\/\\\/\\\/\\\/8=\",\n      \"threeds2.threeDS2Result.transStatus\" : \"Y\"\n   },\n   \"pspReference\" : \"9935500720947721\",\n   \"resultCode\" : \"AuthenticationFinished\"\n}<\/code><\/pre>\n<div class=\"sc-notice info\"><div>\n<p>See our <a href=\"\/pt\/online-payments\/classic-integrations\/classic-api-integration\/3d-secure-authentication\/native-3ds2\/api-reference-3d-secure-2#additionalData\">API reference<\/a> to learn more about the response parameters and how the values map to 3D Secure specifications.<\/p>\n<\/div><\/div>\n<p>Proceed to\u00a0<a href=\"#get-the-3d-secure-2-authenticated-data\">Get authentication data<\/a>\u00a0for the fields that you will need to pass on to your PSP or acquirer.<\/p>\n<h2 id=\"get-the-3d-secure-2-authenticated-data\">Get the 3D Secure 2 authenticated data<\/h2>\n<p>To authorise a payment with 3D Secure 2 authentication, you need the following  data:<\/p>\n<table>\n<thead>\n<tr>\n<th>Field<\/th>\n<th>Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>authenticationValue<\/code><\/td>\n<td>The value for the 3D Secure 2 authentication session. The returned value is a Base64-encoded 20- or 21-byte array.<\/td>\n<\/tr>\n<tr>\n<td><code>dsTransID<\/code><\/td>\n<td>The unique transaction identifier assigned by the Directory Server to identify a single transaction.<\/td>\n<\/tr>\n<tr>\n<td><code>eci<\/code><\/td>\n<td>The Electronic Commerce Indicator returned from the schemes for the 3D Secure 2 payment session.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>You can get this data from the last API response with <span translate=\"no\"><strong>AuthenticationFinished<\/strong><\/span> <code>resultCode<\/code>, from one  of the following endpoints:<\/p>\n<ul>\n<li><a href=\"https:\/\/docs.adyen.com\/api-explorer\/#\/Payment\/getAuthenticationResult\" class=\"codeLabel external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">\/getAuthenticationResult<\/a><\/li>\n<li><a href=\"https:\/\/docs.adyen.com\/api-explorer\/#\/Payment\/retrieve3ds2Result\" class=\"codeLabel external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">\/retrieve3ds2Result<\/a>: use this endpoint for Cartes Bancaires.<\/li>\n<\/ul>\n<p><\/p>\n\n<div id=\"tabhMcyA\">\n    <div data-component-wrapper=\"tabs\">\n        <tabs\n                        :items=\"[{&quot;title&quot;:&quot;\\\/getAuthenticationResult&quot;,&quot;content&quot;:&quot;\\n&lt;div class=\\&quot;notices yellow\\&quot;&gt;\\n&lt;p&gt;If you want to use the &lt;a href=\\&quot;https:\\\/\\\/docs.adyen.com\\\/api-explorer\\\/#\\\/Payment\\\/getAuthenticationResult\\&quot; class=\\&quot;codeLabel external-link no-image\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot;&gt;\\\/getAuthenticationResult&lt;\\\/a&gt; endpoint, contact our &lt;a href=\\&quot;https:\\\/\\\/ca-test.adyen.com\\\/ca\\\/ca\\\/contactUs\\\/support.shtml?form=other\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot; class=\\&quot;external-link no-image\\&quot;&gt;Support Team&lt;\\\/a&gt;. This feature requires additional configuration on Adyen&#039;s end.&lt;\\\/p&gt;\\n&lt;\\\/div&gt;\\n&lt;p&gt;In your &lt;a href=\\&quot;https:\\\/\\\/docs.adyen.com\\\/api-explorer\\\/#\\\/Payment\\\/getAuthenticationResult\\&quot; class=\\&quot;codeLabel external-link no-image\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot;&gt;\\\/getAuthenticationResult&lt;\\\/a&gt; request, specify:&lt;\\\/p&gt;\\n&lt;ul&gt;\\n&lt;li&gt; &lt;a href=\\&quot;https:\\\/\\\/docs.adyen.com\\\/api-explorer\\\/Payment\\\/latest\\\/post\\\/getAuthenticationResult#request-merchantAccount\\&quot; class=\\&quot;codeLabel  external-link no-image\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot;&gt;merchantAccount&lt;\\\/a&gt;&amp;#58; The merchant account that was used to process the authentication.&lt;\\\/li&gt;\\n&lt;li&gt;&lt;a href=\\&quot;https:\\\/\\\/docs.adyen.com\\\/api-explorer\\\/#\\\/Payment\\\/latest\\\/getAuthenticationResult__reqParam_pspReference\\&quot; class=\\&quot;codeLabel external-link no-image\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot;&gt;pspReference&lt;\\\/a&gt;: The &lt;code&gt;pspReference&lt;\\\/code&gt; from the  &lt;a href=\\&quot;https:\\\/\\\/docs.adyen.com\\\/api-explorer\\\/Checkout\\\/latest\\\/post\\\/payments\\\/details\\&quot; class=\\&quot;codeLabel  external-link no-image\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot;&gt;\\\/payments\\\/details&lt;\\\/a&gt; response.&lt;\\\/li&gt;\\n&lt;\\\/ul&gt;\\n&lt;div data-component-wrapper=\\&quot;code-sample\\&quot;&gt;\\n    &lt;code-sample :title=\\&quot;&#039;\\\/getAuthenticationResult request&#039;\\&quot; :id=\\&quot;&#039;&#039;\\&quot; :code-data=&#039;[{\\&quot;language\\&quot;:\\&quot;json\\&quot;,\\&quot;tabTitle\\&quot;:\\&quot;\\&quot;,\\&quot;content\\&quot;:\\&quot;{\\\\n  \\\\\\&quot;merchantAccount\\\\\\&quot;: \\\\\\&quot;YOUR_MERCHANT_ACCOUNT\\\\\\&quot;,\\\\n  \\\\\\&quot;pspReference\\\\\\&quot;: \\\\\\&quot;851576148477921K\\\\\\&quot;\\\\n}\\&quot;}]&#039; :enable-copy-link-to-code-block=\\&quot;true\\&quot; :code-sample-card-size=\\&quot;&#039;fullsize&#039;\\&quot;&gt;&lt;\\\/code-sample&gt;\\n&lt;\\\/div&gt;\\n&lt;p&gt;The &lt;a href=\\&quot;https:\\\/\\\/docs.adyen.com\\\/api-explorer\\\/#\\\/Payment\\\/getAuthenticationResult\\&quot; class=\\&quot;codeLabel external-link no-image\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot;&gt;\\\/getAuthenticationResult&lt;\\\/a&gt; response contains the required authentication data:&lt;\\\/p&gt;\\n&lt;div data-component-wrapper=\\&quot;code-sample\\&quot;&gt;\\n    &lt;code-sample :title=\\&quot;&#039;\\\/getAuthenticationResult response&#039;\\&quot; :id=\\&quot;&#039;&#039;\\&quot; :code-data=&#039;[{\\&quot;language\\&quot;:\\&quot;json\\&quot;,\\&quot;tabTitle\\&quot;:\\&quot;\\&quot;,\\&quot;content\\&quot;:\\&quot;{\\\\n  \\\\\\&quot;threeDS2Result\\\\\\&quot;: {\\\\n    \\\\\\&quot;authenticationValue\\\\\\&quot;: \\\\\\&quot;QURZRU4gM0RTMiBURVNUIENBVlY=\\\\\\&quot;,\\\\n    \\\\\\&quot;dsTransID\\\\\\&quot;: \\\\\\&quot;a3b86754-444d-46ca-95a2-ada351d3f42c\\\\\\&quot;,\\\\n    \\\\\\&quot;eci\\\\\\&quot;: \\\\\\&quot;05\\\\\\&quot;,\\\\n    \\\\\\&quot;messageVersion\\\\\\&quot;: \\\\\\&quot;2.1.0\\\\\\&quot;,\\\\n    \\\\\\&quot;threeDSServerTransID\\\\\\&quot;: \\\\\\&quot;6edcc246-23ee-4e94-ac5d-8ae620bea7d9\\\\\\&quot;,\\\\n    \\\\\\&quot;transStatus\\\\\\&quot;: \\\\\\&quot;Y\\\\\\&quot;\\\\n  }\\\\n}\\&quot;}]&#039; :enable-copy-link-to-code-block=\\&quot;true\\&quot; :code-sample-card-size=\\&quot;&#039;fullsize&#039;\\&quot;&gt;&lt;\\\/code-sample&gt;\\n&lt;\\\/div&gt;\\n&quot;,&quot;altTitle&quot;:null,&quot;oldTabId&quot;:&quot;getauthenticationresult_0_1&quot;,&quot;relation&quot;:&quot;&quot;},{&quot;title&quot;:&quot;\\\/retrieve3ds2Result&quot;,&quot;content&quot;:&quot;\\n&lt;p&gt;Make a &lt;a href=\\&quot;https:\\\/\\\/docs.adyen.com\\\/api-explorer\\\/#\\\/Payment\\\/retrieve3ds2Result\\&quot; class=\\&quot;codeLabel external-link no-image\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot;&gt;\\\/retrieve3ds2Result&lt;\\\/a&gt; request, specifying:&lt;\\\/p&gt;\\n&lt;ul&gt;\\n&lt;li&gt; &lt;a href=\\&quot;https:\\\/\\\/docs.adyen.com\\\/api-explorer\\\/Payment\\\/latest\\\/post\\\/getAuthenticationResult#request-merchantAccount\\&quot; class=\\&quot;codeLabel  external-link no-image\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot;&gt;merchantAccount&lt;\\\/a&gt;&amp;#58; The merchant account that was used to process the authentication.&lt;\\\/li&gt;\\n&lt;li&gt;&lt;a href=\\&quot;https:\\\/\\\/docs.adyen.com\\\/api-explorer\\\/#\\\/Payment\\\/latest\\\/getAuthenticationResult__reqParam_pspReference\\&quot; class=\\&quot;codeLabel external-link no-image\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot;&gt;pspReference&lt;\\\/a&gt;: The &lt;code&gt;pspReference&lt;\\\/code&gt; from the  &lt;a href=\\&quot;https:\\\/\\\/docs.adyen.com\\\/api-explorer\\\/Checkout\\\/latest\\\/post\\\/payments\\\/details\\&quot; class=\\&quot;codeLabel  external-link no-image\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot;&gt;\\\/payments\\\/details&lt;\\\/a&gt; response.&lt;\\\/li&gt;\\n&lt;\\\/ul&gt;\\n&lt;div data-component-wrapper=\\&quot;code-sample\\&quot;&gt;\\n    &lt;code-sample :title=\\&quot;&#039;\\\/retrieve3ds2Result request&#039;\\&quot; :id=\\&quot;&#039;retrieve3ds2result-request-3618117826&#039;\\&quot; :code-data=\\&quot;[{&amp;quot;language&amp;quot;:&amp;quot;bash&amp;quot;,&amp;quot;tabTitle&amp;quot;:&amp;quot;curl&amp;quot;,&amp;quot;content&amp;quot;:&amp;quot;curl https:\\\\\\\/\\\\\\\/pal-test.adyen.com\\\\\\\/pal\\\\\\\/servlet\\\\\\\/Payment\\\\\\\/v68\\\\\\\/retrieve3ds2Result \\\\\\\\\\\\n-H &#039;x-api-key: ADYEN_API_KEY&#039; \\\\\\\\\\\\n-H &#039;content-type: application\\\\\\\/json&#039; \\\\\\\\\\\\n-d &#039;{\\\\n    \\\\&amp;quot;merchantAccount\\\\&amp;quot;: \\\\&amp;quot;YOUR_MERCHANT_ACCOUNT\\\\&amp;quot;,\\\\n    \\\\&amp;quot;pspReference\\\\&amp;quot;: \\\\&amp;quot;V4HZ4RBFJGXXGN82\\\\&amp;quot;\\\\n}&#039;&amp;quot;},{&amp;quot;language&amp;quot;:&amp;quot;java&amp;quot;,&amp;quot;tabTitle&amp;quot;:&amp;quot;Java&amp;quot;,&amp;quot;content&amp;quot;:&amp;quot;\\\\\\\/\\\\\\\/ Adyen Java API Library v25.0.0\\\\nimport com.adyen.Client;\\\\nimport com.adyen.enums.Environment;\\\\nimport com.adyen.model.payment.*;\\\\nimport java.time.OffsetDateTime;\\\\nimport java.util.*;\\\\nimport com.adyen.service.*;\\\\n\\\\nClient client = new Client(\\\\&amp;quot;ADYEN_API_KEY\\\\&amp;quot;, Environment.TEST);\\\\n\\\\n\\\\\\\/\\\\\\\/ Create the request object(s)\\\\nThreeDS2ResultRequest threeDS2ResultRequest = new ThreeDS2ResultRequest()\\\\n  .merchantAccount(\\\\&amp;quot;YOUR_MERCHANT_ACCOUNT\\\\&amp;quot;)\\\\n  .pspReference(\\\\&amp;quot;V4HZ4RBFJGXXGN82\\\\&amp;quot;);\\\\n\\\\n\\\\\\\/\\\\\\\/ Make the API call\\\\npaymentApi service = new paymentApi(client);\\\\nThreeDS2ResultResponse response = service.retrieve3ds2Result(threeDS2ResultRequest, null);&amp;quot;},{&amp;quot;language&amp;quot;:&amp;quot;php&amp;quot;,&amp;quot;tabTitle&amp;quot;:&amp;quot;PHP&amp;quot;,&amp;quot;content&amp;quot;:&amp;quot;\\\\\\\/\\\\\\\/ Adyen PHP API Library v17.4.0\\\\nuse Adyen\\\\\\\\Client;\\\\nuse Adyen\\\\\\\\Environment;\\\\nuse Adyen\\\\\\\\Model\\\\\\\\Payments\\\\\\\\ThreeDS2ResultRequest;\\\\nuse Adyen\\\\\\\\Service\\\\\\\\Payments\\\\\\\\PaymentsApi;\\\\n\\\\n$client = new Client();\\\\n$client-&amp;gt;setXApiKey(\\\\&amp;quot;ADYEN_API_KEY\\\\&amp;quot;);\\\\n$client-&amp;gt;setEnvironment(Environment::TEST);\\\\n\\\\n\\\\n\\\\\\\/\\\\\\\/ Create the request object(s)\\\\n$threeDS2ResultRequest = new ThreeDS2ResultRequest();\\\\n$threeDS2ResultRequest\\\\n  -&amp;gt;setMerchantAccount(\\\\&amp;quot;YOUR_MERCHANT_ACCOUNT\\\\&amp;quot;)\\\\n  -&amp;gt;setPspReference(\\\\&amp;quot;V4HZ4RBFJGXXGN82\\\\&amp;quot;);\\\\n\\\\n\\\\\\\/\\\\\\\/ Make the API call\\\\n$service = new PaymentsApi($client);\\\\n$response = $service-&amp;gt;retrieve3ds2Result($threeDS2ResultRequest);&amp;quot;},{&amp;quot;language&amp;quot;:&amp;quot;cs&amp;quot;,&amp;quot;tabTitle&amp;quot;:&amp;quot;C#&amp;quot;,&amp;quot;content&amp;quot;:&amp;quot;\\\\\\\/\\\\\\\/ Adyen .net API Library v14.4.0\\\\nusing Adyen;\\\\nusing Environment = Adyen.Model.Environment;\\\\nusing Adyen.Model;\\\\nusing Adyen.Model.Payment;\\\\nusing Adyen.Service;\\\\n\\\\nvar config = new Config()\\\\n{\\\\n    XApiKey = \\\\&amp;quot;ADYEN_API_KEY\\\\&amp;quot;,\\\\n    Environment = Environment.Test\\\\n};\\\\nvar client = new Client(config);\\\\n\\\\n\\\\\\\/\\\\\\\/ Create the request object(s)\\\\nThreeDS2ResultRequest threeDS2ResultRequest = new ThreeDS2ResultRequest\\\\n{\\\\n  MerchantAccount = \\\\&amp;quot;YOUR_MERCHANT_ACCOUNT\\\\&amp;quot;,\\\\n  PspReference = \\\\&amp;quot;V4HZ4RBFJGXXGN82\\\\&amp;quot;\\\\n};\\\\n\\\\n\\\\\\\/\\\\\\\/ Make the API call\\\\nvar service = new PaymentService(client);\\\\nvar response = service.Retrieve3ds2Result(threeDS2ResultRequest);&amp;quot;},{&amp;quot;language&amp;quot;:&amp;quot;js&amp;quot;,&amp;quot;tabTitle&amp;quot;:&amp;quot;NodeJS (JavaScript)&amp;quot;,&amp;quot;content&amp;quot;:&amp;quot;\\\\\\\/\\\\\\\/ Adyen Node API Library v16.2.0\\\\n\\\\\\\/\\\\\\\/ Require the parts of the module you want to use\\\\nconst { Client, PaymentAPI } = require(&#039;@adyen\\\\\\\/api-library&#039;);\\\\n\\\\\\\/\\\\\\\/ Initialize the client object\\\\nconst client = new Client({apiKey: \\\\&amp;quot;ADYEN_API_KEY\\\\&amp;quot;, environment: \\\\&amp;quot;TEST\\\\&amp;quot;});\\\\n\\\\n\\\\\\\/\\\\\\\/ Create the request object(s)\\\\nconst threeDS2ResultRequest = {\\\\n  merchantAccount: \\\\&amp;quot;YOUR_MERCHANT_ACCOUNT\\\\&amp;quot;,\\\\n  pspReference: \\\\&amp;quot;V4HZ4RBFJGXXGN82\\\\&amp;quot;\\\\n}\\\\n\\\\n\\\\\\\/\\\\\\\/ Make the API call\\\\nconst paymentAPI = new PaymentAPI(client);\\\\nconst response = paymentAPI.retrieve3ds2Result(threeDS2ResultRequest);&amp;quot;},{&amp;quot;language&amp;quot;:&amp;quot;go&amp;quot;,&amp;quot;tabTitle&amp;quot;:&amp;quot;Go&amp;quot;,&amp;quot;content&amp;quot;:&amp;quot;\\\\\\\/\\\\\\\/ Adyen Go API Library v9.3.0\\\\nimport (\\\\n  \\\\&amp;quot;context\\\\&amp;quot;\\\\n  \\\\&amp;quot;github.com\\\\\\\/adyen\\\\\\\/adyen-go-api-library\\\\\\\/v9\\\\\\\/src\\\\\\\/common\\\\&amp;quot;\\\\n  \\\\&amp;quot;github.com\\\\\\\/adyen\\\\\\\/adyen-go-api-library\\\\\\\/v9\\\\\\\/src\\\\\\\/adyen\\\\&amp;quot;\\\\n  \\\\&amp;quot;github.com\\\\\\\/adyen\\\\\\\/adyen-go-api-library\\\\\\\/v9\\\\\\\/src\\\\\\\/payments\\\\&amp;quot;\\\\n)\\\\nclient := adyen.NewClient(&amp;amp;common.Config{\\\\n  ApiKey:      \\\\&amp;quot;ADYEN_API_KEY\\\\&amp;quot;,\\\\n  Environment: common.TestEnv,\\\\n})\\\\n\\\\n\\\\\\\/\\\\\\\/ Create the request object(s)\\\\nthreeDS2ResultRequest := payments.ThreeDS2ResultRequest{\\\\n  MerchantAccount: \\\\&amp;quot;YOUR_MERCHANT_ACCOUNT\\\\&amp;quot;,\\\\n  PspReference: \\\\&amp;quot;V4HZ4RBFJGXXGN82\\\\&amp;quot;,\\\\n}\\\\n\\\\n\\\\\\\/\\\\\\\/ Make the API call\\\\nservice := client.Payments()\\\\nreq := service.PaymentsApi.Retrieve3ds2ResultInput().ThreeDS2ResultRequest(threeDS2ResultRequest)\\\\nres, httpRes, err := service.PaymentsApi.Retrieve3ds2Result(context.Background(), req)&amp;quot;},{&amp;quot;language&amp;quot;:&amp;quot;py&amp;quot;,&amp;quot;tabTitle&amp;quot;:&amp;quot;Python&amp;quot;,&amp;quot;content&amp;quot;:&amp;quot;# Adyen Python API Library v12.2.0\\\\nimport Adyen\\\\n\\\\nadyen = Adyen.Adyen()\\\\nadyen.client.xapikey = \\\\&amp;quot;ADYEN_API_KEY\\\\&amp;quot;\\\\nadyen.client.platform = \\\\&amp;quot;test\\\\&amp;quot; # The environment to use library in.\\\\n\\\\n# Create the request object(s)\\\\njson_request = {\\\\n  \\\\&amp;quot;merchantAccount\\\\&amp;quot;: \\\\&amp;quot;YOUR_MERCHANT_ACCOUNT\\\\&amp;quot;,\\\\n  \\\\&amp;quot;pspReference\\\\&amp;quot;: \\\\&amp;quot;V4HZ4RBFJGXXGN82\\\\&amp;quot;\\\\n}\\\\n\\\\n# Make the API call\\\\nresult = adyen.payment.payments_api.retrieve3ds2_result(request=json_request)&amp;quot;},{&amp;quot;language&amp;quot;:&amp;quot;rb&amp;quot;,&amp;quot;tabTitle&amp;quot;:&amp;quot;Ruby&amp;quot;,&amp;quot;content&amp;quot;:&amp;quot;# Adyen Ruby API Library v9.3.0\\\\nrequire \\\\&amp;quot;adyen-ruby-api-library\\\\&amp;quot;\\\\n\\\\nadyen = Adyen::Client.new\\\\nadyen.api_key = &#039;ADYEN_API_KEY&#039;\\\\nadyen.env = :test # Set to \\\\&amp;quot;live\\\\&amp;quot; for live environment\\\\n\\\\n# Create the request object(s)\\\\nrequest_body = {\\\\n  :merchantAccount =&amp;gt; &#039;YOUR_MERCHANT_ACCOUNT&#039;,\\\\n  :pspReference =&amp;gt; &#039;V4HZ4RBFJGXXGN82&#039;\\\\n}\\\\n\\\\n# Make the API call\\\\nresult = adyen.payment.payments_api.retrieve3ds2_result(request_body)&amp;quot;},{&amp;quot;language&amp;quot;:&amp;quot;ts&amp;quot;,&amp;quot;tabTitle&amp;quot;:&amp;quot;NodeJS (TypeScript)&amp;quot;,&amp;quot;content&amp;quot;:&amp;quot;\\\\\\\/\\\\\\\/ Adyen Node API Library v16.2.0\\\\n\\\\\\\/\\\\\\\/ Require the parts of the module you want to use\\\\nimport { Client, PaymentAPI, Types } from \\\\&amp;quot;@adyen\\\\\\\/api-library\\\\&amp;quot;;\\\\n\\\\\\\/\\\\\\\/ Initialize the client object\\\\nconst client = new Client({apiKey: \\\\&amp;quot;ADYEN_API_KEY\\\\&amp;quot;, environment: \\\\&amp;quot;TEST\\\\&amp;quot;});\\\\n\\\\n\\\\\\\/\\\\\\\/ Create the request object(s)\\\\nconst threeDS2ResultRequest: Types.payment.ThreeDS2ResultRequest = {\\\\n  merchantAccount: \\\\&amp;quot;YOUR_MERCHANT_ACCOUNT\\\\&amp;quot;,\\\\n  pspReference: \\\\&amp;quot;V4HZ4RBFJGXXGN82\\\\&amp;quot;\\\\n};\\\\n\\\\n\\\\\\\/\\\\\\\/ Make the API call\\\\nconst paymentAPI = new PaymentAPI(client);\\\\nconst response = paymentAPI.retrieve3ds2Result(threeDS2ResultRequest);&amp;quot;}]\\&quot; :enable-copy-link-to-code-block=\\&quot;true\\&quot; :code-sample-card-size=\\&quot;&#039;fullsize&#039;\\&quot;&gt;&lt;\\\/code-sample&gt;\\n&lt;\\\/div&gt;\\n&lt;p&gt;The authentication data is in the &lt;a href=\\&quot;https:\\\/\\\/docs.adyen.com\\\/api-explorer\\\/#\\\/Payment\\\/retrieve3ds2Result\\&quot; class=\\&quot;codeLabel external-link no-image\\&quot; target=\\&quot;_blank\\&quot; rel=\\&quot;nofollow noopener noreferrer\\&quot;&gt;\\\/retrieve3ds2Result&lt;\\\/a&gt; response.&lt;\\\/p&gt;\\n&lt;div data-component-wrapper=\\&quot;code-sample\\&quot;&gt;\\n    &lt;code-sample :title=\\&quot;&#039;\\\/retrieve3ds2Result response&#039;\\&quot; :id=\\&quot;&#039;&#039;\\&quot; :code-data=&#039;[{\\&quot;language\\&quot;:\\&quot;bash\\&quot;,\\&quot;tabTitle\\&quot;:\\&quot;\\&quot;,\\&quot;content\\&quot;:\\&quot;{\\\\n \\\\\\&quot;threeDS2Result\\\\\\&quot;: {\\\\n   \\\\\\&quot;riskScore\\\\\\&quot;: \\\\\\&quot;95\\\\\\&quot;,\\\\n   \\\\\\&quot;challengeCancel\\\\\\&quot;: \\\\\\&quot;00\\\\\\&quot;,\\\\n   \\\\\\&quot;challengeIndicator\\\\\\&quot;: \\\\\\&quot;noPreference\\\\\\&quot;,\\\\n   \\\\\\&quot;exemptionIndicator\\\\\\&quot;: \\\\\\&quot;lowValue\\\\\\&quot;,\\\\n   \\\\\\&quot;authenticationValue\\\\\\&quot;: \\\\\\&quot;QURZRU4gM0RTMiBURVNUIENBVlY=\\\\\\&quot;,\\\\n   \\\\\\&quot;cavvAlgorithm\\\\\\&quot;: \\\\\\&quot;ABC\\\\\\&quot;,\\\\n   \\\\\\&quot;dsTransID\\\\\\&quot;: \\\\\\&quot;a3b86754-444d-46ca-95a2-ada351d3f42c\\\\\\&quot;,\\\\n   \\\\\\&quot;eci\\\\\\&quot;: \\\\\\&quot;05\\\\\\&quot;,\\\\n   \\\\\\&quot;messageVersion\\\\\\&quot;: \\\\\\&quot;2.1.0\\\\\\&quot;,\\\\n   \\\\\\&quot;threeDSServerTransID\\\\\\&quot;: \\\\\\&quot;6edcc246-23ee-4e94-ac5d-8ae620bea7d9\\\\\\&quot;,\\\\n   \\\\\\&quot;transStatus\\\\\\&quot;: \\\\\\&quot;Y\\\\\\&quot;,\\\\n   \\\\\\&quot;transStatusReason\\\\\\&quot;: \\\\\\&quot;02\\\\\\&quot;\\\\n}\\&quot;}]&#039; :enable-copy-link-to-code-block=\\&quot;true\\&quot; :code-sample-card-size=\\&quot;&#039;fullsize&#039;\\&quot;&gt;&lt;\\\/code-sample&gt;\\n&lt;\\\/div&gt;\\n&quot;,&quot;altTitle&quot;:null,&quot;oldTabId&quot;:&quot;retrieve3ds2result_1_2&quot;,&quot;relation&quot;:&quot;&quot;}]\"\n            :should-update-when-url-changes='false'>\n        <\/tabs>\n    <\/div>\n<\/div>\n\n<div class=\"sc-notice info\"><div>\n<p>See our <a href=\"\/pt\/online-payments\/classic-integrations\/classic-api-integration\/3d-secure-authentication\/native-3ds2\/api-reference-3d-secure-2#additionalData\">API reference<\/a> to learn more about the response parameters and how the values map to 3D Secure specifications.<\/p>\n<\/div><\/div>\n<h2 id=\"provide-acquirer-data\">Optional: Provide additional acquirer-related data<\/h2>\n<div class=\"sc-notice note\"><div>\n<p>Perform this step only if you are planning to authorize your transaction with another acquirer after a successful authentication. We strongly recommend that you include the additional acquirer-related data described below to avoid authorisations refusals from the issuing bank as a result of a mismatch of acquirer data between authentication and authorisation.<\/p>\n<\/div><\/div>\n<p>Get the following information from your acquirer. These information are part of the 3D Secure 2 enrollment process between your acquirer and card schemes.<\/p>\n<p>If you are unable to get these values from your acquirer, contact <a href=\"https:\/\/ca-test.adyen.com\/ca\/ca\/contactUs\/support.shtml?form=other\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" class=\"external-link no-image\">Support Team<\/a>.<\/p>\n<ul>\n<li>\n<p><code>acquirerBIN<\/code>: Supported from API v49 and later. The acquiring BIN enrolled for 3D Secure 2. This string should match the value that you will use in the authorisation.<\/p>\n<div class=\"notices blue\">\n<p>If you are building a test integration, you can use the string <strong>123456<\/strong> in place of an actual <code>acquirerBIN<\/code>.<\/p>\n<\/div>\n<\/li>\n<li>\n<p><code>acquirerMerchantID<\/code>: Supported from API v49 and later. The authorisation MID enrolled for 3D Secure 2. This string should match the value that you will use in the authorisation.<\/p>\n<div class=\"notices blue\">\n<p>If you are building a test integration, you can use the string <strong>123456<\/strong> in place of an actual <code>acquirerMerchantID<\/code>.<\/p>\n<\/div>\n<\/li>\n<li>\n<p><code>merchantName<\/code>:Supported from API v49 and later. The merchant name that the issuer presents to the shopper if they get a challenge. We recommend to use the same value that you will use in the authorisation. Maximum length is 40 characters.<\/p>\n<\/li>\n<li>\n<p><code>mcc<\/code>: Supported from API v49 and later. The four-digit Merchant Category Code registered with the scheme for the same <code>acquirerMerchantID<\/code> sent in the request.<\/p>\n<\/li>\n<li>\n<p><code>threeDSRequestorID<\/code>: Required for Visa and Mastercard. Unique requestor ID assigned by the Directory Server when you enrol for 3D Secure 2.<\/p>\n<\/li>\n<li>\n<p><code>threeDSRequestorName<\/code>: Required for Visa and Mastercard. Unique requestor name assigned by the Directory Server when you enrol for 3D Secure 2.<\/p>\n<\/li>\n<\/ul>\n<p>Submit an authentication request with a <a href=\"https:\/\/docs.adyen.com\/api-explorer\/#\/Payment\/authorise\" class=\"codeLabel external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">\/authorise<\/a> call containing the required 3D Secure 2 fields, the acquirer fields listed previously, and the <code>threeDSAuthenticationOnly<\/code> parameter:<\/p>\n<ul>\n<li><code>threeDSAuthenticationOnly<\/code>: true<\/li>\n<\/ul>\n<div class=\"sc-notice note\"><div>\n<p>You can send <a href=\"\/pt\/online-payments\/classic-integrations\/classic-api-integration\/3d-secure-authentication\/native-3ds2\/api-reference-3d-secure-2#3d-secure-2-additional-parameters\">additional parameters<\/a> for better authorization rates, and to increase the chance of a frictionless flow. You do not have to send all the additional parameters.  Send parameters that you know you can provide accurately, or that are mandatory in specific scenarios.<\/p>\n<\/div><\/div>\n<h4 id=\"request\">Request for web-based 3D Secure 2 authentication with additional acquirer-related data<\/h4>\n<pre><code class=\"language-json\">\n{\n  \"amount\":{\n    \"currency\":\"EUR\",\n    \"value\":1500\n  },\n  \"merchantAccount\":\"YOUR_MERCHANT_ACCOUNT\",\n  \"reference\":\"TEST\",\n  \"threeDS2RequestData\":{\n    \"deviceChannel\":\"browser\",\n    \"notificationURL\":\"https:\\\/\\\/www.example.com\\\/YOUR_3DS_NOTIFICATION_URL\",\n    \"acquirerBIN\": \"YOUR_ACQUIRER_BIN\",\n    \"acquirerMerchantID\": \"YOUR_ACQUIRER_MERCHANT_ID\",\n    \"merchantName\": \"YOUR_MERCHANT_NAME\",\n    \"mcc\": \"YOUR_MCC\",\n    \"threeDSRequestorID\": \"YOUR_3DS_REQUESTOR_ID\",\n    \"threeDSRequestorName\": \"YOUR_3DS_REQUESTOR_NAME\"\n  },\n  \"threeDSAuthenticationOnly\": true,\n  \"browserInfo\":{\n    \"userAgent\":\"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\":\"text\\\/html,application\\\/xhtml+xml,application\\\/xml;q=0.9,image\\\/webp,image\\\/apng,*\\\/*;q=0.8\",\n    \"language\":\"en\",\n    \"colorDepth\":24,\n    \"screenHeight\":723,\n    \"screenWidth\":1536,\n    \"timeZoneOffset\":0,\n    \"javaEnabled\":false\n  },\n  \"card\":{\n    \"cvc\":\"737\",\n    \"expiryMonth\":\"03\",\n    \"expiryYear\":\"2030\",\n    \"holderName\":\"Simon Hopper\",\n    \"number\":\"4917610000000000\"\n  }\n}<\/code><\/pre>\n<h6>Response<\/h6>\n<p>You'll receive a response containing:<\/p>\n<ul>\n<li><code>resultCode<\/code>: Possible values related 3D Secure 2 flows are\u00a0<strong>IdentifyShopper<\/strong> or\u00a0<strong>ChallengeShopper<\/strong>. Perform the corresponding\u00a0<a href=\"#devicefingerprintinabrowser\">Identify the shopper<\/a>\u00a0or\u00a0<a href=\"#challengeflowinabrowser\">Challenge the shopper<\/a>\u00a0flows.\u00a0<\/li>\n<\/ul>\n<div class=\"sc-notice note\"><div>\n<p>To optimize authorization rates, 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> routes each payment to either the 3D Secure 2 or the 3D Secure 1 flow, based on issuer performance. See\u00a0<a href=\"\/pt\/online-payments\/classic-integrations\/classic-api-integration\/3d-secure-authentication\/native-3ds2#3d-secure-1-fallback\">3D Secure fallback<\/a> for more information.<\/p>\n<\/div><\/div>\n<p>For a complete list of\u00a0<code>resultCode<\/code>\u00a0values and the actions that you need to do, see\u00a0<a href=\"\/pt\/online-payments\/payment-result-codes\">Result codes<\/a>.<\/p>\n<pre><code class=\"language-json\">{\n    \"additionalData\": {\n        \"threeds2.threeDSServerTransID\": \"f8062b92-66e9-4c5a-979a-f465e66a6e48\",\n        \"threeds2.threeDS2Token\": \"BQABAQBPCQZ98WKh3v7qGnBlUMGClVzDolIjs8w\/8L64WIAqaOGZipbZod7n+E=...\",\n        \"threeds2.threeDSMethodURL\": \"https:\/\/pal-test.adyen.com\/threeds2simulator\/acs\/threedsmethodURL.shtml\"\n    },\n    \"pspReference\": \"8835494629682519\",\n    \"resultCode\": \"IdentifyShopper\"\n}<\/code><\/pre>\n<h2 id=\"authorise-the-payment-with-adyen\">Optional: Authorise the\u00a0payment with Adyen<\/h2>\n<p>If you decide to proceed with authorising the payment with Adyen, you can still switch and continue with a payment authorisation.<\/p>\n<p>Make a POST\u00a0<a href=\"https:\/\/docs.adyen.com\/api-explorer\/#\/Payment\/authorise3ds2\" class=\"codeLabel external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">\/authorise3ds2<\/a>\u00a0request from your server and include the following parameters:\u00a0<\/p>\n<ul>\n<li><code>threeDSAuthenticationOnly<\/code>:\u00a0<strong>false<\/strong><\/li>\n<li><code>threeDS2Token<\/code>: The <code>threeDS2Token<\/code> from the <code>\/authorise<\/code> response if you received the <strong>AuthenticationNotRequired<\/strong> result code, or from the <code>\/authorise3ds2<\/code> response if you received the <strong>AuthenticationFinished<\/strong> result code.<\/li>\n<li>\n<p><code>transStatus<\/code>: Include this if you received the <strong>AuthenticationFinished<\/strong> result code.<\/p>\n<ul>\n<li>For a browser-based integration, this is the <code>transStatus<\/code> from the base64url decoded <code>CRes<\/code>. If you did not receive a result to the\u00a0<code>threeDSNotificationURL<\/code>\u00a0within 10 minutes, assume that something went wrong or the shopper aborted the transaction. In this case, send\u00a0<code>transStatus: U<\/code> to complete the authentication process.<\/li>\n<li>For an app-based integration, this is the value generated by the SDK.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h6>Sample request after completing an authentication<\/h6>\n<pre><code class=\"language-json\">{\n    \"merchantAccount\": \"YOUR_MERCHANT_ACCOUNT\",\n    \"threeDS2Result\": {\n        \"transStatus\": \"Y\"\n    },\n    \"threeDSAuthenticationOnly\": false,\n    \"threeDS2Token\": \"BQABAQBPCQZ98WKh3v7qGnBlUMGClVzDolIjs8w\/8L64WIAqaOGZipbZod7n+E=...\"\n}<\/code><\/pre>\n<h6>Sample request if authentication was not required for the transaction<\/h6>\n<pre><code class=\"language-json\">{\n    \"merchantAccount\": \"YOUR_MERCHANT_ACCOUNT\",\n    \"threeDSAuthenticationOnly\": false,\n    \"threeDS2Token\": \"BQABAQBPCQZ98WKh3v7qGnBlUMGClVzDolIjs8w\/8L64WIAqaOGZipbZod7n+E=...\"\n}<\/code><\/pre>\n<h6>Response<\/h6>\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    \"additionalData\": {\n        \"liabilityShift\": \"true\",\n        \"authCode\": \"44402\",\n        \"avsResult\": \"4 AVS not supported for this card type\",\n        \"threeDOffered\": \"true\",\n        \"refusalReasonRaw\": \"AUTHORISED\",\n        \"authorisationMid\": \"1000\",\n        \"acquirerAccountCode\": \"TestPmmAcquirerAccount\",\n        \"cvcResult\": \"1 Matches\",\n        \"avsResultRaw\": \"4\",\n        \"threeDAuthenticated\": \"true\",\n        \"cvcResultRaw\": \"M\",\n        \"acquirerCode\": \"TestPmmAcquirer\",\n        \"acquirerReference\": \"7CASOGMCCB4\"\n    },\n    \"pspReference\": \"8825495331860022\",\n    \"resultCode\": \"Authorised\",\n    \"authCode\": \"44402\"\n}<\/code><\/pre>\n<h2>Authentication data expiry<\/h2>\n<p>Authentication data and cryptograms expire depending on card schemes. This means that you can no longer use the authentication data after it expires.<\/p>\n<table>\n<thead>\n<tr>\n<th>Card scheme<\/th>\n<th>Cryptogram validity<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><strong>Amex<\/strong><\/td>\n<td>45 days<\/td>\n<\/tr>\n<tr>\n<td><strong>CUP<\/strong><\/td>\n<td>90 days<\/td>\n<\/tr>\n<tr>\n<td><strong>Mastercard<\/strong><\/td>\n<td>30 days. Starting from 2020, Mastercard will support non-expiring cryptograms <br> but the expiry will depend on the issuing bank's implementation.<\/td>\n<\/tr>\n<tr>\n<td><strong>Visa<\/strong><\/td>\n<td>1 year<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2 id=\"testing-3d-secure-2\">Testing 3D Secure 2<\/h2>\n<p>Before going live, use the following card numbers and credentials to\u00a0test your integration.<\/p>\n<p>We recommend testing each\u00a0<strong>Card Type<\/strong>.<\/p>\n<p>To test how your integration handles different 3D Secure 2 authentication scenarios, use our test card numbers.<\/p>\n<p>All our test cards use the following expiry dates and security codes:<\/p>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Expiry Date<\/th>\n<th style=\"text-align: left;\">CVC\/CVV<\/th>\n<th style=\"text-align: left;\">CID<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\">03\/2030<\/td>\n<td style=\"text-align: left;\">737<\/td>\n<td style=\"text-align: left;\">7373<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>When prompted for 3D Secure 2 text challenges, use the following credentials:<\/p>\n<ul>\n<li>For mobile, use password: <strong>1234<\/strong><\/li>\n<li>For web, use password: <strong>password<\/strong><\/li>\n<\/ul>\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<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\">Cartes Bancaires<\/td>\n<td style=\"text-align: left;\">4035 5014 2814 6300<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\">Maestro <a href=\"#nocvc\">\n  <sup>1<\/sup>\n<\/a><\/td>\n<td style=\"text-align: left;\">5000 5500 0000 0029<\/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<\/tr>\n<tr>\n<td style=\"text-align: left;\">Visa<\/td>\n<td style=\"text-align: left;\">4917 6100 0000 0000<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><a id=\"nocvc\"><\/a> <sup>1<\/sup> This card doesn't require a CVC.<\/p>\n<p>When you make a payment request with these cards, you'll receive the following result codes depending on your integration:<\/p>\n<ul>\n<li><strong>RedirectShopper<\/strong>: You'll receive this result code if you are using the <a href=\"\/pt\/online-payments\/classic-integrations\/classic-api-integration\/3d-secure-authentication\/3d-secure-1\">Redirect authentication<\/a>.<\/li>\n<li><strong>IdentifyShopper<\/strong>:  You'll receive this result code if you are using the <a href=\"\/pt\/online-payments\/classic-integrations\/classic-api-integration\/3d-secure-authentication\/native-3ds2\">Native authentication<\/a>.<\/li>\n<li><strong>ChallengeShopper<\/strong>: You might get this result code after you submit the 3D Secure 2 device fingerprinting result in a Native authentication, indicating a challenge flow.<\/li>\n<\/ul>\n<!-- list separator -->\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<\/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<\/tr>\n<\/tbody>\n<\/table>\n<p>To test the frictionless flow, specify in your payment request:<\/p>\n<ul>\n<li><code>amount.value<\/code>: <strong>12002<\/strong><\/li>\n<\/ul>\n<h4 id=\"app-based-integration\">App-based integration<\/h4>\n<p>To test different authentication scenarios for app-based integration, 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;\">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;\">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;\">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;\">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;\">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;\">HTML OOB authentication<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\">5201 2861 5377 1465<\/td>\n<td style=\"text-align: left;\">App single select then text authentication<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h4 id=\"other-scenarios\">Other scenarios<\/h4>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Card number<\/th>\n<th style=\"text-align: left;\">Scenario<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\">4199 3500 0000 0002<\/td>\n<td style=\"text-align: left;\">The card is not enrolled for 3D Secure transactions,<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\">5201 2829 9900 5515<\/td>\n<td style=\"text-align: left;\">There was a technical error.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>","url":"https:\/\/docs.adyen.com\/pt\/online-payments\/classic-integrations\/classic-api-integration\/3d-secure-authentication\/native-3ds2\/authentication-only-integration","articleFields":{"description":"Use Adyen as a standalone 3D Secure 2 provider. Perform only the 3D Secure 2 authentication with us and submit the payment authorisation later.","id":"47484643","type":"page","_expandable":{"operations":""},"status":"current","last_edit_on":"07-03-2023 13:26","sitemap":{"priority":0.3},"parameters":{"anchor_new":"<a href=\/online-payments\/3d-secure\/standalone-authentication>3D Secure authentication-only on Checkout API<\/a>","parent_page":"Classic API (<code>\/authorise<\/code>)","new_desc":"integrating using our Checkout APIs"},"feedback_component":true},"algolia":{"url":"https:\/\/docs.adyen.com\/pt\/online-payments\/classic-integrations\/classic-api-integration\/3d-secure-authentication\/native-3ds2\/authentication-only-integration","title":"Authentication-only integration","content":"\nAdyen is no longer developing the Classic API integration\nThis page is for the Classic API (\/authorise) integration, which we no longer accept new integrations with. \nWe strongly recommend migrating to the newer 3D Secure authentication-only on Checkout API integration. To use this newer integration, you must also migrate to the Checkout API.\n\nIn an authentication-only flow, you perform the 3D Secure 2 authentication independent of the payment authorisation flow. The transaction can go through either a frictionless or a challenge authentication flow. If the 3D Secure authentication is successful, you will get the authentication data that you will need to authorise the payment with another PSP or acquirer.\nIf after the authentication you decide to\u00a0process the payment with us, we also provide a way so that you can continue with the payment authorisation.\n3D Secure 1 authentication-only fallback\nIt is possible that the authentication falls back to redirecting the shopper to the issuer's site. Therefore, we recommend that your integration also supports the redirect flow.\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 plataforma de pagamentos da Adyen.\nInstall one of our\u00a0Libraries\u00a0to connect with the Adyen APIs. For more information on these steps, refer to\u00a0Get started with Adyen.\nRead and understand the full guides for\u00a0web-based,\u00a0iOS 3D Secure 2 SDK, or\u00a0Android 3D Secure 2 SDK integration.\n\nWeb-based authentication only\nIn web-based authentication-only flow, you need to submit a payment authentication request. The response will indicate if the authentication follows a frictionless or challenge flow, depending on issuer logic.\nSubmit a payment authentication request\n\nIf you are planning to authorize your transaction with another acquirer after a successful authentication, we strongly recommend that you include additional acquirer-related data to avoid authorisation refusals. Issuing banks can refuse transactions if there is a mismatch of acquirer data between the authentication and authorisation requests.\n\nSubmit a payment request with a POST\u00a0\/authorise\u00a0call. In addition to the required 3D Secure 2 objects, include the\u00a0threeDSAuthenticationOnly\u00a0parameter.\n\nthreeDSAuthenticationOnly:\u00a0true\n\n\nYou can send additional parameters for better authorization rates, and to increase the chance of a frictionless flow. You do not have to send all the additional parameters.  Send parameters that you know you can provide accurately, or that are mandatory in specific scenarios.\n\nRequest\n{\n  \"amount\":{\n    \"currency\":\"EUR\",\n    \"value\":1500\n  },\n  \"merchantAccount\":\"YOUR_MERCHANT_ACCOUNT\",\n  \"reference\":\"TEST\",\n  \"threeDS2RequestData\":{\n    \"deviceChannel\":\"browser\",\n    \"notificationURL\":\"https:\\\/\\\/www.example.com\\\/YOUR_3DS_NOTIFICATION_URL\"\n  },\n  \"threeDSAuthenticationOnly\": true,\n  \"browserInfo\":{\n    \"userAgent\":\"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\":\"text\\\/html,application\\\/xhtml+xml,application\\\/xml;q=0.9,image\\\/webp,image\\\/apng,*\\\/*;q=0.8\",\n    \"language\":\"en\",\n    \"colorDepth\":24,\n    \"screenHeight\":723,\n    \"screenWidth\":1536,\n    \"timeZoneOffset\":0,\n    \"javaEnabled\":false\n  },\n  \"card\":{\n    \"cvc\":\"737\",\n    \"expiryMonth\":\"03\",\n    \"expiryYear\":\"2030\",\n    \"holderName\":\"Simon Hopper\",\n    \"number\":\"4917610000000000\"\n  }\n}\nResponse\nYou'll receive a response containing:\u00a0\n\n\nresultCode: Perform the following depending on the result code you receive:\n\nIdentifyShopper: Perform the corresponding\u00a03D Secure device fingerprinting.\nChallengeShopper: Present the challenge\u00a0flow.\u00a0\nRedirectShopper: The payment is routed to 3D Secure 1, based on issuer performance.\n\nAuthenticationNotRequired: You can already proceed to authorise the payment because the transaction does not require 3D Secure authentication. Check the authenticationNotRequiredReason parameter if you want to know why authentication was skipped.\n\nIf after you receive the AuthenticationNotRequired result code you decide to continue the payment authorisation with Adyen, proceed to Authorise the payment with Adyen.\n\n\n\n\n\nFor a complete list of\u00a0resultCode\u00a0values and the actions that you need to do, see\u00a0Result codes.\n{\n    \"additionalData\": {\n        \"threeds2.threeDSServerTransID\": \"f8062b92-66e9-4c5a-979a-f465e66a6e48\",\n        \"threeds2.threeDS2Token\": \"BQABAQBPCQZ98WKh3v7qGnBlUMGClVzDolIjs8w\/8L64WIAqaOGZipbZod7n+E=...\",\n        \"threeds2.threeDSMethodURL\": \"https:\/\/pal-test.adyen.com\/threeds2simulator\/acs\/threedsmethodURL.shtml\"\n    },\n    \"pspReference\": \"8835494629682519\",\n    \"resultCode\": \"IdentifyShopper\"\n}\nFor a complete list of\u00a0resultCode\u00a0values and the actions that you need to do, see\u00a0Result codes.\nGet the 3D Secure 2 device fingerprint in a browser\nIf your server receives an\u00a0IdentifyShopperresultCode,\u00a0get the shopper's 3D Secure 2 device fingerprint.\nIn the step where you make a POST\u00a0\/authorise3ds2\u00a0request,\u00a0\u00a0include the\u00a0threeDSAuthenticationOnly\u00a0parameter.\n\nthreeDSAuthenticationOnly:\u00a0true\n\nRequest\n{\n   \"merchantAccount\":\"YOUR_MERCHANT_ACCOUNT\",\n   \"threeDS2RequestData\":{\n      \"threeDSCompInd\":\"Y\"\n   },\n   \"threeDSAuthenticationOnly\": true,\n   \"threeDS2Token\":\"BQABAQBPCQZ98WKh3v7qGnBlUMGClVzDolIjs8w\/8L64WIAqaOGZipbZod7n+E=...\"\n}\nResponse\nYou'll receive a response containing a\u00a0resultCode:\u00a0\n\nAuthenticationFinished:\u00a0\u00a0The authentication has been completed. Proceed to\u00a0Get the authentication data.\nChallengeShopper: The issuer has requested further verification of the shopper. See\u00a0Challenge flow.\n\nFor a complete list of\u00a0resultCode\u00a0values and the actions that you need to take, see\u00a0Result codes.\n{\n   \"additionalData\" : {\n      \"threeds2.threeDS2Result.dsTransID\": \"780d3fab-c162-4f48-a249-a3ad...\",\n      \"threeds2.threeDS2Result.eci\" : \"05\",\n      \"threeds2.threeDS2Result.threeDSServerTransID\" : \"c4e59ceb-a382-4d6a-bc87-385d591fa09d\",\n      \"threeds2.threeDS2Token\" : \"BQABAQBPCQZ98WKh3v7qGnBlUMGClVzDolIjs8w\/8L64WIAqaOGZipbZod7n+E=...\",\n      \"threeds2.threeDS2Result.authenticationValue\" : \"3q2+78r+ur7erb7vyv66vv\\\/\\\/\\\/\\\/8=\",\n      \"threeds2.threeDS2Result.transStatus\" : \"Y\"\n   },\n   \"pspReference\" : \"9935500720947721\",\n   \"resultCode\" : \"AuthenticationFinished\"\n}\n\nSee our API reference to learn more about the response parameters and how the values map to 3D Secure specifications.\n\nPresent the challenge flow in a browser\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.\u00a0Present the challenge flow to the shopper.\n\nIf after performing the challenge you decide to continue the payment authorisation with Adyen, skip the step where you send the results in a POST\u00a0 request. Proceed to authorise the payment with Adyen instead.\n\nAfter sending the challenge result with a POST\u00a0\/authorise3ds2\u00a0request and\u00a0if the authentication was successful, you will get an\u00a0AuthenticationFinished\u00a0resultCode.\u00a0\nRequest\n{\n    \"merchantAccount\": \"YOUR_MERCHANT_ACCOUNT\",\n    \"threeDS2Result\": {\n        \"transStatus\": \"Y\"\n    },\n    \"threeDS2Token\": \"BQABAQBPCQZ98WKh3v7qGnBlUMGClVzDolIjs8w\/8L64WIAqaOGZipbZod7n+E=...\"\n}\nResponse\n{\n   \"additionalData\" : {\n      \"threeds2.threeDS2Result.dsTransID\": \"780d3fab-c162-4f48-a249-a3ad...\",\n      \"threeds2.threeDS2Result.eci\" : \"05\",\n      \"threeds2.threeDS2Result.threeDSServerTransID\" : \"c4e59ceb-a382-4d6a-bc87-385d591fa09d\",\n      \"threeds2.threeDS2Token\" : \"BQABAQBPCQZ98WKh3v7qGnBlUMGClVzDolIjs8w\/8L64WIAqaOGZipbZod7n+E=...\",\n      \"threeds2.threeDS2Result.authenticationValue\" : \"3q2+78r+ur7erb7vyv66vv\\\/\\\/\\\/\\\/8=\",\n      \"threeds2.threeDS2Result.transStatus\" : \"Y\"\n   },\n   \"pspReference\" : \"9935500720947721\",\n   \"resultCode\" : \"AuthenticationFinished\"\n}\n\nSee our API reference to learn more about the response parameters and how the values map to 3D Secure specifications.\n\nProceed to\u00a0Get authentication data\u00a0for the fields that you will need to pass on to your PSP or acquirer.\nAndroid 3D Secure 2 SDK authentication only\nThis section outlines the steps for implementing an authentication only flow on your Android app. First you will need to install our Android SDK, submit a payment authentication request, get the 3D Secure 2 device fingerprint, and present a challenge if required by the issuer.\nSubmit a payment authentication request\n\nIf you are planning to authorize your transaction with another acquirer after a successful authentication, we strongly recommend that you include additional acquirer-related data to avoid authorisation refusals. Issuing banks can refuse transactions if there is a mismatch of acquirer data between the authentication and authorisation requests.\n\n\u00a0Submit a payment request with a POST\u00a0\/authorise\u00a0call. In addition to the required 3D Secure 2 objects, include the\u00a0threeDSAuthenticationOnly\u00a0parameter.\n\nthreeDSAuthenticationOnly:\u00a0true \n\n\nYou can send additional parameters for better authorization rates, and to increase the chance of a frictionless flow. You do not have to send all the additional parameters.  Send parameters that you know you can provide accurately, or that are mandatory in specific scenarios.\n\nRequest\n\n    \n\nResponse\nYou'll receive a response containing:\u00a0\n\n\nresultCode: Perform the following depending on the result code you receive:\n\nIdentifyShopper:\u00a0Perform the\u00a03D Secure 2 device fingerprinting process.\nRedirectShopper: The payment is routed to 3D Secure 1, based on issuer performance.\nAuthenticationNotRequired: You can already proceed to authorise the payment because the transaction does not require 3D Secure authentication. Check the authenticationNotRequiredReason parameter if you want to know why authentication was skipped.\n\n\nIf after you receive the AuthenticationNotRequired result code you decide to continue the payment authorisation with Adyen, proceed to Authorise the payment with Adyen.\n\n\n\nFor a complete list of\u00a0resultCode\u00a0values and the actions that you need to do, see\u00a0Result codes.\n{\n    \"additionalData\": {\n        \"threeds2.threeDSServerTransID\": \"055fadfb-9fe4-4e70-99f0-9b8935bf1eb2\",\n        \"threeds2.threeDS2DirectoryServerInformation.algorithm\": \"RSA\",\n        \"threeds2.threeDS2Token\": \"BQABAQBPCQZ98WKh3v7qGnBlUMGClVzDolIjs8w\/8L64WIAqaOGZipbZod7n+E=...\",\n        \"threeds2.threeDS2DirectoryServerInformation.directoryServerId\": \"A000000003\",\n        \"threeds2.threeDS2DirectoryServerInformation.publicKey\": \"eyJrdHkiOiJSU0EiLCJlIjoiQVFBQiIsIm4iOiI4VFBxZkFQ==...\"\n    },\n    \"pspReference\": \"8835495304426403\",\n    \"resultCode\": \"IdentifyShopper\"\n}\nGet the 3D Secure 2 device fingerprint with an Android app\nIf your server receives an\u00a0IdentifyShopper resultCode,\u00a0get the shopper's 3D Secure 2 device fingerprint.\nIn the step where you make a POST\u00a0\/authorise3ds2\u00a0request,\u00a0\u00a0include the\u00a0threeDSAuthenticationOnly\u00a0parameter.\n\nthreeDSAuthenticationOnly:\u00a0true\n\nRequest\n{\n    \"merchantAccount\": \"YOUR_MERCHANT_ACCOUNT\",\n    \"threeDS2RequestData\": {\n        \"deviceChannel\": \"app\",\n        \"sdkAppID\": \"9063b12c-fcde-43c7-b28e-8d0af5520e8a\",\n        \"sdkEncData\": \"&lt;device-fingerprint&gt;\",\n        \"sdkEphemPubKey\": {\n            \"crv\": \"P-256\",\n            \"kty\": \"EC\",\n            \"x\": \"LYImJkRzS92vogM6AUPCBhJ20VagSe8IL0Q9SdisUSo\",\n            \"y\": \"Rav4sKHnLUIUHVdyR4dyV7G2_EeAnuCn_6621ZhqZYU\"\n        },\n        \"sdkReferenceNumber\": \"3DS_LOA_SDK_ADBV_739485_94783\",\n        \"sdkTransID\": \"b60c9879-ac77-4918-a317-7b01c4317053\"\/8Q==..\"\n    \"threeDSAuthenticationOnly\": true\n}\nResponse\nYou'll receive a response containing a\u00a0resultCode:\n\nAuthenticationFinished:\u00a0The authentication has been completed. Proceed to\u00a0Get the authentication data.\nChallengeShopper: The issuer has requested further shopper interaction. Perform the\u00a0Challenge flow.\n\nFor a complete list of\u00a0resultCode\u00a0values, see\u00a0Result codes.\n{\n    \"additionalData\": {\n        \"threeds2.threeDS2ResponseData.acsSignedContent\": \"eyJhbGciOiJQUzI1NiIsIngPVEFOQmdrcWhraUc5dtw4I-RBJ8_OUt8yIZEsoc...\",\n        \"threeds2.threeDS2ResponseData.transStatus\": \"C\",\n        \"threeds2.threeDS2ResponseData.acsChallengeMandated\": \"Y\",\n        \"threeds2.threeDS2ResponseData.acsURL\": \"https:\/\/pal-test.adyen.com\/threeds2simulator\/services\/ThreeDS2Simulator\/v1\/handle\/83e78317-e73f-4a6f-j738-7hj09p07n178\",\n        \"threeds2.threeDS2ResponseData.threeDSServerTransID\": \"930h2k09-1986-4hl2-800a-c8d7783918bf\",\n        \"threeds2.threeDS2ResponseData.authenticationType\": \"01\",\n        \"threeds2.threeDS2ResponseData.messageVersion\": \"2.1.0\",\n        \"threeds2.threeDS2Token\": \"BQABAQBPCQZ98WKh3v7qGnBlUMGClVzDolIjs8w\/8L64WIAqaOGZipbZod7n+E=...\",\n        \"threeds2.threeDS2ResponseData.acsTransID\": \"45e79886-e60c-4c6d-a962-7aa43d59b150\",\n        \"threeds2.threeDS2ResponseData.acsReferenceNumber\": \"ADYEN-ACS-SIMULATOR\"\n    },\n    \"pspReference\": \"8825495326513370\",\n    \"resultCode\": \"ChallengeShopper\"\n}\nPresent the challenge flow within your Android app\nIf your server receives a\u00a0ChallengeShopper\u00a0resultCode, this means that the issuer would like to perform additional checks in order to verify that the shopper is indeed the cardholder.\u00a0Present the challenge flow to the shopper.\n\nIf after performing the challenge you decide to continue the payment authorisation with Adyen, skip the step where you send the results in a POST\u00a0 request. Proceed to authorise the payment with Adyen instead.\n\nAfter sending the challenge result with a POST\u00a0\/authorise3ds2\u00a0request and\u00a0If the authentication was successful, you will get a\u00a0AuthenticationFinished\u00a0resultCode.\u00a0\nRequest\n{\n    \"merchantAccount\": \"YOUR_MERCHANT_ACCOUNT\",\n    \"threeDS2Result\": {\n        \"transStatus\": \"Y\"\n    },\n    \"threeDS2Token\": \"BQABAQBPCQZ98WKh3v7qGnBlUMGClVzDolIjs8w\/8L64WIAqaOGZipbZod7n+E=...\"\n}\nResponse\nYou'll receive\u00a0AuthenticationFinished\u00a0as the\u00a0resultCode\u00a0if the transaction was successfully authenticated.\n{\n   \"additionalData\" : {\n      \"threeds2.threeDS2Result.dsTransID\": \"780d3fab-c162-4f48-a249-a3ad...\",\n      \"threeds2.threeDS2Result.eci\" : \"05\",\n      \"threeds2.threeDS2Result.threeDSServerTransID\" : \"c4e59ceb-a382-4d6a-bc87-385d591fa09d\",\n      \"threeds2.threeDS2Token\" : \"BQABAQBPCQZ98WKh3v7qGnBlUMGClVzDolIjs8w\/8L64WIAqaOGZipbZod7n+E=...\",\n      \"threeds2.threeDS2Result.authenticationValue\" : \"3q2+78r+ur7erb7vyv66vv\\\/\\\/\\\/\\\/8=\",\n      \"threeds2.threeDS2Result.transStatus\" : \"Y\"\n   },\n   \"pspReference\" : \"9935500720947721\",\n   \"resultCode\" : \"AuthenticationFinished\"\n}\n\nSee our API reference to learn more about the response parameters and how the values map to 3D Secure specifications.\n\nProceed to\u00a0Get authentication data\u00a0for the fields that you will need to pass on to your PSP or acquirer.\niOS 3D Secure 2 SDK authentication only\nThis section outlines the steps for implementing an authentication only flow on your iOS app. First you will need to install our iOS SDK, submit a payment authentication request, get the 3D Secure 2 device fingerprint, and present a challenge if required by the issuer.\nSubmit a\u00a0payment authentication request\n\nIf you are planning to authorize your transaction with another acquirer after a successful authentication, we strongly recommend that you include additional acquirer-related data to avoid authorisation refusals. Issuing banks can refuse transactions if there is a mismatch of acquirer data between the authentication and authorisation requests.\n\nSubmit a payment request with a POST\u00a0\/authorise\u00a0call. In addition to the required 3D Secure 2 objects, include the\u00a0threeDSAuthenticationOnly\u00a0parameter.\n\nthreeDSAuthenticationOnly:\u00a0true\n\n\nYou can send additional parameters for better authorization rates, and to increase the chance of a frictionless flow. You do not have to send all the additional parameters.  Send parameters that you know you can provide accurately, or that are mandatory in specific scenarios.\n\nRequest\n\n    \n\nResponse\nYou'll receive a response containing:\u00a0\n\n\nresultCode: Perform the following depending on the result code you receive:\n\nIdentifyShopper.\u00a0Perform the\u00a03D Secure 2 device fingerprinting process.\nRedirectShopper: The payment is routed to 3D Secure 1, based on issuer performance.\nAuthenticationNotRequired: You can already proceed to authorise the payment because the transaction does not require 3D Secure authentication. Check the authenticationNotRequiredReason parameter if you want to know why authentication was skipped.\n\n\nIf after you receive the AuthenticationNotRequired result code you decide to continue the payment authorisation with Adyen, proceed to Authorise the payment with Adyen.\n\n\n\nFor a complete list of\u00a0resultCode\u00a0values and the actions that you need to take, see\u00a0Result codes.\n{\n    \"additionalData\": {\n        \"threeds2.threeDSServerTransID\": \"055fadfb-9fe4-4e70-99f0-9b8935bf1eb2\",\n        \"threeds2.threeDS2DirectoryServerInformation.algorithm\": \"RSA\",\n        \"threeds2.threeDS2Token\": \"BQABAQBPCQZ98WKh3v7qGnBlUMGClVzDolIjs8w\/8L64WIAqaOGZipbZod7n+E=...\",\n        \"threeds2.threeDS2DirectoryServerInformation.directoryServerId\": \"A000000003\",\n        \"threeds2.threeDS2DirectoryServerInformation.publicKey\": \"eyJrdHkiOiJSU0EiLCJlIjoiQVFBQiIsIm4iOiI4VFBxZkFQ==...\"\n    },\n    \"pspReference\": \"8835495304426403\",\n    \"resultCode\": \"IdentifyShopper\"\n}\nGet the 3D Secure 2 device fingerprint with an iOS app\nIf your server receives an\u00a0IdentifyShopper\u00a0resultCode,\u00a0get the shopper's\u00a03D Secure 2\u00a0device fingerprint.\nIn the step where you make a POST\u00a0\/authorise3ds2\u00a0request, include the\u00a0threeDSAuthenticationOnly\u00a0parameter.\n\nthreeDSAuthenticationOnly:\u00a0true\n\nRequest\n{\n    \"merchantAccount\": \"YOUR_MERCHANT_ACCOUNT\",\n    \"threeDS2RequestData\": {\n        \"deviceChannel\": \"app\",\n        \"sdkAppID\": \"9063b12c-fcde-43c7-b28e-8d0af5520e8a\",\n        \"sdkEncData\": \"&lt;device-fingerprint&gt;\",\n        \"sdkEphemPubKey\": {\n            \"crv\": \"P-256\",\n            \"kty\": \"EC\",\n            \"x\": \"LYImJkRzS92vogM6AUPCBhJ20VagSe8IL0Q9SdisUSo\",\n            \"y\": \"Rav4sKHnLUIUHVdyR4dyV7G2_EeAnuCn_6621ZhqZYU\"\n            }\n        },\n        \"sdkReferenceNumber\": \"3DS_LOA_SDK_ADBV_739485_94783\",\n        \"sdkTransID\": \"b60c9879-ac77-4918-a317-7b01c4317053\/8Q==..\",\n    \"threeDSAuthenticationOnly\": true\n}\nResponse\nYou'll receive a response containing a\u00a0resultCode:\n\nAuthenticationFinished:\u00a0 The authentication has been completed. Proceed to\u00a0Get the authentication data.\u00a0\nChallengeShopper: The issuer has requested further verification of the shopper. Perform the\u00a0Challenge flow.\n\nFor a complete list of\u00a0resultCode\u00a0values, see\u00a0Result codes.\n{\n    \"additionalData\": {\n        \"threeds2.threeDS2ResponseData.acsSignedContent\": \"eyJhbGciOiJQUzI1NiIsIngPVEFOQmdrcWhraUc5dtw4I-RBJ8_OUt8yIZEsoc...\",\n        \"threeds2.threeDS2ResponseData.transStatus\": \"C\",\n        \"threeds2.threeDS2ResponseData.acsChallengeMandated\": \"Y\",\n        \"threeds2.threeDS2ResponseData.acsURL\": \"https:\/\/pal-test.adyen.com\/threeds2simulator\/services\/ThreeDS2Simulator\/v1\/handle\/83e78317-e73f-4a6f-j738-7hj09p07n178\",\n        \"threeds2.threeDS2ResponseData.threeDSServerTransID\": \"930h2k09-1986-4hl2-800a-c8d7783918bf\",\n        \"threeds2.threeDS2ResponseData.authenticationType\": \"01\",\n        \"threeds2.threeDS2ResponseData.messageVersion\": \"2.1.0\",\n        \"threeds2.threeDS2Token\": \"BQABAQBPCQZ98WKh3v7qGnBlUMGClVzDolIjs8w\/8L64WIAqaOGZipbZod7n+E=...\",\n        \"threeds2.threeDS2ResponseData.acsTransID\": \"45e79886-e60c-4c6d-a962-7aa43d59b150\",\n        \"threeds2.threeDS2ResponseData.acsReferenceNumber\": \"ADYEN-ACS-SIMULATOR\"\n    },\n    \"pspReference\": \"8825495326513370\",\n    \"resultCode\": \"ChallengeShopper\"\n}\nPresent the challenge flow in your iOS app\nIf your server receives\u00a0ChallengeShopper resultCode, this means that the issuer would like to perform additional checks in order to verify that the shopper is indeed the cardholder. Present the challenge flow to the shopper.\n\nIf after performing the challenge you decide to continue the payment authorisation with Adyen, skip the step where you send the results in a POST \/authorise3ds2\u00a0request. Proceed to authorise the payment with Adyen instead.\n\nAfter sending the challenge result with a POST\u00a0\/authorise3ds2\u00a0request and\u00a0If the authentication was successful, you will get an\u00a0AuthenticationFinished\u00a0resultCode.\u00a0\nRequest\n{\n    \"merchantAccount\": \"YOUR_MERCHANT_ACCOUNT\",\n    \"threeDS2Result\": {\n        \"transStatus\": \"Y\"\n    },\n    \"threeDS2Token\": \"BQABAQBPCQZ98WKh3v7qGnBlUMGClVzDolIjs8w\/8L64WIAqaOGZipbZod7n+E=...\"\n}\nResponse\nYou'll receive\u00a0AuthenticationFinished\u00a0as the\u00a0resultCode\u00a0if the transaction was successfully authenticated.\n{\n   \"additionalData\" : {\n      \"threeds2.threeDS2Result.dsTransID\": \"780d3fab-c162-4f48-a249-a3ad...\",\n      \"threeds2.threeDS2Result.eci\" : \"05\",\n      \"threeds2.threeDS2Result.threeDSServerTransID\" : \"c4e59ceb-a382-4d6a-bc87-385d591fa09d\",\n      \"threeds2.threeDS2Token\" : \"BQABAQBPCQZ98WKh3v7qGnBlUMGClVzDolIjs8w\/8L64WIAqaOGZipbZod7n+E=...\",\n      \"threeds2.threeDS2Result.authenticationValue\" : \"3q2+78r+ur7erb7vyv66vv\\\/\\\/\\\/\\\/8=\",\n      \"threeds2.threeDS2Result.transStatus\" : \"Y\"\n   },\n   \"pspReference\" : \"9935500720947721\",\n   \"resultCode\" : \"AuthenticationFinished\"\n}\n\nSee our API reference to learn more about the response parameters and how the values map to 3D Secure specifications.\n\nProceed to\u00a0Get authentication data\u00a0for the fields that you will need to pass on to your PSP or acquirer.\nGet the 3D Secure 2 authenticated data\nTo authorise a payment with 3D Secure 2 authentication, you need the following  data:\n\n\n\nField\nDescription\n\n\n\n\nauthenticationValue\nThe value for the 3D Secure 2 authentication session. The returned value is a Base64-encoded 20- or 21-byte array.\n\n\ndsTransID\nThe unique transaction identifier assigned by the Directory Server to identify a single transaction.\n\n\neci\nThe Electronic Commerce Indicator returned from the schemes for the 3D Secure 2 payment session.\n\n\n\nYou can get this data from the last API response with AuthenticationFinished resultCode, from one  of the following endpoints:\n\n\/getAuthenticationResult\n\/retrieve3ds2Result: use this endpoint for Cartes Bancaires.\n\n\n\n\n    \n        \n        \n    \n\n\n\nSee our API reference to learn more about the response parameters and how the values map to 3D Secure specifications.\n\nOptional: Provide additional acquirer-related data\n\nPerform this step only if you are planning to authorize your transaction with another acquirer after a successful authentication. We strongly recommend that you include the additional acquirer-related data described below to avoid authorisations refusals from the issuing bank as a result of a mismatch of acquirer data between authentication and authorisation.\n\nGet the following information from your acquirer. These information are part of the 3D Secure 2 enrollment process between your acquirer and card schemes.\nIf you are unable to get these values from your acquirer, contact Support Team.\n\n\nacquirerBIN: Supported from API v49 and later. The acquiring BIN enrolled for 3D Secure 2. This string should match the value that you will use in the authorisation.\n\nIf you are building a test integration, you can use the string 123456 in place of an actual acquirerBIN.\n\n\n\nacquirerMerchantID: Supported from API v49 and later. The authorisation MID enrolled for 3D Secure 2. This string should match the value that you will use in the authorisation.\n\nIf you are building a test integration, you can use the string 123456 in place of an actual acquirerMerchantID.\n\n\n\nmerchantName:Supported from API v49 and later. The merchant name that the issuer presents to the shopper if they get a challenge. We recommend to use the same value that you will use in the authorisation. Maximum length is 40 characters.\n\n\nmcc: Supported from API v49 and later. The four-digit Merchant Category Code registered with the scheme for the same acquirerMerchantID sent in the request.\n\n\nthreeDSRequestorID: Required for Visa and Mastercard. Unique requestor ID assigned by the Directory Server when you enrol for 3D Secure 2.\n\n\nthreeDSRequestorName: Required for Visa and Mastercard. Unique requestor name assigned by the Directory Server when you enrol for 3D Secure 2.\n\n\nSubmit an authentication request with a \/authorise call containing the required 3D Secure 2 fields, the acquirer fields listed previously, and the threeDSAuthenticationOnly parameter:\n\nthreeDSAuthenticationOnly: true\n\n\nYou can send additional parameters for better authorization rates, and to increase the chance of a frictionless flow. You do not have to send all the additional parameters.  Send parameters that you know you can provide accurately, or that are mandatory in specific scenarios.\n\nRequest for web-based 3D Secure 2 authentication with additional acquirer-related data\n\n{\n  \"amount\":{\n    \"currency\":\"EUR\",\n    \"value\":1500\n  },\n  \"merchantAccount\":\"YOUR_MERCHANT_ACCOUNT\",\n  \"reference\":\"TEST\",\n  \"threeDS2RequestData\":{\n    \"deviceChannel\":\"browser\",\n    \"notificationURL\":\"https:\\\/\\\/www.example.com\\\/YOUR_3DS_NOTIFICATION_URL\",\n    \"acquirerBIN\": \"YOUR_ACQUIRER_BIN\",\n    \"acquirerMerchantID\": \"YOUR_ACQUIRER_MERCHANT_ID\",\n    \"merchantName\": \"YOUR_MERCHANT_NAME\",\n    \"mcc\": \"YOUR_MCC\",\n    \"threeDSRequestorID\": \"YOUR_3DS_REQUESTOR_ID\",\n    \"threeDSRequestorName\": \"YOUR_3DS_REQUESTOR_NAME\"\n  },\n  \"threeDSAuthenticationOnly\": true,\n  \"browserInfo\":{\n    \"userAgent\":\"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\":\"text\\\/html,application\\\/xhtml+xml,application\\\/xml;q=0.9,image\\\/webp,image\\\/apng,*\\\/*;q=0.8\",\n    \"language\":\"en\",\n    \"colorDepth\":24,\n    \"screenHeight\":723,\n    \"screenWidth\":1536,\n    \"timeZoneOffset\":0,\n    \"javaEnabled\":false\n  },\n  \"card\":{\n    \"cvc\":\"737\",\n    \"expiryMonth\":\"03\",\n    \"expiryYear\":\"2030\",\n    \"holderName\":\"Simon Hopper\",\n    \"number\":\"4917610000000000\"\n  }\n}\nResponse\nYou'll receive a response containing:\n\nresultCode: Possible values related 3D Secure 2 flows are\u00a0IdentifyShopper or\u00a0ChallengeShopper. Perform the corresponding\u00a0Identify the shopper\u00a0or\u00a0Challenge the shopper\u00a0flows.\u00a0\n\n\nTo optimize authorization rates, Adyen's Authentication Engine routes each payment to either the 3D Secure 2 or the 3D Secure 1 flow, based on issuer performance. See\u00a03D Secure fallback for more information.\n\nFor a complete list of\u00a0resultCode\u00a0values and the actions that you need to do, see\u00a0Result codes.\n{\n    \"additionalData\": {\n        \"threeds2.threeDSServerTransID\": \"f8062b92-66e9-4c5a-979a-f465e66a6e48\",\n        \"threeds2.threeDS2Token\": \"BQABAQBPCQZ98WKh3v7qGnBlUMGClVzDolIjs8w\/8L64WIAqaOGZipbZod7n+E=...\",\n        \"threeds2.threeDSMethodURL\": \"https:\/\/pal-test.adyen.com\/threeds2simulator\/acs\/threedsmethodURL.shtml\"\n    },\n    \"pspReference\": \"8835494629682519\",\n    \"resultCode\": \"IdentifyShopper\"\n}\nOptional: Authorise the\u00a0payment with Adyen\nIf you decide to proceed with authorising the payment with Adyen, you can still switch and continue with a payment authorisation.\nMake a POST\u00a0\/authorise3ds2\u00a0request from your server and include the following parameters:\u00a0\n\nthreeDSAuthenticationOnly:\u00a0false\nthreeDS2Token: The threeDS2Token from the \/authorise response if you received the AuthenticationNotRequired result code, or from the \/authorise3ds2 response if you received the AuthenticationFinished result code.\n\ntransStatus: Include this if you received the AuthenticationFinished result code.\n\nFor a browser-based integration, this is the transStatus from the base64url decoded CRes. If you did not receive a result to the\u00a0threeDSNotificationURL\u00a0within 10 minutes, assume that something went wrong or the shopper aborted the transaction. In this case, send\u00a0transStatus: U to complete the authentication process.\nFor an app-based integration, this is the value generated by the SDK.\n\n\n\nSample request after completing an authentication\n{\n    \"merchantAccount\": \"YOUR_MERCHANT_ACCOUNT\",\n    \"threeDS2Result\": {\n        \"transStatus\": \"Y\"\n    },\n    \"threeDSAuthenticationOnly\": false,\n    \"threeDS2Token\": \"BQABAQBPCQZ98WKh3v7qGnBlUMGClVzDolIjs8w\/8L64WIAqaOGZipbZod7n+E=...\"\n}\nSample request if authentication was not required for the transaction\n{\n    \"merchantAccount\": \"YOUR_MERCHANT_ACCOUNT\",\n    \"threeDSAuthenticationOnly\": false,\n    \"threeDS2Token\": \"BQABAQBPCQZ98WKh3v7qGnBlUMGClVzDolIjs8w\/8L64WIAqaOGZipbZod7n+E=...\"\n}\nResponse\nYou'll receive\u00a0Authorised\u00a0as the\u00a0resultCode\u00a0if the payment was successful.\n{\n    \"additionalData\": {\n        \"liabilityShift\": \"true\",\n        \"authCode\": \"44402\",\n        \"avsResult\": \"4 AVS not supported for this card type\",\n        \"threeDOffered\": \"true\",\n        \"refusalReasonRaw\": \"AUTHORISED\",\n        \"authorisationMid\": \"1000\",\n        \"acquirerAccountCode\": \"TestPmmAcquirerAccount\",\n        \"cvcResult\": \"1 Matches\",\n        \"avsResultRaw\": \"4\",\n        \"threeDAuthenticated\": \"true\",\n        \"cvcResultRaw\": \"M\",\n        \"acquirerCode\": \"TestPmmAcquirer\",\n        \"acquirerReference\": \"7CASOGMCCB4\"\n    },\n    \"pspReference\": \"8825495331860022\",\n    \"resultCode\": \"Authorised\",\n    \"authCode\": \"44402\"\n}\nAuthentication data expiry\nAuthentication data and cryptograms expire depending on card schemes. This means that you can no longer use the authentication data after it expires.\n\n\n\nCard scheme\nCryptogram validity\n\n\n\n\nAmex\n45 days\n\n\nCUP\n90 days\n\n\nMastercard\n30 days. Starting from 2020, Mastercard will support non-expiring cryptograms  but the expiry will depend on the issuing bank's implementation.\n\n\nVisa\n1 year\n\n\n\nTesting 3D Secure 2\nBefore going live, use the following card numbers and credentials to\u00a0test your integration.\nWe recommend testing each\u00a0Card Type.\nTo test how your integration handles different 3D Secure 2 authentication scenarios, use our test card numbers.\nAll our test cards use the following expiry dates and security codes:\n\n\n\nExpiry Date\nCVC\/CVV\nCID\n\n\n\n\n03\/2030\n737\n7373\n\n\n\nWhen prompted for 3D Secure 2 text challenges, use the following credentials:\n\nFor mobile, use password: 1234\nFor web, use password: password\n\n\n\n\nCard Type\nCard Number\n\n\n\n\nCartes Bancaires\n4035 5014 2814 6300\n\n\nMaestro \n  1\n\n5000 5500 0000 0029\n\n\nMastercard\n5454 5454 5454 5454\n\n\nVisa\n4917 6100 0000 0000\n\n\n\n 1 This card doesn't require a CVC.\nWhen you make a payment request with these cards, you'll receive the following result codes depending on your integration:\n\nRedirectShopper: You'll receive this result code if you are using the Redirect authentication.\nIdentifyShopper:  You'll receive this result code if you are using the Native authentication.\nChallengeShopper: You might get this result code after you submit the 3D Secure 2 device fingerprinting result in a Native authentication, indicating a challenge flow.\n\n\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\n\n\n\n\nVisa\n4212 3456 7891 0006\n\n\n\nTo test the frictionless flow, specify in your payment request:\n\namount.value: 12002\n\nApp-based integration\nTo test different authentication scenarios for app-based integration, use the following test cards:\n\n\n\nCard number\nAuthentication scenario\n\n\n\n\n5201 2855 6567 2311\nBasic text authentication\n\n\n5201 2874 9905 2008\nBasic single select\n\n\n5201 2815 9233 1633\nBasic multi select\n\n\n5201 2888 2269 6974\nBasic out-of-band (OOB) authentication\n\n\n5201 2895 0084 3268\nHTML OOB authentication\n\n\n5201 2861 5377 1465\nApp single select then text authentication\n\n\n\nOther scenarios\n\n\n\nCard number\nScenario\n\n\n\n\n4199 3500 0000 0002\nThe card is not enrolled for 3D Secure transactions,\n\n\n5201 2829 9900 5515\nThere was a technical error.\n\n\n","type":"page","locale":"pt","boost":14,"hierarchy":{"lvl0":"Home","lvl1":"Online payments","lvl2":"Classic integrations for Ecommerce","lvl3":"Classic API integration","lvl4":"3D Secure authentication","lvl5":"Native 3D Secure 2 authentication","lvl6":"Authentication-only 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\/classic-integrations","lvl3":"https:\/\/docs.adyen.com\/pt\/online-payments\/classic-integrations\/classic-api-integration","lvl4":"https:\/\/docs.adyen.com\/pt\/online-payments\/classic-integrations\/classic-api-integration\/3d-secure-authentication","lvl5":"https:\/\/docs.adyen.com\/pt\/online-payments\/classic-integrations\/classic-api-integration\/3d-secure-authentication\/native-3ds2","lvl6":"\/pt\/online-payments\/classic-integrations\/classic-api-integration\/3d-secure-authentication\/native-3ds2\/authentication-only-integration"},"levels":7,"category":"Online Payments","category_color":"green","tags":["Authentication-only","integration"]},"articleFiles":{"907470345.js":"<p alt=\"\">907470345.js<\/p>","1715442810.js":"<p alt=\"\">1715442810.js<\/p>"}}
