Skip to content

Build a verifier app

The holder shows a QR code in their wallet; your app scans it; the two phones connect over Bluetooth; your app shows a green or red result with the photo for a face check. No internet is needed for the check itself (Work offline).

The Verify app: choose what to check
The operator picks a check.
The holder's wallet asks for approval
The holder approves on their phone.
sequenceDiagram
    autonumber
    actor P as Operator
    participant O as Your app (verifier)
    participant W as Wallet (holder's phone)
    actor H as Holder
    P->>O: Picks a check (a preset)
    H->>W: Taps Present: QR code
    O->>W: Scans the QR, connects over Bluetooth
    O->>W: Signed request: document + fields
    W->>H: Names the verifier, lists the fields
    H->>W: Approves
    W->>O: Approved fields, signed by the phone
    O->>O: Issuer signature, device binding, validity, revocation
    O-->>O: Accept / reject / inconclusive, with the portrait
  • One verify screen (WalletVerifyScreen on Android, WalletVerifyViewController on iOS): the list of checks, camera and Bluetooth permission set-up, the scanner, the connection, and the result view (banner, large portrait, fields, the checks that ran, how current the revocation answer is).
  • Presets for the driving licence (age 18+, licence check), the Emirates ID (age 18+, identity) and the competition licence (valid medical, licence check). Define your own in a few lines.
  • The headless API (sdk.verifier) if you want your own screens.

The Verify app is the demo: Android and iOS, six presets, a signed issuer list for trust and a reader certificate so wallets name it. The Quickstart builds the same app; its Kotlin is compiled against the SDK in the repository, and its Swift in a real Xcode project.

Next: Quickstart.