DigitalWallet
A card in a digital wallet: Apple Pay and Google Pay provisioning, and payment tokens.
Operations
Every route this entity exposes. Each route links to its own reference on this page.
| Method | Route | SDK operation | Returns |
|---|---|---|---|
POST |
/spend/profiles/{profileId}/cards/{cardToken}/payment-tokens/{paymentTokenUniqueReference}/activation |
create |
No Content - Payment token have been successfully activated or declined |
POST |
/spend/profiles/{profileId}/cards/{cardToken}/payment-tokens |
create |
Returns all the payment tokens except deactivated |
POST |
/twcard-data/v1/push-provisioning/encrypted-payload/apple-pay |
create |
Encrypted cardholder information for Apple Pay |
POST |
/twcard-data/v1/push-provisioning/encrypted-payload/google-pay |
create |
Encrypted cardholder information for Google Pay |
Examples
One example per SDK, generated from the API model. The argument names are the parameters and fields of this entity, and the values are placeholders. The examples are not compiled or executed.
Golang
Construct client as shown in the Golang setup, then call the operations:
created, err := client.DigitalWallet(nil).Create(map[string]any{"card_token": "example", "profile_id": 1, "activation": "example"}, nil)
if err != nil {
panic(err)
}
fmt.Println(created)
Lua
Construct client as shown in the Lua setup, then call the operations:
local created, err = client:DigitalWallet():create({ card_token = "example", profile_id = 1, activation = "example" })
PHP
Construct client as shown in the PHP setup, then call the operations:
$created = $client->DigitalWallet()->create(["card_token" => "example", "profile_id" => 1, "activation" => "example"]);
Python
Construct client as shown in the Python setup, then call the operations:
created = client.DigitalWallet().create({ "card_token": "example", "profile_id": 1, "activation": "example" })
Ruby
Construct client as shown in the Ruby setup, then call the operations:
created = client.DigitalWallet.create({ "card_token" => "example", "profile_id" => 1, "activation" => "example" })
TypeScript
Construct client as shown in the TypeScript setup, then call the operations:
const created = await client.DigitalWallet().create({ card_token: "example", profile_id: 1, activation: "example" })
Fields
| Field | Type | Required | Description |
|---|---|---|---|
activation |
string |
Yes | Approve or decline a payment token activation |
paymentTokens |
array |
No | Payment Tokens |
walletNames |
array |
No | List of supported wallet types. |
create
POST /spend/profiles/{profileId}/cards/{cardToken}/payment-tokens/{paymentTokenUniqueReference}/activation
Operation ID: digitalWalletActivatePaymentToken.
Authentication: bearer token (UserToken) or bearer token (ClientCredentialsToken).
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
profileId |
path |
integer (int64) |
Yes | The profile ID |
cardToken |
path |
string (uuid) |
Yes | The card token |
paymentTokenUniqueReference |
path |
string |
Yes | The payment token unique reference issued by the scheme token service |
X-External-Correlation-Id |
header |
string (uuid) |
No | Optional UUID for correlating requests across systems. If provided, Wise echoes it back in the response. Maximum 36 characters. Learn more. |
Request body
application/json
| Property | Type | Required | Description |
|---|---|---|---|
activation |
enum: APPROVE, DECLINE |
Yes | Approve or decline a payment token activation |
Example request body:
{
"activation": "APPROVE"
}
Responses
204: No Content - Payment token have been successfully activated or declined
400: Invalid request
application/json
| Property | Type | Required | Description |
|---|---|---|---|
errors |
array of object |
No | A list of specific validation failures. |
errors[].code |
string |
No | A specific code for the validation failure type. |
errors[].detail |
string |
No | A detailed description of the validation failure. |
errors[].ref |
string |
No | A reference to the field that failed validation. |
instance |
string |
No | The uri the triggered a validation error |
status |
string |
No | The HTTP status error code |
title |
string |
No | A validation type exception |
type |
string (uri-reference) |
No | Validation type error |
403: Forbidden request
application/problem+json
| Property | Type | Required | Description |
|---|---|---|---|
code |
string |
No | A specific application-level code |
detail |
string |
No | A detailed description of the validation failure |
instance |
string |
No | The uri the triggered a validation error |
status |
string |
No | The HTTP status error code |
title |
string |
No | The title of the exception |
type |
string |
No | An access type exception |
404: Not found
application/problem+json
| Property | Type | Required | Description |
|---|---|---|---|
code |
string |
No | A specific application-level code |
detail |
string |
No | A detailed description of the validation failure |
instance |
string |
No | The uri the triggered a validation error |
status |
string |
No | The HTTP status error code |
title |
string |
No | The title of the exception |
type |
string |
No | An domain type exception |
429: Rate limit exceeded. Retry after the number of seconds specified in the Retry-After header
application/json
The response is object.
500: Server side error
application/problem+json
| Property | Type | Required | Description |
|---|---|---|---|
detail |
string |
No | A detailed description of the validation failure |
instance |
string |
No | The uri the triggered a validation error |
status |
string |
No | The HTTP status error code |
title |
string |
No | The title of the exception |
type |
string |
No | An server type exception |
POST /spend/profiles/{profileId}/cards/{cardToken}/payment-tokens
Operation ID: pushProvisioningPaymentTokensList.
Authentication: bearer token (UserToken).
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
profileId |
path |
integer (int64) |
Yes | The profile ID. |
cardToken |
path |
string (uuid) |
Yes | The card token. |
X-External-Correlation-Id |
header |
string (uuid) |
No | Optional UUID for correlating requests across systems. If provided, Wise echoes it back in the response. Maximum 36 characters. Learn more. |
Request body
application/json
| Property | Type | Required | Description |
|---|---|---|---|
walletNames |
array of enum: APPLE_PAY, GOOGLE_PAY |
No | List of supported wallet types. |
Responses
200: Returns all the payment tokens except deactivated
application/json
| Property | Type | Required | Description |
|---|---|---|---|
paymentTokens |
array of object |
No | |
paymentTokens[].cardToken |
string |
No | Card token. |
paymentTokens[].creationTime |
string (date-time) |
No | Time when the payment token was created. |
paymentTokens[].modificationTime |
string (date-time) |
No | Time when the payment token was last modified. |
paymentTokens[].panUniqueReference |
string |
No | Unique reference of the PAN. |
paymentTokens[].paymentTokenUniqueReference |
string |
No | Unique reference of the payment token. |
paymentTokens[].provisioningStatus |
enum: ACTIVE, SUSPENDED, INACTIVE, DEACTIVATED |
No | Payment token status. - ACTIVE , The token is active and available for payments - SUSPENDED , The token has been temporarily suspended - INACTIVE , The token is in the active wallet, but requires additional user authentication for use - DEACTIVATED , The status will not be visible, you can safely ignore it |
paymentTokens[].walletName |
enum: GOOGLE_PAY, APPLE_PAY |
No | Wallet name. |
Example response:
{
"paymentTokens": [
{
"cardToken": "a3f90c98-1cd1-4488-9050-2e32c696f8fa",
"creationTime": "2025-02-06T15:34:23.877041000Z",
"modificationTime": "2025-02-06T15:34:23.877343000Z",
"panUniqueReference": "FSHRMC000025538959679bc73c9d4fdc8031b20fa91d0e3b",
"paymentTokenUniqueReference": "DSHRMC0000255389d1106783179b420aa5b5ca09ba2f12b8",
"provisioningStatus": "ACTIVE",
"walletName": "GOOGLE_PAY"
},
{
"cardToken": "a3f90c98-1cd1-4488-9050-2e32c696f8fa",
"creationTime": "2025-06-25T22:05:47.116016000Z",
"modificationTime": "2025-06-25T22:05:47.116077000Z",
"panUniqueReference": "",
"paymentTokenUniqueReference": "DSHRMC0000255389e2f7133754ab4e2f87fc323730fdfd8e",
"provisioningStatus": "INACTIVE",
"walletName": "GOOGLE_PAY"
},
{
"cardToken": "a3f90c98-1cd1-4488-9050-2e32c696f8fa",
"creationTime": "2025-08-19T21:28:28.434472000Z",
"modificationTime": "2025-08-19T21:28:28.434738000Z",
"panUniqueReference": "FAPLMC0000255389d7df244df7244803aa2c4ce2a29c242a",
"paymentTokenUniqueReference": "DAPLMC000025538967ea1d7972414a93a6544a07dae27a8c",
"provisioningStatus": "ACTIVE",
"walletName": "APPLE_PAY"
},
{
"cardToken": "a3f90c98-1cd1-4488-9050-2e32c696f8fa",
"creationTime": "2025-08-04T01:37:30.658315000Z",
"modificationTime": "2025-08-04T01:37:30.658552000Z",
"panUniqueReference": "FAPLMC0000255389d7df244df7244803aa2c4ce2a29c242a",
"paymentTokenUniqueReference": "DAPLMC0000255389c25cd65bf8084c168dbc4aa59708841a",
"provisioningStatus": "SUSPENDED",
"walletName": "APPLE_PAY"
}
]
}
429: Rate limit exceeded. Retry after the number of seconds specified in the Retry-After header
application/json
The response is object.
POST /twcard-data/v1/push-provisioning/encrypted-payload/apple-pay
Operation ID: pushProvisioningApplePayGet.
Authentication: bearer token (UserToken).
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
x-tw-twcard-card-token |
header |
string (uuid) |
Yes | The card token identifying which card to retrieve push provisioning data for. |
X-External-Correlation-Id |
header |
string (uuid) |
No | Optional UUID for correlating requests across systems. If provided, Wise echoes it back in the response. Maximum 36 characters. Learn more. |
Request body
application/json
| Property | Type | Required | Description |
|---|---|---|---|
certificates |
array of string |
Yes | DER encoded X.509 ECC leaf and sub CA certificates, each encoded in Base64. |
nonce |
string |
Yes | One time use nonce generated by Apple Servers and HEX encoded on iOS app. |
nonceSignature |
string |
Yes | The device and account specific signature of the nonce generated by Apple and HEX encoded on iOS app. |
Responses
200: Encrypted cardholder information for Apple Pay
application/json
| Property | Type | Required | Description |
|---|---|---|---|
activationData |
string |
No | Encrypted activation data following card scheme and wallet provider specifications. The response is encoded in Base64. |
encryptedPassData |
string |
No | Encrypted authentication data following card scheme and wallet provider specifications. The response is encoded in Base64. |
ephemeralKey |
string |
No | Ephemeral key used to encrypt authentication data. The response is encoded in Base64. |
429: Rate limit exceeded. Retry after the number of seconds specified in the Retry-After header
application/json
The response is object.
POST /twcard-data/v1/push-provisioning/encrypted-payload/google-pay
Operation ID: pushProvisioningGooglePayGet.
Authentication: bearer token (UserToken).
Parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
x-tw-twcard-card-token |
header |
string (uuid) |
Yes | The card token identifying which card to retrieve push provisioning data for. |
X-External-Correlation-Id |
header |
string (uuid) |
No | Optional UUID for correlating requests across systems. If provided, Wise echoes it back in the response. Maximum 36 characters. Learn more. |
Request body
application/json
| Property | Type | Required | Description |
|---|---|---|---|
clientDeviceId |
string |
Yes | Stable device identification set by Wallet Provider. Could be computer identifier or ID tied to hardware such as TEE_ID or SE_ID. This field must match the clientDeviceId wallet provider will send in token provision request. |
clientWalletAccountId |
string |
Yes | Client-provided consumer ID that identifies the Wallet Account Holder entity. |
Responses
200: Encrypted cardholder information for Google Pay
application/json
| Property | Type | Required | Description |
|---|---|---|---|
cardDisplayName |
string |
No | Default card name that will be displayed in wallet. |
cardLastDigits |
string |
No | Last 4 digits of the card PAN. |
cardNetwork |
enum: CARD_NETWORK_VISA, CARD_NETWORK_MASTERCARD |
No | Card network. |
opaquePaymentCard |
string |
No | Encrypted authentication and activation data following card scheme and wallet provider specifications. The response is encoded in Base64. |
tokenServiceProvider |
enum: TOKEN_PROVIDER_VISA, TOKEN_PROVIDER_MASTERCARD |
No | Token service provider. |
userAddress |
object |
No | Entire address and phone number associated with the card. |
userAddress.addressLine1 |
string |
No | First line of the address. |
userAddress.addressLine2 |
string |
No | Second line of the address. |
userAddress.administrativeArea |
string |
No | State or administrative area. |
userAddress.countryCode |
string |
No | Country code. |
userAddress.locality |
string |
No | City or locality. |
userAddress.name |
string |
No | Cardholder name. |
userAddress.phoneNumber |
string |
No | Phone number associated with the card. |
userAddress.postalCode |
string |
No | Postal code. |
429: Rate limit exceeded. Retry after the number of seconds specified in the Retry-After header
application/json
The response is object.