Skip to main content
This recipe shows the simplest reliable individual-verification integration pattern.

What you will build

  1. Create a verification from your server
  2. Store the returned verificationId
  3. Redirect the user to the hosted link
  4. Receive webhook updates
  5. Mark the user as approved or rejected when a decision arrives

Step 1: Create the verification

Store:
  • data.verificationId
  • data.link
  • your own vendorData

Step 2: Redirect the user

Send the user to data.link exactly as returned. Do not rebuild the hosted URL yourself.

Step 3: Listen for webhooks

At minimum, handle:
  • verification.successful
  • verification.failed
You can also listen for progress events like:
  • verification.started
  • verification.processing_started

Step 4: Verify the signature

Validate:
  • Webhook-Timestamp
  • Webhook-Signature
  • the raw request body
See HMAC Authentication and Endpoint Security.

Step 5: Update your own system

Recommended logic:
  • if event === "verification.successful", mark the user as verified
  • if event === "verification.failed", mark the user as rejected or request a new session

Minimal Node.js handler example

Optional polling fallback

If you need a fallback path, you can fetch the current state with:
  • GET /v1/verifications
  • GET /v1/verifications/{id}
For each individual verification, store:
  • verificationId
  • vendorData
  • current status
  • latest webhook event
  • raw webhook payload
  • environment used
That gives you a clean audit trail and makes support much easier.