The whole flow in one picture
1
Start a verification
From the browser with the SDK’s
vycheck(), or from your server with POST /v3/initialize. The flow can run as a full-page redirect, a drawer that slides over your page, or an inline embed. Pick the presentation in init().2
We verify the human
The hosted flow runs a short face check for liveness, then a uniqueness check against people who already verified. It works in place on phones and desktops alike, and a desktop user can move the session to their phone with a QR code and be returned automatically. See Humanness and uniqueness.
3
The result comes back to your app
Redirect mode returns the user to your page with
?vyt=<token>&vyc=<0|1> on the URL. The embedded modes hand the same result to your onComplete callback with no redirect. Either way, read it with vyget().4
Confirm on your backend
Exchange the token for the authoritative result with
GET /v3/confirmations/{token}. Gate access on that, never on the URL alone.Where to go next
init(): setup and display modes
One-time SDK setup, and choosing redirect, drawer, or inline.
Humanness and uniqueness
How we prove someone is live, then prove they’re unique.
vycheck() and vyget()
The two browser calls that drive the whole flow.
POST /v3/initialize
Mint a session server-side, with a full parameter breakdown.
Keys
You get two keys, in test and live flavors:- Publishable key (
pk_test_…/pk_live_…) is safe to ship in the browser. Used by the SDK. - Secret key (
sk_test_…/sk_live_…) is backend only. Used to confirm tokens and to initialize server-side.