Use standalone authentication when you want to separate authentication from authorization. In the standalone authentication flow, you make a payment request that specifies only authentication. When authentication is successfully completed, you receive the 3D Secure 2 authentication data which you can use to authorize the payment with Adyen or another payment service provider (PSP).
Requirements
Before you begin, take into account the following requirements, limitations, and preparations.
| Requirement | Description | |
|---|---|---|
| Integration type | Make sure that you have built an online payments integration that uses the Advanced flow. | |
| API credential roles | You need an API credential with an API key and the Checkout webservice role. | |
| Webhooks | Subscribe to Standard webhooks, and enable the non-default AUTHENTICATION event code. | |
| Limitations | You cannot trigger standalone authentication with the /sessions endpoint or with Hosted Checkout. | |
| Setup steps | Before you begin:
|
How it works
With standalone authentication, you perform the 3D Secure 2 authentication independently of the payment authorization flow.
- Make a payment request, where you use the
authenticationOnlyparameter to specify that the request is only for performing authentication. - In the /payments response, use the
actionobject to determine the authentication flow you need to perform. - Perform the required authentication flow.
- Get the 3D Secure 2 authentication data.
- Use the authentication data to authorize the payment with Adyen, or with another PSP or acquirer.
Keep in mind that authentication data is valid for a different time period for each scheme, and you can not use it after it expires.
Make a payment request for authentication
A payment request to perform standalone authentication is similar to making a /payments request for a payment authorization with your standard 3D Secure 2 integration. You add the authenticationOnly parameter to specify that you only want to authenticate the shopper.
To perform standalone authentication:
-
In your POST /payments request, specify:
Parameter Required Description paymentMethod Object that contains the shopper's card information from your front end or client app. Make sure that you: - Include the encrypted, or if you are fully PCI compliant, unecrypted card details.
- For co-badged cards, set the
brandto the scheme that you want to authenticate with. - For Visa and JCB transactions, include the
holderName.
channel Specify the platform that you are using.
Possible values:- Web
- iOS
- Android
authenticationOnly Set to true to trigger the standalone authentication flow. nativeThreeDS Use case: if you have a native 3D Secure integration.
Set to preferred to indicate that the native flow should be triggered when available.browserInfo Object that contains information about the shopper's browser. The sub-fields that you must include in browserInfo depend on your integration type:
- For mobile integrations ( channel: iOS/Android): the
acceptHeader, anduserAgentsub-fields are required to support cases where the payment is routed to 3D Secure 2 redirect. - For web integrations ( channel: Web): the full object, except
javaScriptEnabled, is required.
returnUrl The URL where the shopper is redirected back to after completing authentication to support cases where the payment is routed to the 3D Secure 2 redirect flow. See our integration guides to learn how to set this URL depending on your platform. origin Use case: required for browser-based ( channel: Web) transactions.
The origin URL of the page where you are rendering the Drop-in/Component. When this field is not set, or set incorrectly, the 3D Secure 2 action can not be handled correctly.
Format:- Maximum characters: 80
- Do not include subdirectories and a trailing slash.
https://your-company.example.com/checkout/payment, set tohttps://your-company.example.com.shopperIP Use case: required for browser-based ( channel: Web) transactions.
The shopper's IP address. Required forchannelweb.billingAddress The shopper's billing address. shopperEmail Use case: required for Visa and JCB transactions.
The cardholder's email address. If you do not include this, you must send thetelephoneNumber, or a phone number in thethreeDS2RequestDataobject.telephoneNumber Use case: required for Visa and JCB transactions if you did not include the shopperEmailfield.
The shopper's phone number. To be more specific, you can use themobilePhone,homePhone, andworkPhonefields in thethreeDS2RequestDataobject.
Format: The phone number must include a plus sign (+) and a country code (1-3 digits), followed by the number (4-15 digits).
Example: +4912345678901If the value you provide does not follow the guidelines, we drop the value and do not submit it for authentication.Required for all transactions.
Required for particular setups, or issuers and card schemes.
Recommended for all transactions, but not required.
We recommend that you do the following to prevent authorization refusals:
- Include additional acquirer-related data if you plan to authorize the payment with a different acquirer. Refusals often happen when acquirer data mismatches between the authentication and authorization requests.
- Include additional shopper information to increase the likelihood of achieving a frictionless flow.
-
In the /payments response, check the
resultCode:- If the result code is
AuthenticationNotRequired, You can proceed to authorize the payment with Adyen by making a standard /payments request, or with another PSP or acquirer. -
If you get a 3D Secure 2 authentication result code, proceed to perform the authentication.
resultCodeDescriptionAction to takeChallengeShopper The issuer requires authentication from the shopper, for example through facial recognition or entering a code received on their phone. Initiate the challenge flow to present the challenge to the shopper, and submit the result to Adyen. IdentifyShopper The issuer requires authentication from the device the shopper is using. Initiate the frictionless flow to get the shopper's device fingerprint, and submit the result to Adyen. RedirectShopper The issuer requires the shopper to provide authentication in an an external web page or app. Redirect the shopper to complete the authentication.
- If the result code is
Provide additional acquirer-related data
If you authorize the payment that you authenticate with Adyen with a different PSP, it is recommended to include additional acquirer-related data. Get the following details from your acquirer. These details are part of the 3D Secure 2 enrollment process between your acquirer and card schemes.
If you are unable to get these details from your acquirer, contact our Support Team.
| Acquirer data | Description |
|---|---|
acquirerBIN |
The acquiring BIN enrolled for 3D Secure 2. This string should match the value that you will use in the authorization. If you are building a test integration, you can use the string 123456 in place of an actual acquirerBIN. |
acquirerMerchantID |
The authorization merchant ID enrolled for 3D Secure 2. This string should match the value that you will use in the authorization. If you are building a test integration, you can use the string 123456 in place of an actual acquirerMerchantID. |
mcc |
The four-digit Merchant Category Code registered with the scheme for the same acquirerMerchantID sent in the request. |
merchantName |
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 authorization. Format: Maximum 40 characters. |
threeDSRequestorID |
Required for Visa and Mastercard. The unique requestor ID assigned by the Directory Server when you enroll for 3D Secure 2. |
threeDSRequestorName |
Required for Visa and Mastercard. The unique requestor name assigned by the Directory Server when you enrol for 3D Secure 2. |
Make a POST /payments request containing the parameters required for the standalone authentication, together with the acquirer data listed above.
Perform the authentication
-
In the /payments response, you receive
action.type: ThreeDS2. Use theaction.subtypeobject to determine your next steps. The way to handle theactionobject for the standalone authentication flow is the same as handling it for your native or redirect 3D Secure implementation. -
When authentication is completed, submit the authentication result in a /payments/details request, including authenticationData.authenticationOnly: true.
Below is an example /payments/details request: -
In the /payments/details response, check the following fields:
resultCode: If the authentication process has finished, you receive AuthenticationFinished. If an error occurs during the authentication flow, and the authentication process is not completed, you receive Refused.threeDS2Result: The object that contains the authentication data that you need to authorize the payment following a successful authentication.threeDS2Result.transStatus: Indicates the result of the authentication. The value Y means that authentication is successful.If the authentication went through the redirect flow, the result of the authentication is in additionalData.threeDAuthenticatedResponse.
Get the 3D Secure 2 authentication data
After a successful authentication, you get a resultCode with the value of AuthenticationFinished in the /payments/details response. The response contains threeDS2Result object, that contains the authentication data produced by a Merchant Plug-in (MPI).
Some schemes do not provide all fields; the Applies to column shows which schemes provide each field.
| Parameter | Applies to | Description |
|---|---|---|
| authenticationValue | All schemes | The value for the 3D Secure 2 authentication session. The returned value is a Base64-encoded 20- or 21-byte array. Example: AQIDBAUGBwgJCgsMDQ4PEBESExQ= |
| eci | All schemes | The Electronic Commerce Indicator returned from the schemes for the 3D Secure 2 payment session. Example: 02 |
| threeDSServerTransID | All schemes | The unique identifier assigned by the 3D Secure 2 server. |
| transStatus | All schemes | Indicates whether a transaction was authenticated, or whether additional verification is required. Possible values:
This field is called 3DS challenged in your Customer Area. |
| dsTransID | All schemes | The unique transaction identifier assigned by the Directory Server (DS) to identify a single transaction. |
| transStatusReason | All schemes | Provides information on why the transStatus field has the specified value. See possible values. |
| challengeCancel | Cartes Bancaires | The indicator informing the Access Control Server (ACS) and the DS that the authentication has been cancelled. See the API reference for possible values. |
| threeDSRequestorChallengeInd | Cartes Bancaires | Indicates whether a challenge is requested for this transaction.
|
| exemptionIndicator | Cartes Bancaires | If an exemption was applied by the issuer to the authentication, indicates the exemption type. Possible values:
|
| riskScore | Cartes Bancaires | The risk score calculated by the Cartes Bancaires DS. |
Some of these fields are also returned in the threeDAuthenticatedResponse object, but we recommend to use the threeDS2Result object.
Possible 'transStatusReason' values
transStatusReason value |
Scheme | Description |
|---|---|---|
01 |
All | Card authentication failed. |
02 |
All | Unknown device. |
03 |
All | Unsupported device. |
04 |
All | Exceeds authentication frequency limit. |
05 |
All | Expired card. |
06 |
All | Invalid card number. |
07 |
All | Invalid transaction. |
08 |
All | No card record. |
09 |
All | Security failure. |
10 |
All | Stolen card. |
11 |
All | Suspected fraud. |
12 |
All | Transaction not permitted for cardholder. |
13 |
All | Cardholder not enrolled in service. |
14 |
All | Transaction timed out at ACS. |
15 |
All | Low confidence. |
16 |
All | Medium confidence. |
17 |
All | High confidence. |
18 |
All | Very high confidence. |
19 |
All | Exceeds ACS maximum challenges. |
20 |
All | Non-payment transaction not supported. |
21 |
All | 3RI transaction not supported. |
22 |
All | ACS technical issue. |
23 |
All | Decoupled Authentication required by ACS but not requested by 3DS Requestor. |
24 |
All | 3DS Requestor decoupled max expiry time exceeded. |
25 |
All | Decoupled Authentication was provided insufficient time to authenticate cardholder. ACS will not make attempt. |
26 |
All | Authentication attempted but not performed by the cardholder. |
80 |
Visa | Error connecting to ACS. |
80 |
Mastercard | Returned on all Data Only authentications. |
80 |
American Express | Safekey is not available for this type of card. |
81 |
Visa | ACS timed out. |
81 |
Mastercard | Challenge exemption accepted. |
82 |
Visa | Invalid response from ACS. |
82 |
Mastercard | Challenge Mandate requested but could not be performed. |
83 |
Mastercard, Visa | System Error response from ACS. |
84 |
Mastercard, Visa | Internal error while generating CAVV. |
85 |
Visa | VMID not eligible for requested program. |
86 |
Visa | Protocol version not supported by ACS |
87 |
Visa | Transaction is excluded from Attempts Processing (includes non- reloadable pre-paid cards and non-payments (NPA)). |
88 |
Visa | Requested program not supported by ACS. |
Authorize the payment
Use the 3D Secure 2 authentication produced by the MPI to authorize the payment with Adyen, or with another PSP. For information on authorizing with other PSPs, refer to their documentation.
For payment authorizations, keep the following in mind:
- You cannot reuse the authentication data across PSPs. For example, if you send a request to authorize the payment using the data to a PSP and it fails, you can not pass the same data to another PSP.
- Make sure to use the authentication data before it expires.
Authorize the payment with Adyen
To authorize the payment with Adyen, make a POST /payments request, including:
- The standard parameters required to make a payment. Make sure to pass the scheme that authenticated the transaction in the
paymentMethod.brandobject for co-badged cards. - The authentication data you received in the
threeDS2Resultobject of the /payments/details response. Send this data in the mpiData object. The fields you need to send in your request map to thethreeDS2Resultfields as shown in the table below. - For Cartes Bancaires, include the required additional fields from the
additionalDataand thethreeDS2RequestDataobjects. It is possible that you do not receive all Cartes Bancaires fields for each transaction, these fields are only required when they are returned in the /payments/details response that contains the authentication data.
| Parameter | Parameter in threeDS2Result |
Schemes |
|---|---|---|
| mpiData.authenticationResponse | transStatus |
All |
| mpiData.directoryResponse | transStatus |
All |
| mpiData.cavv | authenticationValue |
All |
| mpiData.dsTransID | dsTransID |
All |
| mpiData.eci | eci |
All |
| mpiData.threeDSVersion | messageVersion |
All |
| mpiData.challengeCancel | challengeCancel |
Cartes Bancaires |
| mpiData.riskScore | riskScore |
Cartes Bancaires |
| threeDS2RequestData.threeDSRequestorChallengeInd | threeDSRequestorChallengeInd |
Cartes Bancaires |
| additionalData.scaExemption | exemptionIndicator |
Cartes Bancaires |
additionalData.acquirerCode |
- | Cartes Bancaires. Set to AdyenCartesBancaires. |
You will receive an Authorised resultCode if the payment authorization was successful. See Result codes for a complete list of possible responses.
Authentication data expiry
Authentication data and cryptograms expire depending on card schemes. This means that you can no longer use the authentication data after it expires.
| Card scheme | Cryptogram validity |
|---|---|
| Amex | 45 days |
| CUP | 90 days |
| Mastercard | 95 days |
| Visa | 90 days |
Authentication not required reasons
You get an AuthenticationNotRequired result code in the /payments response when a transaction doesn't require 3D Secure authentication. If you get this code, you can proceed with the standard payment flow with Adyen, or another PSP.
Below is the list of possible authenticationNotRequiredReason values:
| Value | Description |
|---|---|
| MerchantInitiatedTransaction | The payment is a subsequent transaction initiated by the merchant. The initial payment has gone through SCA and the shopper has agreed to subsequent merchant-initiated transactions. |
| MOTO | Mail order and telephone order (MOTO) transactions are not electronic payments. They do not require SCA. |
| POS | The point-of-sale payment is made with a secure payment terminal. SCA applies to online payments where the shopper is not present. |
| AcquirerNotInEEA | The business is not located in the EEA, Monaco, or the UK. |
| IssuerNotInEEA | The issuer is not located in the EEA, Monaco, or the UK. |
| NonFinancial | Zero-value authorizations do not require SCA. |
| No matching 3ds configuration | Check the required parameters for your 3D Secure request to make sure they are correct. |
| Card not enrolled for 3DS | The card used for the transaction is not enrolled in 3D Secure. |
Testing
Use our Testing 3D Secure 2 authentication guide to test your integration.
In this flow, you receive an AUTHENTICATION webhook that informs you of the outcome of the authentication.