Challenge-response biometric verification. 8 challenge types, 5 per session, impossible to spoof with a photo or screen replay.
Your backend calls POST /v1/sessions with your API key. Gets back a session ID and 5 random challenges.
Your frontend uses the SDK. It opens the camera, shows each challenge, and submits frames every 800ms.
Every frame is analyzed server-side with MediaPipe. When all 5 challenges pass, you get a liveness score.
5 are chosen randomly per session so attackers can't predict the sequence.
Quick start
// 1. Create session on your backend
const { session_id } = await fetch('/v1/sessions', {
method: 'POST',
headers: { 'X-API-Key': process.env.LIVENESS_KEY },
body: JSON.stringify({ challenge_count: 5 }),
}).then(r => r.json())
// 2. Run checks in the browser with the SDK
import { LivenessClient } from '@liveness/sdk'
const result = await new LivenessClient({ apiUrl: '...' })
.run(session_id, videoElement, apiKey)
// result: { passed: true, score: 0.97, sessionId: '...' }Start free. Scale as you grow.
100 checks / day
1,000 checks / day
10,000 checks / day
Free plan includes 100 checks per day. No credit card required.
Create free account