Overview
The face match report captures a 1:1 biometric comparison between the live selfie captured during liveness and a reference image — most commonly the portrait extracted from the ID document. It returns a single 0–100 similarity score, signed URLs for the two compared images, the source session for the reference image, and any warnings raised by the match. The report is produced after the user completes both the liveness step and the document step in a workflow (or, for portrait-based workflows such as biometric authentication, after liveness alone), or directly via the standalone Face Match API when you supply two arbitrary face images yourself. Each report carries its ownstatus — independent of the overall session status — that reflects how the face match step alone resolved:
- Approved —
scoreis above the review threshold and no auto-decline warning fired. - In Review —
scoreis between the decline and review thresholds. - Declined —
scoreis at or below the decline threshold, orNO_REFERENCE_IMAGEfired. - Resub Requested — a reviewer requested the user resubmit this step from the console.
- Not Finished — the face match step has not produced a result yet (including while the user is retrying a failed capture).
Where it appears in API responses
The face match report ships inside theface_matches[] array — always a JSON array, never a singular face_match object. It is null until at least one face-match step has produced data, and multiple entries appear when a workflow runs face match more than once.
- Session decision API —
GET /v3/session/{sessionId}/decision/returnsface_matches[]at the top level. See Retrieve session decision. - Webhooks —
session.status.updatedpayloads include the sameface_matches[]array once the step has produced data. See Webhooks. - Standalone Face Match API — for direct 1:1 comparisons, see Face Match standalone API.
Read
response.face_matches[0] and iterate the array — the singular face_match shape some older tutorials referenced does not exist on the v3 decision endpoint.Schema
The canonical field-by-field schema lives on the Data models reference page. The fields below mirror that canonical schema.Status values
Low-similarity failures are retried before the status sticks: the user gets up to
face_match_max_attempts captures (3 by default), and only the final attempt’s score is applied. Custom status rules configured on the workflow node can further adjust the resulting status, combining with the score-derived status under Declined > In Review > Approved precedence.
Examples
Approved — clean match
In Review — borderline similarity
Declined — no reference image to compare against
Security note
The signed URLs forsource_image and target_image are biometric data and expire after a short validity window. Treat them as short-lived: do not cache or surface them publicly. Typically your application only needs status and score — store as little as possible to minimize biometric data on your servers.
Related
- Face match warnings — full warning enum, causes, and remediation.
- Liveness report — the upstream step that captures the target image.
- Webhooks — listen for
session.status.updatedto receive the report. - Data models — Face match — canonical schema with every field.