The Flow
1
Your Backend Creates a Session
POST /v1/verification_sessions with your secret key. You choose the products and thresholds here, server-side — the client can never downgrade them. The response contains a single-use client token (sst_…), returned exactly once.2
The Client Captures and Submits
Mount the Web SDK, launch the Android SDK, or use the hosted page with the client token. The SDK captures a frame from the live camera (no file uploads), attaches anti-injection signals, and submits it. The submit response is deliberately minimal — the client never sees scores or the decision, so it can’t be used as an oracle.
3
Your Backend Reads the Result
When the client reports completion, fetch the session by id with your secret key and act on it. Only
status: "complete" and decision: "real" means verified. Everything else — "spoof", "failed", "expired", or anything relayed by the client — is not verified. See Results & Media.Session Options
All fields on create are optional:Session Lifecycle
- 3 capture attempts per session — a blurry or faceless capture (
422) lets the user retry; see which errors consume an attempt. - Creating a session pre-checks your credit balance, so you never hand out a token that can’t succeed. The charge itself happens when a capture is scored.
- The
sst_token is stored hashed, expires with the session, and can never read decisions or media.
Injection Protection
Presentation attacks (photos, screens) are caught by the models. Injection attacks — virtual cameras feeding a synthetic stream — can look perfectly genuine, so the SDKs collect integrity signals at capture time. Under theenforce policy (console setting), a high-confidence signal such as a known virtual-camera device forces decision: "spoof" even when the image itself scores as real. The client is never told this happened; the reason appears only on your server-side result read.
Web SDK
React, vanilla JS, or a CDN script tag — camera capture in the browser
Android SDK
Native CameraX capture with Play Integrity signals
Hosted Page
Zero frontend code — redirect or embed our capture page
