Make your first VICA call against the sandbox in five steps. You'll enroll a consumer and card into a product and confirm the result. This section uses Click to Pay as an example.
For the business and certification path to production, see Getting Started.
| Environment | Base URL |
|---|---|
| Sandbox | https://sandbox.api.visa.com/visaIdCredential/v1 |
| Certification | https://cert.api.visa.com/visaIdCredential/v1 |
| Production | https://api.visa.com/visaIdCredential/v1 |
Create a Visa Developer project and add Visa ID and Credential (VICA). Existing VTS clients should work with their Visa Representative for setup. This generates the credentials you'll use to authenticate.
VICA requires Two-Way SSL (mutual authentication) or X-Pay-Token authentication, and Message Level Encryption (MLE) for the payload. Configure both before calling (see Authentication and Security). You'll need your client certificate and the MLE key pair for the sandbox environment.
Call Enroll Data against the sandbox base URL with a Click to Pay enrollment. You can try calling this API using your API Client (e.g. Postman) or implement it directly in your code.
Set the header's Content Type:
Add Content Type as a JSON object: Content-Type: application/json
Set up authentication
Add your certificate and set the MLE key ID.
Configure the request URL
Use the sandbox Enroll Data endpoint:
POST "https://sandbox.api.visa.com/visaIdCredential/v1/enrollData"
Prepare the request body
Create a JSON request body with the required fields.
{
"products": [
{
"productCode": "CLICK_TO_PAY"
}
],
"consumerInformation": {
"externalConsumerID": "829662xw-54pl-50tr-c127-5368r18701",
"firstName": "John",
"middleName": "Robert",
"lastName": "Doe",
"countryCode": "USA",
"locale": "en_US",
"emails": [
"[email protected]"
],
"phones": [
"14155551234"
],
"paymentInstruments": [
{
"type": "CARD",
"accountNumber": "4111111111111111",
"nameOnCard": "John Doe",
"expirationDate": "2029-12",
"issuerName": "Bank A",
"cardType": "Visa Platinum",
"billingAddress": {
"addressLine1": "500 Main Street",
"addressLine2": "Apt 201",
"city": "New York",
"state": "NY",
"postalCode": "10001",
"country": "USA"
}
}
]
}
}
Send the request
Make the POST request to the API endpoint with all headers and body configured.
Receive response
The call returns HTTP 202 with a requestTraceId.
// 202 Accepted
{
"requestTraceId": "351562ba-83cf-11ee-b962-0242ac120002"
}
Enrollment is asynchronous. Use the requestTraceId to retrieve the outcome (valid for 7 days), along with the same authentication and content type headers:
GET "https://sandbox.api.visa.com/visaIdCredential/v1/requestStatus/351562ba-83cf-11ee-b962-0242ac120002"
A status of COMPLETED with each details[] item SUCCESS means the consumer is enrolled. Per-product failures appear as FAILED with errorDetails - see Errors and Troubleshooting.
You've made your first call. Before building further, read Core Concepts to understand the data model, identity scheme, async processing, and request patterns - then pick the operation recipes you need from Implementation Guides.
Because writes are asynchronous, plan early for how you'll receive outcomes: either poll Request Status or build a notification receiver endpoint (see How to receive status notifications and Securing outbound notification endpoints).