Skip to main content

Introduction

Privacy-preserving identity verification using passports and ID cards.

Overview

ZKPassport enables privacy-preserving identity verification using passports and ID cards. It allows you to request and verify specific identity attributes — such as age, nationality, or personhood — without exposing any unnecessary personal information. Proofs are generated on the user's phone and reveal only what you asked for, and nothing else.

Key Features

  • Privacy-first identity verification with zero-knowledge proofs
  • Selective disclosure of identity attributes
  • Support for passports, national IDs, and residence permits
  • A drop-in QR verification card (@zkpassport/ui) for React and vanilla JS
  • Optional no-code configuration through the ZKPassport Dashboard

Sample Use Cases

  • Age verification
  • Nationality verification
  • Identity attribute disclosure
  • Proof of personhood and KYC

Two ways to integrate

There are two ways to define what you ask users to prove. Both produce the same verification flow and the same results — they differ only in where the request is defined.

Self-servedDashboard
SetupNone — install the SDK and goRegister your domain at dashboard.zkpassport.id
Query definitionBuilt in code: .gte("age", 18).disclose("nationality")…Defined in the dashboard, referenced by id: .policy("pol_xyz")
Branding (name & logo)Passed to request() in codeManaged in the dashboard
Changing the requestEdit and redeploy your codeEdit the policy in the dashboard — no redeploy
Proof storageYou handle it yourselfAuditable proof storage in the dashboard
Best forKeeping everything in code; queries that vary at runtimeCentralized config, auditable records, reuse across apps

Pick self-served if you want to get started immediately, keep everything in code, or build queries dynamically. Start with Basic Usage.

Pick the dashboard if you'd rather manage branding and the request in one place, get auditable proof storage, and reuse it across apps without redeploying. See Dashboard & Policies.

You don't have to choose up front — the same component and SDK support both, so you can start self-served and adopt policies later.

Check out the Quick Start Guide to begin integrating ZKPassport into your application.