Skip to content

Fast Check Endpoint

Server-side face detection for liveness verification. Analyzes video frames to determine if a face is live or spoofed. The number of frames depends on the selected model (e.g. 10 for mixed-10-v2, 30 for mixed-30-v2).

In plain terms

Send frames from a video (number depends on model — e.g. 10 frames for the fast model, 30 for the recommended balanced model). The API finds the face in each frame, analyzes it, and returns whether it's a live person or a fake (photo, video, deepfake). No client-side face detection needed—the server does it.

POST /api/v1/fast-check

Base URL

https://api.moveris.com

Frame requirement

The API requires at least the number of frames required by the selected model. Use 10 frames for mixed-10-v2, 30 for mixed-30-v2, 60 for mixed-60-v2, 90 for mixed-90-v2, or 120 for mixed-120-v2. If you send fewer, you will get insufficient_frames. For predictable latency, send exactly frames_required.

Model selection: v1 vs v2

Flow Header Body What to send
v1 model model: "mixed-30-v2" (or "10", "mixed-10-v2", etc.)
v2 X-Model-Version frame_count X-Model-Version: latest + frame_count: 30 (10, 60, 90, or 120)

See Model Versioning & Frames for details.

Request Headers

Header Type Required Description
X-Model-Version string No Version alias for v2 model resolution (e.g. latest, v1, v2, fast). When present, use with frame_count in body; model is ignored. See Model Versioning & Frames.

Request Parameters

Parameter Type Required Description
session_id UUID Yes Client-generated unique identifier
model string No Model ID (default: "10"). Recommended: mixed-30-v2 for best accuracy. Ignored when X-Model-Version header is present. See Models.
frame_count integer No Number of frames for v2 resolution (10, 30, 60, 90, or 120). Used with X-Model-Version header.
source string No "media" or "live" (default: "media")
frames array Yes Array of frame objects. Must include at least the model's frames_required (e.g. 10 for mixed-10-v2, 30 for mixed-30-v2). For predictable latency, send exactly that many.
warnings array No Optional. Capture warnings from frontend (e.g. "Low light detected", "Face not centered"). Duplicates are deduplicated. Echoed in response.

Frame Object

Field Type Required Description
index integer Yes Frame sequence number (0-based)
timestamp_ms float Yes Timestamp in milliseconds
pixels string Yes Base64-encoded image (PNG recommended)

Response Envelope

All responses are wrapped in the standard envelope. The data field contains the verification result on success.

data fields (success 200)

Field Type Description
verdict string "live" or "fake"
confidence float Reserved for future use. Functionally identical to real_score—use real_score for decision-making.
real_score float Raw liveness probability (0.0 - 1.0). Use this field for decision-making.
score float Percentage score (0 - 100) for display
type string Risk band: VERY LOW, LOW, MEDIUM, HIGH, VERY HIGH
session_id UUID Echo of request session_id
model string Model used for this request
input_source string How frames were submitted (rest_frames)
processing_ms integer Server processing time in milliseconds
frames_processed integer Number of frames analyzed
tenant_metadata object | null Tenant metadata when applicable (usually null on this endpoint)
warning string | null Warning message if any
created_at string (ISO 8601) Timestamp when verification result was generated

Score Interpretation

Score Range Classification Verdict
0 - 34 VERY LOW fake
35 - 49 LOW fake
50 - 64 MEDIUM fake
65 - 79 HIGH live
80 - 100 VERY HIGH live

Threshold: Score ≥ 65 = live, Score < 65 = fake

Examples

Request (v1 flow — model in body)

curl -X POST "https://api.moveris.com/api/v1/fast-check" \
  -H "Content-Type: application/json" \
  -H "X-API-Key: sk-your-api-key" \
  -d '{
    "session_id": "550e8400-e29b-41d4-a716-446655440000",
    "model": "mixed-10-v2",
    "source": "live",
    "frames": [
      { "index": 0, "timestamp_ms": 0, "pixels": "iVBORw0KGgoAAAANSUhEUgAA..." },
      { "index": 1, "timestamp_ms": 100, "pixels": "iVBORw0KGgoAAAANSUhEUgAA..." }
    ]
  }'

Frame count

For mixed-10-v2 send 10 frames. The example shows 2 for brevity; include frames for indices 0–9.

Request (v2 flow — X-Model-Version + frame_count)

curl -X POST "https://api.moveris.com/api/v1/fast-check" \
  -H "Content-Type: application/json" \
  -H "X-API-Key: sk-your-api-key" \
  -H "X-Model-Version: latest" \
  -d '{
    "session_id": "550e8400-e29b-41d4-a716-446655440000",
    "frame_count": 10,
    "source": "live",
    "frames": [
      { "index": 0, "timestamp_ms": 0, "pixels": "iVBORw0KGgoAAAANSUhEUgAA..." },
      { "index": 1, "timestamp_ms": 100, "pixels": "iVBORw0KGgoAAAANSUhEUgAA..." }
    ]
  }'

v2 resolution

With X-Model-Version: latest and frame_count: 10, the API resolves to mixed-10-v2. See Model Versioning & Frames.

Success Response

{
  "data": {
    "verdict": "live",
    "confidence": 0.95,
    "real_score": 0.95,
    "score": 95.0,
    "type": "VERY HIGH",
    "session_id": "550e8400-e29b-41d4-a716-446655440000",
    "model": "mixed-10-v2",
    "input_source": "rest_frames",
    "processing_ms": 245,
    "frames_processed": 10,
    "tenant_metadata": null,
    "warning": null,
    "created_at": "2026-03-27T14:00:00Z"
  },
  "success": true,
  "message": "OK"
}

Error Response

{
  "data": null,
  "success": false,
  "message": "Insufficient frames. Model \"10\" requires 10 frames, received 5.",
  "errors": [
    { "insufficient_frames": ["Insufficient frames. Model \"10\" requires 10 frames, received 5."] }
  ]
}

Postman collection

Import the Moveris API Postman collection to test Fast Check and the rest of the API.