Skip to Content
VerifyUnique HumanLiveness

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.url

Result

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

Last updated on