--- title: "Allow a card to use network tokens for digital wallets" description: "Learn how to enable an Adyen-issued card" url: "https://docs.adyen.com/issuing/tokens-digital-wallet/authentication-data" source_url: "https://docs.adyen.com/issuing/tokens-digital-wallet/authentication-data.md" canonical: "https://docs.adyen.com/issuing/tokens-digital-wallet/authentication-data" last_modified: "2023-03-17T15:14:00+01:00" language: "en" --- # Allow a card to use network tokens for digital wallets Learn how to enable an Adyen-issued card [View source](/issuing/tokens-digital-wallet/authentication-data.md) Adding cards to a digital wallet, such as Google Pay or Apple Pay, is a convenient way to make transactions with Adyen-issued cards. However, before your cardholder can start using digital wallets, Adyen needs to authenticate them. To support this scenario, you must include the cardholder's [authentication data](#send-authentication-data) when issuing a card. ## How it works To allow your cardholders to add their cards to a digital wallet, you must link their mobile phone number, email, or both to their card. You can [link this contact information to their card](#send-authentication-data) when you create or update the card. When your cardholder adds a card to a wallet, Adyen sends a one-time password (OTP) to their phone number or email. If you have linked both contact options to the card, the wallet prompts the cardholder to select their preferred option for the OTP. Adyen then sends the OTP to the selected option. After the OTP is successfully validated, their card is added to the wallet. For a list of supported digital wallets, reach out to your Adyen contact. ## Send authentication data When creating or updating the card, include the [authentication](https://docs.adyen.com/api-explorer/balanceplatform/latest/post/paymentInstruments#request-card-authentication) object containing a [phone](https://docs.adyen.com/api-explorer/balanceplatform/latest/post/paymentInstruments#request-card-authentication-phone) object that includes the `number` and `type` set to **mobile**, or the [email](https://docs.adyen.com/api-explorer/balanceplatform/latest/post/paymentInstruments#request-card-authentication-email). Here is an example of how you can create a card with authentication data (mobile phone number) for wallets. **Create a card with authentication data for wallet activation** #### curl ```bash curl https://balanceplatform-api-test.adyen.com/bcl/v2/paymentInstruments \ -H 'x-api-key: ADYEN_BALANCE_PLATFORM_API_KEY' \ -H 'content-type: application/json' \ -X POST \ -d '{ "type": "card", "issuingCountryCode": "NL", "balanceAccountId": "BA00000000000000000000001", "status": "inactive", "card": { "formFactor": "physical", "brand": "mc", "brandVariant": "mcdebit", "cardholderName": "Sam Hopper", "authentication": { "phone": { "number": "31611223344", "type": "mobile" } }, "deliveryContact": { "address": { "city": "Amsterdam", "country": "NL", "stateOrProvince": "NH", "street": "Simon Carmiggeltstraat", "houseNumberOrName": "6-50", "postalCode": "1011DJ" }, "name": { "firstName": "Sam", "lastName": "Hopper" } }, "configuration": { "configurationProfileId": "YOUR_CONFIGURATION_PROFILE_ID" } }, "description": "YOUR_DESCRIPTION_OF_THE_PAYMENT_INSTRUMENT" }' ``` #### Java ```java // Adyen Java API Library v40.1.0 import com.adyen.Client; import com.adyen.enums.Environment; import com.adyen.model.balanceplatform.*; import java.time.OffsetDateTime; import java.util.*; import com.adyen.service.balancePlatform.*; Client client = new Client("ADYEN_BALANCE_PLATFORM_API_KEY", Environment.TEST); // Create the request object(s) DeliveryAddress deliveryAddress = new DeliveryAddress() .country("NL") .stateOrProvince("NH") .city("Amsterdam") .postalCode("1011DJ"); Name name = new Name() .firstName("Sam") .lastName("Hopper"); Phone phone = new Phone() .number("31611223344") .type(Phone.TypeEnum.MOBILE); CardConfiguration cardConfiguration = new CardConfiguration() .configurationProfileId("YOUR_CONFIGURATION_PROFILE_ID"); DeliveryContact deliveryContact = new DeliveryContact() .address(deliveryAddress) .name(name); Authentication authentication = new Authentication() .phone(phone); CardInfo cardInfo = new CardInfo() .brandVariant("mcdebit") .configuration(cardConfiguration) .formFactor(CardInfo.FormFactorEnum.PHYSICAL) .cardholderName("Sam Hopper") .deliveryContact(deliveryContact) .brand("mc") .authentication(authentication); PaymentInstrumentInfo paymentInstrumentInfo = new PaymentInstrumentInfo() .balanceAccountId("BA00000000000000000000001") .description("YOUR_DESCRIPTION_OF_THE_PAYMENT_INSTRUMENT") .type(PaymentInstrumentInfo.TypeEnum.CARD) .issuingCountryCode("NL") .card(cardInfo) .status(PaymentInstrumentInfo.StatusEnum.INACTIVE); // Send the request PaymentInstrumentsApi service = new PaymentInstrumentsApi(client); PaymentInstrument response = service.createPaymentInstrument(paymentInstrumentInfo, null); ``` #### PHP ```php setXApiKey("ADYEN_BALANCE_PLATFORM_API_KEY"); $client->setEnvironment(Environment::TEST); // Create the request object(s) $deliveryAddress = new DeliveryAddress(); $deliveryAddress ->setCountry("NL") ->setStateOrProvince("NH") ->setCity("Amsterdam") ->setPostalCode("1011DJ"); $name = new Name(); $name ->setFirstName("Sam") ->setLastName("Hopper"); $phone = new Phone(); $phone ->setNumber("31611223344") ->setType("mobile"); $cardConfiguration = new CardConfiguration(); $cardConfiguration ->setConfigurationProfileId("YOUR_CONFIGURATION_PROFILE_ID"); $deliveryContact = new DeliveryContact(); $deliveryContact ->setAddress($deliveryAddress) ->setName($name); $authentication = new Authentication(); $authentication ->setPhone($phone); $cardInfo = new CardInfo(); $cardInfo ->setBrandVariant("mcdebit") ->setConfiguration($cardConfiguration) ->setFormFactor("physical") ->setCardholderName("Sam Hopper") ->setDeliveryContact($deliveryContact) ->setBrand("mc") ->setAuthentication($authentication); $paymentInstrumentInfo = new PaymentInstrumentInfo(); $paymentInstrumentInfo ->setBalanceAccountId("BA00000000000000000000001") ->setDescription("YOUR_DESCRIPTION_OF_THE_PAYMENT_INSTRUMENT") ->setType("card") ->setIssuingCountryCode("NL") ->setCard($cardInfo) ->setStatus("inactive"); // Send the request $service = new PaymentInstrumentsApi($client); $response = $service->createPaymentInstrument($paymentInstrumentInfo); ``` #### C\# ```cs // Adyen .net API Library v33.0.0 using Adyen; using Environment = Adyen.Model.Environment; using Adyen.Model; using Adyen.Model.BalancePlatform; using Adyen.Service.BalancePlatform; var config = new Config() { XApiKey = "ADYEN_BALANCE_PLATFORM_API_KEY", Environment = Environment.Test }; var client = new Client(config); // Create the request object(s) DeliveryAddress deliveryAddress = new DeliveryAddress { Country = "NL", StateOrProvince = "NH", City = "Amsterdam", PostalCode = "1011DJ" }; Name name = new Name { FirstName = "Sam", LastName = "Hopper" }; Phone phone = new Phone { Number = "31611223344", Type = Phone.TypeEnum.Mobile }; CardConfiguration cardConfiguration = new CardConfiguration { ConfigurationProfileId = "YOUR_CONFIGURATION_PROFILE_ID" }; DeliveryContact deliveryContact = new DeliveryContact { Address = deliveryAddress, Name = name }; Authentication authentication = new Authentication { Phone = phone }; CardInfo cardInfo = new CardInfo { BrandVariant = "mcdebit", Configuration = cardConfiguration, FormFactor = CardInfo.FormFactorEnum.Physical, CardholderName = "Sam Hopper", DeliveryContact = deliveryContact, Brand = "mc", Authentication = authentication }; PaymentInstrumentInfo paymentInstrumentInfo = new PaymentInstrumentInfo { BalanceAccountId = "BA00000000000000000000001", Description = "YOUR_DESCRIPTION_OF_THE_PAYMENT_INSTRUMENT", Type = PaymentInstrumentInfo.TypeEnum.Card, IssuingCountryCode = "NL", Card = cardInfo, Status = PaymentInstrumentInfo.StatusEnum.Inactive }; // Send the request var service = new PaymentInstrumentsService(client); var response = service.CreatePaymentInstrument(paymentInstrumentInfo); ``` #### NodeJS (JavaScript) ```js // Adyen Node API Library v30.0.2 const { Client, BalancePlatformAPI } = require('@adyen/api-library'); const config = new Config({ apiKey: "ADYEN_BALANCE_PLATFORM_API_KEY", environment: EnvironmentEnum.TEST }); const client = new Client(config); // Create the request object(s) const paymentInstrumentInfo = { type: "card", issuingCountryCode: "NL", balanceAccountId: "BA00000000000000000000001", status: "inactive", card: { formFactor: "physical", brand: "mc", brandVariant: "mcdebit", cardholderName: "Sam Hopper", authentication: { phone: { number: "31611223344", type: "mobile" } }, deliveryContact: { address: { city: "Amsterdam", country: "NL", stateOrProvince: "NH", street: "Simon Carmiggeltstraat", houseNumberOrName: "6-50", postalCode: "1011DJ" }, name: { firstName: "Sam", lastName: "Hopper" } }, configuration: { configurationProfileId: "YOUR_CONFIGURATION_PROFILE_ID" } }, description: "YOUR_DESCRIPTION_OF_THE_PAYMENT_INSTRUMENT" } // Send the request const balancePlatformAPI = new BalancePlatformAPI(client); const response = balancePlatformAPI.PaymentInstrumentsApi.createPaymentInstrument(paymentInstrumentInfo); ``` #### Go ```go // Adyen Go API Library v21.1.0 import ( "context" "github.com/adyen/adyen-go-api-library/v21/src/common" "github.com/adyen/adyen-go-api-library/v21/src/adyen" "github.com/adyen/adyen-go-api-library/v21/src/balancePlatform" ) client := adyen.NewClient(&common.Config{ ApiKey: "ADYEN_BALANCE_PLATFORM_API_KEY", Environment: common.TestEnv, }) // Create the request object(s) deliveryAddress := balancePlatform.DeliveryAddress{ Country: "NL", StateOrProvince: common.PtrString("NH"), City: common.PtrString("Amsterdam"), PostalCode: common.PtrString("1011DJ"), } name := balancePlatform.Name{ FirstName: "Sam", LastName: "Hopper", } phone := balancePlatform.Phone{ Number: "31611223344", Type: "mobile", } cardConfiguration := balancePlatform.CardConfiguration{ ConfigurationProfileId: "YOUR_CONFIGURATION_PROFILE_ID", } deliveryContact := balancePlatform.DeliveryContact{ Address: deliveryAddress, Name: name, } authentication := balancePlatform.Authentication{ Phone: &phone, } cardInfo := balancePlatform.CardInfo{ BrandVariant: "mcdebit", Configuration: &cardConfiguration, FormFactor: "physical", CardholderName: "Sam Hopper", DeliveryContact: &deliveryContact, Brand: "mc", Authentication: &authentication, } paymentInstrumentInfo := balancePlatform.PaymentInstrumentInfo{ BalanceAccountId: "BA00000000000000000000001", Description: common.PtrString("YOUR_DESCRIPTION_OF_THE_PAYMENT_INSTRUMENT"), Type: "card", IssuingCountryCode: "NL", Card: &cardInfo, Status: common.PtrString("inactive"), } // Send the request service := client.BalancePlatform() req := service.PaymentInstrumentsApi.CreatePaymentInstrumentInput().PaymentInstrumentInfo(paymentInstrumentInfo) res, httpRes, err := service.PaymentInstrumentsApi.CreatePaymentInstrument(context.Background(), req) ``` #### Python ```py # Adyen Python API Library v14.0.0 import Adyen adyen = Adyen.Adyen() adyen.client.xapikey = "ADYEN_BALANCE_PLATFORM_API_KEY" adyen.client.platform = "test" # The environment to use library in. # Create the request object(s) json_request = { "type": "card", "issuingCountryCode": "NL", "balanceAccountId": "BA00000000000000000000001", "status": "inactive", "card": { "formFactor": "physical", "brand": "mc", "brandVariant": "mcdebit", "cardholderName": "Sam Hopper", "authentication": { "phone": { "number": "31611223344", "type": "mobile" } }, "deliveryContact": { "address": { "city": "Amsterdam", "country": "NL", "stateOrProvince": "NH", "street": "Simon Carmiggeltstraat", "houseNumberOrName": "6-50", "postalCode": "1011DJ" }, "name": { "firstName": "Sam", "lastName": "Hopper" } }, "configuration": { "configurationProfileId": "YOUR_CONFIGURATION_PROFILE_ID" } }, "description": "YOUR_DESCRIPTION_OF_THE_PAYMENT_INSTRUMENT" } # Send the request result = adyen.balancePlatform.payment_instruments_api.create_payment_instrument(request=json_request) ``` #### Ruby ```rb # Adyen Ruby API Library v11.1.0 require "adyen-ruby-api-library" adyen = Adyen::Client.new adyen.api_key = 'ADYEN_BALANCE_PLATFORM_API_KEY' adyen.env = :test # Set to "live" for live environment # Create the request object(s) request_body = { :type => 'card', :issuingCountryCode => 'NL', :balanceAccountId => 'BA00000000000000000000001', :status => 'inactive', :card => { :formFactor => 'physical', :brand => 'mc', :brandVariant => 'mcdebit', :cardholderName => 'Sam Hopper', :authentication => { :phone => { :number => '31611223344', :type => 'mobile' } }, :deliveryContact => { :address => { :city => 'Amsterdam', :country => 'NL', :stateOrProvince => 'NH', :street => 'Simon Carmiggeltstraat', :houseNumberOrName => '6-50', :postalCode => '1011DJ' }, :name => { :firstName => 'Sam', :lastName => 'Hopper' } }, :configuration => { :configurationProfileId => 'YOUR_CONFIGURATION_PROFILE_ID' } }, :description => 'YOUR_DESCRIPTION_OF_THE_PAYMENT_INSTRUMENT' } # Send the request result = adyen.balancePlatform.payment_instruments_api.create_payment_instrument(request_body) ``` #### NodeJS (TypeScript) ```ts // Adyen Node API Library v30.0.2 import { Client, BalancePlatformAPI, Types } from "@adyen/api-library"; const config = new Config({ apiKey: "ADYEN_BALANCE_PLATFORM_API_KEY", environment: EnvironmentEnum.TEST }); const client = new Client(config); // Create the request object(s) const deliveryAddress: Types.balancePlatform.DeliveryAddress = { country: "NL", stateOrProvince: "NH", city: "Amsterdam", postalCode: "1011DJ" }; const name: Types.balancePlatform.Name = { firstName: "Sam", lastName: "Hopper" }; const phone: Types.balancePlatform.Phone = { number: "31611223344", type: Types.balancePlatform.Phone.TypeEnum.Mobile }; const cardConfiguration: Types.balancePlatform.CardConfiguration = { configurationProfileId: "YOUR_CONFIGURATION_PROFILE_ID" }; const deliveryContact: Types.balancePlatform.DeliveryContact = { address: deliveryAddress, name: name }; const authentication: Types.balancePlatform.Authentication = { phone: phone }; const cardInfo: Types.balancePlatform.CardInfo = { brandVariant: "mcdebit", configuration: cardConfiguration, formFactor: Types.balancePlatform.CardInfo.FormFactorEnum.Physical, cardholderName: "Sam Hopper", deliveryContact: deliveryContact, brand: "mc", authentication: authentication }; const paymentInstrumentInfo: Types.balancePlatform.PaymentInstrumentInfo = { balanceAccountId: "BA00000000000000000000001", description: "YOUR_DESCRIPTION_OF_THE_PAYMENT_INSTRUMENT", type: Types.balancePlatform.PaymentInstrumentInfo.TypeEnum.Card, issuingCountryCode: "NL", card: cardInfo, status: Types.balancePlatform.PaymentInstrumentInfo.StatusEnum.Inactive }; // Send the request const balancePlatformAPI = new BalancePlatformAPI(client); const response = balancePlatformAPI.PaymentInstrumentsApi.createPaymentInstrument(paymentInstrumentInfo); ``` You can also add the [authentication](https://docs.adyen.com/api-explorer/balanceplatform/latest/post/paymentInstruments#request-card-authentication) object at a later time or change the card user's phone number by sending a PATCH [/paymentInstruments/{id}](https://docs.adyen.com/api-explorer/#/balanceplatform/latest/patch/paymentInstruments/{id}) request to update the card. **Add or change authentication data of existing card** #### curl ```bash curl https://balanceplatform-api-test.adyen.com/bcl/v2/paymentInstruments/PI00000000000000000000001 \ -H 'x-api-key: ADYEN_BALANCE_PLATFORM_API_KEY' \ -H 'content-type: application/json' \ -X PATCH \ -d '{ "card": { "authentication": { "phone": { "number": "31611223344", "type": "mobile" } } } }' ``` #### Java ```java // Adyen Java API Library v40.1.0 import com.adyen.Client; import com.adyen.enums.Environment; import com.adyen.model.balanceplatform.*; import java.time.OffsetDateTime; import java.util.*; import com.adyen.service.balancePlatform.*; Client client = new Client("ADYEN_BALANCE_PLATFORM_API_KEY", Environment.TEST); // Create the request object(s) Phone phone = new Phone() .number("31611223344") .type(Phone.TypeEnum.MOBILE); Authentication authentication = new Authentication() .phone(phone); CardInfo cardInfo = new CardInfo() .authentication(authentication); PaymentInstrumentUpdateRequest paymentInstrumentUpdateRequest = new PaymentInstrumentUpdateRequest() .card(cardInfo); // Send the request PaymentInstrumentsApi service = new PaymentInstrumentsApi(client); UpdatePaymentInstrument response = service.updatePaymentInstrument("id", paymentInstrumentUpdateRequest, null); ``` #### PHP ```php setXApiKey("ADYEN_BALANCE_PLATFORM_API_KEY"); $client->setEnvironment(Environment::TEST); // Create the request object(s) $phone = new Phone(); $phone ->setNumber("31611223344") ->setType("mobile"); $authentication = new Authentication(); $authentication ->setPhone($phone); $cardInfo = new CardInfo(); $cardInfo ->setAuthentication($authentication); $paymentInstrumentUpdateRequest = new PaymentInstrumentUpdateRequest(); $paymentInstrumentUpdateRequest ->setCard($cardInfo); // Send the request $service = new PaymentInstrumentsApi($client); $response = $service->updatePaymentInstrument('id', $paymentInstrumentUpdateRequest); ``` #### C\# ```cs // Adyen .net API Library v33.0.0 using Adyen; using Environment = Adyen.Model.Environment; using Adyen.Model; using Adyen.Model.BalancePlatform; using Adyen.Service.BalancePlatform; var config = new Config() { XApiKey = "ADYEN_BALANCE_PLATFORM_API_KEY", Environment = Environment.Test }; var client = new Client(config); // Create the request object(s) Phone phone = new Phone { Number = "31611223344", Type = Phone.TypeEnum.Mobile }; Authentication authentication = new Authentication { Phone = phone }; CardInfo cardInfo = new CardInfo { Authentication = authentication }; PaymentInstrumentUpdateRequest paymentInstrumentUpdateRequest = new PaymentInstrumentUpdateRequest { Card = cardInfo }; // Send the request var service = new PaymentInstrumentsService(client); var response = service.UpdatePaymentInstrument("id", paymentInstrumentUpdateRequest); ``` #### NodeJS (JavaScript) ```js // Adyen Node API Library v30.0.2 const { Client, BalancePlatformAPI } = require('@adyen/api-library'); const config = new Config({ apiKey: "ADYEN_BALANCE_PLATFORM_API_KEY", environment: EnvironmentEnum.TEST }); const client = new Client(config); // Create the request object(s) const paymentInstrumentUpdateRequest = { card: { authentication: { phone: { number: "31611223344", type: "mobile" } } } } // Send the request const balancePlatformAPI = new BalancePlatformAPI(client); const response = balancePlatformAPI.PaymentInstrumentsApi.updatePaymentInstrument("id", paymentInstrumentUpdateRequest); ``` #### Go ```go // Adyen Go API Library v21.1.0 import ( "context" "github.com/adyen/adyen-go-api-library/v21/src/common" "github.com/adyen/adyen-go-api-library/v21/src/adyen" "github.com/adyen/adyen-go-api-library/v21/src/balancePlatform" ) client := adyen.NewClient(&common.Config{ ApiKey: "ADYEN_BALANCE_PLATFORM_API_KEY", Environment: common.TestEnv, }) // Create the request object(s) phone := balancePlatform.Phone{ Number: "31611223344", Type: "mobile", } authentication := balancePlatform.Authentication{ Phone: &phone, } cardInfo := balancePlatform.CardInfo{ Authentication: &authentication, } paymentInstrumentUpdateRequest := balancePlatform.PaymentInstrumentUpdateRequest{ Card: &cardInfo, } // Send the request service := client.BalancePlatform() req := service.PaymentInstrumentsApi.UpdatePaymentInstrumentInput("id").PaymentInstrumentUpdateRequest(paymentInstrumentUpdateRequest) res, httpRes, err := service.PaymentInstrumentsApi.UpdatePaymentInstrument(context.Background(), req) ``` #### Python ```py # Adyen Python API Library v14.0.0 import Adyen adyen = Adyen.Adyen() adyen.client.xapikey = "ADYEN_BALANCE_PLATFORM_API_KEY" adyen.client.platform = "test" # The environment to use library in. # Create the request object(s) json_request = { "card": { "authentication": { "phone": { "number": "31611223344", "type": "mobile" } } } } # Send the request result = adyen.balancePlatform.payment_instruments_api.update_payment_instrument(request=json_request, id="id") ``` #### Ruby ```rb # Adyen Ruby API Library v11.1.0 require "adyen-ruby-api-library" adyen = Adyen::Client.new adyen.api_key = 'ADYEN_BALANCE_PLATFORM_API_KEY' adyen.env = :test # Set to "live" for live environment # Create the request object(s) request_body = { :card => { :authentication => { :phone => { :number => '31611223344', :type => 'mobile' } } } } # Send the request result = adyen.balancePlatform.payment_instruments_api.update_payment_instrument(request_body, 'id') ``` #### NodeJS (TypeScript) ```ts // Adyen Node API Library v30.0.2 import { Client, BalancePlatformAPI, Types } from "@adyen/api-library"; const config = new Config({ apiKey: "ADYEN_BALANCE_PLATFORM_API_KEY", environment: EnvironmentEnum.TEST }); const client = new Client(config); // Create the request object(s) const phone: Types.balancePlatform.Phone = { number: "31611223344", type: Types.balancePlatform.Phone.TypeEnum.Mobile }; const authentication: Types.balancePlatform.Authentication = { phone: phone }; const cardInfo: Types.balancePlatform.CardInfo = { authentication: authentication }; const paymentInstrumentUpdateRequest: Types.balancePlatform.PaymentInstrumentUpdateRequest = { card: cardInfo }; // Send the request const balancePlatformAPI = new BalancePlatformAPI(client); const response = balancePlatformAPI.PaymentInstrumentsApi.updatePaymentInstrument("id", paymentInstrumentUpdateRequest); ```