Vts Issuer API Specifications
Vts Issuer API Specifications
The Visa Confidential label signifies that the information in this document is confidential and proprietary to Visa and
is intended for use only by Visa Clients subject to the terms of a current participation agreement and confidentiality
and feedback restrictions in the Visa Core Rules and Visa Product and Service Rules, non-Client Third-Party Processors
that have an executed and valid Exhibit K on file with Visa, and other third-parties that have a current Visa Digital
Enablement Program participation agreement with Visa that covers disclosure and use of the information contained
herein, including confidentiality and feedback restrictions.
This document is protected by copyright restricting its use, copying, distribution, and decompilation. No part of this
document may be reproduced in any form by any means without prior written authorization of Visa.
All other product names mentioned herein are the trademarks of their respective owners.
THIS PUBLICATION COULD INCLUDE TECHNICAL INACCURACIES OR TYPOGRAPHICAL ERRORS. CHANGES ARE
PERIODICALLY ADDED TO THE INFORMATION HEREIN: THESE CHANGES WILL BE INCORPORATED IN NEW EDITIONS
OF THE PUBLICATION. VISA MAY MAKE IMPROVEMENTS AND/OR CHANGES IN THE PRODUCT(S) AND/OR THE
PROGRAM(S) DESCRIBED IN THIS PUBLICATION AT ANY TIME.
This document describes Application Programming Interfaces (APIs) that issuers use to perform various token-related
operations, such as provisioning and notifications.
Contents
Preface
Revision History
Backward Compatibility. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
Endpoints. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
Inbound to Visa. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
HTTPS Headers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
URL Parameters. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
Error Handling. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
Error Handling. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
Error Response. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
Error Details. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
Standard Errors. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
Base64URL Encoding. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
Chapter 2 • Onboarding
Introduction. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
Key Management. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
Prerequisites. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
Security Setup. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
Information Exchange. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
Data Encryption/Signature. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
Creating a Signature. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
Signature Validation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
Address. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
Expiration Date. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
Token Information. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
Risk Information. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
Device Information. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
Lifecycle Operations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
PAN Replacement. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
Request. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
Endpoints. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
Method. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
Query Parameters. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
Request Body. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
Unencrypted Payload. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
Response. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
Successful Response. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
Error Response. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
Sample Payloads. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
Sample Request. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
Token Inquiry. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
Request. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
Endpoints. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
Method. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
Query Parameters. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
Decrypted Payload. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
Sample Payloads. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
Request. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
Endpoints. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
Method. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
Query Parameters. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
Request Body. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
Response. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
Token Details. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
Error Response. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
Sample Payloads. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
Sample Request. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
Request. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
Endpoints. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
Method. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
Query Parameters. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
Request Body. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
Response. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
Successful Response. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
Error Response. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
Sample Payloads. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
Sample Request. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
Request. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
Endpoints. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
Method. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
Query Parameters. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
Request Body. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
Response. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
Successful Response. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
Error Response. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
Sample Payloads. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
Request. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .101
Endpoints. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
Method. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
Response. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
Request. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .111
Endpoints. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
Method. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
Response. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
Request. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .116
Endpoints. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
Method. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
Response. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
Request. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .131
Endpoints. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
Method. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
Response. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
Request. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .137
Endpoints. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
Method. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
Response. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
Request. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .141
Endpoints. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
Method. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
Response. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
Request. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .150
Endpoints. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
Method. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
Response. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
Request. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .160
Endpoints. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
Method. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
Response. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
Request. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .175
Endpoints. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
Method. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
Response. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
Request. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .181
Endpoints. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
Method. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
Response. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
Request. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .191
Endpoints. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
Method. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
Response. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198
Request. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .201
Endpoints. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202
Method. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202
Response. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
Request. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .212
Endpoints. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212
Method. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
Response. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220
Request. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .235
Endpoints. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236
Method. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236
Response. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
Batch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240
Request. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242
This document describes Application Programming Interfaces (APIs) that issuers use to perform
various token-related operations, such as provisioning and notifications.
Audience
Visa Token Service Issuer API Specifications is intended for issuers using Visa Token Service (VTS) REST
APIs.
Prerequisites
1. Issuer has been onboarded by Visa.
2. Issuer and Visa have exchanged X.509 certificates containing the required public keys.
3. Issuer has undergone client-specific configuration for various APIs.
Document Conventions
Conventions Purpose
bold Used for command buttons, menu names, and menu choices
referenced in procedures. Also used for extra emphasis (stronger than
italics).
italics Used for document titles, for explaining an unusual term the first time
it appears, and for emphasis.
n/a Stands for not applicable. Also used to indicate that there is not any
information.
Letter Gothic Used primarily to re-create screen captures and sample report layouts
and for prompts and messages displayed by the system.
3.7 (23.04) April 2023 l Added autoFillIndicator field to Token Inquiry by PAN API
response and the Token Create notification. The
autoFillIndicator field was previously added to the
tokenInfo structure, which is shared across several APIs.
l The issuerAccountID field in client information is required for
Secure Remote Commerce (SRC).
l For India PROD, the host/domain name is https://
api.visa.co.in:443
3.7 (22.09) September 2022 The following changes were made to the interface:
3.7 (22.06) June 2022 This release only affects the Visa Card Enrollment Hub (VCEH). The
following changes were made to the interface:
3.7 (22.04) May 2022 The following changes were made to the interface:
3.7 (22.01) January 2022 The following changes were made to documentation:
3.7 (21.12) December 2021 The following changes were made to the interface:
3.7 (21.10) August 2021 The following changes were made to the interface:
3.6 (21.08) August 2021 l Added the following enums to deviceType field:
– PC
– HOUSEHOLD_DEVICE
– WEARABLE_DEVICE
– AUTOMOBILE_DEVICE
l The tokenAssuranceLevel and
originalTokenAssuranceLevel fields have been
deprecated. Use the respective tokenAssuranceMethod and
originalTokenAssuranceMethod fields instead. Possible
values are as follows:
l In the VCEH Web Proxy, whitespace and hyphens (-) are not
supported in postal codes.
l Added “Base64URL Encoding” section
3.6 (20.07) July 2020 Added the following Trusted Listing APIs:
l Approve Provisioning
l Approve Provisioning Notification
l CHIP_DIP
l CONTACTLESS_TAP
Added additional operation types in Token Lifecycle API:
l TOKEN_DEVICE_BINDING_APPROVE_CALL_CENTER
l TOKEN_DEVICE_BINDING_APPROVE_BANK_APP
l CARDHOLDER_STEPUP_CALL_CENTER
l CARDHOLDER_STEPUP_APP_TO_APP
Updated Issuer Service IP addresses.
3.6 (20.04) April 2020 Added the PUSH_PROV_ONFILE option to the intent field in the
Payment Instrument Provider (provider) structure and support in
the Push Card Enrollment to Wallet API.
3.6 (20.03) March 2020 Updated PAN Lifecycle API to support Account Level Management
(ALM) capability.
3.5 October 2019 The following updates support Visa Card Enrollment Hub (VCEH):
3.4 September 2019 Added the lifeCycleTraceID field to the following APIs:
l Approve Provisioning
l Approve Provisioning Stand-In Notification
l Token Create Notification
l Token Notification
l Check Eligibility
l Get Cardholder Verification Methods
l Send Passcode
l Token Inquiry
l Token Inquiry by PAN
The following updates support Token for Token:
– originalToken
– originalTokenRequestorID
– originalTokenReferenceID
– originalTokenAssuranceLevel
l Added a new enum value to the panSource field for the
following APIs:
– Approve Provisioning
– Approve Provisioning Stand-In Notification
– Token Create Notification
3.3 July 2019 The following updates support Cloud Token Framework:
3.2 May 2019 Added Retrieve Network Hub Push Provisioning (NHPP) Profiles API.
Introduction
Provides information about Visa Token Service (VTS) endpoints and the HTTPS headers of VTS APIs,
along with a backward-compatibility assurance from Visa.
Backward Compatibility
Visa ensures that changes to APIs are backward-compatible, wherever possible. The goal of backward
compatibility is to ensure that an API change is seamless and will not interrupt its usage in the client
environment. Visa considers the following changes backward-compatible:
l Adding a new API resource.
l Adding a new optional request parameter to an existing API resource.
Note:
As a guideline, add the parameter as part of the request body, as a URL parameter, or as an
HTTPS header field.
l Adding a new enumeration value.
Note:
As a guideline, add the value either in the request or in the response.
l Adding a new response parameter to the API response.
l Changing the order in which parameters are returned in existing API responses.
l Changing the format of string identifiers.
Note:
As a guideline, change the content as long as it is within the stipulated length of the string.
In simple terms, all these guidelines mean:
l You can add new optional parameters to existing APIs at any time.
l You should ignore any unknown fields or enumeration values received in API responses.
l You should limit string identifiers to length validation unless specific validations are
mentioned.
Endpoints
There are two publicly available endpoints, one is for the Sandbox and one is for Production. All the
REST APIs defined in this document use the relative path. The complete Uniform Resource Identifier
(URI) is a concatenation of the endpoint (defined below), and of the REST API path defined in the
individual API.
https://<host>:<port>/<uri path>
Endpoint Description
uri path Refer to the relevant outbound API for this value.
Inbound to Visa
Refer to the relevant API documents for the API URL.
HTTPS Headers
This section describes HTTPS headers that are to be transmitted as part of API calls and returned as
part of API responses.
Content-Type (Conditional) The type of the request body. Not required if the
message body is empty in the request, for example, “GET”.
Example: application/json; charset=UTF-8
Format: String.
Field Description
Content-Language (Optional) The language of the request body. Defaults to en-US if not
present.
Example: en-US
Format: String.
x-pay-token (Required) A token identifying the transaction and its contents. The
token expires in 480 seconds (8 minutes) for all clients.
Example:
x-pay-token: xv2:1440199445:4a3...
X-RESPONSE-ID Unique ID for the API response. This is the same ID (X-REQUEST-ID)
that is sent in the API request header, which can be optionally sent
back in the response.
Format: String, max length 36 characters.
Content-Language The language of the response body. Defaults to en-US if not present.
Example: en-US.
Format: String.
URL Parameters
Query Parameters
The query parameters are used as part of API invocations and are described in the corresponding
API.
API Key
Parameter Description
apiKey (Required) Client-specific API Key issued during onboarding. This value
is passed as a query parameter.
Format: String; alphabetic, numeric; max length 64 characters.
Error Handling
Error Handling
The VTS system reports API errors by using an Error Response structure. Logically, all the errors are
categorized into Standard errors and Business errors. Any API can return a Standard error; it should
be handled as you would normally handle an error. (See “Standard Errors”.) Some APIs return
Business errors; these are described in the “Error Responses” section of the corresponding API.
Guidelines for handling errors are as follows:
l Use HTTP status codes as defined in “Standard Errors” to determine the API response.
n If an API is successful, the response is 2xx.
n If an API has errors, the response is either 4xx or 5xx.
l The Error Response structure is optional and is returned in the event of errors along with the
details. In case an error response is not returned, rely on HTTP status codes.
Field Description
errorResponse (Conditional) Error response from the API that contains the error
details.
Format: An Error Response structure.
Error Response
Field Description
Field Description
reason Drives the error handling business logic for the API.
Format: String; alphanumeric.
Error Details
Field Description
location The value of this field is using the XPATH expression to point to the
field that failed validation.
Format: String; alphanumeric.
Standard Errors
Standard errors can be returned by any API and should be handled consistently, in the same manner.
Standard Errors are not documented as part of each individual API description.
400 invalidParameter The value provided for one or more request parameters is considered
invalid.
Examples:
400 invalidRequest The API server could not understand the request.
Usually, this means that the data format does not match the specification.
Examples:
404 Not Found The server has not found anything matching the Request URI.
500 serviceError Caused by a server error. In case of this error, the client can retry the
request again.
lifeCycleTraceID 62.2
Base64URL Encoding
Base64URL encoding is identical to RFC 4648 Base64 encoding, except that the padding character is
"." and the other alphanumeric characters are "-" and "_" instead of "+" and "/". Spaces are not
allowed.
Introduction
Presents guidelines for onboarding a client (issuer) using web services.
Key Management
l The client will provide Visa with an X.509 certificate, containing its public encryption key,
through a secure out-of-band channel.
l Visa will provide the client with an X.509 certificate, containing its public signature key for
validation, through a secure out-of-band channel.
Client Configuration
l Client needs to set up WSI configuration and mutual SSL with Visa for outbound APIs.
l Client needs to follow Visa WSI onboarding procedures.
l A Visa representative will configure the endpoint for outbound (Visa to Client) web services
and the protocol (Web Service or ISO) to use the appropriate services.
l Client generates public/private key pairs and certificates for:
n Outbound encryption from Visa (self-signed X.509 certificate).
n Inbound signature to Visa (self-signed X.509 certificate).
l A Visa representative will provide the RSA keys/certificates for both, inbound and outbound
configurations for payload encryption and signature.
l A Visa representative will download Visa public certificates for encryption and signature
verification.
l Client will use the Visa Developer Portal (VDP) portal to get access to API credentials (in the
form of an API Key and a Shared Secret Key) to integrate with Visa to generate x-pay-
token, which is used during message authentication and must be passed as part of all web
service requests.
Prerequisites
To use Visa-exposed services, issuers must:
l Fulfill the security requirements as documented in this specification.
l Call the web service method as described in this specification.
Security Setup
Secure services can only be accessed by trusted Visa partners according to their contractual
obligations using predetermined access parameters. Issuer staff, working with their corresponding
Visa representatives, will receive the following during the on-boarding process:
l X-pay-token scheme—This is used during message authentication and must be passed as
part of all web service requests.
l Visa Root CA Certificate—This is used to establish TLS/SSL connectivity with Visa Web
Service Gateway. To establish TLS/SSL connectivity for the REST-based web service requests,
the consumer of the service requires a Visa root certificate to be installed in the keystore of
the client invoking the service.
The issuer performs the following tasks:
1. The issuer receives the Visa Certificate Authority (VICA3) intermediate and root certificates.
2. The issuer obtains client certificate from VICA3 for the generated CSR.
Note:
The VICA3 root certificate is installed in the Visa Internet Gateway.
Requirements
l TLS X.509 certificate—This will be issued by Visa and is verified against the credentials while
connecting to the web service. This certificate must be installed in the keystore of the client
invoking the service.
l Data Encryption—Sensitive fields in the message (if present) must be encrypted.
Note:
When functionality does not require exchanging sensitive fields in full, such fields may be
passed in a masked form, such as adding asterisks in the middle of consumer’s email address,
thus eliminating the need for encryption. Payment Card Industry Data Security Standard (PCI
DSS) and other security guidelines and standards must be applied when determining the
method for obscuring the data.
l Firewall/Proxy Server Setup—The issuer must ensure that the internal firewall/proxy servers
have been updated to allow connectivity to the Visa environments if required by the issuer’s
security guidelines.
Information Exchange
For integrating with Visa APIs, the issuer should use the following source/destination information
from Visa:
198.241.168.141
198.241.162.104
198.241.168.142
198.241.168.142
198.241.150.66
198.241.168.141
103.144.116.26 (India only)
198.217.248.24 (India only)
The issuer should use the following format for naming the URL:
https://{host/domain:port}/{APP}/{version}/{API Name}?params=<>
The following is an example of a URI for various operations exposed by issuers, for example the
Check Eligibility API:
https://{host/domain:port}/vtis/v1/checkEligibility
Introduction
This chapter details encryption and decryption strategies that protect sensitive information passed in
API payloads.
Data Encryption/Signature
The payload fields submitted by Visa Token Service (VTS) issuers in the APIs contain sensitive
informationthat must be encrypted and signed using JWE (JSON Web Encryption) and JWS (JSON
Web Signature). A compact serialization scheme is followed for both JWE and JWS with Base64URL-
encoded elements separated by a "." (period).
JWE Composition
The following format shows the encrypted payload fields from a plaintext representation:
Base64URL (UTF8 (JWE Header)) || ‘.’ || Base64URL (JWE Encrypted Key) || ‘.’ || Base64URL (JWE
Initialization Vector) || ‘.’ || Base64URL (JWE Ciphertext) || ‘.’ || Base64URL (JWE Authentication Tag)
JWE Header
The JWE header contains the following metadata for encryption and decryption:
Name Description
kid (Required) Key identifier that identifies the key used to encrypt the
CEK, which is the Issuer’s API key.
Format: String; max length 64 characters.
typ (Required) Media type of the JWE. Javascript Object Signing and
Encryption (JOSE) indicates that JWE is using JWE Compact Seriali
zation scheme.
iat (Required) Time when JWE was issued. Expressed in UNIX epoch time
(seconds since 1 January, 1970) and issued at timestamp in UTC when
the transaction was created and signed.
Format: 1429837145.
exp (Optional) Expiration time of the payload. This field is optional and
should be evaluated in conjunction with the ttl default defined with
use case.
exp can be used to reduce the default ONLY. If exp represents a time
greater than iat + ttl then iat + ttl will be used.
Format: yyyy-MM-ddTHH:mm:ss.SSSZ.
aud (Conditional) List of desired recipients, which are the token requestors’
vClientID values. This field is required for pushing card enrollment
to wallet providers. The recipients are token requestors. The value
should be a comma-separated array of client IDs. Up to 10 client IDs
are allowed for each request.
Format: String; alphanumeric; max length 256 characters.
{
"alg":"RSA-OAEP-256",
"kid":"7ZEIVC16DGRDQKWZEE3X11LeJMDhyqQu8Q1ctnp4bylyQJCsw",
"typ":"JOSE",
"enc":"A256GCM",
"iat":"1429837145"
}
JWE Ciphertext
JWE Ciphertext is an encrypted BLOB that is generated from the plaintext (sensitive data that needs
to be encrypted), by using the A256GCM encryption scheme specified in the enc header field.
JWS Composition
The following format shows the encrypted payload fields from a plaintext representation:
Base64URL (UTF-8 (JWS Header)) || ‘.’ || Base64URL (JWS Payload) || ‘.’ || Base64URL (JWS Signature)
JWS Header
The JWE header contains the metadata for encryption and decryption.
Name Description
alg (Required) A description of the algorithm that is used to sign the JWS
payload.
Format: Value is PS256.
kid (Required) The key identifier that identifies the key used to sign the
JWS payload.
Format: String; max length 64 characters.
typ (Required) The media type of the JWS. JOSE indicates that the JWS is
using the JWS Compact Serialization scheme.
Format: Value is JOSE.
{
"alg":"PS256",
"kid":"7ZEIVC16DGRDQKWZEE3X11LeJMDhyqQu8Q1ctnp4bylyQJCsw",
"typ":"JOSE",
"cty":"JWE"
}
“signature”: “rDxMelJ4y_EKQzxMus6oCS3WkyKb-2HqqZYgSyEP9VhDkUGNKEgeU7b3v
TeamL9voLttF__be44skxVbLOe3IorO3AmnO93O4evSMyXakABR6HorSXqZ8Izx1N8AzgwZ
Ot9HkVesH7tIR_IR69bFdDPCpG5qIe1EBEpodilSfs-LphbEPw”
JWS Payload
The JWS payload is the payload being signed.
JWS Signature
The JWS signature is generated to protect the integrity of both the JWS header and JWS payload.
Creating a Signature
To create a signature by applying JWS on JWE:
Signature Validation
To validate a -Signature:
1. Get the RSA 2048 public key.
2. Base64URL decode the E-Header field.
3. Get the kid and the alg elements to use for signature validation.
4. Base64URL decode the E-Signature field to get the JWS signature.
5. Base64URL decode the E-JWS payload to get the JWS payload.
6. Validate the JWS signature against the JWS payload by using the RSA 2048 public key with
the encryption algorithm, as specified in alg element (PS256).
Data Decryption
To decrypt encrypted data:
1. Get the RSA 2048 private key.
2. Base64URL decode the E-Header field.
3. Get the kid and the algorithms to use for decryption.
4. Base64URL decode the E-Key field to get the encrypted E-key (Random Symmetric Key).
5. Decrypt the JWE Encrypted Key field by using the RSA 2048 private key with the encryption
algorithm, as specified in the alg element (RSA-OAEP-256).
6. Get the RSK in clear.
7. Base64URL decode the E-IV for use in ciphertext decryption.
8. Base64URL decode the E-Authentication Tag for use in ciphertext decryption.
9. Base64URL decode the ciphertext field.
10. Decrypt the ciphertext, by using RSK and IV and authentication tag and encryption
algorithm, as specified in the enc header field (A256GCM).
Cardholder Information
Field Description
primaryAccountNumber (Required) Primary account number (PAN) of the card that is being
tokenized.
Format: String; max length 19 characters.
name (Optional) Full name on the Visa card associated with the enrolled
payment instrument.
Format: String; max length 256 characters.
Field Description
l Approve Provisioning
l Token Create Notification
Format: An Expiration Date structure.
Address
This structure is used by several APIs.
Field Description
Field Description
Expiration Date
This structure is used by several APIs.
Field Description
month (Required) The month upon which the payment instrument is set to
expire.
Example: "month": "9"
Format: String; numeric; max length 2 digits.
year (Required) The year upon which the payment instrument is set to
expire.
Example: "year": "2024"
Format: String; numeric; length 4 digits.
Token Information
Field Description
l Approve Provisioning
l Approve Provisioning Stand-In Notification
l Token Create Notification
Format: It is one of the following values:
l SECURE_ELEMENT
l HCE
l CARD_ON_FILE
l ECOMMERCE
l QRC
l ACTIVE
l INACTIVE
l SUSPENDED
l DEACTIVATED
tokenExpirationDate (Conditional) The date upon which the token is set to expire. This field
is required in the Token Create Notification API.
Format: An Expiration Date structure.
Field Description
tokenAssuranceMethod (Optional) Method of Issuer ID&V that has taken place at time of
provisioning, device binding, or cardholder initiated verification. It is
one of the following values:
numberOfActiveTokensForPAN (Optional) Number of device tokens that are currently active for this
PAN.
Format: Integer; max length 4 digits.
numberOfInactiveTokensForPAN (Optional) Number of device tokens that are currently inactive (device
tokens have not been activated) for this PAN.
Format: Integer; max length 4 digits.
numberOfSuspendedTokensForPAN (Optional) Number of device tokens that were activated, but are
suspended for payments for this PAN.
Format: Integer; max length 4 digits.
originalTokenRequestorID (Required) Unique ID assigned to the initiator of the token request. This
field is populated when performing token-for-token provisioning only.
Format: Numeric; max length 11 digits.
Field Description
originalTokenReferenceID (Conditional) Unique ID for the token associated with the PAN. This ID
can be used in lieu of the token for subsequent calls, such as life cycle
events. This field is populated when performing token-for-token
provisioning only.
Format: String; max length 32 characters.
originalTokenType (Conditional) Token type of the original token. This field is populated
only when performing token for token provisioning and can be used
only in the following APIs:
l Approve Provisioning
l Approve Provisioning Stand-In Notification
l Token Create Notification
Format: It is one of the following values:
l SECURE_ELEMENT
l HCE
l CARD_ON_FILE
l ECOMMERCE
l QRC
l PSEUDO_ACCOUNT
Field Description
autoFillIndicator (Conditional) Indicates whether the token is for an autofill use case.
This is a required field in the following APIs:
l Approve Provisioning
l Approve Provisioning Stand-In Notification
l Token Create Notification
Format: It is one of the following values:
Risk Information
Field Description
walletProviderRiskAssessment Wallet provider risk assessment. If the DWP sends the value, Visa will
send it to the issuer.
Format: It is one of the following values:
l 0— Unconditionally approved.
l 1— Conditionally approved with further consumer verification.
l 2— Not approved
walletProviderRiskAssessment If the DWP sends this information, Visa will send it to the issuer. May
Version contain separators to indicate major and minor components, for
example, periods, hyphens, slashs, and other similar characters.
Format: String; max length 10 characters.
walletProviderAccountScore The wallet provider account score. Score value is between1 and 5,
indicating the confidence level of the account, where 5 indicates the
most confidence on the account.
Example: 5
Format: String; max length 2 characters.
Field Description
walletProviderDeviceScore The wallet provider device score. Score value is between1 and 5,
indicating the confidence level of the device, where5 indicates the
most confidence.
Example: 5
Format: String; max length 2 characters.
l NETWORK_SET
l CONSUMER_SET
daysSinceConsumerDataLast Number of days since account settings were changed (in case of a
AccountChange password update). If the number of days exceeds 9999, it will stay at
9999.
Example: "9999"
Format: String; max length 4 characters.
Field Description
walletProviderPANAge Length of time (in days) that a PAN has been on file for a user.
Example: "9999"
accountToDeviceBindingAge Number of days this device has been used by this account. If the
number of days exceeds 9999, it will stay at 9999.
Example: 9999
Format: String; max length 4 characters.
userAccountAge Number of days since an account for this user has existed (how long
have you known this user?).
Values are 0 through 9999.
Example: "9999"
Format: String; max length 4 characters.
walletAccountAge Number of days since the user created a wallet account or started
using a wallet. If the number of days exceeds 256, it will stay at 256.
Example: "256"
Format: String; max length 4 characters.
Field Description
daysSinceLastAccountActivity Number of days since the last activity on account. If the number of
days exceeds 9999, it will stay at 9999.
Example: "9999"
Format: String; max length 4 characters.
deviceWithActiveTokens Number of devices for this user with the same token. If the number of
tokens exceeds 99, it will stay at 99
Example: "99"
Format: String; max length 2 characters.
activeTokensOnAllDeviceFor Number of active tokens for this user, across all devices. If the number
Account of tokens exceeds 9999, it will stay at 9999.
Example: "9999"
Format: String; max length 4 characters.
visaTokenScore Value indicating the degree of risk associated with the token. Numeric
value is 01 through 99.
Format: String; max length 2 characters.
Field Description
riskAssessmentScore Values are 0 through 99. A higher value indicates a higher risk. This is
calculated by the AA Risk Engine, based on the PAN’s transaction
pattern (long term and short term).
Format: String; max length 2 characters.
issuerSpecialConditionCodes Supported for issuers participating in 0100 TAR. The issuer can send
values for this element in the 0100 TAR response.
l If the issuer sends a value in the 0100 TAR, it will be sent in this
element of the Get CVM.
l If no value is sent in 0100 TAR or if the issuer does not participate in
TAR, this element will not be present.
Format: String; max length 100 characters.
Device Information
Field Description
deviceID For Secure Element (SE) wallet providers, this value will be the SE ID in
hex binary characters transformed to a 48-character string.
For Host Card Emulation (HCE) wallet providers, this field will be the
Device ID as determined by the digital wallet provider (DWP). All
alphanumeric and special characters are allowed for HCE DWPs.
Secure Element (SE) ID represents the device ID.
deviceLanguageCode This value is any ISO 639 Version 3 Language Code, for example, eng
(English). This language code will be used by the issuer and Visa to
retrieve the Terms and Conditions (T&C). If T&Cs are not found for the
Language Code in the request, the T&Cs will return the
default :anguage Code of eng (English).
Format: String; ISO-639 Version 3 Language Code, max length 3
characters.
Field Description
l UNKNOWN
l MOBILE_PHONE
l TABLET
l WATCH
l MOBILEPHONE_OR_TABLET
l PC
l HOUSEHOLD_DEVICE
l WEARABLE_DEVICE
l AUTOMOBILE_DEVICE
deviceName A readable name for the device. Ideally, the customer enters this name.
It can be used to identify the device in customer support calls.
Example: My Work Phone
Format: String; Base64URL-encoded; UTF-8; max length 128
characters.
l ANDROID
l IOS
l WINDOWS
l BLACKBERRY
l TIZEN
l OTHER
Field Description
deviceIndex The index number from Visa where the deviceID is stored. This is
required for token device binding.
Format: Integer; max length 2 digits.
deviceIPAddressV4 (Optional) The IP address of the device at the time of the provisioning
request, with the value represented in 255.255.255.255 format. An
octet (255) may be 1–3 digits in length but cannot contain any leading
zeros.
Format: String; max length 15 characters.
l WIFI
l CELLULAR
l GPS
l OTHER
Field Description
l SOFTWARE
l TRUSTED_EXECUTION_ENVIRONMENT
l SECURE_ELEMENT
l CLOUD
originalDeviceID Device ID from the original provision. This field is populated only when
performing token-for-token provisioning and can be used only in the
following APIs:
l Approve Provisioning
l Approve Provisioning Stand-In Notification
l Token Create Notification
Format: String; max length 48 characters.
originalDeviceType Device type from the original provision. This field is populated only
when performing token-for-token provisioning and can be used only
in the following APIs:
l Approve Provisioning
l Approve Provisioning Stand-In Notification
l Token Create Notification
Format: It is one of the following values:
l UNKNOWN
l MOBILE_PHONE
l TABLET
l WATCH
l MOBILEPHONE_OR_TABLET
l PC
l HOUSEHOLD_DEVICE
l WEARABLE_DEVICE
l AUTOMOBILE_DEVICE
PAN Lifecycle
This service enables the issuer to update PAN and PAN expiration date. It also helps perform VAU
updates, enroll a PAN in Registered Program Identification Number (RPIN) and link relationships.
Lifecycle Operations
The following table shows the various lifecycle operations and the corresponding fields that need to
be passed in order to achieve a particular operation.
PAN Update With Expiry Date PAN 1 PAN 1 PAN 2 PAN 2 Token/VAU
Expiry Expiry
ACCOUNT_UPDATE
PAN Expiry Date Update PAN 1 PAN 1 Old PAN 1 PAN 1 Token/VAU
Expiry New
EXP_DATE_UPDATE
Expiry
Note:
l In the table above, the Operation Type field is always UPDATE.
l For a PAN Update (Reversal), the Operation Reason Code field contains ACCOUNT
UPDATE and the Operation Type field is DELETE; other field values ae not applicable.
l If an issuer is not enabled for VAU, ACCOUNT UPDATE, and EXP_DATE UPDATE, they
will function as a BAU token PAN update and no VAU system will be updated.
l Operation type field is required for the above functions but if not provided, the default
behavior is Update all systems based on issuer participation.
PAN Replacement
If you are replacing an existing PAN with another one and there are tokens associated with the
existing PAN, the new PAN must have the same BIN as the replacement PAN. If the BINs are different
between the existing PAN and the replacement PAN, you must delete the tokens on the existing PAN
before calling the PAN Lifecycle API to replace the PAN.
Note: You must allow between 1 and 5 minutes from the time you delete the tokens for the
existing PAN before you call the PAN Lifecycle API to replace the PAN.
The issuer can then use push provisioning APIs to add new tokens to the replacement PAN on the
cardholder's device. To provision tokens on the replacement PAN, the issuer must have enabled App-
to-App push provisioning and the cardholder must have the issuer's mobile banking app installed on
their device.
The issuer can allow merchant-initiated transactions prior to the cardholder acknowledging receipt of
a physical card. The cardholder can use the digital card from their mobile app before receiving a
physical card.
Request
Endpoints
Path:
{Visa host}/vtis/v1/pan/lifecycle?apiKey=key
Method
POST
Query Parameters
API Key
Parameter Description
apiKey (Required) Client-specific API Key issued during onboarding. This value
is passed as a query parameter.
Format: String; alphabetic, numeric; max length 64 characters.
Request Body
Field Description
l UPDATE
l DELETE
operationReason (Required) Reason for the operation. The reason should be descriptive,
such that if the issuer performs an action and the consumer calls
Customer Support, the support team should be able to read the
reason, advise the consumer, and act accordingly. For example, if the
PAN is replaced, the request reason might say “Replacement due to
lost card”.
Format: String; max length 254 characters.
Field Description
operationReasonCode (Required) A reason code for the operation. If the reason code is
ACCOUNT_UPDATE or PORTFOLIO_CONVERSION (updating PAN only
or PAN & Expiry date), the old PAN and replacement PAN cannot be
the same. If the reason code is EXP_DATE_UPDATE (expiry date
update only), the old PAN and replacement PAN values must be the
same. If the reason code is UPDATE_ACCOUNT_LEVEL_RECORD, the
account level information in the encrypted data needs to be provided.
Format: It is one of the following values:
encryptedData (Required) Blob field that contains the encrypted payload; see the
“Unencrypted Payload” section for more information.
l cardholderInfo
– Current PAN
– Expiration Date
l replaceCardholderInfo
– New PAN
– New Expiration Date
l accountLevelInfo
Unencrypted Payload
Field Description
l primaryAccountNumber–Current PAN
l expirationDate–Current expiration date
Format: A cardholder info structure.
l primaryAccountNumber–New PAN
l expirationDate–New expiration date
Format: A cardholder info structure.
Cardholder Info
The following table describes both the cardholderInfo and replaceCardholderInfo
structures:
Field Description
Expiration Date
This structure is used by several APIs.
Field Description
month (Required) The month upon which the payment instrument is set to
expire.
Example: "month": "9"
Format: String; numeric; max length 2 digits.
year (Required) The year upon which the payment instrument is set to
expire.
Example: "year": "2024"
Format: String; numeric; length 4 digits.
Field Description
productID (Conditional) This is the product ID for the card number in the Account
Number field. It is required, when the rpinEnrollment structure is
provided in the request, or when the linkEnrollment structure is
present for either the USHNW or VIRTUAL groupType. For example if
the product type of the card is ‘Visa Traditional Credit’, the value of
productID is A.
Format: String; max 2 characters.
linkEnrollment (Conditional) Contains linking information for the account number. Link
enrollment information is not required when sending request only for
RPIN enrollment or replace Enrollment.
Format: A Link Enrollment Information structure.
Field Description
l Add— Use Add when submitting new card numbers; record is for a
new account number. All required fields must be provided.
l Change— Use if changing any attribute in rpinEnrollment data.
A change record will fully replace all data in the original record.
Every required field must be submitted in a change record. If issuers
wish to preserve previously submitted optional data, this data must
be resubmitted.
l Delete— Use if removing an account number. For delete records,
all other fields are optional.
accountOpenDate (Required) The date the account number was first opened with the
issuer.
Format: String in the form of YYYYMMDD.
rpinEffectiveDate (Optional) The RPIN effective date, which can be a past or future date,
but it must be a date that is after the RPIN create-date and before the
RPIN end-date. If the date does not follow these rules, the request is
rejected with an Invalid Date reject reason. It will default to the current
date if the correct date is not provided.
Format: String; YYYYMMDD.
Field Description
action (Required) If an action other than Add is selected, the webservice call
will be rejected.
Format: It is one of the following values:
l Add— Use this to add new customer information. All required fields
must be provided.
Field Description
l M— Physical mail.
l E— E mail.
l C— Mobile telephone.
Address
Field Description
line1 (Required) First line associated with the account holder’s address.
Format: String; alphanumeric; UTF-8, white space, comma (,),
underscore (_), hashtag (#), colon (:), forward slash (/), period (.), single
quote (‘), asterisk (*), and hyphen (-) are allowed; max length 40
characters.
line2 (Optional) Second line associated with the account holder’s address.
Format: String; alphanumeric; UTF-8, white space, comma (,),
underscore (_), hashtag (#), colon (:), forward slash (/), period (.), single
quote (‘), asterisk (*), and hyphen (-) are allowed; max length 40
characters.
Field Description
zip (Conditional) Account holder’s zipcode. Required for the US, but can
be left blank for a non-US address.
Format: String; numeric; max 5 characters.
Field Description
Field Description
group Group.
Format: An array of groupType structures.
Group
Field Description
Field Description
groupID (Required) Contains the issuer-supplied identifier for the group type
specified in the Group Type field. Must not be PAI/PII data.
Format: String; alphabetic, numeric, hyphens ( - ), and underscores
( _) [a-zA-Z0-9-_ ]; max 32 characters.
Response
Successful Response
No response body, if available, will contain the error response of the API as described in this
specification.
Error Response
If a business error is present, it is assumed that no “Standard Errors” were detected in the API
request.
VTS domain-specific business error reason codes are as follows:
Sample Payloads
Sample Request
{
“operatorID”: “Operator1”,
“operationReason”: “Replacement due to lost card”,
“operationReasonCode”: “ACCOUNT_UPDATE”,
“operationType”: “UPDATE”,
“encryptedData”: “<JWS>”
}
<Header>.<Encrypted Key>.<InitializationVector>.<Ciphertext>.
<Authentication Tag>
{
“cardholderInfo”:{
“primaryAccountNumber”: “...”,
“expirationDate”: {
“month”: “...”,
“year”: “...”
}
},
“replaceCardholderInfo”: {
“primaryAccountNumber”: “...”,
“expirationDate”: {
“month”: “...”,
“year”: “...”
}
}
}
},
“accountLevelInfo”: {
“productID”: “...”,
“rpinEnrollment”: {
“action”: “...”,
“accountOpenDate”: “...”,
“rpin”: “...”,
“rpinEffectiveDate”: “...”
},
“customerContactInfo”: {
“accountLevelActionType”: “...”,
“address”: {
“line1”: “...”,
“line2”: “...”,
“companyName”: “...”,
“city”: “...”,
“zip”: “...”
},
“namePrefix”: “...”,
“firstName”: “...”,
“middleInitial”: “...”,
“lastName”: “...”,
“nameSuffix”: “”,
“prefMethodOfContact”: “...”,
“email”: “...”,
“mobileNumber”: “...”
},
“replaceEnrollment”: {
“oldAccountNumber”: “...”,
“linkReasonCode”: “...”,
“unlinkIndicator”: “...”
},
“linkEnrollment”: {
“Group”: [
{
“action”: “...”,
“groupType”: “...”,
“groupID”: “...”,
“isPrimaryAccount”: “...”
},
{
“action”: “...”,
“groupType”: “...”,
“groupID”: “”,
“isPrimaryAccount”: “...”
}
]
}
}
}
Token Inquiry
This service enables the issuer to retrieve token details for a particular token, including device and
risk information.
Request
Endpoints
Path:
{Visa host}/vtis/v1/tokenRequestors/{tokenRequestorID}/tokens/
{tokenReferenceID}/details?apiKey=key
[&cardHolderVerificationRetrieve=true|false]
[&deviceBindingInfo=true|false]
URL Parameters:
Parameter Description
{tokenReferenceID} (Required) Unique ID for the token associated with the PAN. This ID can
be used in lieu of the token for subsequent calls, such as lifecycle
events.
Format: String; max length 32 characters.
Method
GET
Query Parameters
Parameter Description
l true
l false (default)
l true
l false (default)
encryptedData Blob field that contains the encrypted payload; see the “Decrypted
Payload” section for more information.
Format: String; max length 7000 characters.
operatorID Operator ID of either the person or the system that performed the last
status update.
Format: String; max length 16 characters.
Field Description
l TOKEN_REQUESTOR
l ISSUER
For example, only the actor which suspended the token can change
the status back to Activate.
l KEY_ENTERED
l ON_FILE
l MOBILE_BANKING_APP
l TOKEN
l CHIP_DIP
l CONTACTLESS_TAP
l KEY_ENTERED
l CAMERA_CAPTURED
l UNKNOWN
lastFourOfPAN Last four digits of the current PAN for the token.
Format: Numeric; max length 4 digits.
lastFourOfPreviousPAN Last four digits of the previous PAN for the token. If a card has been
replaced while the token was in an active state, this represents the
previous PAN with which the token was associated.
Format: Numeric; max length 4 digits.
Field Description
deviceBindingInfoList Returns a list of device bindings. Only device index and device ID are
populated in device information.
Format: An array of device binding information.
OTP Information
Field Description
l PRESENT
l NOT_PRESENT
l EXPIRED
Field Description
fileControlInformation File control information, which is the FCI IDD tag BF0C in hexadecimal
128 bytes length transformed to a 256-character string that can be
displayed. For example, a 1-hex byte is represented as 2-character
values where each 4-bit nibble represents a character.
issuerApplication Discretionary data, which is the IAD IDD tag 9F10 in hexadecimal 15
DiscretionaryData bytes fixed length (transformed to a 30–character string that can be
displayed). The
9F10 – IAD IDD Format (1 byte) and IDD Data (14 bytes):
Note:
The hexBinary format represents each single 8-bit byte of binary data as two 8-bit characters
in string format.
Example:
A decimal value of 267 = binary b’0000000100001011’ = hex value of x’010B’ (2 bytes)
= hexBinary value of ’010B’ (4 byte string). Only hexadecimal numeric digits, 0–9 and
uppercase letters, A–F are allowed in this canonical representation of hexBinary format. Since
each binary byte is expressed as a character tuple, consisting of 2 hexadecimal digits, a
hexBinary format encoded field must always be expressed in an even number of hexadecimal
digits.
Parameter Description
status
Format: It is one of the following values:
l PENDING
timestamp Timestamp.
Format: UNIX Epoch timestamp, in seconds
Field Description
deviceIndex The index number from Visa where the deviceID is stored. This is
required for token device binding.
Format: Integer between 1 and 99, inclusive.
deviceID For Secure Element (SE) wallet providers, this value is the SE ID in hex
binary characters transformed to a 48-character string.
For Host Card Emulation (HCE) wallet providers, this field is the Device
ID as determined by the digital wallet provider (DWP). All
alphanumeric and special characters are allowed for HCE DWPs.
Secure Element (SE) ID represents the device ID.
Field Description
l DECLINED
l APPROVED
l CHALLENGED
Decrypted Payload
Field Description
tokenInfo Token information, which includes all fields that are available.
Format: A token info structure; see "Token Information" in the
"Encrypted Payload Data Structures" chapter for more information.
l deviceID
l deviceType
l deviceNumber
l deviceName
Format: A device info structure; see "Device Information" in the
"Encrypted Payload Data Structures" chapter for more information.
l walletProviderDeviceScore
l walletProviderAccountScore
l riskAssessmentScore
l visaTokenScore
l visaTokenDecisioning
l walletProviderReasonCodes
l issuerSpecialConditionCodes
Format: A risk info structure; see "Risk Information" in the "Encrypted
Payload Data Structures" chapter for more information.
Sample Payloads
Sample Request
Response-Code: 200
X-RESPONSE-ID: 477...45
Content-Type: application/json;charset=UTF-8
Content-Language: en-US
Date:...
Response Body
{
"encryptedData": "eyJ...uw",
"panReferenceID": "V-3...83",
"entityOfLastAction": "TOKEN_REQUESTOR",
"walletAccountEmailAddressHash": "129...CB",
"clientWalletAccountID": "rq...E",
"panSource": "KEY_ENTERED",
"lastFourOfPAN": "...",
"cardholderVerificationList": [
{
"lifeCycleTraceID": 239...47,
"status": "PENDING",
"timestamp": 1592869947
}
],
"deviceBindingInfoList": [
{
"deviceIndex": 1,
"deviceID": "...",
"deviceName": "...",
"deviceBindingStatus": "APPROVED"
}
]
}
<Header>.<Encrypted Key>.<InitializationVector>.<Ciphertext>.
<Authentication Tag>
Decrypted Data
Decrypted data contained in JWE ciphertext element:
{
"tokenInfo": {
"token": "451...75",
"tokenType": "ECOMMERCE",
"tokenStatus": "ACTIVE",
"tokenExpirationDate": {
"month": "9",
"year": "2024"
},
"tokenAssuranceMethod": "00",
"lastTokenStatusUpdatedTime": "2020-05-06T14:15:10.000Z"
}
}
{
"tokenInfo": {
"token": "...",
"tokenType": "SECURE_ELEMENT",
"tokenStatus": "ACTIVE",
"tokenExpirationDate": {
"month": "...",
"year": "..."
},
"tokenAssuranceMethod": "00",
"tokenActivationDate": "2020-01-30T10:18:17.000Z",
"lastTokenStatusUpdatedTime": "2020-02-22T07:22:29.000Z"
},
"deviceInfo": {
"deviceID": "...",
"deviceType": "MOBILE_PHONE",
"deviceName": "...",
"deviceNumber": "5815"
},
"riskInfo": {
"walletProviderAccountScore": "3",
"walletProviderDeviceScore": "3",
"walletProviderReasonCodes": "01,02,03,04,0D,0G",
"visaTokenScore": "81",
"visaTokenDecisioning": "85",
"riskAssessmentScore": "5"
}
}
{
"tokenInfo": {
"token": "...",
"tokenType": "HCE",
"tokenStatus": "ACTIVE",
"tokenExpirationDate": {
"month": "...",
"year": "..."
},
"tokenAssuranceMethod": "00",
"tokenActivationDate": "2020-06-08T16:19:59.000Z",
"lastTokenStatusUpdatedTime": "2020-06-08T16:20:18.000Z"
},
"deviceInfo": {
"deviceID": "...",
"deviceType": "MOBILE_PHONE",
"deviceName": "..."
},
"riskInfo": {
"visaTokenScore": "35",
"visaTokenDecisioning": "00",
"riskAssessmentScore": "23"
}
}
Request
Endpoints
Path:
{Visa host}/vtis/v1/pan/retrieveTokenInfo?apiKey=key
Method
POST
Query Parameters
API Key
Parameter Description
apiKey (Required) Client-specific API Key issued during onboarding. This value
is passed as a query parameter.
Format: String; alphabetic, numeric; max length 64 characters.
Request Body
Field Description
panReferenceID (Conditional) Unique ID for the PAN. This ID can be used in lieu of PAN
for the subsequent calls, such as life cycle events.
Format: String; max length 32 characters.
encryptedData (Conditional) Blob field that represents the encrypted payload; see
"Cardholder Information" in the "Encrypted Payload Data Structures"
chapter for more information. Only primaryAccountNumber needs
to be provided.
Format: String; max length 7000 characters.
Note:
Either panReferenceID OR encryptedData (PAN) is required. Any requests having more
than one combination is not supported.
Response
Successful API responses will return HTTP status code in the 2xx range. The response body, if
available, will contain the response of the API as described in this specification.
Field Description
tokenDetails Token details that include PAN, token, and token requestor IDs, client
wallet account ID, PAN source, etc. If PAN or PAN Reference ID is
provided in the request, all tokens (max. up to 100) associated with the
PAN/PAN Reference ID and its attributes will be provided in the
response.
Format: An array of tokenDetails structures.
Token Details
Field Description
tokenReferenceID Unique ID for the token associated with the PAN. Can be used in lieu of
the token for subsequent calls, such as lifecycle events.
Format: String; max length 32 characters.
panReferenceID Unique ID for the PAN. Can be used in lieu of PAN for subsequent calls,
such as lifecycle events.
Format: Integer; max length 32 characters.
l TOKEN_REQUESTOR
l ISSUER
Only the actor that suspended the token can change the status back to
Activate.
Field Description
l KEY_ENTERED
l ON_FILE
l MOBILE_BANKING_APP
l TOKEN
l CHIP_DIP
l CONTACTLESS_TAP
l SECURE_ELEMENT
l HCE
l CARD_ON_FILE
l ECOMMERCE
l QRC
l ACTIVE
l INACTIVE
l SUSPENDED
l DEACTIVATED
l true
l false
lastFourOfPAN Last four digits of the current PAN for the token.
Format: String; max length 4 characters.
Error Response
If a business error is present, it is assumed that no Standard Errors were detected in the API request.
Sample Payloads
Sample Request
{
“encryptedData”: “<JWS>”
}
<Header>.<Encrypted Key>.<InitializationVector>.<Ciphertext>.
<Authentication Tag>
{
“cardholderInfo”: {
“primaryAccountNumber”: “”
}
}
OR
{
“panReferenceID”: “V-420...90”,
}
Token Lifecycle
This service enables the issuer to activate, resume, suspend, or delete the token.
Valid Actions
Inactive (I) Y N N Y Y Y
Active (A) N Y N Y Y Y
Suspended (S) N N Y Y Y Y
Deactivated (D) N N N N Y N
Request
Endpoints
Path:
{Visa host}/vtis/v1/tokenRequestors/
{tokenRequestorID}/tokens/{tokenReferenceID}/lifecycle?apiKey=key
URL Parameters
Parameter Description
{tokenReferenceID} (Required) Unique ID for the token associated with the PAN. This ID can
be used in lieu of the token for subsequent calls, such as lifecycle
events.
Format: String; max length 32 characters.
Method
POST
Query Parameters
Parameter Description
Request Body
Field Description
l DELETE
l SUSPEND
l RESUME
l CALL_CENTER_ACTIVATION
l TOKEN_DEVICE_BINDING_APPROVE
l TOKEN_DEVICE_BINDING_REMOVE
l TOKEN_TRUSTED_LISTING_ADD
l TOKEN_TRUSTED_LISTING_REMOVE
l TOKEN_DEVICE_BINDING_APPROVE_CALL_CENTER
l TOKEN_DEVICE_BINDING_APPROVE_BANK_APP
l CARDHOLDER_STEPUP_CALL_CENTER
l CARDHOLDER_STEPUP_APP_TO_APP
operationReason (Required) Reason for operation. Free form. The reason should be
descriptive, such that if the issuer performs an action and the
consumer calls DWP Customer Support, they should be able to read
the reason, advise the consumer, and act accordingly. For example, if
the token is suspended, the Request Reason could say “Suspended due
to lost device”
Format: String; max length 254 characters.
Field Description
deviceInfo (Conditional) Only valid for Device Binding operations, in which case
deviceID and deviceIndex must be populated.
Format: A Device Information structure.
Device Information
This structure is used by several APIs.
Field Description
deviceID (Conditional) For Secure Element (SE) wallet providers, this value will be
the SE ID in hex binary characters transformed to a 48-character string.
For Host Card Emulation (HCE) wallet providers, this field will be the
Device ID as determined by the digital wallet provider (DWP). All
alphanumeric and special characters are allowed for HCE DWPs.
Secure Element (SE) ID represents the device ID.
deviceLanguageCode (Optional) This value is any ISO 639 Version 3 Language Code, for
example, eng (English). This language code will be used by the issuer
and Visa to retrieve the Terms and Conditions (T&C). If T&Cs are not
found for the Language Code in the request, the T&Cs will return the
default :anguage Code of eng (English).
Format: String; ISO-639 Version 3 Language Code, max length 3
characters.
Field Description
l UNKNOWN
l MOBILE_PHONE
l TABLET
l WATCH
l MOBILEPHONE_OR_TABLET
l PC
l HOUSEHOLD_DEVICE
l WEARABLE_DEVICE
l AUTOMOBILE_DEVICE
deviceName (Optional) A readable name for the device. Ideally, the customer enters
this name. It can be used to identify the device in customer support
calls.
Example: My Work Phone
Format: String; Base64URL-encoded; UTF-8; max length 128
characters.
l ANDROID
l IOS
l WINDOWS
l BLACKBERRY
l TIZEN
l OTHER
Field Description
deviceIndex (Conditional) The index number from Visa where the deviceID is
stored. This is required for token device binding.
Format: Integer; max length 2 digits.
deviceIPAddressV4 (Optional) The IP address of the device at the time of the provisioning
request, with the value represented in 255.255.255.255 format. An
octet (255) may be 1–3 digits in length but cannot contain any leading
zeros.
Format: String; max length 15 characters.
Field Description
l WIFI
l CELLULAR
l GPS
l OTHER
l SOFTWARE
l TRUSTED_EXECUTION_ENVIRONMENT
l SECURE_ELEMENT
l CLOUD
Response
Successful Response
Successful API responses will return HTTP status code in the 2xx range. No response body, if
available, will contain the error response of the API as described in this specification.
Error Response
If a business error is present, it is assumed that no Standard Errors were detected in the API request.
VTS domain-specific business error reason codes are as follows:
Sample Payloads
Sample Request
POST https://[Visa host]/vtis/v1/tokenRequestors/400...49/tokens/
DNI...VX/
lifecycle?apikey=XDI...C4
Request Body
{
"operatorID": "...",
"operationReason": "a reason",
"operationType": "TOKEN_DEVICE_BINDING_APPROVE",
"deviceInfo": {
"deviceID": "...",
"deviceIndex": 1
}
}
Request
Endpoints
Path:
{Visa host}/vtis/v1/retrieveNHPPParticipants?apiKey=key
Method
POST
Query Parameters
API Key
Parameter Description
apiKey (Required) Client-specific API Key issued during onboarding. This value
is passed as a query parameter.
Format: String; alphabetic, numeric; max length 64 characters.
Request Body
Field Description
encryptedData (Required) Blob field that contains the encrypted payload; see
"Cardholder Information" in the "Encrypted Payload Data Structures"
chapter for more information. Only primaryAccountNumber needs
to be provided.
Format: String; max length 7000 characters.
Response
Successful Response
Successful API responses will return HTTP status code in the 2xx range. The response body, if
available, will contain the response of the API as described in this specification.
Field Description
NHPP Profiles
Field Description
tokenRequestorID Unique ID that identifies the entity for which the token request is being
conducted on behalf of (OBO).
Format: String; max length 11 digits.
l SECURE_ELEMENT
l HCE
l CARD_ON_FILE
l ECOMMERCE
l QRC
sourceAddress The URL that is used by issuers to push the encrypted payload for
cross-device push provisioning.
Format: String; Base64URL-encoded; max length 1024 characters.
supportedPlatforms A list of the end point URIs that can be invoked to push a token to the
token requestor.
Format: An array of Wallet Provider Supported Platforms Information
structures
l VISA
l MASTERCARD
Note:
Either sourceAddress OR supportedPlatforms is required.
Field Description
uri The URI or universal link that is used to invoke the token requestor’s
device or web app.
Format: String, max length 1024 characters.
l IOS
l ANDROID
l WEB
l WINDOWS
l VISA_AS_HOP
l POST_BINDING
Error Response
If a business error is present, it is assumed that no “Standard Errors” were detected in the API
request.
VTS domain-specific business error reason codes are as follows:
Sample Payloads
{
“cardholderInfo”:{
“primaryAccountNumber”: “”
}
}
{
"displayName": "SRC",
"clientID": "33ba...01",
"tokenRequestorID": "400...38",
"tokenTypes": [
"HCE",
"ECOMMERCE"
],
"logoURL": "aHR...0.",
"supportedPlatforms": [
{
"platformType": "VISA_AS_HOP",
"accountBindingMode": [
"POST_BINDING"
]
}
],
"supportedCardTypes": [
"VISA"
]
},
{
"displayName": "vhop",
"clientID": "2170...bb",
"tokenRequestorID": "400...95",
"tokenTypes": [
"HCE",
"ECOMMERCE"
],
"logoURL": "aHR......",
"supportedPlatforms": [
{
"platformType": "VISA_AS_HOP",
"accountBindingMode": [
"POST_BINDING"
]
}
],
"supportedCardTypes": [
"VISA"
]
},
{
"displayName": "SDKNHPPTest",
"clientID": "4e7...01",
"tokenRequestorID": "400...39",
"tokenTypes": [
"HCE",
"ECOMMERCE"
],
"logoURL": "aHR...0.",
"supportedPlatforms": [
{
"platformType": "VISA_AS_HOP",
"accountBindingMode": [
"POST_BINDING"
]
}
],
"supportedCardTypes": [
"VISA"
]
}
]
}
Request
Endpoints
Path:
{Visa host}/vtis/v1/updateCardMetadata?apiKey=key
Method
POST
Query Parameters
API Key
Parameter Description
apiKey (Required) Client-specific API Key issued during onboarding. This value
is passed as a query parameter.
Format: String; alphabetic, numeric; max length 64 characters.
Request Body
Field Description
tokenReferenceID (Conditional) Unique ID for the token associated with the PAN.
Required when tokenRequestorID is specified. Can be used in lieu
of the token for subsequent calls, such as lifecycle events. Specifying a
value causes metadata to be updated for only the associated token.
Format: String; max length 32 characters.
panReferenceID (Conditional) Unique ID for the PAN. See the note below regarding
when it is required. Can be used in lieu of PAN for subsequent calls,
such as lifecycle events. Specifying a value causes metadata to be
updated for all tokens associated with the PAN.
Format: String; max length 32 characters.
encryptedData (Conditional) Blob field that contains the encrypted payload; see
"Cardholder Information" in the "Encrypted Payload Data Structures"
chapter for more information. Only primaryAccountNumber needs
to be provided. See the note below regarding when it is required.
Specifying a value causes metadata to be updated for all tokens
associated with the PAN.
Format: String; max length 7000 characters.
Note:
One of the following is required:
l tokenRequestorID and tokenReferenceID, OR
l panReferenceID, OR
l encryptedData (primaryAccountNumber)
Any requests having more than one combination is not supported.
Field Description
foregroundColor (Optional) Foreground color of the Digital Wallet entry for the card.
Specified as a CSS style RGB triple. This value is optional in this API
because the issuer may pre-configure this value via Visa Card Art
Management (VCMM).
Example: rgb(255,122,235)
Format: String; max length 32 characters.
backgroundColor (Optional) Background color of the Digital Wallet UI entry (“space”) for
the card. Specified as a CSS style RGB triple. It is optional in this API
because the issuer may pre-configure this value via VCMM
Example: rgb(255,122,235)
Format: String; max length 32 characters.
labelColor (Optional) Label color of the Digital Wallet entry for the card. Specified
as a CSS style RGB triple. It is optional in this API because the issuer
may pre-configure this value via VCMM.
Example: rgb(255,122,235)
Format: String; max length 32 characters.
shortDescription (Optional) A short description of the card. May be used with lock-
screen notifications.
Example: The Bank Card
Format: String; max length 32 characters.
longDescription (Optional) Longer description of the card. May be used inside the
Digital Wallet.
Example: The Bank Signature Rewards Card
Format: String; max length 64 characters.
Field Description
profileID (Conditional) Profile ID associated with the card. Only applicable for
issuers who opt for the Check Eligibility API service. During the pre-
loading of Card Metadata into the Visa system, either via Visa Card Art
Management UI (VCMM) or the Batch file Interface, issuers have an
option to assign their own unique profile ID (GUID) to a set of card
metadata.
Example: 12c7bc...
In this example:
termsAndConditionsID (Optional) GUID-based file name for Terms and Conditions text. File
used by the issuer while loading the image in VCMM. This is a DWP
required field. However, it is optional in this API because the issuer can
pre-configure this value via VCMM. This value is not applicable for
Check Eligibility; only available for Update Card Metadata.
Format: String; max length 64 characters.
privacyPolicyURL (Optional) URL pointing to an issuing bank’s privacy policy. This value is
nott applicable for Check Eligibility; only available for Update Card
Metadata.
Format: String; max length 128 characters.
termsAndConditionsURL (Optional) URL pointing to the issuing bank’s terms and conditions for
a card. This value is not applicable for Check Eligibility; only available
for Update Card Metadata.
Format: String; max length 128 characters.
Field Description
cardArtRefID (Conditional) GUID-based file names for Cart Art Image file used by
the issuer while loading the image in VCMM. Required by DWP-
required field; it is optional in this API because the issuer can pre-
configure this value via VCMM.
Format: An array of GUID-based file names; max length 32 characters.
Field Description
supportsTokenNotifications (Optional) Indicates whether the card supports token notifications for
transactions originating on the device.
Format: It is one of the following values:
l true
l false
supportsFPANNotifications (Optional) Indicates whether the card supports FPAN notifications for
all transactions that point back to the FPAN. Not applicable for Check
Eligibility; only available for Update Card Metadata.
Format: It is one of the following values:
l true
l false
messageServiceURL (Optional) URL of the message/offer web service that conforms to the
API as described to PNOs and issuers in the Card Notification Services
API Specification. Not applicable for Check Eligibility; only available for
Update Card Metadata.
Format: String; max length 128 characters.
transactionPushTopic (Conditional) A push topic the issuer uses to notify the device that new
transactions are available. Not applicable for Check Eligibility; only
available for Update Card Metadata.
Format: String; max length 128 characters.
messagePushTopic (Conditional) A push topic the notification provider uses to notify the
device that new messages are available. Not applicable for Check
Eligibility; only available for Update Card Metadata.
Format: String; max length 128 characters.
Field Description
appLaunchURL (Optional) URL passed to the associated issuer mobile app when
launching it. If this key is present, the
associatedStoreIdentifiers key must also be present. This
field is not applicable for Check Eligibility; only for Update Card
Metadata.
appLaunchURLScheme (Optional) URL scheme that the application is registered for, in order to
deep link from transaction notifications and show all transaction notifi
cations. The Application ID must be included in the
associatedApplicationsIdentifiers array and the application
itself must register for the URL scheme specified in this key. This field is
not applicable for Check Eligibility; only for Update Card Metadata.
Contact Information
Field Description
Field Description
contactName Name of the issuing bank. It may be used in combination with other
text strings.
Example: If contactName is “XYZ Bank”, it may be used to construct
a string such as “Contact XYZ Bank”, or “XYZ Bank Contact
Information”.
Format: String; max length 32 characters.
Response
Note:
Visa will return the response after validating the request received from the issuer. A successful
response is not an indication that card metadata updates have been successfully done on the
device(s); it is merely an indication that updates have been successfully queued up by Visa for
delivery to device(s). If a device is not accessible, the actual update may happen much later.
Successful Response
Successful API responses will return HTTP status code in the 2xx range. The response body, if
available, will contain the response of the API as described in this specification.
Field Description
responseDetails Contains response details such as task, token reference. and token
requestor IDs and status code. Also includes all inactive tokens.
Deactivated tokens will be returned with the Action Code of
NOT_ALLOWED
Format: A Response Details structure array.
Response Details
Field Description
taskID GUID, with hyphens allowed. The issuer needs to store this for future
references. This value is present when Action Code is PENDING
Format: String, [A-Z][a-z][0-9], with hyphens (-) allowed; max length
36 characters.
Field Description
tokenReferenceID Unique ID for the token associated with the PAN. This can be used in
lieu of the token for subsequent calls, such as lifecycle events.
Format: String; max length 32 characters.
panReferenceID Unique ID for the PAN. This can be used in lieu of the PAN for
subsequent calls, such as life cycle events.
Format: String; max length 32 characters.
l PENDING
l FAILURE
l NOT_ALLOWED
errorCode This is present for business error codes VSEXXXXX and status code
FAILURE.
Format: String; max length 8 characters.
Error Responses
If a business error is present, it is assumed that no “Standard Errors” were detected in the API
request.
VTS domain-specific business error reason codes are as follows:
Sample Payloads
Sample Request
{
"encryptedData": "<JWS>",
"operatorID": "Operator1",
"operationReason": "OperationReason",
"cardMetadataInfo": {
"foregroundColor": "rgb(255,255,255)",
"backgroundColor": "rgb(255,255,255)",
"labelColor": "rgb(255,255,255)",
"shortDescription": "Fifth Group",
"longDescription": "Fifth Group",
"cardIssuer": "ieadmin",
"cardArtData": {
"cardArtRefID": [
"...",
"...",
"...",
"..."
]
},
"privacyPolicyURL": "https://www.issuer.com/data/dataprivacy",
"termsAndConditionsURL": "https://issuer.com/data/tnc",
"contactInfo": {
"contactWebsite": "https://issuer.com",
"contactNumber": "800-000-0000",
"contactName": "issuer"
},
"applicationInfo": {
"supportsTokenNotifications": true,
"supportsFPANNotifications": false,
"transactionServiceURL":
"https://vntsnotificationservice.visa.com/TxnHist/1",
"messageServiceURL": null
}
}
}
Sending Profile ID
{
"operationReason": "Card Art Update",
"tokenReferenceID": "DNI...77",
"tokenRequestorID": "400...24",
"cardMetadataInfo": {
"cardArtData": {},
"contactInfo": {},
"applicationInfo": {},
"profileID": "bxx...2d"
}
}
<Header>.<Encrypted Key>.<InitializationVector>.<Ciphertext>.
<Authentication Tag>
{
“cardholderInfo”: {
“primaryAccountNumber”: “”
}
}
that match the criteria. You can iterate over subsequent results, incrementing the page number and
calling the API for the next page until you have received all the results.
Note:
You can obtain all the results when the page value multiplied by the limit value is equal to
or exceeds the totalResults; or if page equals 0, when the limit is equal to or exceeds
the totalResults.
Request
Endpoints
Path:
{Visa host}/vtis/v1/reports/tokenRequestor
Method
GET
Query Parameters
API Key
Parameter Description
apiKey (Required) Client-specific API Key issued during onboarding. This value
is passed as a query parameter.
Format: String; alphabetic, numeric; max length 64 characters.
Parameter Description
fromIDAssignedDateTime (Required) The date/time that the token requestor ID was first
assigned, in GMT. The fromIDAssignedDateTime date must be
prior to the current date but no earlier than 60 days before the current
date.
toIDAssignedDateTime (Required) The date/time that the token requestor ID was last assigned
in GMT.
Request Body
None
Response
Successful Response
Successful API responses will return HTTP status code in the 2xx range. The response body, if
available, will contain the response of the API as described in this specification.
Field Description
Token Requestors
Field Description
l SECURE_ELEMENT
l HCE
l CARD_ON_FILE
l ECOMMERCE
l QRC
Field Description
Error Responses
Only standard errors are returned; for more information, see "Error Handling" in "Getting Started with
REST APIs."
Sample Payloads
Sample Request
GET https://cert.api.visa.com/vtis/v1/reports/tokenRequestor?
apiKey=...&
fromIDAssignedDateTime=2022-11-03T08%3A57%3A20.567&
limit=1&
page=0&
toIDAssignedDateTime=2022-11-05T08%3A57%3A20.567
x-pay-token: xv2:167...78:c6e...c2
x-request-id: sample123
Response-Code: 200
X-RESPONSE-ID: 166...WS
Content-Type: application/json;charset=UTF-8
Content-Language: en-US
Date:...
Response Body
{
"count": 1,
"totalResults": 1,
"maxTokenRequestorIDAssignedDateTime": "2022-11-04T00:35:08.419",
"tokenRequestors": [
{
"tokenRequestorID": 34324421,
Approve Provisioning
This API is invoked during the token provisioning flow on a device. Visa invokes this API call to the
issuer with Identity Verification and Validation (ID&V) attributes and other relevant attributes so that
the issuer can take appropriate action, such as approve, decline, or step-up, based on those
attributes to provision the token.
Request
Endpoints
Path:
{Issuer Endpoint}/vtis/v2/tokenRequestors/
{tokenRequestorID}/tokens/{tokenReferenceID}/approveProvisioning
URL Parameters
Parameter Description
{tokenReferenceID} (Required) Unique ID for the token associated with the PAN. This ID can
be used in lieu of the token for subsequent calls, such as life cycle
events.
Format: String; max length 32 characters.
Method
POST
Request Body
Field Description
panReferenceID (Required) Unique ID for the PAN. This ID can be used in lieu of PAN for
subsequent calls, such as lifecycle events.
Format: String, max length 32 characters.
walletAccountEmailAddressHash (Required) Hash of email address that is linked to the wallet account
login ID.
Format: String; max length 64 characters.
Field Description
l KEY_ENTERED
l ON_FILE
l MOBILE_BANKING_APP
l TOKEN
l CHIP_DIP
l CONTACTLESS_TAP
l M — CVV2 Match, indicates that Visa was able to verify the CVV2
value provided by the wallet provider.
l N — CVV2 No Match, indicates that Visa was not able to verify the
CVV2 value provided by the wallet provider.
l P — Not processed, indicates that Visa was unable to verify the
CVV2 value provided by the wallet provider. This applies for Issuers
opting for CVV2 Bypass only.
l S — CVV2 should be on the card: Indicates that V.I.P. or the issuer
was unable to perform CVV2 verification and notifies the merchant
that the card should contain a CVV2 value.
l U — Issuer is not available, does not participate in the CVV2 Service,
or participates but has not provided Visa with encryption keys:
Indicates that the issuer is notparticipating in the CVV2 Service or
has not provided Visa with encryption keys needed to perform
verification, or that STIP has responded to an issuer-unavailable
response.
l KEY_ENTERED
l CAMERA_CAPTURED
l UNKNOWN
Field Description
encryptedData (Required) Blob field that contains the encrypted payload; see
"Cardholder Information" and "Risk Information" in the "Encrypted
Payload Data Structures" chapter for more information.
Format: String; max length 7000 characters.
Device Information
Field Description
deviceID For Secure Element (SE) wallet providers, this value will be the SE ID in
hex binary characters transformed to a 48-character string.
For Host Card Emulation (HCE) wallet providers, this field will be the
Device ID as determined by the digital wallet provider (DWP). All
alphanumeric and special characters are allowed for HCE DWPs.
Secure Element (SE) ID represents the device ID.
deviceLanguageCode This value is any ISO 639 Version 3 Language Code, for example, eng
(English). This language code will be used by the issuer and Visa to
retrieve the Terms and Conditions (T&C). If T&Cs are not found for the
Language Code in the request, the T&Cs will return the
default :anguage Code of eng (English).
Format: String; ISO-639 Version 3 Language Code, max length 3
characters.
Field Description
l UNKNOWN
l MOBILE_PHONE
l TABLET
l WATCH
l MOBILEPHONE_OR_TABLET
l PC
l HOUSEHOLD_DEVICE
l WEARABLE_DEVICE
l AUTOMOBILE_DEVICE
deviceName A readable name for the device. Ideally, the customer enters this name.
It can be used to identify the device in customer support calls.
Example: My Work Phone
Format: String; Base64URL-encoded; UTF-8; max length 128
characters.
l ANDROID
l IOS
l WINDOWS
l BLACKBERRY
l TIZEN
l OTHER
Field Description
deviceIndex The index number from Visa where the deviceID is stored. This is
required for token device binding.
Format: Integer; max length 2 digits.
deviceIPAddressV4 (Optional) The IP address of the device at the time of the provisioning
request, with the value represented in 255.255.255.255 format. An
octet (255) may be 1–3 digits in length but cannot contain any leading
zeros.
Format: String; max length 15 characters.
l WIFI
l CELLULAR
l GPS
l OTHER
Field Description
l SOFTWARE
l TRUSTED_EXECUTION_ENVIRONMENT
l SECURE_ELEMENT
l CLOUD
originalDeviceID Device ID from the original provision. This field is populated only when
performing token-for-token provisioning and can be used only in the
following APIs:
l Approve Provisioning
l Approve Provisioning Stand-In Notification
l Token Create Notification
Format: String; max length 48 characters.
originalDeviceType Device type from the original provision. This field is populated only
when performing token-for-token provisioning and can be used only
in the following APIs:
l Approve Provisioning
l Approve Provisioning Stand-In Notification
l Token Create Notification
Format: It is one of the following values:
l UNKNOWN
l MOBILE_PHONE
l TABLET
l WATCH
l MOBILEPHONE_OR_TABLET
l PC
l HOUSEHOLD_DEVICE
l WEARABLE_DEVICE
l AUTOMOBILE_DEVICE
Token Information
Field Description
l Approve Provisioning
l Approve Provisioning Stand-In Notification
l Token Create Notification
Format: It is one of the following values:
l SECURE_ELEMENT
l HCE
l CARD_ON_FILE
l ECOMMERCE
l QRC
l ACTIVE
l INACTIVE
l SUSPENDED
l DEACTIVATED
tokenExpirationDate (Conditional) The date upon which the token is set to expire. This field
is required in the Token Create Notification API.
Format: An Expiration Date structure.
Field Description
tokenAssuranceMethod (Optional) Method of Issuer ID&V that has taken place at time of
provisioning, device binding, or cardholder initiated verification. It is
one of the following values:
numberOfActiveTokensForPAN (Optional) Number of device tokens that are currently active for this
PAN.
Format: Integer; max length 4 digits.
numberOfInactiveTokensForPAN (Optional) Number of device tokens that are currently inactive (device
tokens have not been activated) for this PAN.
Format: Integer; max length 4 digits.
numberOfSuspendedTokensForPAN (Optional) Number of device tokens that were activated, but are
suspended for payments for this PAN.
Format: Integer; max length 4 digits.
originalTokenRequestorID (Required) Unique ID assigned to the initiator of the token request. This
field is populated when performing token-for-token provisioning only.
Format: Numeric; max length 11 digits.
Field Description
originalTokenReferenceID (Conditional) Unique ID for the token associated with the PAN. This ID
can be used in lieu of the token for subsequent calls, such as life cycle
events. This field is populated when performing token-for-token
provisioning only.
Format: String; max length 32 characters.
originalTokenType (Conditional) Token type of the original token. This field is populated
only when performing token for token provisioning and can be used
only in the following APIs:
l Approve Provisioning
l Approve Provisioning Stand-In Notification
l Token Create Notification
Format: It is one of the following values:
l SECURE_ELEMENT
l HCE
l CARD_ON_FILE
l ECOMMERCE
l QRC
l PSEUDO_ACCOUNT
Field Description
autoFillIndicator (Conditional) Indicates whether the token is for an autofill use case.
This is a required field in the following APIs:
l Approve Provisioning
l Approve Provisioning Stand-In Notification
l Token Create Notification
Format: It is one of the following values:
Response
Successful Response
Successful API responses will return HTTP status code in the 2xx range.
Field Description
errorCode This value will be present in the case of business error codes
ISEXXXXX.
Format: String; max length 8 characters.
l M— CVV2 Match, indicates that Visa was able to verify the CVV2
value provided by the wallet provider.
l N— CVV2 No Match, indicates that Visa was not able to verify the
CVV2 value provided by the wallet provider.
l P— Not processed, indicates that Visa was unable to verify the
CVV2 value provided by the wallet provider. This applies for Issuers
opting for CVV2 Bypass only.
l S — CVV2 should be on the card: Indicates that V.I.P. or the issuer
was unable to perform CVV2 verification and notifies the merchant
that the card should contain a CVV2 value.
l U — Issuer is not available, does not participate in the CVV2 Service,
or participates but has not provided Visa with encryption keys:
Indicates that the issuer is notparticipating in the CVV2 Service or
has not provided Visa with encryption keys needed to perform
verification, or that STIP has responded to an issuer-unavailable
response.
Field Description
issuerSpecialConditionCodes Values populated by the issuer and then passed during the step-up API
calls to the issuer.
Format: String; max length 100 characters.
Error Responses
If a business error is present, it is assumed that no Standard Errors were detected in the API request.
VTS domain-specific business error reason codes are as follows:
Sample Payloads
Sample Request
{
"panReferenceID": "V-58...65",
"walletAccountEmailAddressHash": "55C...08",
"clientWalletAccountID": "400...30",
"visaTokenScore": null,
"visaTokenDecisioning": null,
"panSource": "KEY_ENTERED",
"addressVerificationResultCode": null,
"cvv2ResultsCode": null,
"consumerEntryMode": null,
"locale": null,
"encryptedData": "<JWS>",
"deviceInfo": {
"deviceID": null,
"deviceLanguageCode": "eng",
"deviceType": null,
"deviceName": null,
"deviceNumber": null,
"osType": null,
"osVersion": null,
"osBuildID": null,
"deviceIDType": null,
"deviceManufacturer": null,
"deviceBrand": null,
"deviceModel": null,
"deviceLocation": null,
"deviceIPAddressV4": "...",
"locationSource": null,
"tokenProtectionMethod": "CLOUD",
"deviceIndex": null
},
"lifeCycleTraceID": 381...69,
"tokenRequestorTspID": "400...41",
"tokenInfo": {
"token": "...",
"tokenType": "CARD_ON_FILE",
"tokenStatus": null,
"tokenExpirationDate": "...",
"tokenAssuranceMethod": "",
"numberOfActiveTokensForPAN": ...,
"numberOfInactiveTokensForPAN": ...,
"numberOfSuspendedTokensForPAN": ...,
"originalToken": "...",
"originaltokenAssuranceMethod": null,
"originalTokenRequestorID": null,
"originalTokenReferenceID": null
}
}
{
“cardholderInfo”:{
“primaryAccountNumber”: “”,
“cvv2”: “”,
“name”: “”,
“expirationDate”: {
“month”: “”,
“year”: “”
},
“billingAddress”:{
“line1”: “”,
“line2”: “”,
“city”: “”,
“state”: “”,
“country”: “”,
“postalCode”: “”
},
“highValueCustomer”: “”,
“riskAssessmentScore”: “”
},
“riskInformation”: {
“walletProviderRiskAssessment”: “”,
“walletProviderRiskAssessmentVersion”: “”,
“walletProviderAccountScore”: “”,
“walletProviderDeviceScore”: “”,
“walletProviderReasonCodes”: “”,
“deviceBluetoothMac”: “”,
“deviceIMEI”: “”,
“deviceSerialNumber”: “”,
“deviceTimeZone”: “”,
“deviceTimeZoneSetting”: “”,
“osID”: “”,
“simSerialNumber”: “”,
“deviceLostMode”: “”,
“daysSinceConsumerDataLastAccountChange”: “”,
“accountHolderName”: “”,
“walletProviderPANAge”: “”,
“walletAccountHolderCardNameMatch”: “”,
“accountToDeviceBindingAge”: “”,
“userAccountFirstCreated”: “”,
“provisioningAttemptsOnDeviceIn24Hours”: “”,
“distinctCardholderNames”: “”,
“deviceCountry”: “”,
“walletAccountCountry”: “”,
“suspendedCardsInAccount”: “”,
“daysSinceLastAccountActivity”: “”,
“numberOfTransactionsInLast12months”: “”,
“numberOfActiveTokens”: “”,
“deviceWithActiveTokens”: “”,
“activeTokensOnAllDeviceForAccount”:“”,
“visaTokenScore”: “”,
“visaTokenDecisioning”: “”
}
}
Request
Endpoints
Path:
{Issuer Endpoint}/vtis/v2/tokenRequestors/
{tokenRequestorID}/tokens/{tokenReferenceID}/tokenChanged?
eventType=eventType
URL Parameters
Parameter Description
{tokenReferenceID} (Required) Unique ID for the token associated with the PAN. This ID can
be used in lieu of the token for subsequent calls, such as lifecycle
events.
Format: String; max length 32 characters.
Method
POST
Query Parameters
Parameter Description
l TOKEN_ACTIVATION_STIP
–token activation occurred in STIP mode
Request Body
Field Description
panReferenceID (Required) Unique ID for the PAN. This ID can be used in lieu of PAN for
subsequent calls, such as lifecycle events.
Format: String, max length 32 characters.
walletAccountEmailAddressHash (Required) Hash of email address that is linked to the wallet account
login ID.
Format: String; max length 64 characters.
l KEY_ENTERED
l ON_FILE
l MOBILE_BANKING_APP
l TOKEN
l CHIP_DIP
l CONTACTLESS_TAP
Field Description
l M— CVV2 Match, indicates that Visa was able to verify the CVV2
value provided by the wallet provider.
l N— CVV2 No Match, indicates that Visa was not able to verify the
CVV2 value provided by the wallet provider.
l P— Not processed, indicates that Visa was unable to verify the
CVV2 value provided by the wallet provider. This applies for Issuers
opting for CVV2 Bypass only.
l S — CVV2 should be on the card: Indicates that V.I.P. or the issuer
was unable to perform CVV2 verification and notifies the merchant
that the card should contain a CVV2 value.
l U — Issuer is not available, does not participate in the CVV2 Service,
or participates but has not provided Visa with encryption keys:
Indicates that the issuer is notparticipating in the CVV2 Service or
has not provided Visa with encryption keys needed to perform
verification, or that STIP has responded to an issuer-unavailable
response.
l KEY_ENTERED
l CAMERA_CAPTURED
l UNKNOWN
encryptedData (Required) Blob field that contains the encrypted payload; see
"Cardholder Information," "Token Information," and "Risk Information"
in the "Encrypted Payload Data Structures" chapter for more
information.
Format: String; max length 7000 characters.
Field Description
stipReasonCode (Required) This field contains a code that identifies why STIP responded
for the issuer.
Format: It is one of the following values:
Field Description
Response
Successful Response
Successful API responses returns an HTTP 200 status code with no response payload.
Error Responses
The notification API is an asynchronous API and does not need the issuer to return anything to Visa.
The issuer returns the following error statuses as appropriate with no response payload in addition to
the “Standard Errors”.
400 Bad Request The request could not be understood by the server due to
malformed syntax. The client should not repeat the request
without modifications.
404 Not Found The server has not found anything matching the Request URI.
500 Internal Server Error An unspecified server error has occurred. Visa should attempt to
retry or contact issuer support.
Sample Payloads
Sample Request
{
"panReferenceID": "V-5...45",
"walletAccountEmailAddressHash": "729...76",
"clientWalletAccountID": "Yqc...MK",
"visaTokenScore": "19",
"visaTokenDecisioning": "00",
"panSource": "ON_FILE",
"encryptedData": "eyJ...iQ",
"deviceInfo": {
"deviceLanguageCode": "spa",
"tokenProtectionMethod": "CLOUD"
},
"lifeCycleTraceID": 380...56,
"stipReasonCode": "9020",
"actionCode": "00",
"dateTimeOfEvent": "2020-07-17T22:08:16.000Z"
}
{
“tokenInfo”: {
“tokenType”: “”,
“tokenAssuranceMethod”: “”,
“numberOfActiveTokensForPAN”: “”,
“numberOfInactiveTokensForPAN”: “”,
“numberOfSuspendedTokensForPAN”: “”
},
“cardholderInfo”:{
“primaryAccountNumber”:“”,
“cvv2”: “”,
“name”: “”,
“expirationDate”: {
“month”: “”,
“year”: “”
“billingAddress”:{
“line1”: “”,
“line2”: “”,
“city”: “”,
“state”: “”,
“country”: “”,
“postalCode”: “”
},
“highValueCustomer”: “”,
“riskAssessmentScore”: “”
},
“riskInformation”: {
“walletProviderRiskAssessment”: “”,
“walletProviderRiskAssessmentVersion”: “”,
“walletProviderAccountScore”: “”,
“walletProviderDeviceScore”: “”,
“walletProviderReasonCodes”: “”,
“deviceBluetoothMac”: “”,
“deviceIMEI”: “”,
“deviceSerialNumber”: “”,
“deviceTimeZone”: “”,
“deviceTimeZoneSetting”: “”,
“osID”: “”,
“simSerialNumber”: “”,
“deviceLostMode”: “”,
“daysSinceConsumerDataLastAccountChange”: “”,
“accountHolderName”: “”,
“walletProviderPANAge”: “”,
“walletAccountHolderCardNameMatch”: “”,
“accountToDeviceBindingAge”: “”,
“userAccountFirstCreated”: “”,
“provisioningAttemptsOnDeviceIn24Hours”: “”,
“distinctCardholderNames”: “”,
“deviceCountry”: “”,
“walletAccountCountry”: “”,
“suspendedCardsInAccount”: “”,
“daysSinceLastAccountActivity”: “”,
“numberOfTransactionsInLast12months”: “”,
“numberOfActiveTokens”: “”,
“deviceWithActiveTokens”: “”,
“activeTokensOnAllDeviceForAccount": “”
“visaTokenScore”: “”,
“visaTokenDecisioning”: “”
}
}
Successful Response
Successful API responses returns an HTTP 200 status code with no response payload.
Request
Endpoints
Path:
{Issuer Endpoint}/vtis/v1/tokenRequestors/
{tokenRequestorID}/tokens/{tokenReferenceID}/notification?
eventType=eventType
URL Parameters
Parameter Description
{tokenReferenceID} (Required) Unique ID for the token associated with the PAN. This ID can
be used in lieu of the token for subsequent calls, such as life cycle
events.
Format: String; max length 32 characters.
Method
POST
Query Parameters
Parameter Description
l CARD_METADATA_UPDATED
– PAN updated
Request Body
Field Description
taskID (Required) GUID with hyphens. The issuer needs to store this for future
references.
Format: String; max length 36 characters.
l SUCCESS
l FAILURE
Visa Token Service (VTS) domain-specific business error reason codes are as follows:
Response
Successful Response
Successful API responses will return HTTP 200 status code with no response payload.
Error Response
The notification API is an asynchronous API and does not need the issuer to return anything to Visa.
The issuer returns the following error statuses as appropriate with no response payload in addition to
the Standard Errors.
400 Bad Request The request could not be understood by the server because of
malformed syntax. The client should not repeat the request until
modifications have been made.
404 Not Found The server has not found anything matching the Request URI.
500 Internal Server Error An unspecified server error has occurred. Visa should attempt to
retry or contact issuer support.
Sample Payloads
Check Eligibility
This API is invoked during the token provisioning flow on a device. Visa invokes this API call to the
issuer with ID&V attributes and other relevant attributes so that the issuer can take appropriate
action, such as approve or decline, based on those attributes to provision the token.
This service allows issuers to:
l Pre-screen the cardholder who is about to start provisioning of tokens to a digital wallet.
l Provide reference to Card Art and Terms & Conditions (T&Cs) for a specific cardholder PAN.
l Deliver Token Reference ID that can be used by the issuers in subsequent calls to Visa, for
example, in Token Lifecycle control APIs, instead of using the token value.
The three functions of API described above are optional; the issuer may opt to participate in this API
integration for a subset of the described functions. Because participation in this API is optional, the
issuer may decide to provide all required information to Visa so that Visa can perform On-Behalf
processing.
Alternate Flow: STIP Processing
If the issuer system does not respond with a response message within the required timeframe or
issuer returns ISE40504 error code, Visa systems will determine if the card is eligible for tokenization
and if so, will return the issuer-defined card art and Terms and Conditions (T&C) to the wallet
provider on behalf of the issuer.
Note:
If there are no pre-configured card metadata for the corresponding card being enrolled, the
enrollment will be declined to the wallet provider.
Request
Endpoints
Path:
{Issuer Endpoint}/vtis/v1/checkEligibility
Method
POST
Request Body
In the case of a provisioning flow, tokenRequestorID, tokenReferenceID, and
panReferenceID must always be present.
Field Description
tokenReferenceID (Conditional) Unique ID for the token associated with the PAN. This ID
can be used in lieu of the token for subsequent calls, such as lifecycle
events.
Format: String; max length 32 characters.
Field Description
panReferenceID (Conditional) Unique ID for the PAN. This ID can be used in lieu of PAN
for subsequent calls, such as lifecycle events.
Format: String; max length 32 characters.
l KEY_ENTERED
l ON_FILE
l MOBILE_BANKING_APP
l TOKEN
l CHIP_DIP
l CONTACTLESS_TAP
l deviceID
l deviceLanguageCode
Format: A Device Information structure.
encryptedData (Required) Blob field that contains the encrypted payload; see
"Cardholder Information" in the "Encrypted Payload Data Structures"
chapter for more information. Only primaryAccountNumber needs
to be provided in cardholderInfo.
Format: String; max length 7000 characters.
Response
Successful Response
Successful API responses will return HTTP status code in the 2xx range. The response body, if
available, will contain the response of the API as described in this specification.
Field Description
errorCode This is present in the case of business error ISEXXXXX codes. Required
for Decline.
Format: String; max length 8 characters.
Field Description
foregroundColor (Optional) Foreground color of the Digital Wallet entry for the card.
Specified as a CSS style RGB triple. This value is optional in this API
because the issuer may pre-configure this value via Visa Card Art
Management (VCMM).
Example: rgb(255,122,235)
Format: String; max length 32 characters.
backgroundColor (Optional) Background color of the Digital Wallet UI entry (“space”) for
the card. Specified as a CSS style RGB triple. It is optional in this API
because the issuer may pre-configure this value via VCMM
Example: rgb(255,122,235)
Format: String; max length 32 characters.
labelColor (Optional) Label color of the Digital Wallet entry for the card. Specified
as a CSS style RGB triple. It is optional in this API because the issuer
may pre-configure this value via VCMM.
Example: rgb(255,122,235)
Format: String; max length 32 characters.
shortDescription (Optional) A short description of the card. May be used with lock-
screen notifications.
Example: The Bank Card
Format: String; max length 32 characters.
longDescription (Optional) Longer description of the card. May be used inside the
Digital Wallet.
Example: The Bank Signature Rewards Card
Format: String; max length 64 characters.
Field Description
profileID (Conditional) Profile ID associated with the card. Only applicable for
issuers who opt for the Check Eligibility API service. During the pre-
loading of Card Metadata into the Visa system, either via Visa Card Art
Management UI (VCMM) or the Batch file Interface, issuers have an
option to assign their own unique profile ID (GUID) to a set of card
metadata.
Example: 12c7bc...
In this example:
termsAndConditionsID (Optional) GUID-based file name for Terms and Conditions text. File
used by the issuer while loading the image in VCMM. This is a DWP
required field. However, it is optional in this API because the issuer can
pre-configure this value via VCMM. This value is not applicable for
Check Eligibility; only available for Update Card Metadata.
Format: String; max length 64 characters.
privacyPolicyURL (Optional) URL pointing to an issuing bank’s privacy policy. This value is
nott applicable for Check Eligibility; only available for Update Card
Metadata.
Format: String; max length 128 characters.
termsAndConditionsURL (Optional) URL pointing to the issuing bank’s terms and conditions for
a card. This value is not applicable for Check Eligibility; only available
for Update Card Metadata.
Format: String; max length 128 characters.
Field Description
cardArtRefID (Conditional) GUID-based file names for Cart Art Image file used by
the issuer while loading the image in VCMM. Required by DWP-
required field; it is optional in this API because the issuer can pre-
configure this value via VCMM.
Format: An array of GUID-based file names; max length 32 characters.
Field Description
supportsTokenNotifications (Optional) Indicates whether the card supports token notifications for
transactions originating on the device.
Format: It is one of the following values:
l true
l false
supportsFPANNotifications (Optional) Indicates whether the card supports FPAN notifications for
all transactions that point back to the FPAN. Not applicable for Check
Eligibility; only available for Update Card Metadata.
Format: It is one of the following values:
l true
l false
messageServiceURL (Optional) URL of the message/offer web service that conforms to the
API as described to PNOs and issuers in the Card Notification Services
API Specification. Not applicable for Check Eligibility; only available for
Update Card Metadata.
Format: String; max length 128 characters.
transactionPushTopic (Conditional) A push topic the issuer uses to notify the device that new
transactions are available. Not applicable for Check Eligibility; only
available for Update Card Metadata.
Format: String; max length 128 characters.
messagePushTopic (Conditional) A push topic the notification provider uses to notify the
device that new messages are available. Not applicable for Check
Eligibility; only available for Update Card Metadata.
Format: String; max length 128 characters.
Field Description
appLaunchURL (Optional) URL passed to the associated issuer mobile app when
launching it. If this key is present, the
associatedStoreIdentifiers key must also be present. This
field is not applicable for Check Eligibility; only for Update Card
Metadata.
appLaunchURLScheme (Optional) URL scheme that the application is registered for, in order to
deep link from transaction notifications and show all transaction notifi
cations. The Application ID must be included in the
associatedApplicationsIdentifiers array and the application
itself must register for the URL scheme specified in this key. This field is
not applicable for Check Eligibility; only for Update Card Metadata.
Contact Information
Field Description
Field Description
contactName Name of the issuing bank. It may be used in combination with other
text strings.
Example: If contactName is “XYZ Bank”, it may be used to construct
a string such as “Contact XYZ Bank”, or “XYZ Bank Contact
Information”.
Format: String; max length 32 characters.
Error Responses
If a business error is present, it is assumed that no Standard Errors were detected in the API request.
VTS domain-specific business error reason codes are as follows:
Sample Payloads
Sample Request
{
"tokenRequestorID": 400...20,
"tokenReferenceID": "DNI...46",
"panReferenceID": "V-5...71",
"panSource": "KEY_ENTERED",
"deviceInfo": {
"deviceLanguageCode": "eng"
},
"encryptedData": "eyJ...UQ"
}
{
"primaryAccountNumber": "...",
"name": "...",
"expirationDate": {
"month": "...",
"year": "..."
},
"highValueCustomer": false,
"riskAssessmentScore": "3"
}
{
"tokenRequestorID": 400...24,
"tokenReferenceID": "DNI...58",
"panReferenceID": "V-3...64",
"panSource": "ON_FILE",
"lifeCycleTraceID": 382...01,
"deviceInfo": {
"deviceLanguageCode": "fin"
},
"encryptedData": "..."
}
{
"cardMetadataInfo": {
"profileID": "226...21"
}
}
Request
Endpoints
Path:
{Issuer Endpoint}/vtis/v1/tokenRequestors/
{tokenRequestorID}/tokens/{tokenReferenceID}/deviceBinding
URL Parameters
Parameter Description
{tokenReferenceID} (Required) Unique ID for the token associated with the PAN. Can be
used in lieu of the token for subsequent calls, such as lifecycle events.
Format: String; max length 32 characters.
Method
POST
Request Body
Field Description
panReferenceID (Required) Unique ID for the PAN. This ID can be used in lieu of PAN for
the subsequent calls, such as life cycle events.
Format: String; max length 32 characters
walletAccountEmailAddressHash (Required) Hash of email address linked to their wallet account login.
Format: String; max length 64 characters.
Field Description
tokenUserInfo (Future) Information of the user that has requested the device binding.
Format: A Token User Information structure.
merchantInfo (Future) Information of the merchant that has requested the device
binding.
Format: A Merchant Information structure.
encryptedData (Required) Blob field that can contain a tokenInfo structure. Decrypt
the blob and use the token information structure therein.
Format: String blob; max length 7000 characters
Token Information
Field Description
l Approve Provisioning
l Approve Provisioning Stand-In Notification
l Token Create Notification
Format: It is one of the following values:
l SECURE_ELEMENT
l HCE
l CARD_ON_FILE
l ECOMMERCE
l QRC
Field Description
l ACTIVE
l INACTIVE
l SUSPENDED
l DEACTIVATED
tokenExpirationDate (Conditional) The date upon which the token is set to expire. This field
is required in the Token Create Notification API.
Format: An Expiration Date structure.
tokenAssuranceMethod (Optional) Method of Issuer ID&V that has taken place at time of
provisioning, device binding, or cardholder initiated verification. It is
one of the following values:
numberOfActiveTokensForPAN (Optional) Number of device tokens that are currently active for this
PAN.
Format: Integer; max length 4 digits.
numberOfInactiveTokensForPAN (Optional) Number of device tokens that are currently inactive (device
tokens have not been activated) for this PAN.
Format: Integer; max length 4 digits.
numberOfSuspendedTokensForPAN (Optional) Number of device tokens that were activated, but are
suspended for payments for this PAN.
Format: Integer; max length 4 digits.
Field Description
originalTokenRequestorID (Required) Unique ID assigned to the initiator of the token request. This
field is populated when performing token-for-token provisioning only.
Format: Numeric; max length 11 digits.
originalTokenReferenceID (Conditional) Unique ID for the token associated with the PAN. This ID
can be used in lieu of the token for subsequent calls, such as life cycle
events. This field is populated when performing token-for-token
provisioning only.
Format: String; max length 32 characters.
originalTokenType (Conditional) Token type of the original token. This field is populated
only when performing token for token provisioning and can be used
only in the following APIs:
l Approve Provisioning
l Approve Provisioning Stand-In Notification
l Token Create Notification
Format: It is one of the following values:
l SECURE_ELEMENT
l HCE
l CARD_ON_FILE
l ECOMMERCE
l QRC
l PSEUDO_ACCOUNT
Field Description
autoFillIndicator (Conditional) Indicates whether the token is for an autofill use case.
This is a required field in the following APIs:
l Approve Provisioning
l Approve Provisioning Stand-In Notification
l Token Create Notification
Format: It is one of the following values:
Device Information
This structure is used by several APIs.
Field Description
deviceID (Conditional) For Secure Element (SE) wallet providers, this value will be
the SE ID in hex binary characters transformed to a 48-character string.
For Host Card Emulation (HCE) wallet providers, this field will be the
Device ID as determined by the digital wallet provider (DWP). All
alphanumeric and special characters are allowed for HCE DWPs.
Secure Element (SE) ID represents the device ID.
deviceLanguageCode (Optional) This value is any ISO 639 Version 3 Language Code, for
example, eng (English). This language code will be used by the issuer
and Visa to retrieve the Terms and Conditions (T&C). If T&Cs are not
found for the Language Code in the request, the T&Cs will return the
default :anguage Code of eng (English).
Format: String; ISO-639 Version 3 Language Code, max length 3
characters.
l UNKNOWN
l MOBILE_PHONE
l TABLET
l WATCH
l MOBILEPHONE_OR_TABLET
l PC
l HOUSEHOLD_DEVICE
l WEARABLE_DEVICE
l AUTOMOBILE_DEVICE
deviceName (Optional) A readable name for the device. Ideally, the customer enters
this name. It can be used to identify the device in customer support
calls.
Example: My Work Phone
Format: String; Base64URL-encoded; UTF-8; max length 128
characters.
Field Description
l ANDROID
l IOS
l WINDOWS
l BLACKBERRY
l TIZEN
l OTHER
Field Description
deviceIndex (Conditional) The index number from Visa where the deviceID is
stored. This is required for token device binding.
Format: Integer; max length 2 digits.
deviceIPAddressV4 (Optional) The IP address of the device at the time of the provisioning
request, with the value represented in 255.255.255.255 format. An
octet (255) may be 1–3 digits in length but cannot contain any leading
zeros.
Format: String; max length 15 characters.
l WIFI
l CELLULAR
l GPS
l OTHER
l SOFTWARE
l TRUSTED_EXECUTION_ENVIRONMENT
l SECURE_ELEMENT
l CLOUD
Response
Successful Response
Successful API responses will return HTTP status code in the 2xx range. The response body, if
available, will contain the response of the API as described in this specification.
Field Description
Error Responses
If a business error is present, it is assumed that no Standard Errors were detected in the API request.
VTS domain-specific business error reason codes are as follows:
Sample Payloads
Sample Request
/vtis/v1/tokenRequestors/400...49/tokens/DNI...11/deviceBinding
{
"panReferenceID": "V-4...48",
"walletAccountEmailAddressHash": "_PI...fY",
"clientWalletAccountID": "AWM...Bd",
"deviceInfo": {
"deviceID": "zmi...zA",
"deviceLanguageCode": null,
"osType": null,
"osVersion": null,
"osBuildID": null,
"deviceType": null,
"deviceIDType": null,
"deviceManufacturer": null,
"deviceBrand": null,
"deviceModel": null,
"deviceName": null,
"deviceNumber": null,
"deviceLocation": null,
"deviceIPAddressV4": null,
"locationSource": null,
"deviceIndex": 1
},
"locale": "en_US",
"tokenUserInfo": null
}
If there are no pre-configured card verification methods for the corresponding card, the
provision request will be declined to the wallet provider.
Request
Endpoints
Path:
{Issuer Endpoint}/vtis/v1/retrieveStepUpMethods
Method
POST
Request Body
Field Description
tokenReferenceID (Conditional) Unique ID for the token associated with the PAN. This ID
can be used in lieu of the token for subsequent calls, such as lifecycle
events.
Format: String; max length 32 characters.
panReferenceID (Conditional) Unique ID for the PAN. This ID can be used in lieu of PAN
for the subsequent calls, such as life cycle events.
Format: String; max length 32 characters.
Field Description
l KEY_ENTERED
l ON_FILE
l MOBILE_BANKING_APP
l TOKEN
l CHIP_DIP
l CONTACTLESS_TAP
l PROVISIONING
l FPAN_NOTIFICATIONS
l PAYMENT
l TOKEN_DEVICE_BINDING
l CARDHOLDER_STEPUP
l TRUSTED_LISTING_ENROLLMENT
otpMaxReached (Optional) Describes whether the Token has exceeded the number of
OTP requests and is therefore no longer a supported method for that
token. This does not apply to the payment flow.
Format: It is one of the following values:
l true
l false
encryptedData (Required) Blob field that contains the encrypted payload; see
"Cardholder Information" in the "Encrypted Payload Data Structures"
chapter for more information. Only primaryAccountNumber needs
to be provided in cardholderInfo.
Format: String; max length 7000 characters.
Field Description
deviceInfo (Optional) Data associated with the device. The deviceIndex field
needs to be provided when the otpReason field is
TOKEN_DEVICE_BINDING.
Format: It is one of the following values, if populated:
l deviceName
l deviceID
l deviceType
l deviceNumber
l deviceIndex
Format: A Device Info structure.
tokenUserInfo (Future) The information of the user that requests the device binding.
Format: A Token User Information structure.
merchantInfo (Future) The information of the merchant that requests the device
binding.
Format: A Merchant Information structure.
tokenInfo (Conditional) Data associated with the token for CTF use cases.
Format: A tokenInfo structure.
Device Information
This structure is used by several APIs.
Field Description
deviceID (Conditional) For Secure Element (SE) wallet providers, this value will be
the SE ID in hex binary characters transformed to a 48-character string.
For Host Card Emulation (HCE) wallet providers, this field will be the
Device ID as determined by the digital wallet provider (DWP). All
alphanumeric and special characters are allowed for HCE DWPs.
Secure Element (SE) ID represents the device ID.
deviceLanguageCode (Optional) This value is any ISO 639 Version 3 Language Code, for
example, eng (English). This language code will be used by the issuer
and Visa to retrieve the Terms and Conditions (T&C). If T&Cs are not
found for the Language Code in the request, the T&Cs will return the
default :anguage Code of eng (English).
Format: String; ISO-639 Version 3 Language Code, max length 3
characters.
l UNKNOWN
l MOBILE_PHONE
l TABLET
l WATCH
l MOBILEPHONE_OR_TABLET
l PC
l HOUSEHOLD_DEVICE
l WEARABLE_DEVICE
l AUTOMOBILE_DEVICE
deviceName (Optional) A readable name for the device. Ideally, the customer enters
this name. It can be used to identify the device in customer support
calls.
Example: My Work Phone
Format: String; Base64URL-encoded; UTF-8; max length 128
characters.
Field Description
l ANDROID
l IOS
l WINDOWS
l BLACKBERRY
l TIZEN
l OTHER
Field Description
deviceIndex (Conditional) The index number from Visa where the deviceID is
stored. This is required for token device binding.
Format: Integer; max length 2 digits.
deviceIPAddressV4 (Optional) The IP address of the device at the time of the provisioning
request, with the value represented in 255.255.255.255 format. An
octet (255) may be 1–3 digits in length but cannot contain any leading
zeros.
Format: String; max length 15 characters.
l WIFI
l CELLULAR
l GPS
l OTHER
l SOFTWARE
l TRUSTED_EXECUTION_ENVIRONMENT
l SECURE_ELEMENT
l CLOUD
Token Information
Field Description
l Approve Provisioning
l Approve Provisioning Stand-In Notification
l Token Create Notification
Format: It is one of the following values:
l SECURE_ELEMENT
l HCE
l CARD_ON_FILE
l ECOMMERCE
l QRC
l ACTIVE
l INACTIVE
l SUSPENDED
l DEACTIVATED
tokenExpirationDate (Conditional) The date upon which the token is set to expire. This field
is required in the Token Create Notification API.
Format: An Expiration Date structure.
Field Description
tokenAssuranceMethod (Optional) Method of Issuer ID&V that has taken place at time of
provisioning, device binding, or cardholder initiated verification. It is
one of the following values:
numberOfActiveTokensForPAN (Optional) Number of device tokens that are currently active for this
PAN.
Format: Integer; max length 4 digits.
numberOfInactiveTokensForPAN (Optional) Number of device tokens that are currently inactive (device
tokens have not been activated) for this PAN.
Format: Integer; max length 4 digits.
numberOfSuspendedTokensForPAN (Optional) Number of device tokens that were activated, but are
suspended for payments for this PAN.
Format: Integer; max length 4 digits.
originalTokenRequestorID (Required) Unique ID assigned to the initiator of the token request. This
field is populated when performing token-for-token provisioning only.
Format: Numeric; max length 11 digits.
Field Description
originalTokenReferenceID (Conditional) Unique ID for the token associated with the PAN. This ID
can be used in lieu of the token for subsequent calls, such as life cycle
events. This field is populated when performing token-for-token
provisioning only.
Format: String; max length 32 characters.
originalTokenType (Conditional) Token type of the original token. This field is populated
only when performing token for token provisioning and can be used
only in the following APIs:
l Approve Provisioning
l Approve Provisioning Stand-In Notification
l Token Create Notification
Format: It is one of the following values:
l SECURE_ELEMENT
l HCE
l CARD_ON_FILE
l ECOMMERCE
l QRC
l PSEUDO_ACCOUNT
Field Description
autoFillIndicator (Conditional) Indicates whether the token is for an autofill use case.
This is a required field in the following APIs:
l Approve Provisioning
l Approve Provisioning Stand-In Notification
l Token Create Notification
Format: It is one of the following values:
Response
Successful Response
Successful API responses will return HTTP status code in the 2xx range. The response body, if
available, will contain the response of the API as described in this specification.
Field Description
l APPROVED
l STEPUP
l DECLINED
Field Description
l OTPSMS
l OTPEMAIL
l APP_TO_APP
l CUSTOMERSERVICE
l OUTBOUNDCALL
APP_TO_APP should not be returned as a verification method if PAN
source=MOBILE_BANKING_APP on the inbound request. Bank app-
initiated provision requests should not be verified through the bank
app.
If otpMaxReachedis set to True, the issuer should send neither
OTPSMS, OTPEMAIL, nor OUTBOUNDCALL as a verification method in
the response.
Format: String; alphanumeric; max length 32 characters.
Field Description
sourceAddress Indicates the source address from which the OTP is sent. This field can
be used in two different contexts:
l When used with OTPSMS or OTPEMAIL in the type field, this field
is used to support auto-vetting for sending an OTP via
cell_phone (SMS) or email. For example, if an SMS will be sent
from 382-2, then the sourceAddress would be 382-2. Auto-
vetting is not currently supported. This attribute will be ignored
until auto-vetting is supported by SE DWPs.
l When used with APP_TO_APP in the type field, a value in this field
is required if the step-up flow mobile banking app is different from
the mobile banking app used during provisioning. If used, this value
must contain the appropriate identifier for the associated issuer
mobile banking application. For Apple, this is the Apple Adam ID.
For Android, this is the Android Package name.
Format: String; alphanumeric; max length 64 characters.
otpMethodPlatform Used with the APP_TO_APP type, this field contains the appropriate
OS platform for the associated issuer mobile banking application.
Format: It is one of the following values:
l IOS
l ANDROID
l WINDOWS
l WEB
Error Responses
If a business error is present, it is assumed that no Standard Errors were detected in the API request.
VTS domain-specific business error reason codes are as follows:
Sample Payloads
Sample Request
{
"tokenRequestorID": "400...73",
"tokenReferenceID": "DNI...08",
"panReferenceID": "V-3...55",
"clientWalletAccountID": "897...31",
"panSource": "KEY_ENTERED",
"otpReason": "TOKEN_DEVICE_BINDING",
"otpMaxReached": true,
"encryptedData": "eyJ...qQ",
"deviceInfo": {
"deviceID": "413...12",
"deviceType": "MOBILE_PHONE",
"deviceName": "Apple Ipod",
"deviceNumber": "1",
"deviceIndex": 9
}
}
<Header>.<Encrypted Key>.<InitializationVector>.<Ciphertext>.
<Authentication Tag>
{
“cardholderInfo”:{
“primaryAccountNumber”: “”
},
“riskInformation”: {
“walletProviderAccountScore”: “”,
“walletProviderDeviceScore”: “”,
“walletProviderReasonCodes”: “”,
“issuerSpecialConditionCodes”: “”,
“visaTokenScore”: “”,
“riskAssessmentScore”: “”
}
}
Request
Endpoints
Path:
{Issuer Endpoint}/vtis/v1/pan/notification?eventType=eventType
Method
POST
Query Parameters
Event Type
Parameter Description
l PAN_UPDATED—
Indicates that a PAN has been updated.
l ACCOUNT_LEVEL_RECORD— Indicates the event is an account
management update.
Request Body
Field Description
panReferenceID (Conditional) Unique ID for the PAN. This ID can be used in lieu of the
PAN for subsequent calls, such as life cycle events.
Format: String; max length 32 characters.
encryptedData (Required) Blob field that contains the encrypted payload; see
"Cardholder Information" in the "Encrypted Payload Data Structures"
chapter for more information. For PAN update/replacement, the new
and the old PAN must share the same 9-digit BIN; the new PAN should
not have any tokens already associated to it.
If provided, the blob may contain:
l cardholderInfo
– Current PAN
– Expiration Date
l replaceCardholderInfo
Field Description
Field Description
rejectCode Contains the Reject Code for the failure. Present only when the
Response Status = F. Refer to Appendix A for a full description of all
Reject Codes.
Format: String; alphabetic; max length 2 characters.
rejectDesc Contains the Reject Reason for the failure. Present only when the
Response Status = F. Refer to Appendix A for a full description of all
Reject Codes.
Format: String; alphanumeric; max length 100 characters.
Field Description
rejectCode Contains the reject code for the failure. Present only when the
Response Status = F or W. See Appendix A for a full description of all
reject codes and descriptions.
Format: String; alphabetic; max length 2 characters.
rejectDesc Contains the reject description, or reason, for the failure. Present only
when the Response Status = F or W. See Appendix A for a full
description of all reject codes and descriptions.
Format: String; alphanumeric; max length 100 characters.
Field Description
Group Response
Field Description
groupType (Required) The Group Type Code from the request that is returned in
the response.
Format: String; max length 16 characters.
Field Description
rejectCode (Optional)Contains the reject code for the failure. Present only when
the Response Status = F or W. See Appendix A for a full description of
all reject codes and descriptions.
Format: String; alphabetic; max length 2 characters.
Response
Successful Response
Successful API responses will return HTTP 200 status code with no response payload.
Error Response
The notification API is an asynchronous API and does not need the issuer to return anything to Visa.
The issuer returns the following error statuses as appropriate with no response payload in addition to
the Standard Errors.
400 Bad Request The request could not be understood by the server because of
malformed syntax. The client should not repeat the request until
modifications have been made.
404 Not Found The server has not found anything matching the Request URI.
500 Internal Server Error An unspecified server error has occurred. Visa should attempt to
retry or contact issuer support.
Sample Payloads
{
“cardholderInfo”: {
“primaryAccountNumber”: “”,
“expirationDate”: {
“month”: “”,
“year”: “”
}
},
“replaceCardholderInfo”: {
“primaryAccountNumber”: “”,
“expirationDate”: {
“month”: “”,
“year”: “”
}
}
}
Send Passcode
This service is invoked to deliver the OTP to the destination selected by the cardholder, such as an
email address, via the issuer.
Request
Endpoints
Path:
{Issuer Endpoint}/vtis/v1/sendPasscode
Method
POST
Request Body
Field Description
tokenReferenceID (Conditional) Unique ID for the token associated with the PAN. Can be
used in lieu of the token for subsequent calls, such as life cycle events.
Format: String; max length 32 characters.
panReferenceID (Conditional) Unique ID for the PAN. Can be used in lieu of PAN for
subsequent calls, such as life cycle events.
Format: String; max length 32 characters.
Field Description
otpMethodIdentifier (Required) Unique and opaque identifier for the delivery method
selected by the cardholder.
Format: String; max length 32 characters.
otpValue (Required) OTP value. In the initial release, it will be populated with 6
digit values; in the future, the value may be expanded up to 8 digits in
length.
Format: String; max length 8 digits.
otpReason (Optional) Reason for an OTP. Additional values may be available in the
future.
Format: It is one of the following values:
l PAYMENT
l TOKEN_DEVICE_BINDING
l CARDHOLDER_STEPUP
l TRUSTED_LISTING_ENROLLMENT
l deviceName
l deviceID
l deviceType
l deviceNumber
Format: A Device Information structure.
encryptedData (Required) Blob field that contains the encrypted payload; see
"Cardholder Information" in the "Encrypted Payload Data Structures"
chapter for more information. Only primaryAccountNumber needs
to be provided in cardholderInfo.
Format: String; max length 7000 characters.
tokenInfo (Conditional) Data associated with the token for CTF use cases.
Format: A tokenInfo structure.
Device Information
This structure is used by several APIs.
Field Description
deviceID (Conditional) For Secure Element (SE) wallet providers, this value will be
the SE ID in hex binary characters transformed to a 48-character string.
For Host Card Emulation (HCE) wallet providers, this field will be the
Device ID as determined by the digital wallet provider (DWP). All
alphanumeric and special characters are allowed for HCE DWPs.
Secure Element (SE) ID represents the device ID.
deviceLanguageCode (Optional) This value is any ISO 639 Version 3 Language Code, for
example, eng (English). This language code will be used by the issuer
and Visa to retrieve the Terms and Conditions (T&C). If T&Cs are not
found for the Language Code in the request, the T&Cs will return the
default :anguage Code of eng (English).
Format: String; ISO-639 Version 3 Language Code, max length 3
characters.
l UNKNOWN
l MOBILE_PHONE
l TABLET
l WATCH
l MOBILEPHONE_OR_TABLET
l PC
l HOUSEHOLD_DEVICE
l WEARABLE_DEVICE
l AUTOMOBILE_DEVICE
deviceName (Optional) A readable name for the device. Ideally, the customer enters
this name. It can be used to identify the device in customer support
calls.
Example: My Work Phone
Format: String; Base64URL-encoded; UTF-8; max length 128
characters.
Field Description
l ANDROID
l IOS
l WINDOWS
l BLACKBERRY
l TIZEN
l OTHER
Field Description
deviceIndex (Conditional) The index number from Visa where the deviceID is
stored. This is required for token device binding.
Format: Integer; max length 2 digits.
deviceIPAddressV4 (Optional) The IP address of the device at the time of the provisioning
request, with the value represented in 255.255.255.255 format. An
octet (255) may be 1–3 digits in length but cannot contain any leading
zeros.
Format: String; max length 15 characters.
l WIFI
l CELLULAR
l GPS
l OTHER
l SOFTWARE
l TRUSTED_EXECUTION_ENVIRONMENT
l SECURE_ELEMENT
l CLOUD
Token Information
Field Description
l Approve Provisioning
l Approve Provisioning Stand-In Notification
l Token Create Notification
Format: It is one of the following values:
l SECURE_ELEMENT
l HCE
l CARD_ON_FILE
l ECOMMERCE
l QRC
l ACTIVE
l INACTIVE
l SUSPENDED
l DEACTIVATED
tokenExpirationDate (Conditional) The date upon which the token is set to expire. This field
is required in the Token Create Notification API.
Format: An Expiration Date structure.
Field Description
tokenAssuranceMethod (Optional) Method of Issuer ID&V that has taken place at time of
provisioning, device binding, or cardholder initiated verification. It is
one of the following values:
numberOfActiveTokensForPAN (Optional) Number of device tokens that are currently active for this
PAN.
Format: Integer; max length 4 digits.
numberOfInactiveTokensForPAN (Optional) Number of device tokens that are currently inactive (device
tokens have not been activated) for this PAN.
Format: Integer; max length 4 digits.
numberOfSuspendedTokensForPAN (Optional) Number of device tokens that were activated, but are
suspended for payments for this PAN.
Format: Integer; max length 4 digits.
originalTokenRequestorID (Required) Unique ID assigned to the initiator of the token request. This
field is populated when performing token-for-token provisioning only.
Format: Numeric; max length 11 digits.
Field Description
originalTokenReferenceID (Conditional) Unique ID for the token associated with the PAN. This ID
can be used in lieu of the token for subsequent calls, such as life cycle
events. This field is populated when performing token-for-token
provisioning only.
Format: String; max length 32 characters.
originalTokenType (Conditional) Token type of the original token. This field is populated
only when performing token for token provisioning and can be used
only in the following APIs:
l Approve Provisioning
l Approve Provisioning Stand-In Notification
l Token Create Notification
Format: It is one of the following values:
l SECURE_ELEMENT
l HCE
l CARD_ON_FILE
l ECOMMERCE
l QRC
l PSEUDO_ACCOUNT
Field Description
autoFillIndicator (Conditional) Indicates whether the token is for an autofill use case.
This is a required field in the following APIs:
l Approve Provisioning
l Approve Provisioning Stand-In Notification
l Token Create Notification
Format: It is one of the following values:
Response
Successful Response
Successful API responses will return HTTP 200 status code with no response payload, e.g. "".
The response body, if available, will contain the error response of the API as described in this
specification.
Field Description
Error Responses
If a business error is present, it is assumed that no Standard Errors were detected in the API request.
VTS domain-specific business error reason codes are as follows:
Sample Payloads
Sample Request
{
“tokenRequestorID” : 400...52,
“tokenReferenceID” : “DNI...12”,
“panReferenceID”: “V-4200...90”,
“clientWalletAccountID”: “99E...4C”,
“otpMethodIdentifier”: “1e3...60”,
“otpValue”: “123456”,
“otpExpirationDate”: “2015-05-18T14:40:32.000Z”,
“deviceInfo”: {
“deviceID”: “043...7C”,
“deviceType”: “MOBILE_PHONE”,
“deviceName”: “My iPhone”,
“deviceNumber”: “86...30”
},
“encryptedData”: “<JWS>”
}
<Header>.<Encrypted Key>.<InitializationVector>.<Ciphertext>.
<Authentication Tag>
{
“cardholderInfo”:{
“primaryAccountNumber”: “”
}
}
Request
Endpoints
Path:
{Issuer Endpoint}/vtis/v2/tokenRequestors/
{tokenRequestorID}/tokens/
{tokenReferenceID}/tokenChanged?eventType=eventType
URL Parameters
Parameter Description
{tokenReferenceID} (Required) Unique ID for the token associated with the PAN. This ID can
be used in lieu of a token for subsequent calls, such as life cycle events.
Format: String; max length 32 characters.
Method
POST
Query Parameters
Parameter Description
l TOKEN_CREATED
– Token created
Request Body
Field Description
panReferenceID (Required) Unique ID for the PAN. This ID can be used in lieu of PAN for
subsequent calls, such as lifecycle events.
Format: String; max length 32 characters.
walletAccountEmailAddressHash (Required) Hash of the email address linked to the wallet account login
ID.
Format: String; max length 64 characters.
l KEY_ENTERED
l ON_FILE
l MOBILE_BANKING_APP
l TOKEN
l CHIP_DIP
l CONTACTLESS_TAP
l M— CVV2 Match, indicates that Visa was able to verify the CVV2
value provided by the wallet provider.
l N— CVV2 No Match, indicates that Visa was not able to verify the
CVV2 value provided by the wallet provider.
l P— Not processed, indicates that Visa was unable to verify the
CVV2 value provided by the wallet provider. This applies for Issuers
opting for CVV2 Bypass only.
l S — CVV2 should be on the card: Indicates that V.I.P. or the issuer
was unable to perform CVV2 verification and notifies the merchant
that the card should contain a CVV2 value.
l U — Issuer is not available, does not participate in the CVV2 Service,
or participates but has not provided Visa with encryption keys:
Indicates that the issuer is notparticipating in the CVV2 Service or
has not provided Visa with encryption keys needed to perform
verification, or that STIP has responded to an issuer-unavailable
response.
l KEY_ENTERED
l CAMERA_CAPTURED
l UNKNOWN
encryptedData (Required) Blob field that contains the encrypted payload; see
"Cardholder Information," "Token Information," and "Risk Information"
in the "Encrypted Payload Data Structures" chapter for more
information.
Format: String; max length 7000 characters.
l 00— Good
l 85— Conditional approval (provision, but do not activate until
additional consumer verification is performed)
l 05— Error
Device Information
This structure is used by several APIs.
Field Description
deviceID (Conditional) For Secure Element (SE) wallet providers, this value will be
the SE ID in hex binary characters transformed to a 48-character string.
For Host Card Emulation (HCE) wallet providers, this field will be the
Device ID as determined by the digital wallet provider (DWP). All
alphanumeric and special characters are allowed for HCE DWPs.
Secure Element (SE) ID represents the device ID.
deviceLanguageCode (Optional) This value is any ISO 639 Version 3 Language Code, for
example, eng (English). This language code will be used by the issuer
and Visa to retrieve the Terms and Conditions (T&C). If T&Cs are not
found for the Language Code in the request, the T&Cs will return the
default :anguage Code of eng (English).
Format: String; ISO-639 Version 3 Language Code, max length 3
characters.
Field Description
l UNKNOWN
l MOBILE_PHONE
l TABLET
l WATCH
l MOBILEPHONE_OR_TABLET
l PC
l HOUSEHOLD_DEVICE
l WEARABLE_DEVICE
l AUTOMOBILE_DEVICE
deviceName (Optional) A readable name for the device. Ideally, the customer enters
this name. It can be used to identify the device in customer support
calls.
Example: My Work Phone
Format: String; Base64URL-encoded; UTF-8; max length 128
characters.
l ANDROID
l IOS
l WINDOWS
l BLACKBERRY
l TIZEN
l OTHER
Field Description
deviceIndex (Conditional) The index number from Visa where the deviceID is
stored. This is required for token device binding.
Format: Integer; max length 2 digits.
deviceIPAddressV4 (Optional) The IP address of the device at the time of the provisioning
request, with the value represented in 255.255.255.255 format. An
octet (255) may be 1–3 digits in length but cannot contain any leading
zeros.
Format: String; max length 15 characters.
Field Description
l WIFI
l CELLULAR
l GPS
l OTHER
l SOFTWARE
l TRUSTED_EXECUTION_ENVIRONMENT
l SECURE_ELEMENT
l CLOUD
Field Description
date (Optional) Timestamp when Terms and Conditions are acted upon by
consumer. It is not returned for Card on File.
Format: Date. UTC Format in epoch seconds The
UNIX_UTC_timestamp is a UNIX Epoch timestamp. The value is in
seconds.
Response
Successful Response
Successful API responses will return HTTP 200 status code with no payload.
Error Response
The notification API is an asynchronous API and does not need the issuer to return anything to Visa.
The issuer returns the following error statuses, as appropriate, with no response payload, in addition
to “Standard Errors”.
400 Bad Request The request could not be understood by the server because of
malformed syntax. The client should not repeat the request until
modifications have been made.
404 Not Found The server has not found anything matching the Request URI.
500 Internal Server Error An unspecified server error has occurred. Visa should attempt to
retry or contact issuer support.
Sample Payloads
Sample Request
{
“messageReasonCode”: “”,
“dateTimeOfEvent”: “”,
“panReferenceID”: “”,
“walletAccountEmailAddressHash”: “”,
“clientWalletAccountId”: “”,
“panSource”: “”,
“addressVerificationResultCode”: “”,
“cvv2ResultsCode”: “”,
“consumerEntryMode”: “”,
“locale”: “”,
“deviceInfo”: {
“deviceID”: “”,
“deviceLanguageCode”: “”,
“osType”: “”,
“osVersion”: “”,
“osBuildID”: “”,
“deviceType”: “”,
“deviceIDType”: “”,
“deviceManufacturer”: “”,
“deviceBrand”: “”,
“deviceModel”: “”,
“deviceName”: “”,
“deviceNumber”: “”,
“deviceLocation”: “”,
“deviceIpAddressV4”: “”,
“locationSource”: “”,
“tokenProtectionMethod”: “”
},
}
“encryptedData”: “<JWS>”
}
JWS:
<JWS Header>.<JWS Payload>.<JWS Signature>
JWS payload:
<JWE>
JWE:
{
“cardholderInfo”: {
“primaryAccountNumber”: “”,
“expirationDate”: {
“month”: “”,
“year”: “”
},
“highValueCustomer”: “”
},
“tokenInfo”: {
“token”: “”,
“tokenType”: “”,
“tokenStatus”: “”,
“tokenExpirationDate”: {
“month”: “”,
“year”: “”
},
“tokenAssuranceMethod”: “”,
“numberOfActiveTokensForPAN”: “”,
“numberOfInactiveTokensForPAN”: “”,
“numberOfSuspendedTokensForPAN”: “”
},
“riskInformation”: {
“walletProviderRiskAssessment”: “”,
“walletProviderRiskAssessmentVersion”: “”,
“walletProviderAccountScore”: “”,
“walletProviderDeviceScore”: “”,
“walletProviderReasonCodes”: “”,
“deviceBluetoothMac”: “”,
“deviceIMEI”: “”,
“deviceSerialNumber”: “”,
“deviceTimeZone”: “”,
“deviceTimeZoneSetting”: “”,
“osID”: “”,
“simSerialNumber”: “”,
“deviceLostMode”: “”,
“daysSinceConsumerDataLastAccountChange”: “”,
“accountHolderName”: “”,
“walletProviderPANAge”: “”,
“walletAccountHolderCardNameMatch”: “”,
“accountToDeviceBindingAge”: “”,
“userAccountFirstCreated”: “”,
“provisioningAttemptsOnDeviceIn24Hours”: “”,
“distinctCardholderNames”: “”,
“deviceCountry”: “”,
“walletAccountCountry”: “”,
“suspendedCardsInAccount”: “”,
“daysSinceLastAccountActivity”: “”,
“numberOfTransactionsInLast12months”: “”,
“numberOfActiveTokens”: “”,
“deviceWithActiveTokens”: “”,
“activeTokensOnAllDeviceForAccount”: “”
“visaTokenScore”: “”,
“visaTokenDecisioning”: “”,
“issuerSpecialConditioncodes”: “”
}
}
https://{Issuer Endpoint}/vtis/v2/tokenRequestors/40010062941
/tokens/DNI../tokenChanged?eventType=TOKEN_CREATED
{
"panReferenceID": "V-30...25",
"walletAccountEmailAddressHash": "5AB...6D",
"clientWalletAccountID": "400...41",
"panSource": "ON_FILE",
"encryptedData": "eyJ...2Q",
"deviceInfo": {
"deviceLanguageCode": "eng",
"tokenProtectionMethod": "CLOUD"
},
"lifeCycleTraceID": 300...56,
"messageReasonCode": "TOKEN_CREATED",
"dateTimeOfEvent": "2020-07-17T22:11:43.000Z",
"actionCode": "00"
}
Token Notification
This API is exposed by an issuer. Visa will invoke this API call when the issuer's token status has
changed.
Request
Endpoints
Path:
{Issuer Endpoint}/vtis/v2/tokenRequestors/
{tokenRequestorID}/tokens/
{tokenReferenceID}/tokenChanged?eventType=eventType
URL Parameters
Parameter Description
{tokenReferenceID} (Required) Unique ID for the token associated with the PAN. This ID can
be used in lieu of the token for subsequent calls, such as lifecycle
events.
Format: String; max length 32 characters.
Method
POST
Query Parameters
Parameter Description
l TOKEN_STATUS_UPDATED
– Token status updated
Request Body
Field Description
l TOKEN_DEACTIVATED
l TOKEN_SUSPEND
l TOKEN_RESUME
l DEVICE_PROVISIONING_RESULT
l OTP_VERIFICATION_RESULT
l CALL_CENTER_ACTIVATION
l MOBILE_BANK_APP_ACTIVATION
l LUK_REPLENISHMENT
l DEVICE_PROVISIONING_REPERSONALIZATION_RESULT
l TOKEN_EXPIRY_DATE_UPDATED
l TOKEN_DEVICE_BINDING_RESULT
l CARDHOLDER_STEPUP_RESULT
l TRUSTED_LISTING_ENROLLMENT_RESULT Reserved for future
use.
l TOKEN_DEVICE_BINDING_REMOVED
panReferenceID (Required) Unique ID for the PAN. This ID can be used in lieu of the
PAN for subsequent calls, such as life cycle events.
Format: String; max length 32 characters.
Field Description
encryptedData (Conditional) Blob field that contains the encrypted payload; see
"Cardholder Information" and "Token Information" in the "Encrypted
Payload Data Structures" chapter for more information.
Required if messageReasonCode is one of the following and the
notification contains PII data:
l TOKEN_DEACTIVATED
l TOKEN_SUSPEND
l TOKEN_RESUME
l DEVICE_PROVISIONING_RESULT
l OTP_VERIFICATION_RESULT
l CALL_CENTER_ACTIVATION
l MOBILE_BANK_APP_ACTIVATION
l LUK_REPLENISHMENT
l DEVICE_PROVISIONING_REPERSONALIZATION_RESULT
l TOKEN_EXPIRY_DATE_UPDATED
Format: String; max length 7000 characters.
tokenUserInfo (Future) The information of the user that requests the device binding.
Format: A Token User Information structure.
merchantInfo (Future) The information of the merchant that requests the device
binding.
Format: A Merchant Information structure.
l 00 — Good
l 05 — Decline
l 06 — Error
Field Description
activationVerificationResult (Conditional) This field contains one of the following verification result
values for OTP_VERIFICATION_RESULT and
MOBILE_BANK_APP_ACTIVATION. Additional values may be available
in the future.
Format: It is one of the following values:
l VERIFICATION_SUCCESS
l VERIFICATION_CODE_EXPIRED
l VERIFICATION_CODE_FAILED
l VERIFICATION_CODE_MISSING
l VERIFICATION_CODE_RETRIES_EXCEEDED
cardHolderStepupResult (Conditional) This field contains one of the following card holder verifi
cation result values for CARDHOLDER_STEPUP_RESULT. Additional
values may be available in the future.
Format: It is one of the following values:
l CARDHOLDER_STEPUP_OTP
l CARDHOLDER_STEPUP_CALL_CENTER
l CARDHOLDER_STEPUP_ISSUER_APP
l CARDHOLDER_STEPUP_APPROVED
deviceBindingResult (Conditional) This field contains one of the following device binding
result values for TOKEN_DEVICE_BINDING_RESULT. Additional
values may be available in the future.
Format: It is one of the following values:
l DEVICE_BINDING_APPROVED
l DEVICE_BINDING_OTP
l DEVICE_BINDING_CALL_CENTER
l DEVICE_BINDING_ISSUER_APP
l DEVICE_BINDING_REMOVED
trustedListingResult Reserved for future use. (Conditional) This field contains one of the
following trusted listing result values for
TRUSTED_LISTING_ENROLLMENT_RESULT. Additional values may
be available in the future.
Format: It is one of the following values:
l TRUSTED_LISTING_ADDED
l TRUSTED_LISTING_REMOVED
Field Description
tokenInfo (Conditional) Data associated with the token for CTF use cases.
Format: A tokenInfo structure.
Token Information
Field Description
l Approve Provisioning
l Approve Provisioning Stand-In Notification
l Token Create Notification
Format: It is one of the following values:
l SECURE_ELEMENT
l HCE
l CARD_ON_FILE
l ECOMMERCE
l QRC
l ACTIVE
l INACTIVE
l SUSPENDED
l DEACTIVATED
tokenExpirationDate (Conditional) The date upon which the token is set to expire. This field
is required in the Token Create Notification API.
Format: An Expiration Date structure.
Field Description
tokenAssuranceMethod (Optional) Method of Issuer ID&V that has taken place at time of
provisioning, device binding, or cardholder initiated verification. It is
one of the following values:
numberOfActiveTokensForPAN (Optional) Number of device tokens that are currently active for this
PAN.
Format: Integer; max length 4 digits.
numberOfInactiveTokensForPAN (Optional) Number of device tokens that are currently inactive (device
tokens have not been activated) for this PAN.
Format: Integer; max length 4 digits.
numberOfSuspendedTokensForPAN (Optional) Number of device tokens that were activated, but are
suspended for payments for this PAN.
Format: Integer; max length 4 digits.
originalTokenRequestorID (Required) Unique ID assigned to the initiator of the token request. This
field is populated when performing token-for-token provisioning only.
Format: Numeric; max length 11 digits.
Field Description
originalTokenReferenceID (Conditional) Unique ID for the token associated with the PAN. This ID
can be used in lieu of the token for subsequent calls, such as life cycle
events. This field is populated when performing token-for-token
provisioning only.
Format: String; max length 32 characters.
originalTokenType (Conditional) Token type of the original token. This field is populated
only when performing token for token provisioning and can be used
only in the following APIs:
l Approve Provisioning
l Approve Provisioning Stand-In Notification
l Token Create Notification
Format: It is one of the following values:
l SECURE_ELEMENT
l HCE
l CARD_ON_FILE
l ECOMMERCE
l QRC
l PSEUDO_ACCOUNT
Field Description
autoFillIndicator (Conditional) Indicates whether the token is for an autofill use case.
This is a required field in the following APIs:
l Approve Provisioning
l Approve Provisioning Stand-In Notification
l Token Create Notification
Format: It is one of the following values:
Response
Successful Response
HTTP 200 Success status with no payload.
Error Response
The notification API is an asynchronous API and does not need the issuer to return anything to Visa.
The issuer returns the following error statuses, as appropriate, with no response payload, in addition
to “Standard Errors”.
400 Bad Request The request could not be understood by the server because of
malformed syntax. The client should not repeat the request until
modifications have been made.
404 Not Found The server has not found anything matching the Request URI.
500 Internal Server Error An unspecified server error has occurred. Visa should attempt to
retry or contact issuer support.
Sample Payloads
Sample Request
{
"messageReason": "TOKEN_DEVICE_BINDING_RESULT",
"messageReasonCode": "TOKEN_DEVICE_BINDING_RESULT",
"dateTimeOfEvent": "2020-03-02T18:56:16.947Z",
"panReferenceID": "V-58...42",
"deviceID": "95c...0b",
"encryptedData": "eyJ...pw",
"actionCode": "00",
"deviceBindingResult": "DEVICE_BINDING_ISSUER_APP",
"deviceInfo": {
"deviceID": "95c...0b",
"deviceIndex": 1
}
}
{
“cardholderInfo”: {
“primaryAccountNumber”: “”
},
“tokenInfo”:{
“token”: “”,
“tokenType”: “”,
“tokenStatus”: “”,
“tokenExpirationDate”: {
“month”: “”,
“year”: “”
},
}
}
Note:
For a complete list of possible contents for the encrypted payload, see “Encrypted Payload
Data.”
Request
Endpoints
Path:
{Visa host}/vtis/v1/pushCardEnrollmentToWallet?apiKey=key
Method
POST
Query Parameters
Parameter Description
Request Body
Field Description
route (Optional) The route by which to reach the token requestor for the
enrollment. It is one of the following values:
uriType (Conditional) The kind of app to launch at the token requestor's URI.
Required if the route is SYNC_DIRECT. It is one of the following
values:
Unencrypted Data
Enrollment
Field Description
l V — Visa
l MC — Mastercard
Payment Instrument
Field Description
name (Optional) The full name on the Visa card associated with the enrolled
payment instrument.
Format: String; UTF-8; max length 256 characters.
Expiration Date
This structure is used by several APIs.
Field Description
month (Required) The month upon which the payment instrument is set to
expire.
Example: "month": "9"
Format: String; numeric; max length 2 digits.
year (Required) The year upon which the payment instrument is set to
expire.
Example: "year": "2024"
Format: String; numeric; length 4 digits.
Address
This structure is used by several APIs.
Field Description
Field Description
intent (Required) The intent of the encryption; what is the encryption of the
data trying to do.
Specify PUSH_PROV_ONFILE for Secure Remote Commerce.
Format: It is one of the following values:
l PUSH_PROV_CROSS_USER
l PUSH_PROV_CROSS_DEVICE
l PUSH_PROV_ONFILE
l PUSH_PROV_MOBILE
clientDeviceID (Optional) Unique identifier set by wallet provider for the device. When
a wallet provider enrolls the PAN, the clientDevicetId field should
have the same value.
Format: String; max length 24 characters.
clientAppID (Optional) Unique Identifier for the client application, used to provide
some of the encrypted values. Example: Issuer’s AppID
(vClientAppID) used to select the PAN and the wallet.
Format: String; max length 36 characters.
l true
l false
Field Description
passcode (Optional) Passcode generated by the issuer. Do not specify for Secure
Remote Commerce.
Format: A Passcode structure.
returnURI (Optional) URI provided by the issuer to the token requestor to return
control to the issuer app. This can be an app or a web URL.
issuerTraceID (Required) This ID is used to uniquely identify a JWE received from the
issuer. Used to address vulnerability to replay attacks.
Format: String; max length 32 characters.
isTsAndCsAccepted (Optional) Value set by the issuer to indicate to the wallet provider
whether or not the customer already accepted the issuer terms and
conditions up-front. If true, the wallet provider can suppress
displaying terms and conditions to the customer and just submit the
terms and conditions GUID to Visa as though the customer has already
accepted the terms and conditions.
Format: It is one of the following values:
l true
l false (default)
Client Information
Field Description
l ISSUER
l TOKEN_REQUESTOR
middleName (Conditional) Middle name of the client. Issuer to populate with the
information they have for the client. Required for issuer push token
provisioning across user or across device.
Format: String; max length 80 characters.
lastName (Conditional) Last name of the client. Issuer to populate with the
information they have for the client. Required for issuer push token
provisioning across user or across device.
Format: String; max length 80 characters.
clientDeviceID (Conditional) Unique identifier set by wallet provider for the device.
Required for device token in status notification to issuer from Visa or in
client information returned to issuer by token requestor.
Format: String; max length 24 characters.
Field Description
phoneNumber (Conditional) Mobile phone number of the client as per issuer records.
Either phone number or contact email must be provided. Phone
numbers do not contain country codes.
Format: String, max 16 characters.
contactEmail (Conditional) Email address of client as per issuer records. Either phone
number or contact email must be provided.
Format: String; UTF-8; max length 48 characters.
Passcode
Field Description
type (Required) More values can be added to this enum in the future.
Format: It is one of the following values:
l PASSCODE
Field Description
Response
Successful Response
Successful API responses will return HTTP status code in the 2xx range. The response body, if
available, will contain the response of the API as described in this specification.
Field Description
uri URI to launch VCEH web UI or token requestor app. The URI depends
on the kind of route.
Format: It is the following templates; max 2048 characters:
https://VCEH_URL/pushCardEnrollment/
v1#session=sessionId
Error Responses
If a business error is present, it is assumed that no “Standard Errors” were detected in the API
request.
Sample Payloads
Sample Request
{
"encryptedData": "<JWS>",
"route": "SYNC_DIRECT",
"uriType": "ANDROID"
}
{
"iss": "e93...01", // vClientID of Issuer
"aud": "781...9a", // vClientID of Token Requestor
"kid": "83F4EEB2",
"typ": "JOSE",
"enc": "A256GCM",
"iat": 1588891891,
"alg": "RSA-OAEP-256",
"exp": "1590091891"
}
JWS payload:
<JWE>
JWE:
Note: You must set the iss and aud fields in the JWE header.
<Header>.<Encrypted Key>.<InitializationVector>.<Ciphertext>.
<Authentication Tag>
{
"enrollments": [
{
"paymentInstrument": {
"accountNumber": "414...88",
"expirationDate": {
"month": "12",
"year": "2022"
},
"name": "VTS",
"billingAddress": {
"line1": "801MetroCentreBlvd",
"line2": "second floor",
"line3": "suite 90",
"line4": "metrocenter",
"line5": "metrocenter5",
"city": "FosterCity",
"postalCode": "94404",
"state": "CA",
"country": "US"
}
},
"tsp": "V"
}
],
"provider": {
"intent": "PUSH_PROV_ONFILE",
"clientWalletProvider": "40000000052",
"clientWalletAccountID": "clientWalletHolderentity",
"clientDeviceID": "0_enOI",
"clientAppID": "bbe4c1f7-1df7-4aef-9e8f-726504c4b87b",
"isIDnV": false,
"issuerClientInformation": {
"source": "ISSUER",
"firstName": "ClientFristName",
"lastName": "ClientLastName",
"issuerAccountID": "4147780005805070",
"clientDeviceID": "0_enOI",
"tokenReferenceID": "DNITHE381919776682001531",
"paymentAccountReference": "asdascac",
"phoneNumber": "...",
"contactEmail": "...",
"locale": "en_US",
"campaignID": "dd",
"campaignDescription": "qwedwefvwewsvb234234 _kwmkwrfr-",
"userPersonalID": "w214234"
},
"passcode": {
"maxRetries": "3",
"value": "zOZYuS",
"type": "PASSCODE"
},
"returnURIType": "IOS",
"returnURI": "aHR0cDovL2JhbmtvZmFtZXJpY2EuY29t",
"issuerTraceID": "0TDFfL1OmJJ5AHONhn5Z2GxTS5ZOoVja"
}
}
Sample Response
SYNC_DIRECT Route
{
"status": "ACCEPTED",
"uri": "https://www.testapp.com?pushData=eyJhbGciOiJQUzI"
}
ASYNC Route
{
"status": "ACCEPTED"
}
GET https://vceh.sandbox.consumerapi.digital.visa.com/
vceh/pushCardEnrollment/v1#pushData=<JWS<JWE>>
Live
GET https://vceh.consumerapi.digital.visa.com/
vceh/pushCardEnrollment/v1#pushData=<JWS<JWE>>
VCEH then invokes the token requestor’s app/web on the customer device to complete enrollment.
pushData Request
JWS Header
Field Description
iat (Required) Timestamp (in UTC) when JWE was issued, expressed in
UNIX epoch time (seconds since 1 January, 1970).
Format: String; numeric digits
kid (Required) Key identifier that identifies the key used to encrypt the
CEK, which is the Issuer’s API key.
Format: String; max length 64 characters.
JWE Header
Field Description
iat (Required) Timestamp (in UTC) when JWE was issued, expressed in
UNIX epoch time (seconds since 1 January, 1970).
Format: String; numeric digits
kid (Required) Key identifier that identifies the key used to encrypt the
CEK, which is the Issuer’s API key.
Format: String; max length 64 characters.
exp (Optional) Expiration time of the payload. This field is optional and
should be evaluated in conjunction with the ttl default defined with
use case.
exp can be used to reduce the default ONLY. If exp represents a time
greater than iat + ttl then iat + ttl will be used.
Format: yyyy-MM-ddTHH:mm:ss.SSSZ.
JWE Body
Field Description
Enrollment
Field Description
l V — Visa
l MC — Mastercard
Payment Instrument
Field Description
cvv2 (Optional) CVV2 value associated with the primary account number on
the card.
Format: String; max length 4 characters.
name (Optional) The full name on the Visa card associated with the enrolled
payment instrument.
Format: String; UTF-8; max length 256 characters.
Field Description
Expiration Date
This structure is used by several APIs.
Field Description
month (Required) The month upon which the payment instrument is set to
expire.
Example: "month": "9"
Format: String; numeric; max length 2 digits.
year (Required) The year upon which the payment instrument is set to
expire.
Example: "year": "2024"
Format: String; numeric; length 4 digits.
Address
This structure is used by several APIs.
Field Description
Field Description
Field Description
intent (Required) The intent of the encryption; what is the encryption of the
data trying to do.
Specify PUSH_PROV_ONFILE for Secure Remote Commerce.
Format: It is one of the following values:
l PUSH_PROV_CROSS_USER
l PUSH_PROV_CROSS_DEVICE
l PUSH_PROV_ONFILE
l PUSH_PROV_MOBILE
clientDeviceID (Optional) Unique identifier set by wallet provider for the device. When
a wallet provider enrolls the PAN, the clientDevicetId field should
have the same value.
Format: String; max length 24 characters.
clientAppID (Optional) Unique Identifier for the client application, used to provide
some of the encrypted values. Example: Issuer’s AppID
(vClientAppID) used to select the PAN and the wallet.
Format: String; max length 36 characters.
Field Description
l true
l false
passcode (Optional) Passcode generated by the issuer. Do not specify for Secure
Remote Commerce.
Format: A Passcode structure.
returnURI (Optional) URI provided by the issuer to the token requestor to return
control to the issuer app. This can be an app or a web URL.
issuerTraceID (Required) This ID is used to uniquely identify a JWE received from the
issuer. Used to address vulnerability to replay attacks.
Format: String; max length 32 characters.
isTsAndCsAccepted (Optional) Value set by the issuer to indicate to the wallet provider
whether or not the customer already accepted the issuer terms and
conditions up-front. If true, the wallet provider can suppress
displaying terms and conditions to the customer and just submit the
terms and conditions GUID to Visa as though the customer has already
accepted the terms and conditions.
Format: It is one of the following values:
l true
l false (default)
Client Information
Field Description
l ISSUER
l TOKEN_REQUESTOR
middleName (Conditional) Middle name of the client. Issuer to populate with the
information they have for the client. Required for issuer push token
provisioning across user or across device.
Format: String; max length 80 characters.
lastName (Conditional) Last name of the client. Issuer to populate with the
information they have for the client. Required for issuer push token
provisioning across user or across device.
Format: String; max length 80 characters.
clientDeviceID (Conditional) Unique identifier set by wallet provider for the device.
Required for device token in status notification to issuer from Visa or in
client information returned to issuer by token requestor.
Format: String; max length 24 characters.
Field Description
phoneNumber (Conditional) Mobile phone number of the client as per issuer records.
Either phone number or contact email must be provided. Phone
numbers do not contain country codes.
Format: String, max 16 characters.
contactEmail (Conditional) Email address of client as per issuer records. Either phone
number or contact email must be provided.
Format: String; UTF-8; max length 48 characters.
Passcode
Field Description
type (Required) More values can be added to this enum in the future.
Format: It is one of the following values:
l PASSCODE
Field Description
results Response
JWS Header
Field Description
iat (Required) Timestamp (in UTC) when JWE was issued, expressed in
UNIX epoch time (seconds since 1 January, 1970).
Format: String; numeric digits
kid (Required) Key identifier that identifies the key used to encrypt the
CEK, which is the Issuer’s API key.
Format: String; max length 64 characters.
JWE Header
Field Description
iat (Required) Timestamp (in UTC) when JWE was issued, expressed in
UNIX epoch time (seconds since 1 January, 1970).
Format: String; numeric digits
Field Description
Enrollment Results
Field Description
l V — Visa
l MC — Mastercard
payload An opaque payload for the TSP, which is passed to the TSP for token
provisioning. For Visa cards, it contains the last 4 digits of the PAN
Format: String; maximum 256 characters.
Error Response
Field Description
Sample Payloads
Issuer to VCEH
Invocation URL
POST https://vceh.sandbox.consumerapi.digital.visa.com/
vceh-web/pushCardEnrollment/v1#pushData=eyJr...dQ
JWS Header
{"alg":"PS256","typ":"JOSE","kid":"QS0...Tc"}
JWE Header
{"iss":"d1c...01","aud":"3ee...01","exp":"1615231207",
"alg":"A256GCMKW","enc":"A256GCM","typ":"JOSE",
"kid":"bb...8","iat":"1614367207"}
{
"enrollments": [
{
"tsp": "V",
"paymentInstrument": {
"accountNumber": "...",
"expirationDate": {
"month": "12",
"year": "2022"
},
"name": "...",
"billingAddress": {
"state": "CA",
"line1": "...",
"country": "US",
"city": "FosterCity",
"postalCode": "94404"
}
}
},
{
"tsp": "V",
"paymentInstrument": {
"accountNumber": "...",
"expirationDate": {
"month": "12",
"year": "2022"
},
"name": "...",
"billingAddress": {
"state": "CA",
"line1": "...",
"country": "US",
"city": "FosterCity",
"postalCode": "94404"
}
}
},
{
"tsp": "MC",
"payload": "8sC5xeRoAx"
},
{
"tsp": "MC",
"payload": "VwjUW5pohd"
}
],
"provider": {
"intent": "PUSH_PROV_ONFILE",
"issuerAccountID": "customerid",
"issuerClientInformation": {
"phoneNumber": "...",
"contactEmail": "...",
"firstName": "...",
"middleName": "...",
"lastName": "..."
},
"returnURI": "aHR...==",
"issuerTraceID": "Jss...Vf",
"returnURIType": "IOS",
"isTsAndCsAccepted": "true"
}
}
VCEH to Issuer
Return URL:
{
"enrollments": [
{
"status": "SUCCESS",
"payload": "5865",
"tsp": "V"
},
{
"status": "PENDING",
"payload": "6960",
"tsp": "V"
},
{
"status": "CANCEL",
"payload": "5238",
"tsp": "V"
},
{
"status": "SUCCESS",
"payload": "FsbH7qcWy3",
"tsp": "MC"
},
{
"status": "PENDING",
"payload": "53YPZ5iIK2",
"tsp": "MC"
},
{
"status": "CANCEL",
"payload": "XIVpdNFIxa",
"tsp": "MC"
}
],
"issuerTraceId": "s0D...SM"
}
Request
Endpoints
Path:
{Issuer Endpoint}/vtis/v1/tokenRequestors/
{tokenRequestorID}/cardEnrollment/notification?eventType=eventType
URL Parameters
Parameter Description
Method
POST
Query Parameters
Parameter Description
l PUSH_PROVISIONING_STATUS
— push provisioning notification
Request Body
Field Description
issuerTraceID (Optional) The field will help issuer to trace the VCEH session. The
value of this field is initially set by issuer in JWE with issuerTraceID.
Format: String; max length 32 characters.
encryptedData (Conditional) Blob field that contains the encrypted payload; see
"Cardholder Information" in the "Encrypted Payload Data Structures"
chapter for more information. Populated with the client info as
maintained by the wallet provider.
Format: String; max length 7000 characters.
Response
Successful Response
Successful API responses will return HTTP 200 status code with no response payload.
Error Response
The notification API is an asynchronous API and does not need the issuer to return anything to Visa.
The issuer returns the following error statuses as appropriate with no response payload in addition to
the Standard Errors.
400 Bad Request The request could not be understood by the server because of
malformed syntax. The client should not repeat the request until
modifications have been made.
404 Not Found The server has not found anything matching the Request URI.
500 Internal Server Error An unspecified server error has occurred. Visa should attempt to
retry or contact issuer support.
Sample Payloads
Sample Request
{
“status”: “SUCCESS”,
“issuerTraceID”: “...”,
“encryptedData”: “<JWS>”
}
{
“source”: “ISSUER”
“firstName”: “ClientFristName”,
“middleName”: “ClientMiddleName”,
“lastName”: “ClientLastName”,
“phoneNumber”: “555-555-5555”,
“contactEmail”: “[email protected]”,
“locale”: “en_US”,
“clientDeviceID”: “...”,
“tokenReferenceID”: “...”
}
Introduction
This chapter gives specifications for the batch process allowing issuers to make bulk updates to their
card metadata. Contact your Visa representative for more information.
The batch process is a file-based solution that accepts a request file with multiple card metadata
records in JSON format. The corresponding response file contains the results of the operation.
Batch
The batch request file includes an array of Update Card Metadata requests. The file should be
constructed in such a way that each row in the array represents one request for the card metadata
update and should be in a single line with no white spaces.
^(UCM_REQ_[a-zA-Z-0-9]+_(\\d{4}-\\d{2}\\d{2}T\\d{2}.\\d{2}.\\d{2}).json)
$
Batch Request
Field Description
updateCardMetadata (Required) This field identifies the beginning of the batch file request.
Format: An array; max size 50000.
Field Description
rowId (Required) Unique ID assigned for each request row in the batch file.
Maximum value can be 50000.
Format: String; max length 5 characters.
tokenReferenceID (Required) Unique ID for the token associated with the PAN. This ID can
be used in lieu of the token for subsequent calls, such as lifecycle
events.
Format: String; max length 32 characters.
Field Description
Request
{
“updateCardMetadata”: [{
“rowId”: “1”,
“tokenRequestorID”: 400...00,
“tokenReferenceID”: “DNITHE 400...32”,
“operatorID”: “OPERATOR123”,
“operationReason”: “Updating Card Description”,
“cardMetadataInfo”: {
“cardIssuer”: “Bank1”,
“foregroundColor”: “rgb(112,533,123)”,
“backgroundColor”: “rgb(223,122,235)”,
“labelColor”: “rgb(255,122,235)”,
“shortDescription”: “4EJ...B4”,
“longDescription”: “n0h...oq”,
“cardArtData”: {
“cardArtRefID”: [
“aa4...ad”,“ga4...ad”,
“aaa...a2”,“2aa...aa”,
“2d6...df”]
},
“termsAndConditionsID”: “test”,
“privacyPolicyURL”: “https://privacyPolicyURLab.com/abc128”,
“termsAndConditionsURL”:
“https://termsAndConditionURL.com/abc128”,
“contactInfo”:{
“contactWebsite”: “www.bank1.com”,
“contactEmail”: “[email protected]”,
“contactNumber”: "987...21”,
“contactName”: “UCMTest”
},
“applicationInfo”: {
“supportsTokenNotifications”: true,
“supportsFPANNotifications”: true,
“transactionServiceURL”:
“https://vntsnotificationservice.visa.com/TxnHist/1”,
“messageServiceURL”: “https://messageserviceurlnfh.com”,
“transactionPushTopic”: “55q...0j”,
“messagePushTopic”: “https://messagepushtopic_udf...l6.com”,
“appLaunchURL”: “https://appLaunch.com/abc128”,
“appLaunchURLScheme”: “868...95”,
“associatedStoreIdentifiers”: [“123”,“456”],
“associatedApplicationIdentifiers”:
[“PROFILE_ID_103”,“PROFILE_ID_113”]
}
}
},
{
“rowId”:“2”,
“tokenRequestorID”: 400...01,
“tokenReferenceID": “DNI...33”,
“operatorID”: “OPERATOR123”,
“operationReason”: “Updating Card Description”,
“cardMetadataInfo”:{
“cardIssuer”: “Bank1”,
“foregroundColor”: “rgb(112,533,123)”,
“backgroundColor”: “rgb(223,122,235)”,
“labelColor”: “rgb(255,122,235)”,
“shortDescription”: “4EJ...B4”,
“longDescription”: “n0h...oq”,
“cardArtData”:{
“cardArtRefID”: [“aa4...ad”,“aaa...a1”,
“aaa...a2”,“2aa...aa”,“2d6...df”]
},
“termsAndConditionsID”: “test”,
“privacyPolicyURL”: “https://privacyPolicyURLab.com/abc128”,
“termsAndConditionsURL”:
“https://termsAndConditionURL.com/abc128”,
"contactInfo”:{
“contactWebsite”: “www.bank1.com”,
“contactEmail”: “[email protected]”,
“contactNumber”: “987...21”,
“contactName”: “UCMTest”
},
“applicationInfo”: {
“supportsTokenNotifications”: true,
“supportsFPANNotifications”: true,
“transactionServiceURL”:
“https://vntsnotificationservice.Visa.com/TxnHist/1”,
“messageServiceURL”: “https://messageserviceurlnfh.com”,
“transactionPushTopic”: “55q...0j”,
“messagePushTopic”:
“https://messagepushtopic_udf...l6.com”,
“appLaunchURL”: “https://appLaunch.com/abc128”,
“appLaunchURLScheme”: “868...95”,
“associatedStoreIdentifiers”: [“123",“456”],
“associatedApplicationIdentifiers”:
[“PROFILE_ID_103”,“PROFILE_ID_113”]
}
}
}
]
}
Success Response
{
“header”:{
“successCount”: 5,
“failureCount”: 0,
“correlationID”: “1_1...66m_BATCH-WEB”
},
“details”:[
{
“responseDetails”:[
{
“taskID”: “fc3...df”,
“tokenRequestorID”: 400...73,
“tokenReferenceID”: “DNI...21”,
“panReferenceID”: “V-3...04”,
“statusCode”: “PENDING”
}
],
“X-RESPONSE-ID”: “154...80_1”,
“rowId”: “1”
},
{
“responseDetails”:[
{
“taskID”: “ba9fc768-8e4...2a”,
“tokenRequestorID”: 400...73,
“tokenReferenceID”: “DNI...21”,
“panReferenceID”: “V-3...04”,
“statusCode”: “PENDING”
}
],
“X-RESPONSE-ID”: “154...09_2”,
“rowId”: “2”
},
{
“responseDetails”:[
{
“taskID”: “3cb...6e”,
“tokenRequestorID”: 400...73,
“tokenReferenceID”: “DNI...21”,
“panReferenceID”: “V-3...04”,
“statusCode”: “PENDING”
}
],
“X-RESPONSE-ID”: "154...39_3”,
“rowId”: “3”
},
{
“responseDetails”:[
{
“taskID”: “07b...55”,
“tokenRequestorID”: 400...73,
“tokenReferenceID”: “DNI...21”,
“panReferenceID”: “V-3...04”,
“statusCode”: “PENDING”
}
],
“X-RESPONSE-ID”: “154...68_4”,
“rowId": “4”
},
{
"responseDetails”:[
{
“taskID”: “786...e4”,
“tokenRequestorID”: 400...73,
“tokenReferenceID”: “DNI...21”,
“panReferenceID”: “V-38...04”,
“statusCode”: “PENDING”
}
],
“X-RESPONSE-ID”: “154...98_5”,
“rowId”: “5”
}
]
}
Failure Response
{
“header”:{
“successCount”: 2,
“failureCount”: 3,
“correlationID”: “1_15...6m_BATCH-WEB”
},
“details”:[
{
“responseDetails”:[
{
“taskID”: “fa3...37”,
“tokenRequestorID”: 400...73,
“tokenReferenceID”: “DNI...85”,
“panReferenceID”: “V-38...87”,
“statusCode”: “PENDING”
}
],
“X-RESPONSE-ID”: “154...05_1”,
“rowId”: “1”
},
{
“responseDetails”:[
{
“taskID”: “227...e0”,
“tokenRequestorID”: 400...73,
“tokenReferenceID”: “DNI...85”,
“panReferenceID”: “V-38...87”,
“statusCode”: “PENDING”
}
],
“X-RESPONSE-ID”: “154...34_2”,
“rowId”: “2”
},
{
“errorResponse”:{
“status”: 400,
“message”: “VSE_ERROR_INVALID_DATA”,
“reason”: “VSE40000”
},
“X-RESPONSE-ID”: “154...64_3”,
“rowId”: “3”
},
{
“errorResponse”:{
“status”: 400,
“message”: “VSE_ERROR_INVALID_DATA”,
“reason”: “VSE40000”
},
“X-RESPONSE-ID”: “154...94_4”,
“rowId”: “4”
},
{
“errorResponse”:{
“status”: 400,
“message”: “VSE_ERROR_INVALID_PROFILE_ID”,
“reason”: “VSE40004”
},
“X-RESPONSE-ID”: “154...22_5”,
“rowId”: “5”
}
]
}
Reject Codes
RPIN Enrollment/Customer Contact Info Reject Code
A1 Invalid action.
Valid action codes are:
l Add
l Change
l Delete
A7 Account number is invalid, does not begin with 4 or does not pass
check.
C2 Product ID is invalid.
C4 RPIN Product Category does not match Product Category of the VCIS
account range.
A1 Invalid action.
Valid action codes are:
l Add
l Change
l Delete
L4 Linked Card Number is specified but both Link Reason Code and
Unlink Indicator contain spaces.
L6 Cannot have values in both link reason code and unlink indicator. Only
one field may be used at a time.
L8 Linked card number is not in an eligible account range for this issuer.
l Add
l Change
l Delete
l Replace
l LOC
l Customer
l VIP1
l ISEGMENT
ND Add and delete record for same account in the same file.
NE Invalid product ID
NG Invalid issuer BID linking This reject reason code will be used when
there is an attempt to link accounts that are from different issuers.
l Add
l Change
l Delete