List payment passkeys
Overview
Use this flow to retrieve payment passkeys linked to a card. The issuer application displays the results in its native user interface.
User experience
Visa requires a brief initialization step on an issuer-hosted web page.
This step checks the device configuration.
The issuer application then displays them in its native user interface.
Flow

The D1 SDK redirects the end user to an issuer-hosted web page. This can be a loading page.
The page loads the D1 JavaScript SDK.
The D1 JavaScript SDK starts the Visa SDK in a hidden iframe.
If the device completed this step within eight minutes, the D1 SDK skips the web page automatically.
Sequence diagram
Prerequisites
The issuer application integrates and initializes the D1 SDK.
The issuer application is authenticated with the D1 SDK.
The end user and card are registered in the D1 Platform.
The issuer exposes the issuer-hosted web page at an URL configured in the D1 backend.

After this sequence, Visa initialization completes. The D1 SDK and D1 backend retrieve the card's payment passkeys. They also identify the payment passkey linked to the current device.

The D1 SDK returns the payment passkey list to the issuer application. The issuer application displays the list in its native iOS or Android user interface.
Integrate the D1 JavaScript SDK
Create an issuer-hosted web page that loads the D1 JavaScript SDK.
The D1 JavaScript SDK creates a hidden iframe that runs the Visa JavaScript SDK. Visa uses the device fingerprint before it retrieves payment passkeys or creates a payment passkey.
The D1 SDK opens this page when needed. It uses a ChromeCustomTab on Android and SFSafariViewController or ASWebAuthenticationSession on iOS. Initialization takes up to two seconds.
Display a waiting state while initialization runs. A spinner is sufficient.
Receive initialization parameters
The D1 SDK opens the issuer-hosted web page with query parameters.
Read these parameters from the page URL:
issuerCallbackUrl
issuerCallbackUrl
Yes
apn
visaParameters.apn
Yes
softwareId
visaParameters.softwareId
Yes
softwareVersion
visaParameters.softwareVersion
Yes
productCode
visaParameters.productCode
Yes
All values are strings and URL-encoded. Pass them unchanged to init().
Initialize the D1 JavaScript SDK
On the issuer-hosted web page:
Display a waiting state until the flow completes or redirects.
Read the query parameters added by the D1 SDK.
Load the D1 JavaScript SDK with its Subresource Integrity (SRI) hash.
Set
crossorigin="anonymous"on the script.Call
init()with the callback URL and Visa parameters.
The following example loads and initializes the D1 JavaScript SDK:
Security requirements
Set
integrityto the SRI hash provided by Thales. The browser blocks a modified script.Set
crossorigin="anonymous". Cross-origin SRI requires a CORS-enabled response.Check that
window.initis available. Display an error if the script fails to load.Serve the page over HTTPS. Do not embed it in an iframe.
Register the page origin with Visa during D1 onboarding. Visa receives it as
top_originandintegrator_origin.
Handle the callback
When initialization finishes, the D1 JavaScript SDK redirects to issuerCallbackUrl. Configure this URL during D1 onboarding.
The D1 SDK handles the callback automatically on iOS. On Android, redirect the callback to the D1 SDK as shown below.
Integrate the D1 SDK
Follow these platform requirements:
Integrate the D1 SDK as mentioned in this section.
Android: Call
handleResult()directly on the main thread fromonNewIntent(). Do not use background threads or dispatchers. They can trigger lifecycle callbacks before processing completes.
Last updated
Was this helpful?