Skip to main content

Person Verification

Verify an individual end-to-end with document capture, biometric liveness, face matching, database checks, and screening. This guide covers initiating a journey, redirecting the user, and interpreting structured results.

What Person Verification checks

A Person Verification journey orchestrates up to six check types:
  1. Identity Document Capture. Passport, national ID, or driving licence scanned with OCR.
  2. Biometric Liveness. Selfie with liveness detection to confirm the user is physically present.
  3. Face Match. Compares the selfie against the document photo.
  4. Document Authenticity. Tamper detection and fraud analysis on the captured document.
  5. Database Verification. Name, address, and date of birth validated against official databases.
  6. PEP/Sanctions Screening (WorldCheck). Screening on the individual across PEP, sanctions, adverse media, and watchlist databases.
Checks 1 through 4 require user interaction and use the async journey flow. Checks 5 and 6 can run server-side without user interaction. See Server-side Person Verification below.

Data tiers

Tier 1: Minimum

The bare minimum to initiate a Person Verification journey.

Tier 2: Standard

Adds date of birth, contact details, and address. This is the recommended minimum for production.

Tier 3: Full

Adds nationality, document type preference, and external reference for idempotency.

Flow overview

1

Initiate the journey

Person Verification uses async Model 2 because the user must interact with the verification UI. Post to the /kyc/init endpoint.
Response:
Store both tokens immediately:
  • pull. Retrieves verification results.
  • start. Constructs the verification URL for the user.
2

Construct the verification URL and redirect the user

Build the URL from the start token and your project hash:

Web integration

Or redirect server-side:
server.js

Mobile integration

Open the URL in a WebView or the system browser. The verification UI is responsive and works on all screen sizes.

URL expiry

Verification URLs expire after 24 hours. If the user does not complete the flow within this window, you receive a journey.expired webhook and must initiate a new journey.
3

User completes verification

The user goes through an interactive flow:
  1. Document selection. Choose a document type: passport, national ID, or driving licence.
  2. Document capture. Photograph the front (and back if applicable) of the document.
  3. Selfie capture. Take a selfie for biometric matching.
  4. Liveness check. Follow on-screen prompts to prove physical presence.
  5. Submission. Data is sent to Zenoo for processing.
Server-side processing typically completes 10 to 30 seconds after the user submits.
4

Receive results

Configure a webhook endpoint to receive verification.completed events.
See Webhooks Guide for setup.

Option B: Poll for results

Option C: Both

Use webhooks for real-time notification and polling as a fallback for missed webhooks. This is the most resilient pattern.
5

Interpret the results

A complete Person Verification response includes identity verification, document details, biometric results, screening, phone verification, email verification, address verification, and compliance metadata.

Decision matrix

Only auto-approve the Pass / Pass / Pass / No Hit combination. Any other outcome should trigger manual review or re-submission.
A document ATTENTION result means the document requires human review, not necessarily rejection. Check document.validation_result before making a pass/fail decision.

Check dimension statuses

Identity statuses:Document statuses:Biometric statuses:Screening statuses:

Handling edge cases

journey.abandoned

The user closed the browser or navigated away before completing verification.
The original verification URL remains valid until it expires. Send the user a reminder with the same link. If the URL has expired, initiate a new journey.

journey.expired

The 24-hour URL expired before the user completed the flow.
Initiate a new journey and send the user a fresh link.

Document issues

If the document fails authenticity checks, document.validation_result will be ATTENTION or FAILED. Common causes:
  • Blurry or glare-obscured image
  • Expired document
  • Tamper indicators detected
  • Document type not supported for the selected country
Check document.validation_result before making a pass/fail decision. An ATTENTION result means the document requires human review, not necessarily rejection.

Server-side Person Verification (no user interaction)

For database lookups, phone verification, and screening that do not require document capture, use the sync endpoint directly.
This runs database verification, phone checks, email checks, address checks, and screening synchronously. Results are returned in the response body. No document capture or biometric checks are performed. Use server-side Person Verification for:
  • Batch processing existing customer data
  • Pre-screening before initiating a full journey
  • Ongoing monitoring re-checks on known individuals
  • Flows where you already have verified identity documents from another source

Next steps

Screening

Run standalone screening checks

Webhooks Guide

Set up real-time notifications

Sync vs Async

Understand when to use each execution model

Error Handling

Handle failures and retries