Liveness
Detects presentation and spoof attacks (printouts, screens, replays, masks) — the Unique Human API’s anti-spoof check.
🔑 Auth: App API key + a workflow with the anti-spoof check · 👤 User account: none · 💾 Result: returned to your system, nothing saved
How it works
You create a session for a workflow containing the anti-spoof check and redirect the person to
Valyd’s verification page. The page captures a live camera burst with a random on-screen
action — the strongest assurance level (assurance: "captured"), with per-frame voting, motion
analysis, and same-person consistency. The check answers “is this a live human capture?” with a
vendor-neutral human_score (0–100) and a pass/fail verdict. No account is involved and nothing
is stored.
Run it
import { VerifyClient } from "@valyd/sdk";
const verify = new VerifyClient({ apiKey: process.env.VALYD_API_KEY });
const session = await verify.sessions.create({
workflowId: process.env.VALYD_WORKFLOW_ID, // a workflow with the anti-spoof check
redirectUrl: "https://yourapp.com/checked",
vendorData: "user-123",
});
// → redirect the person's browser to session.urlResult
Read the decision (or receive it on a signed webhook):
const decision = await verify.sessions.decision(session.sessionId);
// decision.status: "APPROVED" | "DECLINED" | "IN_REVIEW"
// the antispoof check's data:
// {
// assurance: "captured", // live camera burst with a random on-screen action
// frames_analyzed: 5,
// frames_genuine: 5,
// frames_spoof: 0,
// motion: "natural",
// face_consistency: "consistent",
// human_score: 100
// }On a failure the check data carries a signal field, one of: no_face, face_unreadable,
spoof_detected, low_confidence, duplicate_frames, static_capture,
discontinuous_motion, different_faces. Nothing is written to any Valyd account — the verdict
is yours to act on.
Next
- Uniqueness — add “have we seen this face before?” to the same workflow.
- Liveness bound to a connected user’s account runs inside a Reusable Verification workflow — see the checks reference.