Core Concepts

Visa ID & Credential API (VICA) lets you manage consumer identities and payment credentials, and enroll them into multiple Visa products, through one fixed set of endpoints. You select which product an operation applies to using a request attribute — you never call a different endpoint per product.

This page explains the building blocks that are shared across every product. For how the unified APIs sit in front of Visa services, see Overview. For the complete request/response schemas and field constraints, see API Reference.

VICA operations

VICA exposes a single, product-agnostic set of operations. The same operation works across products; the product is chosen in the request body (see Request Patterns).

Supported operations may differ by product; refer to the product-specific documentation for availability.

Operation Purpose Processing
Enroll Issuer Data Create a consumer Asynchronous (202)
Enroll Existing Issuer Data with Payment Instrument Enroll a consumer already registered in another Visa product (e.g. Click to Pay) into an additional product, providing a full payment instrument object Asynchronous (202)
Enroll Existing Issuer Data with Payment Instrument Reference Enroll a consumer already registered in another Visa product into an additional product, referencing an existing payment instrument by ID — no payment instrument data required Asynchronous (202)
Enroll Payment Instruments Add payment instrument(s) to an existing consumer Asynchronous (202)
Manage Consumer Information Data Update consumer profile fields Asynchronous (202)
Manage Payment Instruments Data Update payment instrument details Asynchronous (202)
Delete Consumer Information Data Remove a consumer and all associated payment instruments Asynchronous (202)
Delete Payment Instruments Data Remove a single payment instrument Asynchronous (202)
Get Issuer Data Retrieve a consumer's enrolled data and payment instruments Synchronous (200)
Request Status by Request Trace ID Retrieve the outcome of an asynchronous request Synchronous (200)

Two variations of enrollment let you add an already-known consumer (or consumer + payment instrument) to an additional product without resubmitting full details — see Implementation Guides.

VICA also sends two outbound notifications to a registered issuer endpoint: a Request Status Notification when an async request completes, and a Click to Pay Enrollment Attempt Notification - see Core Concepts > Asynchronous Processing Model.

For each operation's HTTP method, path, and request/response samples, see Implementation Guides; for the authoritative schema, see API Reference.

Common objects

Every VICA request combines target product(s) with consumer and/or payment-instrument data. Individual products extend or constrain these objects, but the shape is shared.

Object What it represents Key elements
products Which Visa product(s) the operation targets

An array of { "productCode": … } entries — CLICK_TO_PAY, ADDRESS_VERIFICATION_SERVICE, ACCOUNT_NAME_INQUIRY, ALIAS_DIRECTORY_SERVICE.

See Request Patterns.

intent (legacy) Which Visa product the operation targets Object containing { "type": "PRODUCT_CODE", "value": "CLICK_TO_PAY" }
consumerInformation The person whose data is being enrolled or managed identity (externalConsumerID, externalConsumerIDOwnerBID), profile (firstName, lastName, countryCode, locale), contact (email, phone), status, consent
paymentInstruments One or more payment credentials linked to the consumer type (CARD or BANK_ACCOUNT), the type-specific fields, and an optional preferredFor
  • products selects routing and also determines how results are keyed in responses (productCode vs intent) — see Core Concepts > Request Patterns.
  • CARD is supported by all products. BANK_ACCOUNT is supported only by Alias Directory Service (ADS).
  • preferredFor (send / receive / pay) applies only to ADS; other products ignore it.

How VICA identifies a consumer

A consumer in VICA is uniquely identified by the combination of two fields:

  • externalConsumerID - a unique consumer identifier from the issuer's perspective, generated and provided by you. It is distinct from any payment instrument identifier; one consumer may have many payment instruments.
  • externalConsumerIDOwnerBID — the Visa Business Identifier (BID) of the entity that owns that consumer record.

Together they uniquely identify a consumer across the VICA and Click to Pay systems and link enrollment to all later data-management operations, so updates apply to the correct record. Data is siloed per product - enrolling a consumer in one product (e.g., Click to Pay) does not enroll them in another (e.g., AVS).

"consumerInformation": { "externalConsumerID": "829662xw-54pl-50tr-c127-5368r18701", "externalConsumerIDOwnerBID": "10098765", "firstName": "John", "lastName": "Doe", "countryCode": "USA" }
"consumerInformation": {
  "externalConsumerID": "829662xw-54pl-50tr-c127-5368r18701",
  "externalConsumerIDOwnerBID": "10098765",
  "firstName": "John",
  "lastName": "Doe",
  "countryCode": "USA"
}
		

External Consumer ID Owner (BID)

externalConsumerIDOwnerBID identifies the BID of the entity to which an externalConsumerID belongs. When multiple issuers or processors share a VICA integration, this field tells Visa which entity owns a given consumer record.

Phased Requirement

Integration date Requirement
Integrated before 3 April 2025 Optional; existing integrations that omit it continue to work without error
All other integrations Required for Enroll Data and Enroll Payment Instruments requests, recommended to always provide it

