{"title":"One-time password (OTP) authentication","category":"default","creationDate":1571778840,"content":"<p>If you choose to enroll your Adyen-issued card in 3D Secure through the one-time password (OTP) flow, the cardholder goes through the following process when making an online payment:<\/p>\n<ol>\n<li>The cardholder is redirected to a 3D Secure authentication page. In this page, they must provide:\n<ul>\n<li>Their password.<\/li>\n<li>A one-time password (OTP) sent through SMS or email.<\/li>\n<\/ul><\/li>\n<li>The cardholder's credentials are validated against the authentication data that you set for the card.\n<ul>\n<li>If the authentication is successful, the payment is sent to Adyen for <a href=\"\/pt\/issuing\/authorisation\">authorisation<\/a>.<\/li>\n<li>If the authentication fails, the payment fails.<\/li>\n<\/ul><\/li>\n<li>If the payment authorisation is approved, the payment is completed.<\/li>\n<\/ol>\n<h2>Requirements<\/h2>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: left;\">Requirement<\/th>\n<th style=\"text-align: left;\">Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\"><strong>Integration type<\/strong><\/td>\n<td style=\"text-align: left;\"><a href=\"\/pt\/issuing\">Issuing<\/a><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\"><strong>API credential roles<\/strong><\/td>\n<td style=\"text-align: left;\">To enroll cards in 3D Secure, make sure your API credential has the <strong>Bank SCA Webservice Role<\/strong>. For more information, refer to <a href=\"\/pt\/issuing\/manage-access\/webservice-roles\">Roles for API credentials<\/a>.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>Add authentication data<\/h2>\n<p>To enroll the Adyen-issued card in 3D Secure, add the cardholder's mobile phone number, an email address, and a password when issuing cards.<\/p>\n<p>When creating the card, include the  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/balanceplatform\/latest\/post\/paymentInstruments#request-card-authentication\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">authentication<\/a> object containing:<\/p>\n<ul>\n<li>A <a href=\"https:\/\/docs.adyen.com\/api-explorer\/#\/balanceplatform\/latest\/post\/paymentInstruments__reqParam_card-authentication-password\" class=\"codeLabel external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">password<\/a>, which is required for both SMS and email OTP challenges.<\/li>\n<li>A  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/balanceplatform\/latest\/post\/paymentInstruments#request-card-authentication-phone\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">phone<\/a> object that includes the <code>number<\/code> and <code>type<\/code> set to <span translate=\"no\"><strong>mobile<\/strong><\/span>.<\/li>\n<li>An <a href=\"https:\/\/docs.adyen.com\/api-explorer\/balanceplatform\/latest\/post\/paymentInstruments#request-card-authentication-email\" class=\"codeLabel external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">email<\/a> address.<\/li>\n<\/ul>\n<p>By default, email OTP is a lower-priority method than an SMS OTP. However, in some countries, we always use email OTP. The OTP method is selected based on the cardholder's credentials and a predefined order of preference:<\/p>\n<ul>\n<li>If a phone number is available, the OTP is sent via SMS.<\/li>\n<li>If no phone number is provided, it falls back to email, if available.<\/li>\n<li>If neither contact method is provided, the transaction is declined, because the OTP cannot be sent.<\/li>\n<\/ul>\n<p>Using the contact details and password, Adyen enrolls the card in 3D Secure.<\/p>\n<p>Here is an example of how you can create a card with authentication data to support 3D Secure authentication.<\/p>\n<div data-component-wrapper=\"code-sample\">\n    <code-sample :title=\"'Create a card with authentication data for 3D Secure'\" :id=\"'create-card-3dsecure'\" :code-data=\"[{&quot;language&quot;:&quot;bash&quot;,&quot;tabTitle&quot;:&quot;curl&quot;,&quot;content&quot;:&quot;curl https:\\\/\\\/balanceplatform-api-test.adyen.com\\\/bcl\\\/v2\\\/paymentInstruments \\\\\\n-H 'x-api-key: ADYEN_BALANCE_PLATFORM_API_KEY' \\\\\\n-H 'content-type: application\\\/json' \\\\\\n-X POST \\\\\\n-d '{\\n    \\&quot;type\\&quot;: \\&quot;card\\&quot;,\\n    \\&quot;issuingCountryCode\\&quot;: \\&quot;NL\\&quot;,\\n    \\&quot;balanceAccountId\\&quot;: \\&quot;BA3227C223222B5CTBLR8BWJB\\&quot;,\\n    \\&quot;status\\&quot;: \\&quot;inactive\\&quot;,\\n    \\&quot;card\\&quot;: {\\n      \\&quot;formFactor\\&quot;: \\&quot;physical\\&quot;,\\n      \\&quot;brand\\&quot;: \\&quot;mc\\&quot;,\\n      \\&quot;brandVariant\\&quot;: \\&quot;mcdebit\\&quot;,\\n      \\&quot;cardholderName\\&quot;: \\&quot;Sam Hopper\\&quot;,\\n      \\&quot;authentication\\&quot;: {\\n        \\&quot;password\\&quot;: \\&quot;CARDUSERPASSWORD$1\\&quot;,\\n        \\&quot;email\\&quot; : \\&quot;S.Hopper@example.com\\&quot;,\\n        \\&quot;phone\\&quot;: {\\n          \\&quot;number\\&quot;: \\&quot;31611223344\\&quot;,\\n           \\&quot;type\\&quot;: \\&quot;Mobile\\&quot;\\n        }\\n    },\\n    \\&quot;deliveryContact\\&quot;: {\\n      \\&quot;address\\&quot;: {\\n        \\&quot;city\\&quot;: \\&quot;Amsterdam\\&quot;,\\n        \\&quot;country\\&quot;: \\&quot;NL\\&quot;,\\n        \\&quot;stateOrProvince\\&quot;: \\&quot;NH\\&quot;,\\n        \\&quot;line1\\&quot;: \\&quot;Simon Carmiggeltstraat\\&quot;,\\n        \\&quot;line2\\&quot;: \\&quot;5-60\\&quot;,\\n        \\&quot;postalCode\\&quot;: \\&quot;1011DJ\\&quot;\\n      },\\n      \\&quot;name\\&quot;: {\\n        \\&quot;firstName\\&quot;: \\&quot;Sam\\&quot;,\\n        \\&quot;lastName\\&quot;: \\&quot;Hopper\\&quot;\\n      }\\n    },\\n    \\&quot;configuration\\&quot;: {\\n      \\&quot;configurationProfileId\\&quot;: \\&quot;YOUR_CONFIGURATION_PROFILE_ID\\&quot;\\n    },\\n    \\&quot;description\\&quot;: \\&quot;YOUR_DESCRIPTION\\&quot;\\n  }\\n}'&quot;},{&quot;language&quot;:&quot;java&quot;,&quot;tabTitle&quot;:&quot;Java&quot;,&quot;content&quot;:&quot;\\\/\\\/ Adyen Java API Library v39.0.0\\nimport com.adyen.Client;\\nimport com.adyen.enums.Environment;\\nimport com.adyen.model.balanceplatform.*;\\nimport java.time.OffsetDateTime;\\nimport java.util.*;\\nimport com.adyen.service.balancePlatform.*;\\n\\nClient client = new Client(\\&quot;ADYEN_BALANCE_PLATFORM_API_KEY\\&quot;, Environment.TEST);\\n\\n\\\/\\\/ Create the request object(s)\\nDeliveryAddress deliveryAddress = new DeliveryAddress()\\n  .country(\\&quot;NL\\&quot;)\\n  .stateOrProvince(\\&quot;NH\\&quot;)\\n  .city(\\&quot;Amsterdam\\&quot;)\\n  .postalCode(\\&quot;1011DJ\\&quot;)\\n  .line2(\\&quot;5-60\\&quot;)\\n  .line1(\\&quot;Simon Carmiggeltstraat\\&quot;);\\n\\nName name = new Name()\\n  .firstName(\\&quot;Sam\\&quot;)\\n  .lastName(\\&quot;Hopper\\&quot;);\\n\\nPhone phone = new Phone()\\n  .number(\\&quot;31611223344\\&quot;)\\n  .type(Phone.TypeEnum.MOBILE);\\n\\nCardConfiguration cardConfiguration = new CardConfiguration()\\n  .configurationProfileId(\\&quot;YOUR_CONFIGURATION_PROFILE_ID\\&quot;);\\n\\nDeliveryContact deliveryContact = new DeliveryContact()\\n  .address(deliveryAddress)\\n  .name(name);\\n\\nAuthentication authentication = new Authentication()\\n  .password(\\&quot;CARDUSERPASSWORD$1\\&quot;)\\n  .phone(phone)\\n  .email(\\&quot;S.Hopper@example.com\\&quot;);\\n\\nCardInfo cardInfo = new CardInfo()\\n  .brandVariant(\\&quot;mcdebit\\&quot;)\\n  .configuration(cardConfiguration)\\n  .formFactor(CardInfo.FormFactorEnum.PHYSICAL)\\n  .cardholderName(\\&quot;Sam Hopper\\&quot;)\\n  .deliveryContact(deliveryContact)\\n  .brand(\\&quot;mc\\&quot;)\\n  .authentication(authentication);\\n\\nPaymentInstrumentInfo paymentInstrumentInfo = new PaymentInstrumentInfo()\\n  .balanceAccountId(\\&quot;BA3227C223222B5CTBLR8BWJB\\&quot;)\\n  .type(PaymentInstrumentInfo.TypeEnum.CARD)\\n  .issuingCountryCode(\\&quot;NL\\&quot;)\\n  .card(cardInfo)\\n  .status(PaymentInstrumentInfo.StatusEnum.INACTIVE);\\n\\n\\\/\\\/ Send the request\\nPaymentInstrumentsApi service = new PaymentInstrumentsApi(client);\\nPaymentInstrument response = service.createPaymentInstrument(paymentInstrumentInfo, 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 v28.1.0\\nuse Adyen\\\\Client;\\nuse Adyen\\\\Environment;\\nuse Adyen\\\\Model\\\\BalancePlatform\\\\CardConfiguration;\\nuse Adyen\\\\Model\\\\BalancePlatform\\\\DeliveryContact;\\nuse Adyen\\\\Model\\\\BalancePlatform\\\\Authentication;\\nuse Adyen\\\\Model\\\\BalancePlatform\\\\DeliveryAddress;\\nuse Adyen\\\\Model\\\\BalancePlatform\\\\Name;\\nuse Adyen\\\\Model\\\\BalancePlatform\\\\Phone;\\nuse Adyen\\\\Model\\\\BalancePlatform\\\\CardInfo;\\nuse Adyen\\\\Model\\\\BalancePlatform\\\\PaymentInstrumentInfo;\\nuse Adyen\\\\Service\\\\BalancePlatform\\\\PaymentInstrumentsApi;\\n\\n$client = new Client();\\n$client-&gt;setXApiKey(\\&quot;ADYEN_BALANCE_PLATFORM_API_KEY\\&quot;);\\n$client-&gt;setEnvironment(Environment::TEST);\\n\\n\\n\\\/\\\/ Create the request object(s)\\n$deliveryAddress = new DeliveryAddress();\\n$deliveryAddress\\n  -&gt;setCountry(\\&quot;NL\\&quot;)\\n  -&gt;setStateOrProvince(\\&quot;NH\\&quot;)\\n  -&gt;setCity(\\&quot;Amsterdam\\&quot;)\\n  -&gt;setPostalCode(\\&quot;1011DJ\\&quot;)\\n  -&gt;setLine2(\\&quot;5-60\\&quot;)\\n  -&gt;setLine1(\\&quot;Simon Carmiggeltstraat\\&quot;);\\n\\n$name = new Name();\\n$name\\n  -&gt;setFirstName(\\&quot;Sam\\&quot;)\\n  -&gt;setLastName(\\&quot;Hopper\\&quot;);\\n\\n$phone = new Phone();\\n$phone\\n  -&gt;setNumber(\\&quot;31611223344\\&quot;)\\n  -&gt;setType(\\&quot;Mobile\\&quot;);\\n\\n$cardConfiguration = new CardConfiguration();\\n$cardConfiguration\\n  -&gt;setConfigurationProfileId(\\&quot;YOUR_CONFIGURATION_PROFILE_ID\\&quot;);\\n\\n$deliveryContact = new DeliveryContact();\\n$deliveryContact\\n  -&gt;setAddress($deliveryAddress)\\n  -&gt;setName($name);\\n\\n$authentication = new Authentication();\\n$authentication\\n  -&gt;setPassword(\\&quot;CARDUSERPASSWORD\\\\$1\\&quot;)\\n  -&gt;setPhone($phone)\\n  -&gt;setEmail(\\&quot;S.Hopper@example.com\\&quot;);\\n\\n$cardInfo = new CardInfo();\\n$cardInfo\\n  -&gt;setBrandVariant(\\&quot;mcdebit\\&quot;)\\n  -&gt;setConfiguration($cardConfiguration)\\n  -&gt;setFormFactor(\\&quot;physical\\&quot;)\\n  -&gt;setCardholderName(\\&quot;Sam Hopper\\&quot;)\\n  -&gt;setDeliveryContact($deliveryContact)\\n  -&gt;setBrand(\\&quot;mc\\&quot;)\\n  -&gt;setAuthentication($authentication);\\n\\n$paymentInstrumentInfo = new PaymentInstrumentInfo();\\n$paymentInstrumentInfo\\n  -&gt;setBalanceAccountId(\\&quot;BA3227C223222B5CTBLR8BWJB\\&quot;)\\n  -&gt;setType(\\&quot;card\\&quot;)\\n  -&gt;setIssuingCountryCode(\\&quot;NL\\&quot;)\\n  -&gt;setCard($cardInfo)\\n  -&gt;setStatus(\\&quot;inactive\\&quot;);\\n\\n\\\/\\\/ Send the request\\n$service = new PaymentInstrumentsApi($client);\\n$response = $service-&gt;createPaymentInstrument($paymentInstrumentInfo);&quot;},{&quot;language&quot;:&quot;cs&quot;,&quot;tabTitle&quot;:&quot;C#&quot;,&quot;content&quot;:&quot;\\\/\\\/ Adyen .net API Library v32.0.1\\nusing Adyen;\\nusing Environment = Adyen.Model.Environment;\\nusing Adyen.Model;\\nusing Adyen.Model.BalancePlatform;\\nusing Adyen.Service.BalancePlatform;\\n\\nvar config = new Config()\\n{\\n    XApiKey = \\&quot;ADYEN_BALANCE_PLATFORM_API_KEY\\&quot;,\\n    Environment = Environment.Test\\n};\\nvar client = new Client(config);\\n\\n\\\/\\\/ Create the request object(s)\\nDeliveryAddress deliveryAddress = new DeliveryAddress\\n{\\n  Country = \\&quot;NL\\&quot;,\\n  StateOrProvince = \\&quot;NH\\&quot;,\\n  City = \\&quot;Amsterdam\\&quot;,\\n  PostalCode = \\&quot;1011DJ\\&quot;,\\n  Line2 = \\&quot;5-60\\&quot;,\\n  Line1 = \\&quot;Simon Carmiggeltstraat\\&quot;\\n};\\n\\nName name = new Name\\n{\\n  FirstName = \\&quot;Sam\\&quot;,\\n  LastName = \\&quot;Hopper\\&quot;\\n};\\n\\nPhone phone = new Phone\\n{\\n  Number = \\&quot;31611223344\\&quot;,\\n  Type = Phone.TypeEnum.Mobile\\n};\\n\\nCardConfiguration cardConfiguration = new CardConfiguration\\n{\\n  ConfigurationProfileId = \\&quot;YOUR_CONFIGURATION_PROFILE_ID\\&quot;\\n};\\n\\nDeliveryContact deliveryContact = new DeliveryContact\\n{\\n  Address = deliveryAddress,\\n  Name = name\\n};\\n\\nAuthentication authentication = new Authentication\\n{\\n  Password = \\&quot;CARDUSERPASSWORD$1\\&quot;,\\n  Phone = phone,\\n  Email = \\&quot;S.Hopper@example.com\\&quot;\\n};\\n\\nCardInfo cardInfo = new CardInfo\\n{\\n  BrandVariant = \\&quot;mcdebit\\&quot;,\\n  Configuration = cardConfiguration,\\n  FormFactor = CardInfo.FormFactorEnum.Physical,\\n  CardholderName = \\&quot;Sam Hopper\\&quot;,\\n  DeliveryContact = deliveryContact,\\n  Brand = \\&quot;mc\\&quot;,\\n  Authentication = authentication\\n};\\n\\nPaymentInstrumentInfo paymentInstrumentInfo = new PaymentInstrumentInfo\\n{\\n  BalanceAccountId = \\&quot;BA3227C223222B5CTBLR8BWJB\\&quot;,\\n  Type = PaymentInstrumentInfo.TypeEnum.Card,\\n  IssuingCountryCode = \\&quot;NL\\&quot;,\\n  Card = cardInfo,\\n  Status = PaymentInstrumentInfo.StatusEnum.Inactive\\n};\\n\\n\\\/\\\/ Send the request\\nvar service = new PaymentInstrumentsService(client);\\nvar response = service.CreatePaymentInstrument(paymentInstrumentInfo);&quot;},{&quot;language&quot;:&quot;js&quot;,&quot;tabTitle&quot;:&quot;NodeJS (JavaScript)&quot;,&quot;content&quot;:&quot;\\\/\\\/ Adyen Node API Library v28.0.0\\nconst { Client, BalancePlatformAPI } = require('@adyen\\\/api-library');\\n\\nconst client = new Client({ apiKey: \\&quot;ADYEN_BALANCE_PLATFORM_API_KEY\\&quot;, environment: \\&quot;TEST\\&quot; });\\n\\n\\\/\\\/ Create the request object(s)\\nconst paymentInstrumentInfo = {\\n  type: \\&quot;card\\&quot;,\\n  issuingCountryCode: \\&quot;NL\\&quot;,\\n  balanceAccountId: \\&quot;BA3227C223222B5CTBLR8BWJB\\&quot;,\\n  status: \\&quot;inactive\\&quot;,\\n  card: {\\n    formFactor: \\&quot;physical\\&quot;,\\n    brand: \\&quot;mc\\&quot;,\\n    brandVariant: \\&quot;mcdebit\\&quot;,\\n    cardholderName: \\&quot;Sam Hopper\\&quot;,\\n    authentication: {\\n      password: \\&quot;CARDUSERPASSWORD$1\\&quot;,\\n      email: \\&quot;S.Hopper@example.com\\&quot;,\\n      phone: {\\n        number: \\&quot;31611223344\\&quot;,\\n        type: \\&quot;Mobile\\&quot;\\n      }\\n    },\\n    deliveryContact: {\\n      address: {\\n        city: \\&quot;Amsterdam\\&quot;,\\n        country: \\&quot;NL\\&quot;,\\n        stateOrProvince: \\&quot;NH\\&quot;,\\n        line1: \\&quot;Simon Carmiggeltstraat\\&quot;,\\n        line2: \\&quot;5-60\\&quot;,\\n        postalCode: \\&quot;1011DJ\\&quot;\\n      },\\n      name: {\\n        firstName: \\&quot;Sam\\&quot;,\\n        lastName: \\&quot;Hopper\\&quot;\\n      }\\n    },\\n    configuration: {\\n      configurationProfileId: \\&quot;YOUR_CONFIGURATION_PROFILE_ID\\&quot;\\n    },\\n    description: \\&quot;YOUR_DESCRIPTION\\&quot;\\n  }\\n}\\n\\n\\\/\\\/ Send the request\\nconst balancePlatformAPI = new BalancePlatformAPI(client);\\nconst response = balancePlatformAPI.PaymentInstrumentsApi.createPaymentInstrument(paymentInstrumentInfo);&quot;},{&quot;language&quot;:&quot;go&quot;,&quot;tabTitle&quot;:&quot;Go&quot;,&quot;content&quot;:&quot;\\\/\\\/ Adyen Go API Library v21.0.0\\nimport (\\n  \\&quot;context\\&quot;\\n  \\&quot;github.com\\\/adyen\\\/adyen-go-api-library\\\/v21\\\/src\\\/common\\&quot;\\n  \\&quot;github.com\\\/adyen\\\/adyen-go-api-library\\\/v21\\\/src\\\/adyen\\&quot;\\n  \\&quot;github.com\\\/adyen\\\/adyen-go-api-library\\\/v21\\\/src\\\/balancePlatform\\&quot;\\n)\\nclient := adyen.NewClient(&amp;common.Config{\\n  ApiKey:      \\&quot;ADYEN_BALANCE_PLATFORM_API_KEY\\&quot;,\\n  Environment: common.TestEnv,\\n})\\n\\n\\\/\\\/ Create the request object(s)\\ndeliveryAddress := balancePlatform.DeliveryAddress{\\n  Country: \\&quot;NL\\&quot;,\\n  StateOrProvince: common.PtrString(\\&quot;NH\\&quot;),\\n  City: common.PtrString(\\&quot;Amsterdam\\&quot;),\\n  PostalCode: common.PtrString(\\&quot;1011DJ\\&quot;),\\n  Line2: common.PtrString(\\&quot;5-60\\&quot;),\\n  Line1: common.PtrString(\\&quot;Simon Carmiggeltstraat\\&quot;),\\n}\\n\\nname := balancePlatform.Name{\\n  FirstName: \\&quot;Sam\\&quot;,\\n  LastName: \\&quot;Hopper\\&quot;,\\n}\\n\\nphone := balancePlatform.Phone{\\n  Number: \\&quot;31611223344\\&quot;,\\n  Type: \\&quot;Mobile\\&quot;,\\n}\\n\\ncardConfiguration := balancePlatform.CardConfiguration{\\n  ConfigurationProfileId: \\&quot;YOUR_CONFIGURATION_PROFILE_ID\\&quot;,\\n}\\n\\ndeliveryContact := balancePlatform.DeliveryContact{\\n  Address: deliveryAddress,\\n  Name: name,\\n}\\n\\nauthentication := balancePlatform.Authentication{\\n  Password: common.PtrString(\\&quot;CARDUSERPASSWORD$1\\&quot;),\\n  Phone: &amp;phone,\\n  Email: common.PtrString(\\&quot;S.Hopper@example.com\\&quot;),\\n}\\n\\ncardInfo := balancePlatform.CardInfo{\\n  BrandVariant: \\&quot;mcdebit\\&quot;,\\n  Configuration: &amp;cardConfiguration,\\n  FormFactor: \\&quot;physical\\&quot;,\\n  CardholderName: \\&quot;Sam Hopper\\&quot;,\\n  DeliveryContact: &amp;deliveryContact,\\n  Brand: \\&quot;mc\\&quot;,\\n  Authentication: &amp;authentication,\\n}\\n\\npaymentInstrumentInfo := balancePlatform.PaymentInstrumentInfo{\\n  BalanceAccountId: \\&quot;BA3227C223222B5CTBLR8BWJB\\&quot;,\\n  Type: \\&quot;card\\&quot;,\\n  IssuingCountryCode: \\&quot;NL\\&quot;,\\n  Card: &amp;cardInfo,\\n  Status: common.PtrString(\\&quot;inactive\\&quot;),\\n}\\n\\n\\\/\\\/ Send the request\\nservice := client.BalancePlatform()\\nreq := service.PaymentInstrumentsApi.CreatePaymentInstrumentInput().PaymentInstrumentInfo(paymentInstrumentInfo)\\nres, httpRes, err := service.PaymentInstrumentsApi.CreatePaymentInstrument(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.5.1\\nimport Adyen\\n\\nadyen = Adyen.Adyen()\\nadyen.client.xapikey = \\&quot;ADYEN_BALANCE_PLATFORM_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;type\\&quot;: \\&quot;card\\&quot;,\\n  \\&quot;issuingCountryCode\\&quot;: \\&quot;NL\\&quot;,\\n  \\&quot;balanceAccountId\\&quot;: \\&quot;BA3227C223222B5CTBLR8BWJB\\&quot;,\\n  \\&quot;status\\&quot;: \\&quot;inactive\\&quot;,\\n  \\&quot;card\\&quot;: {\\n    \\&quot;formFactor\\&quot;: \\&quot;physical\\&quot;,\\n    \\&quot;brand\\&quot;: \\&quot;mc\\&quot;,\\n    \\&quot;brandVariant\\&quot;: \\&quot;mcdebit\\&quot;,\\n    \\&quot;cardholderName\\&quot;: \\&quot;Sam Hopper\\&quot;,\\n    \\&quot;authentication\\&quot;: {\\n      \\&quot;password\\&quot;: \\&quot;CARDUSERPASSWORD$1\\&quot;,\\n      \\&quot;email\\&quot;: \\&quot;S.Hopper@example.com\\&quot;,\\n      \\&quot;phone\\&quot;: {\\n        \\&quot;number\\&quot;: \\&quot;31611223344\\&quot;,\\n        \\&quot;type\\&quot;: \\&quot;Mobile\\&quot;\\n      }\\n    },\\n    \\&quot;deliveryContact\\&quot;: {\\n      \\&quot;address\\&quot;: {\\n        \\&quot;city\\&quot;: \\&quot;Amsterdam\\&quot;,\\n        \\&quot;country\\&quot;: \\&quot;NL\\&quot;,\\n        \\&quot;stateOrProvince\\&quot;: \\&quot;NH\\&quot;,\\n        \\&quot;line1\\&quot;: \\&quot;Simon Carmiggeltstraat\\&quot;,\\n        \\&quot;line2\\&quot;: \\&quot;5-60\\&quot;,\\n        \\&quot;postalCode\\&quot;: \\&quot;1011DJ\\&quot;\\n      },\\n      \\&quot;name\\&quot;: {\\n        \\&quot;firstName\\&quot;: \\&quot;Sam\\&quot;,\\n        \\&quot;lastName\\&quot;: \\&quot;Hopper\\&quot;\\n      }\\n    },\\n    \\&quot;configuration\\&quot;: {\\n      \\&quot;configurationProfileId\\&quot;: \\&quot;YOUR_CONFIGURATION_PROFILE_ID\\&quot;\\n    },\\n    \\&quot;description\\&quot;: \\&quot;YOUR_DESCRIPTION\\&quot;\\n  }\\n}\\n\\n# Send the request\\nresult = adyen.balancePlatform.payment_instruments_api.create_payment_instrument(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.3.0\\nrequire \\&quot;adyen-ruby-api-library\\&quot;\\n\\nadyen = Adyen::Client.new\\nadyen.api_key = 'ADYEN_BALANCE_PLATFORM_API_KEY'\\nadyen.env = :test # Set to \\&quot;live\\&quot; for live environment\\n\\n# Create the request object(s)\\nrequest_body = {\\n  :type =&gt; 'card',\\n  :issuingCountryCode =&gt; 'NL',\\n  :balanceAccountId =&gt; 'BA3227C223222B5CTBLR8BWJB',\\n  :status =&gt; 'inactive',\\n  :card =&gt; {\\n    :formFactor =&gt; 'physical',\\n    :brand =&gt; 'mc',\\n    :brandVariant =&gt; 'mcdebit',\\n    :cardholderName =&gt; 'Sam Hopper',\\n    :authentication =&gt; {\\n      :password =&gt; 'CARDUSERPASSWORD$1',\\n      :email =&gt; 'S.Hopper@example.com',\\n      :phone =&gt; {\\n        :number =&gt; '31611223344',\\n        :type =&gt; 'Mobile'\\n      }\\n    },\\n    :deliveryContact =&gt; {\\n      :address =&gt; {\\n        :city =&gt; 'Amsterdam',\\n        :country =&gt; 'NL',\\n        :stateOrProvince =&gt; 'NH',\\n        :line1 =&gt; 'Simon Carmiggeltstraat',\\n        :line2 =&gt; '5-60',\\n        :postalCode =&gt; '1011DJ'\\n      },\\n      :name =&gt; {\\n        :firstName =&gt; 'Sam',\\n        :lastName =&gt; 'Hopper'\\n      }\\n    },\\n    :configuration =&gt; {\\n      :configurationProfileId =&gt; 'YOUR_CONFIGURATION_PROFILE_ID'\\n    },\\n    :description =&gt; 'YOUR_DESCRIPTION'\\n  }\\n}\\n\\n# Send the request\\nresult = adyen.balancePlatform.payment_instruments_api.create_payment_instrument(request_body)&quot;},{&quot;language&quot;:&quot;ts&quot;,&quot;tabTitle&quot;:&quot;NodeJS (TypeScript)&quot;,&quot;content&quot;:&quot;\\\/\\\/ Adyen Node API Library v28.0.0\\nimport { Client, BalancePlatformAPI, Types } from \\&quot;@adyen\\\/api-library\\&quot;;\\n\\nconst client = new Client({ apiKey: \\&quot;ADYEN_BALANCE_PLATFORM_API_KEY\\&quot;, environment: \\&quot;TEST\\&quot; });\\n\\n\\\/\\\/ Create the request object(s)\\nconst deliveryAddress: Types.balancePlatform.DeliveryAddress = {\\n  country: \\&quot;NL\\&quot;,\\n  stateOrProvince: \\&quot;NH\\&quot;,\\n  city: \\&quot;Amsterdam\\&quot;,\\n  postalCode: \\&quot;1011DJ\\&quot;,\\n  line2: \\&quot;5-60\\&quot;,\\n  line1: \\&quot;Simon Carmiggeltstraat\\&quot;\\n};\\n\\nconst name: Types.balancePlatform.Name = {\\n  firstName: \\&quot;Sam\\&quot;,\\n  lastName: \\&quot;Hopper\\&quot;\\n};\\n\\nconst phone: Types.balancePlatform.Phone = {\\n  number: \\&quot;31611223344\\&quot;,\\n  type: Types.balancePlatform.Phone.TypeEnum.Mobile\\n};\\n\\nconst cardConfiguration: Types.balancePlatform.CardConfiguration = {\\n  configurationProfileId: \\&quot;YOUR_CONFIGURATION_PROFILE_ID\\&quot;\\n};\\n\\nconst deliveryContact: Types.balancePlatform.DeliveryContact = {\\n  address: deliveryAddress,\\n  name: name\\n};\\n\\nconst authentication: Types.balancePlatform.Authentication = {\\n  password: \\&quot;CARDUSERPASSWORD$1\\&quot;,\\n  phone: phone,\\n  email: \\&quot;S.Hopper@example.com\\&quot;\\n};\\n\\nconst cardInfo: Types.balancePlatform.CardInfo = {\\n  brandVariant: \\&quot;mcdebit\\&quot;,\\n  configuration: cardConfiguration,\\n  formFactor: Types.balancePlatform.CardInfo.FormFactorEnum.Physical,\\n  cardholderName: \\&quot;Sam Hopper\\&quot;,\\n  deliveryContact: deliveryContact,\\n  brand: \\&quot;mc\\&quot;,\\n  authentication: authentication\\n};\\n\\nconst paymentInstrumentInfo: Types.balancePlatform.PaymentInstrumentInfo = {\\n  balanceAccountId: \\&quot;BA3227C223222B5CTBLR8BWJB\\&quot;,\\n  type: Types.balancePlatform.PaymentInstrumentInfo.TypeEnum.Card,\\n  issuingCountryCode: \\&quot;NL\\&quot;,\\n  card: cardInfo,\\n  status: Types.balancePlatform.PaymentInstrumentInfo.StatusEnum.Inactive\\n};\\n\\n\\\/\\\/ Send the request\\nconst balancePlatformAPI = new BalancePlatformAPI(client);\\nconst response = balancePlatformAPI.PaymentInstrumentsApi.createPaymentInstrument(paymentInstrumentInfo);&quot;}]\" :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<h2>Update authentication data<\/h2>\n<p>You can add the  <a href=\"https:\/\/docs.adyen.com\/api-explorer\/balanceplatform\/latest\/post\/paymentInstruments#request-card-authentication\" class=\"codeLabel  external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">authentication<\/a> object at a later time or update the cardholder's phone number, password or email address by sending a PATCH <a href=\"https:\/\/docs.adyen.com\/api-explorer\/#\/balanceplatform\/latest\/patch\/paymentInstruments\/{id}\" class=\"codeLabel external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">\/paymentInstruments\/{id}<\/a> request.<\/p>\n<div data-component-wrapper=\"code-sample\">\n    <code-sample :title=\"'Add or change authentication data of existing card'\" :id=\"'add-auth-data'\" :code-data=\"[{&quot;language&quot;:&quot;bash&quot;,&quot;tabTitle&quot;:&quot;curl&quot;,&quot;content&quot;:&quot;curl https:\\\/\\\/balanceplatform-api-test.adyen.com\\\/bcl\\\/v2\\\/paymentInstruments\\\/{id} \\\\\\n-H 'x-api-key: ADYEN_BALANCE_PLATFORM_API_KEY' \\\\\\n-H 'content-type: application\\\/json' \\\\\\n-X PATCH \\\\\\n-d '{\\n    \\&quot;card\\&quot;: {\\n      \\&quot;authentication\\&quot;: {\\n        \\&quot;password\\&quot;: \\&quot;CARDUSERPASSWORD$1\\&quot;,\\n        \\&quot;email\\&quot; : \\&quot;S.Hopper@example.com\\&quot;,\\n        \\&quot;phone\\&quot;: {\\n            \\&quot;number\\&quot;: \\&quot;31611223344\\&quot;,\\n            \\&quot;type\\&quot;: \\&quot;Mobile\\&quot;\\n        }\\n      }\\n    }\\n}'&quot;},{&quot;language&quot;:&quot;java&quot;,&quot;tabTitle&quot;:&quot;Java&quot;,&quot;content&quot;:&quot;\\\/\\\/ Adyen Java API Library v39.0.0\\nimport com.adyen.Client;\\nimport com.adyen.enums.Environment;\\nimport com.adyen.model.balanceplatform.*;\\nimport java.time.OffsetDateTime;\\nimport java.util.*;\\nimport com.adyen.service.balancePlatform.*;\\n\\nClient client = new Client(\\&quot;ADYEN_BALANCE_PLATFORM_API_KEY\\&quot;, Environment.TEST);\\n\\n\\\/\\\/ Create the request object(s)\\nPhone phone = new Phone()\\n  .number(\\&quot;31611223344\\&quot;)\\n  .type(Phone.TypeEnum.MOBILE);\\n\\nAuthentication authentication = new Authentication()\\n  .password(\\&quot;CARDUSERPASSWORD$1\\&quot;)\\n  .phone(phone)\\n  .email(\\&quot;S.Hopper@example.com\\&quot;);\\n\\nCardInfo cardInfo = new CardInfo()\\n  .authentication(authentication);\\n\\nPaymentInstrumentUpdateRequest paymentInstrumentUpdateRequest = new PaymentInstrumentUpdateRequest()\\n  .card(cardInfo);\\n\\n\\\/\\\/ Send the request\\nPaymentInstrumentsApi service = new PaymentInstrumentsApi(client);\\nUpdatePaymentInstrument response = service.updatePaymentInstrument(\\&quot;id\\&quot;, paymentInstrumentUpdateRequest, 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 v28.1.0\\nuse Adyen\\\\Client;\\nuse Adyen\\\\Environment;\\nuse Adyen\\\\Model\\\\BalancePlatform\\\\Phone;\\nuse Adyen\\\\Model\\\\BalancePlatform\\\\Authentication;\\nuse Adyen\\\\Model\\\\BalancePlatform\\\\CardInfo;\\nuse Adyen\\\\Model\\\\BalancePlatform\\\\PaymentInstrumentUpdateRequest;\\nuse Adyen\\\\Service\\\\BalancePlatform\\\\PaymentInstrumentsApi;\\n\\n$client = new Client();\\n$client-&gt;setXApiKey(\\&quot;ADYEN_BALANCE_PLATFORM_API_KEY\\&quot;);\\n$client-&gt;setEnvironment(Environment::TEST);\\n\\n\\n\\\/\\\/ Create the request object(s)\\n$phone = new Phone();\\n$phone\\n  -&gt;setNumber(\\&quot;31611223344\\&quot;)\\n  -&gt;setType(\\&quot;Mobile\\&quot;);\\n\\n$authentication = new Authentication();\\n$authentication\\n  -&gt;setPassword(\\&quot;CARDUSERPASSWORD\\\\$1\\&quot;)\\n  -&gt;setPhone($phone)\\n  -&gt;setEmail(\\&quot;S.Hopper@example.com\\&quot;);\\n\\n$cardInfo = new CardInfo();\\n$cardInfo\\n  -&gt;setAuthentication($authentication);\\n\\n$paymentInstrumentUpdateRequest = new PaymentInstrumentUpdateRequest();\\n$paymentInstrumentUpdateRequest\\n  -&gt;setCard($cardInfo);\\n\\n\\\/\\\/ Send the request\\n$service = new PaymentInstrumentsApi($client);\\n$response = $service-&gt;updatePaymentInstrument('id', $paymentInstrumentUpdateRequest);&quot;},{&quot;language&quot;:&quot;cs&quot;,&quot;tabTitle&quot;:&quot;C#&quot;,&quot;content&quot;:&quot;\\\/\\\/ Adyen .net API Library v32.0.1\\nusing Adyen;\\nusing Environment = Adyen.Model.Environment;\\nusing Adyen.Model;\\nusing Adyen.Model.BalancePlatform;\\nusing Adyen.Service.BalancePlatform;\\n\\nvar config = new Config()\\n{\\n    XApiKey = \\&quot;ADYEN_BALANCE_PLATFORM_API_KEY\\&quot;,\\n    Environment = Environment.Test\\n};\\nvar client = new Client(config);\\n\\n\\\/\\\/ Create the request object(s)\\nPhone phone = new Phone\\n{\\n  Number = \\&quot;31611223344\\&quot;,\\n  Type = Phone.TypeEnum.Mobile\\n};\\n\\nAuthentication authentication = new Authentication\\n{\\n  Password = \\&quot;CARDUSERPASSWORD$1\\&quot;,\\n  Phone = phone,\\n  Email = \\&quot;S.Hopper@example.com\\&quot;\\n};\\n\\nCardInfo cardInfo = new CardInfo\\n{\\n  Authentication = authentication\\n};\\n\\nPaymentInstrumentUpdateRequest paymentInstrumentUpdateRequest = new PaymentInstrumentUpdateRequest\\n{\\n  Card = cardInfo\\n};\\n\\n\\\/\\\/ Send the request\\nvar service = new PaymentInstrumentsService(client);\\nvar response = service.UpdatePaymentInstrument(\\&quot;id\\&quot;, paymentInstrumentUpdateRequest);&quot;},{&quot;language&quot;:&quot;js&quot;,&quot;tabTitle&quot;:&quot;NodeJS (JavaScript)&quot;,&quot;content&quot;:&quot;\\\/\\\/ Adyen Node API Library v28.0.0\\nconst { Client, BalancePlatformAPI } = require('@adyen\\\/api-library');\\n\\nconst client = new Client({ apiKey: \\&quot;ADYEN_BALANCE_PLATFORM_API_KEY\\&quot;, environment: \\&quot;TEST\\&quot; });\\n\\n\\\/\\\/ Create the request object(s)\\nconst paymentInstrumentUpdateRequest = {\\n  card: {\\n    authentication: {\\n      password: \\&quot;CARDUSERPASSWORD$1\\&quot;,\\n      email: \\&quot;S.Hopper@example.com\\&quot;,\\n      phone: {\\n        number: \\&quot;31611223344\\&quot;,\\n        type: \\&quot;Mobile\\&quot;\\n      }\\n    }\\n  }\\n}\\n\\n\\\/\\\/ Send the request\\nconst balancePlatformAPI = new BalancePlatformAPI(client);\\nconst response = balancePlatformAPI.PaymentInstrumentsApi.updatePaymentInstrument(\\&quot;id\\&quot;, paymentInstrumentUpdateRequest);&quot;},{&quot;language&quot;:&quot;go&quot;,&quot;tabTitle&quot;:&quot;Go&quot;,&quot;content&quot;:&quot;\\\/\\\/ Adyen Go API Library v21.0.0\\nimport (\\n  \\&quot;context\\&quot;\\n  \\&quot;github.com\\\/adyen\\\/adyen-go-api-library\\\/v21\\\/src\\\/common\\&quot;\\n  \\&quot;github.com\\\/adyen\\\/adyen-go-api-library\\\/v21\\\/src\\\/adyen\\&quot;\\n  \\&quot;github.com\\\/adyen\\\/adyen-go-api-library\\\/v21\\\/src\\\/balancePlatform\\&quot;\\n)\\nclient := adyen.NewClient(&amp;common.Config{\\n  ApiKey:      \\&quot;ADYEN_BALANCE_PLATFORM_API_KEY\\&quot;,\\n  Environment: common.TestEnv,\\n})\\n\\n\\\/\\\/ Create the request object(s)\\nphone := balancePlatform.Phone{\\n  Number: \\&quot;31611223344\\&quot;,\\n  Type: \\&quot;Mobile\\&quot;,\\n}\\n\\nauthentication := balancePlatform.Authentication{\\n  Password: common.PtrString(\\&quot;CARDUSERPASSWORD$1\\&quot;),\\n  Phone: &amp;phone,\\n  Email: common.PtrString(\\&quot;S.Hopper@example.com\\&quot;),\\n}\\n\\ncardInfo := balancePlatform.CardInfo{\\n  Authentication: &amp;authentication,\\n}\\n\\npaymentInstrumentUpdateRequest := balancePlatform.PaymentInstrumentUpdateRequest{\\n  Card: &amp;cardInfo,\\n}\\n\\n\\\/\\\/ Send the request\\nservice := client.BalancePlatform()\\nreq := service.PaymentInstrumentsApi.UpdatePaymentInstrumentInput(\\&quot;id\\&quot;).PaymentInstrumentUpdateRequest(paymentInstrumentUpdateRequest)\\nres, httpRes, err := service.PaymentInstrumentsApi.UpdatePaymentInstrument(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.5.1\\nimport Adyen\\n\\nadyen = Adyen.Adyen()\\nadyen.client.xapikey = \\&quot;ADYEN_BALANCE_PLATFORM_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;card\\&quot;: {\\n    \\&quot;authentication\\&quot;: {\\n      \\&quot;password\\&quot;: \\&quot;CARDUSERPASSWORD$1\\&quot;,\\n      \\&quot;email\\&quot;: \\&quot;S.Hopper@example.com\\&quot;,\\n      \\&quot;phone\\&quot;: {\\n        \\&quot;number\\&quot;: \\&quot;31611223344\\&quot;,\\n        \\&quot;type\\&quot;: \\&quot;Mobile\\&quot;\\n      }\\n    }\\n  }\\n}\\n\\n# Send the request\\nresult = adyen.balancePlatform.payment_instruments_api.update_payment_instrument(request=json_request, id=\\&quot;id\\&quot;)&quot;},{&quot;language&quot;:&quot;rb&quot;,&quot;tabTitle&quot;:&quot;Ruby&quot;,&quot;content&quot;:&quot;# Adyen Ruby API Library v10.3.0\\nrequire \\&quot;adyen-ruby-api-library\\&quot;\\n\\nadyen = Adyen::Client.new\\nadyen.api_key = 'ADYEN_BALANCE_PLATFORM_API_KEY'\\nadyen.env = :test # Set to \\&quot;live\\&quot; for live environment\\n\\n# Create the request object(s)\\nrequest_body = {\\n  :card =&gt; {\\n    :authentication =&gt; {\\n      :password =&gt; 'CARDUSERPASSWORD$1',\\n      :email =&gt; 'S.Hopper@example.com',\\n      :phone =&gt; {\\n        :number =&gt; '31611223344',\\n        :type =&gt; 'Mobile'\\n      }\\n    }\\n  }\\n}\\n\\n# Send the request\\nresult = adyen.balancePlatform.payment_instruments_api.update_payment_instrument(request_body, 'id')&quot;},{&quot;language&quot;:&quot;ts&quot;,&quot;tabTitle&quot;:&quot;NodeJS (TypeScript)&quot;,&quot;content&quot;:&quot;\\\/\\\/ Adyen Node API Library v28.0.0\\nimport { Client, BalancePlatformAPI, Types } from \\&quot;@adyen\\\/api-library\\&quot;;\\n\\nconst client = new Client({ apiKey: \\&quot;ADYEN_BALANCE_PLATFORM_API_KEY\\&quot;, environment: \\&quot;TEST\\&quot; });\\n\\n\\\/\\\/ Create the request object(s)\\nconst phone: Types.balancePlatform.Phone = {\\n  number: \\&quot;31611223344\\&quot;,\\n  type: Types.balancePlatform.Phone.TypeEnum.Mobile\\n};\\n\\nconst authentication: Types.balancePlatform.Authentication = {\\n  password: \\&quot;CARDUSERPASSWORD$1\\&quot;,\\n  phone: phone,\\n  email: \\&quot;S.Hopper@example.com\\&quot;\\n};\\n\\nconst cardInfo: Types.balancePlatform.CardInfo = {\\n  authentication: authentication\\n};\\n\\nconst paymentInstrumentUpdateRequest: Types.balancePlatform.PaymentInstrumentUpdateRequest = {\\n  card: cardInfo\\n};\\n\\n\\\/\\\/ Send the request\\nconst balancePlatformAPI = new BalancePlatformAPI(client);\\nconst response = balancePlatformAPI.PaymentInstrumentsApi.updatePaymentInstrument(\\&quot;id\\&quot;, paymentInstrumentUpdateRequest);&quot;}]\" :enable-copy-link-to-code-block=\"true\" :code-sample-card-size=\"'fullsize'\"><\/code-sample>\n<\/div>\n<h2>Get updates<\/h2>\n<p>You can use the cardholder authenticated webhook to get notified about the status and outcome of the cardholder's 3D secure authentication. Regardless of outcome of the authentication process, we send the <a href=\"https:\/\/docs.adyen.com\/api-explorer\/acs-webhook\/latest\/post\/balancePlatform.authentication.created\" class=\"codeLabel external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">balancePlatform.authentication.created<\/a>\u00a0webhook.<\/p>\n<p>To keep track of webhooks, make sure that your server can <a href=\"\/pt\/development-resources\/webhooks\/configure-and-manage\">receive and accept webhooks<\/a>.<\/p>\n<p>The <a href=\"https:\/\/docs.adyen.com\/api-explorer\/acs-webhook\/latest\/post\/balancePlatform.authentication.created\" class=\"codeLabel external-link no-image\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">balancePlatform.authentication.created<\/a> webhook contains the following information.<\/p>\n\n<div id=\"tabn2u5G\">\n    <div data-component-wrapper=\"tabs\">\n        <tabs\n                        :items=\"[{&quot;title&quot;:&quot;Authenticated (frictionless flow)&quot;,&quot;content&quot;:&quot;\\n&lt;div data-component-wrapper=\\&quot;code-sample\\&quot;&gt;\\n    &lt;code-sample :title=\\&quot;&#039;Successful authentication via the frictionless flow&#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;data\\\\\\&quot;: {\\\\n    \\\\\\&quot;authentication\\\\\\&quot;: {\\\\n      \\\\\\&quot;acsTransID\\\\\\&quot;: \\\\\\&quot;6a4c1709-a42e-4c7f-96c7-1043adacfc97\\\\\\&quot;,\\\\n      \\\\\\&quot;challengeIndicator\\\\\\&quot;: \\\\\\&quot;01\\\\\\&quot;,\\\\n      \\\\\\&quot;createdAt\\\\\\&quot;: \\\\\\&quot;2022-12-22T15:45:03+01:00\\\\\\&quot;,\\\\n      \\\\\\&quot;deviceChannel\\\\\\&quot;: \\\\\\&quot;app\\\\\\&quot;,\\\\n      \\\\\\&quot;dsTransID\\\\\\&quot;: \\\\\\&quot;a3b86754-444d-46ca-95a2-ada351d3f42c\\\\\\&quot;,\\\\n      \\\\\\&quot;exemptionIndicator\\\\\\&quot;: \\\\\\&quot;lowValue\\\\\\&quot;,\\\\n      \\\\\\&quot;inPSD2scope\\\\\\&quot;: true,\\\\n      \\\\\\&quot;messageCategory\\\\\\&quot;: \\\\\\&quot;payment\\\\\\&quot;,\\\\n      \\\\\\&quot;messageVersion\\\\\\&quot;: \\\\\\&quot;2.2.0\\\\\\&quot;,\\\\n      \\\\\\&quot;riskScore\\\\\\&quot;: 0,\\\\n      \\\\\\&quot;threeDSServerTransID\\\\\\&quot;: \\\\\\&quot;6edcc246-23ee-4e94-ac5d-8ae620bea7d9\\\\\\&quot;,\\\\n      \\\\\\&quot;transStatus\\\\\\&quot;: \\\\\\&quot;Y\\\\\\&quot;,\\\\n      \\\\\\&quot;type\\\\\\&quot;: \\\\\\&quot;frictionless\\\\\\&quot;\\\\n    },\\\\n    \\\\\\&quot;balancePlatform\\\\\\&quot;: \\\\\\&quot;YOUR_BALANCE_PLATFORM\\\\\\&quot;,\\\\n    \\\\\\&quot;id\\\\\\&quot;: \\\\\\&quot;497f6eca-6276-4993-bfeb-53cbbbba6f08\\\\\\&quot;,\\\\n    \\\\\\&quot;paymentInstrumentId\\\\\\&quot;: \\\\\\&quot;PI3227C223222B5BPCMFXD2XG\\\\\\&quot;,\\\\n    \\\\\\&quot;purchase\\\\\\&quot;: {\\\\n      \\\\\\&quot;date\\\\\\&quot;: \\\\\\&quot;2022-12-22T15:49:03+01:00\\\\\\&quot;,\\\\n      \\\\\\&quot;merchantName\\\\\\&quot;: \\\\\\&quot;TeaShop_NL\\\\\\&quot;,\\\\n      \\\\\\&quot;originalAmount\\\\\\&quot;: {\\\\n        \\\\\\&quot;currency\\\\\\&quot;: \\\\\\&quot;EUR\\\\\\&quot;,\\\\n        \\\\\\&quot;value\\\\\\&quot;: 1000\\\\n      }\\\\n    },\\\\n    \\\\\\&quot;status\\\\\\&quot;: \\\\\\&quot;authenticated\\\\\\&quot;\\\\n  },\\\\n  \\\\\\&quot;environment\\\\\\&quot;: \\\\\\&quot;test\\\\\\&quot;,\\\\n  \\\\\\&quot;type\\\\\\&quot;: \\\\\\&quot;balancePlatform.authentication.created\\\\\\&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;authenticated_(frictionless_flow)_0_1&quot;,&quot;relation&quot;:&quot;&quot;},{&quot;title&quot;:&quot;Authenticated (challenge flow)&quot;,&quot;content&quot;:&quot;\\n&lt;div data-component-wrapper=\\&quot;code-sample\\&quot;&gt;\\n    &lt;code-sample :title=\\&quot;&#039;Successful authentication via the challenge flow&#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;data\\\\\\&quot;: {\\\\n    \\\\\\&quot;authentication\\\\\\&quot;: {\\\\n      \\\\\\&quot;acsTransID\\\\\\&quot;: \\\\\\&quot;6a4c1709-a42e-4c7f-96c7-1043adacfc97\\\\\\&quot;,\\\\n      \\\\\\&quot;challenge\\\\\\&quot;: {\\\\n        \\\\\\&quot;flow\\\\\\&quot;: \\\\\\&quot;OOB\\\\\\&quot;,\\\\n        \\\\\\&quot;lastInteraction\\\\\\&quot;: \\\\\\&quot;2022-12-22T15:49:03+01:00\\\\\\&quot;\\\\n      },\\\\n      \\\\\\&quot;challengeIndicator\\\\\\&quot;: \\\\\\&quot;01\\\\\\&quot;,\\\\n      \\\\\\&quot;createdAt\\\\\\&quot;: \\\\\\&quot;2022-12-22T15:45:03+01:00\\\\\\&quot;,\\\\n      \\\\\\&quot;deviceChannel\\\\\\&quot;: \\\\\\&quot;app\\\\\\&quot;,\\\\n      \\\\\\&quot;dsTransID\\\\\\&quot;: \\\\\\&quot;a3b86754-444d-46ca-95a2-ada351d3f42c\\\\\\&quot;,\\\\n      \\\\\\&quot;exemptionIndicator\\\\\\&quot;: \\\\\\&quot;lowValue\\\\\\&quot;,\\\\n      \\\\\\&quot;inPSD2scope\\\\\\&quot;: true,\\\\n      \\\\\\&quot;messageCategory\\\\\\&quot;: \\\\\\&quot;payment\\\\\\&quot;,\\\\n      \\\\\\&quot;messageVersion\\\\\\&quot;: \\\\\\&quot;2.2.0\\\\\\&quot;,\\\\n      \\\\\\&quot;riskScore\\\\\\&quot;: 0,\\\\n      \\\\\\&quot;threeDSServerTransID\\\\\\&quot;: \\\\\\&quot;6edcc246-23ee-4e94-ac5d-8ae620bea7d9\\\\\\&quot;,\\\\n      \\\\\\&quot;transStatus\\\\\\&quot;: \\\\\\&quot;Y\\\\\\&quot;,\\\\n      \\\\\\&quot;type\\\\\\&quot;: \\\\\\&quot;challenge\\\\\\&quot;\\\\n    },\\\\n    \\\\\\&quot;balancePlatform\\\\\\&quot;: \\\\\\&quot;YOUR_BALANCE_PLATFORM\\\\\\&quot;,\\\\n    \\\\\\&quot;id\\\\\\&quot;: \\\\\\&quot;497f6eca-6276-4993-bfeb-53cbbbba6f08\\\\\\&quot;,\\\\n    \\\\\\&quot;paymentInstrumentId\\\\\\&quot;: \\\\\\&quot;PI3227C223222B5BPCMFXD2XG\\\\\\&quot;,\\\\n    \\\\\\&quot;purchase\\\\\\&quot;: {\\\\n      \\\\\\&quot;date\\\\\\&quot;: \\\\\\&quot;2022-12-22T15:49:03+01:00\\\\\\&quot;,\\\\n      \\\\\\&quot;merchantName\\\\\\&quot;: \\\\\\&quot;TeaShop_NL\\\\\\&quot;,\\\\n      \\\\\\&quot;originalAmount\\\\\\&quot;: {\\\\n        \\\\\\&quot;currency\\\\\\&quot;: \\\\\\&quot;EUR\\\\\\&quot;,\\\\n        \\\\\\&quot;value\\\\\\&quot;: 1000\\\\n      }\\\\n    },\\\\n    \\\\\\&quot;status\\\\\\&quot;: \\\\\\&quot;authenticated\\\\\\&quot;\\\\n  },\\\\n  \\\\\\&quot;environment\\\\\\&quot;: \\\\\\&quot;test\\\\\\&quot;,\\\\n  \\\\\\&quot;type\\\\\\&quot;: \\\\\\&quot;balancePlatform.authentication.created\\\\\\&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;authenticated_(challenge_flow)_1_2&quot;,&quot;relation&quot;:&quot;&quot;},{&quot;title&quot;:&quot;Rejected (retries exceeded)&quot;,&quot;content&quot;:&quot;\\n&lt;div data-component-wrapper=\\&quot;code-sample\\&quot;&gt;\\n    &lt;code-sample :title=\\&quot;&#039;Rejected authentication due to exceeded number of retries&#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;data\\\\\\&quot;: {\\\\n    \\\\\\&quot;balancePlatform\\\\\\&quot;: \\\\\\&quot;YOUR_BALANCE_PLATFORM\\\\\\&quot;,\\\\n    \\\\\\&quot;creationDate\\\\\\&quot;: \\\\\\&quot;2023-01-19T17:07:59+01:00\\\\\\&quot;,\\\\n    \\\\\\&quot;id\\\\\\&quot;: \\\\\\&quot;a8fc7a40-6e48-498a-bdc2-494daf0f490a\\\\\\&quot;,\\\\n    \\\\\\&quot;authentication\\\\\\&quot;: {\\\\n      \\\\\\&quot;acsTransId\\\\\\&quot;: \\\\\\&quot;a8fc7a40-6e48-498a-bdc2-494daf0f490a\\\\\\&quot;,\\\\n      \\\\\\&quot;challenge\\\\\\&quot;: {\\\\n        \\\\\\&quot;flow\\\\\\&quot;: \\\\\\&quot;OTP_SMS\\\\\\&quot;,\\\\n        \\\\\\&quot;lastInteraction\\\\\\&quot; : \\\\\\&quot;2023-01-19T17:37:13+01:00\\\\\\&quot;,\\\\n        \\\\\\&quot;phoneNumber\\\\\\&quot; : \\\\\\&quot;******6789\\\\\\&quot;,\\\\n        \\\\\\&quot;resends\\\\\\&quot; : 0,\\\\n        \\\\\\&quot;retries\\\\\\&quot; : 2\\\\n      },\\\\n      \\\\\\&quot;challengeIndicator\\\\\\&quot;: \\\\\\&quot;01\\\\\\&quot;,\\\\n      \\\\\\&quot;createdAt\\\\\\&quot;: \\\\\\&quot;2023-01-19T17:07:17+01:00\\\\\\&quot;,\\\\n      \\\\\\&quot;deviceChannel\\\\\\&quot;: \\\\\\&quot;app\\\\\\&quot;,\\\\n      \\\\\\&quot;dsTransID\\\\\\&quot;: \\\\\\&quot;59de4e30-7f84-4a77-aaf8-1ca493092ef9\\\\\\&quot;,\\\\n      \\\\\\&quot;exemptionIndicator\\\\\\&quot;: \\\\\\&quot;noExemptionApplied\\\\\\&quot;,\\\\n      \\\\\\&quot;inPSD2Scope\\\\\\&quot;: \\\\\\&quot;false\\\\\\&quot;,\\\\n      \\\\\\&quot;messageCategory\\\\\\&quot;: \\\\\\&quot;payment\\\\\\&quot;,\\\\n      \\\\\\&quot;messageVersion\\\\\\&quot;: \\\\\\&quot;2.2.0\\\\\\&quot;,\\\\n      \\\\\\&quot;threeDSServerTransID\\\\\\&quot;: \\\\\\&quot;8bc0fdbd-5c8a-4bed-a171-9d10347e7798\\\\\\&quot;,\\\\n      \\\\\\&quot;transStatus\\\\\\&quot;: \\\\\\&quot;N\\\\\\&quot;,\\\\n      \\\\\\&quot;transStatusReason\\\\\\&quot;: \\\\\\&quot;19\\\\\\&quot;,\\\\n      \\\\\\&quot;type\\\\\\&quot;: \\\\\\&quot;challenge\\\\\\&quot;\\\\n    },\\\\n    \\\\\\&quot;paymentInstrumentId\\\\\\&quot;: \\\\\\&quot;PI3227C223222B5BPCMFXD2XG\\\\\\&quot;,\\\\n    \\\\\\&quot;purchase\\\\\\&quot;: {\\\\n      \\\\\\&quot;date\\\\\\&quot;: \\\\\\&quot;2022-12-22T15:49:03+01:00\\\\\\&quot;,\\\\n      \\\\\\&quot;merchantName\\\\\\&quot;: \\\\\\&quot;TeaShop_NL\\\\\\&quot;,\\\\n      \\\\\\&quot;originalAmount\\\\\\&quot;: {\\\\n        \\\\\\&quot;currency\\\\\\&quot;: \\\\\\&quot;EUR\\\\\\&quot;,\\\\n        \\\\\\&quot;value\\\\\\&quot;: 1000\\\\n      }\\\\n    },\\\\n    \\\\\\&quot;status\\\\\\&quot;: \\\\\\&quot;rejected\\\\\\&quot;\\\\n  },\\\\n  \\\\\\&quot;environment\\\\\\&quot;: \\\\\\&quot;test\\\\\\&quot;,\\\\n  \\\\\\&quot;type\\\\\\&quot;: \\\\\\&quot;balancePlatform.authentication.created\\\\\\&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;rejected_(retries_exceeded)_2_3&quot;,&quot;relation&quot;:&quot;&quot;}]\"\n            :should-update-when-url-changes='false'>\n        <\/tabs>\n    <\/div>\n<\/div>\n","url":"https:\/\/docs.adyen.com\/pt\/issuing\/3d-secure\/password-otp","articleFields":{"description":"Learn how to add the cardholder's mobile phone number, email address, and a password to support 3D Secure.","feedback_component":true,"next_steps_description":"Before your users can start making purchases with the newly issued card, you will have to choose how to fund the accounts, process payments, and manage the card lifecycle.","next_steps":[{"title":"Process payments","description":"Choose how to authorise card payments.","url":"\/issuing\/authorisation","required":true},{"title":"Manage funds","description":"Choose how to allocate funds to balance accounts.","url":"\/issuing\/add-manage-funds","required":true},{"title":"3D Secure transactions","description":"Understand failed, out of scope, and exempted transactions.","url":"\/issuing\/3d-secure","required":false}],"last_edit_on":"09-09-2021 11:21","parameters":{"directoryPath":"\/issuing"}},"algolia":{"url":"https:\/\/docs.adyen.com\/pt\/issuing\/3d-secure\/password-otp","title":"One-time password (OTP) authentication","content":"If you choose to enroll your Adyen-issued card in 3D Secure through the one-time password (OTP) flow, the cardholder goes through the following process when making an online payment:\n\nThe cardholder is redirected to a 3D Secure authentication page. In this page, they must provide:\n\nTheir password.\nA one-time password (OTP) sent through SMS or email.\n\nThe cardholder's credentials are validated against the authentication data that you set for the card.\n\nIf the authentication is successful, the payment is sent to Adyen for authorisation.\nIf the authentication fails, the payment fails.\n\nIf the payment authorisation is approved, the payment is completed.\n\nRequirements\n\n\n\nRequirement\nDescription\n\n\n\n\nIntegration type\nIssuing\n\n\nAPI credential roles\nTo enroll cards in 3D Secure, make sure your API credential has the Bank SCA Webservice Role. For more information, refer to Roles for API credentials.\n\n\n\nAdd authentication data\nTo enroll the Adyen-issued card in 3D Secure, add the cardholder's mobile phone number, an email address, and a password when issuing cards.\nWhen creating the card, include the  authentication object containing:\n\nA password, which is required for both SMS and email OTP challenges.\nA  phone object that includes the number and type set to mobile.\nAn email address.\n\nBy default, email OTP is a lower-priority method than an SMS OTP. However, in some countries, we always use email OTP. The OTP method is selected based on the cardholder's credentials and a predefined order of preference:\n\nIf a phone number is available, the OTP is sent via SMS.\nIf no phone number is provided, it falls back to email, if available.\nIf neither contact method is provided, the transaction is declined, because the OTP cannot be sent.\n\nUsing the contact details and password, Adyen enrolls the card in 3D Secure.\nHere is an example of how you can create a card with authentication data to support 3D Secure authentication.\n\n    \n\nUpdate authentication data\nYou can add the  authentication object at a later time or update the cardholder's phone number, password or email address by sending a PATCH \/paymentInstruments\/{id} request.\n\n    \n\nGet updates\nYou can use the cardholder authenticated webhook to get notified about the status and outcome of the cardholder's 3D secure authentication. Regardless of outcome of the authentication process, we send the balancePlatform.authentication.created\u00a0webhook.\nTo keep track of webhooks, make sure that your server can receive and accept webhooks.\nThe balancePlatform.authentication.created webhook contains the following information.\n\n\n    \n        \n        \n    \n\n","type":"page","locale":"pt","boost":17,"hierarchy":{"lvl0":"Home","lvl1":"Adyen Issuing","lvl2":"Enroll cards in 3D Secure","lvl3":"One-time password (OTP) authentication"},"hierarchy_url":{"lvl0":"https:\/\/docs.adyen.com\/pt","lvl1":"https:\/\/docs.adyen.com\/pt\/issuing","lvl2":"https:\/\/docs.adyen.com\/pt\/issuing\/3d-secure","lvl3":"\/pt\/issuing\/3d-secure\/password-otp"},"levels":4,"category":"Issuing","category_color":"green","tags":["One-time","password","(OTP)","authentication"]},"articleFiles":{"add-auth-data.js":"<p alt=\"\">add-auth-data.js<\/p>","create-card-3dsecure.js":"<p alt=\"\">create-card-3dsecure.js<\/p>"}}
