Digital Credentials API for credential issuance

Natalia Markoborodova
Natalia Markoborodova

Published: November 26, 2025

You can join the origin trial for the Digital Credentials API issuance starting from Chrome 143. This new API makes it easier for websites to provision digital credentials to the user's preferred wallet.

The background

In the three-party digital identity ecosystem of issuers, verifiers (relying parties), and holders (wallets), it is common for a user to provision a digital ID in their wallet through push provisioning. During the process, the user starts the ID issuance process directly from the issuer's website or app. For example, a user visiting a state's motor vehicle department (issuer) website can initiate the process to save their digital license to their preferred wallet app (holder) on their device.

For this model to be successful, the issuer needs a secure and reliable way to connect with the wallet app to issue the ID. This process has been fragmented, as each issuer had to build their own connections for every wallet app they partnered with, typically relying on custom URI schemes. This approach created significant implementation friction, forcing issuers to build and maintain support for a fragmented ecosystem of different wallet integrations.

The Digital Credentials API issuance

To streamline this process, Chrome is expanding support of the W3C Digital Credentials API, adding to the recently shipped presentment capabilities. The navigator.credentials.create() method allows issuer websites to securely invoke wallet apps for credential issuance. When an issuer website calls navigator.credentials.create() with a digital member, the browser delegates the flow to the platform, which is limited to Android, as of Chrome 143. The platform displays a list of compatible wallets installed on the device. The user can then select a wallet, and give their consent to add the credential.

Digital Credentials API issuance works for both same-device (on mobile), and cross-device (desktop initiated) scenarios. In a cross-device scenario, the desktop browser displays a QR code. When the user scans the code on their mobile device, the platform-mediated flow will be initiated, if both devices are in close proximity.

How to use the API

The API is protocol-independent and designed to work with open standards, for example, the OpenID for Verifiable Credential Issuance (OpenID4VCI) standard.

To initiate the issuance flow, the issuer website must call navigator.credentials.create() and pass the issuance requests inside a digital object, for example:

// Check if the browser supports Digital Credentials issuance and the protocol.
if (window.DigitalCredential && DigitalCredential.userAgentAllowsProtocol('openid4vci-v1')) {

  // Construct a credential offer according to the OpenID4VCI specification.
  // Note: The API is in an active development stage. Always consult the
  // specification and documentation for the most recent implementation details
  const credentialOffer = {
    credential_issuer: 'https://digital-credentials.dev',
    credential_configuration_ids: [
      'org.iso.18013.5.1.mDL'
    ],
    authorization_server_metadata: {
      issuer: 'https://digital-credentials.dev',
      token_endpoint: 'https://digital-credentials.dev/openid4vci/token',
      authorization_endpoint: 'https://digital-credentials.dev/openid4vci/auth',
      grant_types_supported: [
        'authorization_code',
        'urn:ietf:params:oauth:grant-type:pre-authorized_code'
      ],
      response_types_supported: ['code','token']
    },
    // Metadata details to help the wallet display the credential correctly.
    credential_issuer_metadata: {
      credential_endpoint: 'https://digital-credentials.dev/openid4vci/credential',
      credential_configurations_supported: {
        'org.iso.18013.5.1.mDL': {
          format: 'mso_mdoc',
          display: [{
            name: 'Driving License',
            locale: 'en-US',
            description: 'Mobile Driving License'
          }],
          // The claims that this document contains.
          // For a full list of standard mDL claims, see the ISO/IEC 18013-5 specification.
          claims: [{
            path: ['org.iso.18013.5.1', 'family_name'],
            display: [{ name: 'Family Name', locale: 'en-US' }]
          }
          // ... Add any other claims for your document here.
          ]
        }
      }
    }
  };

  // This call is made from the issuer's frontend, likely inside a button's click handler.
  try {
    await navigator.credentials.create({
      digital: {
        requests: [{
          // The protocol identifier for this version of OpenID4VCI.
          protocol: 'openid4vci-v1',
          data: credentialOffer
          }
        }]
      }
    });
    console.log('Credential issuance handoff to OS was successful.');
  } catch (e) {
    console.error('Error starting the credential issuance flow:', e);
  }

} else {
  // The API is not supported. Provide an alternative issuance method.
  console.log('Digital Credential Issuance API is not supported in this browser.');
}

Try it out

Before you test the Digital Credentials API in your browser and Android device:

  • Update to Chrome 143 or later on desktop and have Google Play services 24.0 or later on your Android device.
  • Enable the flag at chrome://flags/#web-identity-digital-credentials-creation in your browser.
  • Install a supported wallet app on your Android device, for example, the demo CMWallet.

To test the cross-device flow for issuing digital credentials:

  1. Navigate to https://digital-credentials.dev/dmv on desktop.
  2. Press the Add button to initiate the issuance flow.
  3. Scan the QR code with your Android device and follow the prompts.

After following these steps, you have a new credential issued to the wallet on your Android device.

To enable this feature on your website for users, join the Digital Credentials API for issuance origin trial. For more information, check out the Get started with origin trials article.

Share your feedback

Your feedback is crucial as we continue to evolve the platform. File any bugs or feature requests on the Chromium bug tracker.