Skip to main content
The Age Estimation feature emits warnings whenever a risk signal fires on the combined age + passive liveness check: the predicted age is below your minimum, the age could not be computed, the subject failed liveness, no face was found, or a presentation attack was detected. This page lists every code, what triggers it, and how to configure the workflow response.

Overview

Age Estimation always runs two checks in one call — a passive liveness test and an age regression model — so its warnings flow through the shared liveness pipeline and are tagged with feature LIVENESS. They appear on the report under age_estimation.warnings[] (standalone API) or liveness_checks[].warnings[] (embedded in a workflow). The warning object schema is documented under Data models — Warning object. Producers:
  • Standalone API — the endpoint generates the five warnings listed under Decline triggers.
  • Workflows — the shared liveness producers plus the age-specific checks. Age warnings only fire on age-estimation flows (adaptive age verification workflows or AGE_ESTIMATION workflow nodes) — a plain liveness step reports an estimated age but never raises age warnings.
Severities: the five auto-decline risks (NO_FACE_DETECTED, LIVENESS_FACE_ATTACK, FACE_IN_BLOCKLIST, AGE_BELOW_MINIMUM, AGE_NOT_DETECTED) are always log_type: "error" and force Declined; the remaining risks resolve to error / warning / information based on thresholds or the configured action.

Decline triggers

On the standalone API, the decision is Declined whenever any warning fires:
  • Age below threshold — predicted age strictly below age_estimation_decline_threshold (default 18; 0 disables the age check). Raises AGE_BELOW_MINIMUM.
  • Age not computed — no face age could be estimated (no detectable face, or no usable face for the age model). Raises AGE_NOT_DETECTED.
  • Liveness score at or below thresholdscore <= face_liveness_score_decline_threshold (default 30); a null score counts as 0. Raises LOW_LIVENESS_SCORE. Suppressed when NO_FACE_DETECTED fires — the two are mutually exclusive.
  • No face detected — the liveness model found no face. Raises NO_FACE_DETECTED.
  • Presentation attack — the liveness model flagged a screen, printed photo, mask, or other spoof. Raises LIVENESS_FACE_ATTACK.
In workflows, the age checks compare the truncated estimated age (whole years) against the configured thresholds:
  • With ID-verification fallback enabled (enable_id_verification_fallback, default on): an age below borderline_minimum_age_threshold (default 18) raises AGE_BELOW_MINIMUM; ages in the borderline band (up to borderline_maximum_age_threshold) continue to document verification instead of raising a warning, and AGE_NOT_DETECTED is never raised — an undetected age routes to document verification too.
  • With fallback disabled: no estimated age raises AGE_NOT_DETECTED, and an age below minimum_age_threshold (default 18) raises AGE_BELOW_MINIMUM.

Configurable risks

The following risks let you tune thresholds or the action per workflow setting: Workflow sessions also screen the face against your lists: FACE_IN_BLOCKLIST always auto-declines (error), while POSSIBLE_FACE_IN_BLOCKLIST moves the session to In Review.

Warnings produced

Example

In workflow decision payloads (liveness_checks[].warnings[]), each warning also carries a node_id identifying the workflow node that raised it.

Warning types

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