Format

Constraint Value
Type String
Pattern Numeric digits only (^\d*$)
Min length 1
Max length 8
Example 10098765

Table 1: externalConsumerIDOwnerBID field constraints

Choosing the right BID. An issuer may have several BIDs associated with a PAN (e.g., the PAN's Issuer BID or its Holding Company BID). Send the BID of the entity that manages the customer profile:

  • If you use the same externalConsumerID for cards under different Issuer BIDs, send the PAN's Holding Company BID.
  • If you use different externalConsumerIDs for cards under different Issuer BIDs, send the PAN's Issuer BID.

Include this field wherever consumerInformation is accepted — it applies to all products (CTP, AVS, ANI, ADS). For the correct value for your integration, contact your Visa Representative.

Asynchronous processing model

Does VICA process requests synchronously or asynchronously? Both - and which one applies depends on the operation. VICA splits operations into two processing modes. Understanding this model is essential - most write operations do not report their final outcome in the HTTP response.

Writes are asynchronous. Enroll, Manage, and Delete return HTTP 202 Accepted to acknowledge receipt, along with a requestTraceId.

The final outcome arrives one of two ways:

  • Pull - call Request Status with the requestTraceId. The requestTraceId is a client-provided UUID and is valid for 7 days from receipt.
  • Push - receive a Request Status Notification at the endpoint you register in Visa Developer Platform (VDP). Notifications are sent only after processing is fully complete, so every item is in a terminal state (SUCCESS / FAILED). You must build and secure this receiver endpoint - plan for it early. See How to Receive Status Notifications and Authentication & Security › Securing Outbound Notification Endpoints.

Get Data is synchronous. It returns HTTP 200 with the consumer's current data in the response body.

Outcomes are per-product, not per-request. When a request targets more than one product, each product is processed independently. A failure in one product does not fail the others or reject the request at the HTTP level:

  • Async writes: inspect the per-product details[] in the Request Status response/notification.
  • Get Data: always returns HTTP 200; inspect each item in the data[] array — a product item is either successful data or an errorDetails object.

Note: The same VIDC- reason code can mean different things depending on context (synchronous validation vs. Get Data item-level results). See Errors and Troubleshooting for the authoritative, context-scoped code tables.

VICA also pushes a Click to Pay Enrollment Attempt Notification when a consumer self-enrolls and the issuer is enabled for Issuer Offered Click to Pay (IoC). See Click to Pay with VICA.

Request patterns

How do I target one or more products in a request? You tell VICA which product(s) an operation targets using one of three patterns. The choice affects which fields are required and how results are keyed in responses.

Pattern When to use
products only Preferred for all new integrations. Targets one or more products in a single request. Codes: CLICK_TO_PAY, ADDRESS_VERIFICATION_SERVICE, ACCOUNT_NAME_INQUIRY, ALIAS_DIRECTORY_SERVICE.
intent only Legacy. Targets Click to Pay only; retained for backward compatibility with integrations that predate products.
Intent + products For integrations originally built on intent for CTP that are being extended - CTP stays addressed by intent, additional products go in products.
// products only (preferred) "products": [ { "productCode": "CLICK_TO_PAY" }, { "productCode": "ALIAS_DIRECTORY_SERVICE" } ]
 // products only (preferred)
"products": [
  { "productCode": "CLICK_TO_PAY" },
  { "productCode": "ALIAS_DIRECTORY_SERVICE" }
]
		

Up to four products can be included in one request; each is processed independently.

How the pattern affects responses. In Get Data, Request Status, and Request Status Notification, items are keyed differently depending on the pattern used:

Request pattern CTP item keyed by Other product items keyed by
intent only intent n/a
product only productCode productCode
intent + product intent productCode

Parse the data / details array accordingly: an item is a CTP result if it carries the intent key, and a non-CTP result if it carries the productCode key. (intent-keyed CTP failures use a top-level error string; product-keyed failures use the structured errorDetails object — see Errors & Troubleshooting.)

Supported operations per product

Not every operation is available for every product. This matrix is the quick orientation; each product hub documents its own specifics.

Operation CTP AVS ANI ADS
Enroll Consumer YES YES YES YES
Enroll Payment Instrument (type=CARD) YES YES NO ¹ YES
Enroll Payment Instrument (type=BANK_ACCOUNT) NO NO NO YES
Manage Consumer Information Data YES NO² NO YES
Manage Payment Instruments Data YES YES NO YES
Delete Consumer Information Data YES NO² NO YES
Delete Payment Instruments Data YES YES YES YES
Get Data YES NO³ NO ³ YES

¹ ANI requires consumerInformation; it does not support standalone card enrollment.

² Consumer-level operations on AVS return HTTP 422.

³ Get Data on AVS/ANI returns item-level error VIDC-1003; other products in the same request are unaffected.

Next steps