# Digital ID Wallet Verification

Digital ID Wallet Verification lets users verify with a mobile driver's license (mDL) or other supported digital ID from Apple Wallet or Google Wallet, instead of photographing a physical ID.

You can offer this in two ways:

- In the Incode Hosted onboarding app, where the wallet option appears automatically on the ID chooser screen after it is enabled in your flow configuration.
- In your own custom web UI, using the Incode Web SDK headless `renderWallet` API to launch the wallet flow from your own button.

For the full list of supported wallets, schemes, and attributes across regions, see [Supported Digital IDs](/general-reference/supported-digital-ids/).

## How it works

Digital ID Wallet Verification follows the same onboarding session model as the rest of Incode ID verification:

1. Your application creates or opens an Incode onboarding session.
2. The user chooses to verify with a digital ID wallet.
3. The browser launches the native wallet sheet with `navigator.credentials.get()`.
4. The user selects the credential and consents to share the requested attributes.
5. The encrypted wallet response is sent to Incode for decryption and verification.
6. Verification results are stored on the session and can be retrieved using the standard Incode result APIs.

The user's identity attributes are not returned directly to the web page from the wallet call. The wallet response is encrypted for Incode services, and verified attributes are made available through the session's standard OCR data, score, and webhook result surfaces.

## Web wallet support

| Platform | Wallet        | Browser | Provider    |
| -------- | ------------- | ------- | ----------- |
| iOS      | Apple Wallet  | Safari  | `apple_web` |
| Android  | Google Wallet | Chrome  | `google`    |

Apple Wallet web support requires the relying-party domain to be approved for wallet presentation. Coordinate with your Incode Representative before going live with Apple Wallet.

Incode is an approved Google Verifier registrar and handles Google Wallet registration on your behalf. The user must still be on a supported Android Chrome environment with a compatible digital ID in Google Wallet.

## Option 1: Use the Incode Hosted onboarding app

If you use Incode's hosted or embedded onboarding app, no extra front-end integration is required after the flow is configured.

When the user reaches the ID chooser screen, the app shows a digital ID wallet option alongside the normal document capture options, when all of the following are true:

- Digital IDs are enabled in the flow configuration.
- Apple Wallet or Google Wallet is enabled for the flow.
- The user's device and browser support the wallet method.
- The user has a compatible digital ID in their wallet.

The user taps the wallet option, confirms the wallet presentation in Apple Wallet or Google Wallet, and returns to the onboarding flow after the encrypted response is verified.

If the wallet flow cannot be completed, the user can continue with the regular ID capture fallback path, depending on your flow configuration.

## Option 2: Use the Web SDK headless wallet API

Use the Web SDK `renderWallet` API when you are building your own UI and want to expose only the wallet functionality.

This is useful when:

- You do not use the Incode ID chooser screen.
- You want a custom button, page, or modal for digital ID verification.
- You want to offer wallet verification in a custom onboarding flow while still using Incode to create the wallet request, decrypt the response, and store results on the session.

For the full API surface, parameters, and callback shapes, see the [`renderWallet` reference](/sdk-reference/web-sdk-reference/#renderwallet).

## Retrieving results

Digital ID Wallet Verification writes verification output to the Incode onboarding session. Use your existing Incode result retrieval pattern:

- OCR data retrieval for verified identity attributes
- Score or validation result retrieval for decisioning
- Webhooks for session status transitions and downstream automation

The response from `renderWallet` is not a replacement for the final session result. Treat it as confirmation that the wallet response was submitted and processed.

## Recommended integration patterns

**For Incode Hosted onboarding app customers:**

- Enable Digital ID Acceptance in the flow configuration.
- Let the wallet option appear in the hosted chooser screen.
- Use standard Incode session result and webhook handling after completion.

**For Web SDK customers using the built-in ID capture UI:**

- Enable Digital IDs in the flow configuration.
- Use the chooser wallet button by default.
- Add `hideDigitalIdButton: true` only if you want to move the wallet entry point into your own UI. See [`renderCaptureId` config options](https://developer.incode.com/docs/websdk-2-reference-render-wallet#hide-the-built-in-digital-id-button).

**For Web SDK customers with fully custom UI:**

- Enable Digital IDs in the flow configuration.
- Create your own wallet button.
- Call `renderWallet` from the button click handler.
- Use `onSuccess` and `onError` to control your own UX.
- Fetch final results from the session using standard Incode result APIs.

## Error and fallback handling

Wallet presentation can fail when:

- The device or browser does not support Digital Credentials APIs.
- The user does not have a compatible digital ID in their wallet.
- The user cancels the wallet presentation.
- Apple Wallet domain approval is not complete.
- The wallet response cannot be decrypted or verified.

Your application should provide a fallback path, such as retrying wallet verification or continuing with physical ID capture.

## Scope notes

- Apple Wallet support on this page refers to Apple Wallet web (`apple_web`), not Apple native in-app wallet presentation.
- Samsung Wallet is supported for US mDLs in the Hosted onboarding app but is not part of this web SDK integration surface. See [Supported Digital IDs: United States](/general-reference/supported-digital-ids-united-states/).
- DigiLocker is a separate redirect-based document retrieval flow and is not covered by this page. See [Supported Digital IDs: Asia](/general-reference/supported-digital-ids-asia/).
- The customer-facing integration model is flow-based. Requested attributes and enabled wallet methods are configured in the Dashboard, not passed ad hoc from the browser.

## Related pages

- [Supported Digital IDs](/general-reference/supported-digital-ids/) for the full list of wallets, schemes, and attributes
- [Enable Digital IDs in the ID Capture module configuration](https://developer.incode.com/docs/dashboard-add-modules-id-capture#enable-digital-ids) for Dashboard setup
- [`renderWallet` API reference](/sdk-reference/web-sdk-reference/#renderwallet) for the headless Web SDK integration
