Active liveness
Active liveness is Sovera's stronger anti-spoofing check and its differentiator. Instead of scoring one passive frame, Sovera issues a randomized challenge (fit your face in the oval, then turn left or turn right) and verifies that the captured frames actually satisfy it. A recorded video or static photo cannot respond to a fresh, random instruction, which raises the bar against replay and deepfake attacks. It requires the verify:liveness scope.
The flow has two calls: request a challenge, capture frames on device, then submit the frames for verification.
Request a challenge
Sovera returns a challengeId and the ordered actions the user must perform. Show the oval and the actions in your capture UI.
curl -X POST https://verify.lioncapventures.com/v1/verify/active-liveness/challenge \
-H "Authorization: Bearer svk_live_xxxxxxxx" \
-H "Content-Type: application/json"
Response
{
"challengeId": "chl_5b91d2",
"actions": ["fit_oval", "turn_left", "turn_right"],
"createdAt": "2026-07-04T17:58:12Z"
}
- Name
challengeId- Type
- string
- Description
Identifier you submit back with the captured frames.
- Name
actions- Type
- string[]
- Description
The ordered instructions to present, for example
fit_oval, thenturn_left, thenturn_right.
- Name
createdAt- Type
- string
- Description
When the challenge was issued. Challenges are short-lived, so capture promptly.
Verify the challenge
Capture frames while the user performs the actions, then submit the challengeId, the actions you presented, and the base64 frames. Sovera checks that the frames actually satisfy the challenge.
curl -X POST https://verify.lioncapventures.com/v1/verify/active-liveness/verify \
-H "Authorization: Bearer svk_live_xxxxxxxx" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{
"challengeId": "chl_5b91d2",
"actions": ["fit_oval", "turn_left", "turn_right"],
"frames": ["<base64>", "<base64>", "<base64>"]
}'
Response
{
"passed": true,
"score": 0.964,
"detail": "actions_satisfied"
}
- Name
challengeId- Type
- string (required)
- Description
The
challengeIdfrom the challenge step.
- Name
actions- Type
- string[]
- Description
The actions you presented to the user, in order.
- Name
frames- Type
- string[] (required)
- Description
Base64-encoded frames captured during the challenge.
Request a fresh challenge for every attempt. Reusing a challengeId or replaying old frames defeats the point of active liveness. Thresholds are provisional pending in-house calibration.