# Identity verification

> Onboard customers seamlessly with a verified identity on your platform.

Identity Verification is a feature of Affinidi Vault that lets users verify their identity using standard documents, such as passports.

After successful verification, Affinidi Vault creates a verified identity document in the Verifiable Credential (VC) format. Users can share and reuse this credential for identity checks.

Your app can request the user’s verified identity document during onboarding to streamline the process.

## How identity verification flow works

The diagram below shows the Identity Verification flow using the Affinidi Iota Framework.

```mermaid
sequenceDiagram
actor u as User
participant app as Website
participant iota as Affinidi Iota Framework
participant vault as Affinidi Vault
participant acq as Affinidi IDV Service
participant provider as IDV Provider
u ->> app: Subscribe to verified service
app ->> iota: Initialise data-sharing request
Note over iota: Generate request token
with IDV provider claim
iota -->> app: Signed request token
app ->> vault: Redirect user to start data-sharing flow with signed request token
Note over vault: Query stored VC
alt verified identity VC not found
vault ->> acq: Trigger Identity Verification flow using
signed request token + consumer token
Note over acq: Check request token and project configuration
acq ->> +provider: Initiate session
provider -->> -acq: Session URL
acq -->> vault: Session URL
vault -->> provider: Redirect
u ->> provider: Capture self-photo and identity document
Note over provider: Process verification
provider ->> acq: Verification result webhook
Note over acq: Create verified identity VC
acq->>vault: verified identity VC
Note over vault: Store verified identity VC
end
vault->>+u: Request for consent to share data
u-->>-vault: Allow access to the data
vault -->> iota: Generate and send Verifiable Presentation
iota -->> app: Verifiable Presentation
Note over iota, app: Contains the verified identity VC 
 shared by the user
app ->> u: Continue journey on the website
```

##### Identity Verification Flow Highlights:

- 
The website starts onboarding through Affinidi Iota Framework and requests the user’s verified identity.

- 
The user unlocks Affinidi Vault. It checks local storage for a verified identity VC that meets the Presentation Definition. If not found, it triggers the verification flow and creates a session with the Identity Verification provider.

- 
The user completes verification by providing a face capture and a supported document, such as a passport.

- 
The verification provider checks the data and sends the result to Affinidi Service.

- 
Affinidi Vault retrieves the generated VC and stores it locally.

- 
Affinidi Vault asks for user consent to share the verified identity VC with the website.

- 
After consent, Affinidi Vault creates a Verifiable Presentation and sends it to Affinidi Iota Framework.

- 
The website parses the Verifiable Presentation and continues the user journey.

Note

If verification fails or is incomplete, your website receives an access_denied response code.

## Enabling identity verification flow

Identity Verification is in Closed Beta. To enable:

Send a request via the [Contact Us](https://www.affinidi.com/get-in-touch) form to whitelist your Project ID.

Integrate your website with [Affinidi Iota Framework](/products/affinidi-elements/iota-framework.md), a consent-driven data-sharing process.

Steps to Enable:

- 
Create or update Affinidi Iota Framework configuration using [this guide](/products/affinidi-elements/iota-framework/configuration.md#create-affinidi-iota-framework-configuration).

- Select Redirect as the data-sharing mode.

- [Enable Identity Verification (IDV)](/products/affinidi-elements/iota-framework/configuration.md#identity-verification-flow) (available only for specific projects).

Note

Identity Verification works only in [Redirect](/products/affinidi-elements/iota-framework.md#redirect) mode.

- 
After enabling IDV, create a Presentation Definition query requesting a passport document.

- Affinidi Vault checks the query in the request token to confirm if the VC is a verified identity VC.

- If not present, it starts the Identity Verification flow.

```JSON
{
  "id": "verified_identity",
  "input_descriptors": [
    {
      "id": "id_document_input",
      "name": "Passport",
      "constraints": {
        "fields": [
          {
            "path": ["$.issuer", "$.vc.issuer", "$.iss"],
            "purpose": "Only accept credentials issued by Affinidi IDV",
            "filter": {
              "type": "string",
              "pattern": "^did:web:idv.affinidi.com$"
            }
          },
          {
            "path": [
              "$.type"
            ],
            "purpose": "Only accept IDV type VC",
            "filter": {
              "type": "array",
              "contains": {
                "type": "string",
                "pattern": "^VerifiedIdentityDocument$"
              }
            }
          },
          {
            "path": [
              "$.type"
            ],
            "purpose": "Only accept IDV supported document",
            "filter": {
              "type": "array",
              "contains": {
                "type": "string",
                "pattern": "^Passport$"
              }
            }
          }
        ]
      }
    }
  ]
}
```
Important Note

The verified identity VC is signed and issued by Affinidi’s DID (did:web:idv.affinidi.com) using the [did:web](/products/affinidi-elements/wallets.md#didweb) method. Follow the [Presentation Definition](/products/affinidi-elements/affinidi-vault/affinidi-vault-data/verified-identity.md) template to request the VC correctly.

- Implement Affinidi Iota Framework in your website using Redirect mode with [this guide](/products/affinidi-elements/iota-framework/implement-consent-driven-data-sharing.md).

## Supported identity documents

Identity Verification supports:

- 
Passport - Extracts user details from a captured passport.

- 
Driver’s License - Extracts user details from a captured licence.

Learn how to request supported documents from a user’s Affinidi Vault using the Affinidi Iota Framework and [Presentation Definitions](/products/affinidi-elements/affinidi-vault/affinidi-vault-data/verified-identity.md).

  Query the verified identity document using [Presentation Definition (PEX Query)](/products/affinidi-elements/affinidi-vault/affinidi-vault-data/verified-identity.md).

## Frequently asked questions

- 
What if my customer has already verified their identity in Affinidi Vault?

Verified identity VCs are stored in the user’s Vault. They can reuse them across apps, reducing friction and improving onboarding.

- 
How much does Identity Verification cost?

We aim to lower costs through credential reusability. Contact our team for details.

- 
Who performs the verification?

Verification is handled by Veriff, which has a 95% success rate on the first attempt.

- 
What if the user is not verified?

If technical issues occur on Affinidi or partner systems, you will not be charged. Charges apply only when the user consents to share data. If the user fails verification (e.g., abandons the session or uses fraudulent documents), you receive an access_denied response code.

Track failure metrics in [Affinidi Portal ](https://portal.affinidi.com/iota).

- 
How to report an issue?

Raise it via [this form](https://share.hsforms.com/1i-4HKZRXSsmENzXtPdIG4g8oa2v) or contact your assigned POC.

## What’s next

  [Onboard users with verified identity using Affinidi Iota Framework](/products/affinidi-elements/iota-framework.md)

  [Manage your verified identity VC issued to your Affinidi Vault](/products/affinidi-elements/affinidi-vault/claimed-credentials.md)

  [Issue Verifiable Credentials (VCs) to your users](/products/affinidi-elements/credential-issuance.md)
