Skip to main content
Biometric Authentication combines a liveness check with an optional 1:1 face match against the reference face resolved at session creation (the supplied portrait_image, or the user’s stored face looked up by vendor_data). Each step emits its own warnings in the V3 decision payload. This page lists every code, where it appears, and how thresholds translate into a final session status.

Overview

When a biometric authentication session runs, Didit:
  • Captures a live selfie using 3D Action, Flash, or Passive Liveness (method: ACTIVE_3D, FLASHING, or PASSIVE).
  • Extracts the largest face from the capture and scores its liveness.
  • If the workflow includes Face Match, compares the captured face against the session’s reference face (supplied portrait_image or the user’s stored face).
  • Writes the outcome of each step plus any warnings into the session decision.
Warnings keep the shared warning object shape used across the platform: feature, risk, additional_data, log_type, short_description, long_description, and node_id.

Where warnings appear

In a typical biometric-auth session there is one item in each array. In multi-instance workflows the node_id on each warning disambiguates which step produced it.

Automatic decline conditions

The following warnings always decline their step (log_type: "error") regardless of how you configured the workflow: When NO_FACE_DETECTED fires, LOW_LIVENESS_SCORE is suppressed (there is no face to score).

Configurable thresholds and actions

These warnings are scored and then mapped to a status through thresholds and actions you set per workflow: POSSIBLE_FACE_IN_BLOCKLIST (LIVENESS) is not configurable — a lower-confidence blocklist match is always routed to Review (log_type: "warning").

Capture retries

Failures driven only by fixable capture-quality risks (low score, no face, quality, luminance, multiple faces — and low similarity on face match) enter a retry loop before the status sticks: the user gets up to face_liveness_max_attempts / face_match_max_attempts total attempts (default 3, configurable 2–5 per workflow node). When the budget is exhausted, the last attempt’s computed status applies and LIVENESS_MAX_ATTEMPTS_EXCEEDED or FACE_MATCH_MAX_ATTEMPTS_EXCEEDED is logged as information to record it.

Liveness warnings

The API returns these exact short_description and long_description strings: Blocklist, allowlist, and duplicate matches carry additional_data with the matched session (blocklisted_session_id / allowlisted_session_id / duplicated_session_id, the matching *_session_number, and api_service). Only one of those six codes appears per report.

Face-match warnings

Example — declined on face attack

Example — in review on low similarity

The score (58.70) sits between the decline threshold (default 50) and the review threshold (default 70), so the warning carries log_type: "warning" and the face-match status is In Review. In this example the warning fired on a session whose session_id is 11111111-2222-3333-4444-555555555555source_image_session_id carries the session’s own id because the reference came from the portrait stored at session creation.

Warning types

Each risk is assigned a warning type based on your application’s configuration. Warnings fall into three severity categories:

Biometric Auth report

Where liveness_checks[] and face_matches[] appear in the V3 decision.

Liveness warnings

Full liveness-warning reference including duplicate-face matching.

Face Match warnings

Full face-match warning reference for 1:1 comparisons.