Liveness

Liveness tells a real person in front of the camera from a photo, a screen, a mask or a bad capture. It works on a single image: nothing to install on the person's device.

Check one image#

liveness.check answers live, and a reason code that says why when it isn't.

Request
curl -X POST https://verisec.dev/v1/liveness \
  -H "Authorization: Bearer $VERISEC_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "image": "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg=="
  }'
Response
{
  "ok": true,
  "request_id": "req_de9a0ff4be064b4a940c",
  "latency_ms": 2323,
  "data": {
    "code": 244,
    "status": 1,
    "live": false,
    "tag": "bc6fd861-ce62-4a1b-bc27-d7830fca6438",
    "sessionId": "bc6fd861-ce62-4a1b-bc27-d7830fca6438",
    "transactionId": "9e00947e-b2aa-49d2-879d-16e476f8efc7",
    "metadata": {
      "elapsedTime": 2.224224916,
      "serverTime": "2026-10-05T05:35:41.299Z",
      "ctx": {
        "userIp": "203.0.113.7"
      }
    },
    "age": [
      {
        "pred": 30
      }
    ]
  },
  "warnings": [],
  "error": null
}

Three ways to ask#

liveness.check
Live or not, with the reason as a code. The everyday call.
liveness.antispoof
The same check with the reason spelled out by name (for example ART_MASK) and its category: an attack, or a problem with the capture.
liveness.gate
One pass for a pipeline. In strict mode it also requires a clean reason code, not only a live verdict.

Every liveness endpoint#

Endpoint
POST/v1/age/verify-live
POST/v1/liveness
POST/v1/liveness/antispoof
POST/v1/liveness/gate