Overview
Warnings on the face match report flag every condition Didit observed while running the 1:1 face comparison. They land in thewarnings[] array on each item of face_matches[] (see Face match report). Each entry also carries feature: "FACEMATCH" and the node_id of the workflow node that raised it.
Every warning has three layers:
- The
riskcode — a stable identifier you can match on in your code. - The
log_type—information,warning, orerror, derived from your workflow’s similarity-score thresholds. - The decision impact — set by the workflow’s review and decline thresholds for the similarity score.
Auto-decline conditions
The following risk always forces the face match report (and the session) toDeclined:
| Risk | Trigger |
|---|---|
NO_REFERENCE_IMAGE | One of source_image (reference) or target_image (selfie) is missing, so no comparison was possible. |
NO_REFERENCE_IMAGE fires, LOW_FACE_MATCH_SIMILARITY is suppressed (there is nothing to score).
Configurable verification settings
In the Didit console, the face match similarity score is governed by two thresholds (no Approve/Review/Decline toggle):| Setting | Default | Behavior |
|---|---|---|
face_match_score_review_threshold | 70 | When score ≤ this value, LOW_FACE_MATCH_SIMILARITY fires and the status moves to In Review. |
face_match_score_decline_threshold | 50 | When score ≤ this value, the same warning escalates to error and the status moves to Declined. |
face_match_max_attempts total attempts (default 3, configurable 2–5 per workflow node) to recapture. Only when the budget is exhausted does the last attempt’s status apply — and FACE_MATCH_MAX_ATTEMPTS_EXCEEDED is logged to record it.
On the standalone Face Match API only a decline threshold exists (face_match_score_decline_threshold request option, default 30); any fired warning declines the request, and NO_REFERENCE_IMAGE fires when no face could be compared at all.
Warnings produced
| Risk | Cause | Severity | Affects status? | Remediation |
|---|---|---|---|---|
LOW_FACE_MATCH_SIMILARITY | score ≤ face_match_score_review_threshold. Suppressed when NO_REFERENCE_IMAGE is also present. | warning between the thresholds; error at or below the decline threshold | In Review between the thresholds; Declined at or below the decline threshold | Tune thresholds, or accept via manual review. |
NO_REFERENCE_IMAGE | Either the reference image or the target image is missing. | error | Auto-decline | Ensure both the document portrait and the liveness selfie are captured. For the standalone API, pass two valid face images. |
FACE_MATCH_MAX_ATTEMPTS_EXCEEDED | The user exhausted the capture-retry budget (face_match_max_attempts) after repeated low-similarity failures. | information | No — records that the last attempt’s computed status (decline or review) was applied | Raise face_match_max_attempts on the workflow node, or resolve via manual review. |
Examples
In Review — borderline similarity
Auto-decline — missing reference
Retries exhausted — last attempt’s status applied
The standalone Face Match API returns the same warning shape minus
node_id (the comparison is not bound to a workflow node).Warning types
Each risk is assigned a severity based on your application’s configuration. The three severities are:Related
- Face match report — full report schema and statuses.
- Liveness warnings — upstream warnings on the selfie capture.
- Webhooks —
session.status.updatedcarries the warnings as soon as the step finishes. - Data models — Face match — canonical schema.
- Data models — Warning object — the shape of every entry in
warnings[].