Skip to main content
After a user completes an Identity Link flow, VU extracts structured data from the captured identity document and makes it available through the verification API. This guide covers the full verification lifecycle, all query endpoints, and the extracted data fields you can use for KYC and onboarding decisions.

Verification lifecycle

A verification progresses through the following states:

Verification steps

During a FULL FLOW, the user moves through these operational steps:

Get verification details

Retrieve the full verification record including extracted document data and geolocation:
The verification identifier is _id. All OCR-extracted document fields live inside the data object, not at the root of the response.

Extracted data fields

Lightweight status polling

GET /verifications/{id}/status is a public endpoint: it takes no Bearer token. Instead it requires the linkId query parameter, which proves the caller is the intended end user rather than anyone who guessed the verification id.
Response:
To also receive the operationGuid and the resolved method, add the include parameter. linkId is still required:
Omitting linkId, or passing one that does not match the verification, returns 403. This parameter became mandatory in version 2.2.0.

List verifications

Get last 100 verifications

The response is a paginated object:

Verifications from the last hour

Paginated verifications

Where 20 is the page size (max 100) and 1 is the page number. GET /verifications/{id}/related returns every other verification for the same client, meaning the same company and the same externalUserId on its link, newest first.
The list is empty when the anchor verification’s link has no externalUserId to match on.

Verification images

The image ids come from the verification’s images object: addFront, addBack, and the register array of selfie frames.

Public flow endpoints

The three endpoints below are called by the user’s device during the flow, without a token. All of them require the verification to still be attached to an active link and to be in pending or started status.

Report geolocation

Every location field travels nested inside the geolocation object.
tier, policy, ipDistanceKm, and serverIp are not accepted properties: all four are derived server-side and the request is rejected with 400 if a client sends any of them.
Two further validations return 400:
  • Declaring a device source (gps, wifi, or cell) without deviceLatitude and deviceLongitude. Nothing downstream can use either half alone.
  • A capturedAt more than 24 hours from the server’s clock.

Report an error

Identify a user mid-flow

PATCH /verifications/identify covers an adaptive link created without an externalUserId. It backfills the link’s externalUserId from the supplied email and re-resolves the adaptive branch.
Rules for this endpoint:
  • Repeating the same email is always a no-op and answers 200.
  • An identifier the API supplied at link creation can never be overwritten: a different email answers 409 with identifierAlreadyBound.
  • An identifier this endpoint itself set, meaning one typed by the person, is freely correctable: a different email is accepted and the branch is re-resolved.
  • An invalid or missing email answers 400.

Manual feedback override

If an automated result needs human review, submit feedback through POST /verifications/feedback:
List available feedback reasons, each returning _id and reason. Use that _id as the reasonId:

Geolocation reference

geolocation pairs a reported location with a measure of how much to trust it. It is absent until a location has been reported, and tier is always present alongside coordinates: never a bare lat/lng.
policy, ipDistanceKm, and serverIp are returned only by the authenticated GET endpoints. They are absent from the public PATCH responses and from webhooks. Returning these anti-fraud signals to an unauthenticated caller would let it calibrate a spoofed location against the check meant to catch it.
source is inferred, not measured: the W3C Geolocation API does not expose its provider, so gps, wifi, and cell are deduced client-side from altitude, speed, and accuracy bands. Only ip and none are certain. Being client-declared, all values are falsifiable — the server-side ipDistanceKm is the cross-check.

Next steps

  • Understand how liveness detection protects against spoofing in the Liveness guide.
  • Receive automatic notifications for every status change by configuring Webhooks.
  • Review common errors when querying verifications on the Errors page.
Last modified on August 28, 2026