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.
/api/v1/fast-check Base URL¶
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.