Skip to content

Identity · Age verification

An age gate backed by a document, not a checkbox.

The age check uses the date of birth extracted from the MRZ, the Indian card or the signed Aadhaar record, and compares it with the minimum age in the workflow. When only a birth year is known, it says so.

kycverify · productage
default minimum age, configurable
18
outcomes: passed, failed, review
3
age estimates from faces
0
Document date of birth

What it checks

Age verification, check by check.

Each rule below is what the engine actually runs. The result is written as a age check with its score and warnings.

  • Full date of birth

    The age is computed on today's date. Below the minimum fails as underage.

  • Year only

    Aadhaar can carry only a birth year. If the person is old enough on any day of that year, it passes; if not on any day, it fails; otherwise it goes to review as age_uncertain.

  • No date

    No extracted date of birth sends the session to review with dob_missing.

Try it

Three kinds of birth date, three honest answers.

A full date gives an exact age. A year alone gives an age range, and the range decides whether the answer is yes, no, or a person's call.

  • The rules are ported line for line from the Rust engine, and the page names the file.
  • Everything runs locally in this tab. No request is made while you type.
  • Reset puts the example back; nothing is saved.

Age check: what the engine decides

Runs in your browser
What the document step extracted

Aadhaar artefacts sometimes carry only the year.

18

Whole years, set per workflow.

Reading your clock

The age is computed on today's date.

Logic ported from backend/crates/kyc-api/src/engine/submit.rs. Nothing you type leaves this page.

How it works

What happens, in order.

  1. 1

    Extract

    The document or Aadhaar step records the date (or year) of birth and its source.

  2. 2

    Compare

    At submit, the age is computed and compared with min_age.

Configuration

The workflow keys and their defaults.

Workflow · json
"age": { "enabled": true, "min_age": 18 }
KeyDefaultMeaning
min_age18Minimum age in whole years.

Reference

Where the date of birth comes from.

Where the date of birth comes from.
SourcePrecisionRecorded as
Passport, ID card, residence permit MRZFull datedate_of_birth, source mrz
Indian card OCR (Aadhaar, PAN, voter ID, licence)Full date when printeddate_of_birth, source ocr
Aadhaar Secure QR or Offline e-KYCFull date, or the year onlydate_of_birth or year_of_birth, source aadhaar

Reasons and warnings

Exact codes, as they appear in the check's data and warnings, so you can branch on them.

Age verification codes
CodeOutcomeWhen
age_below_minimumfailedThe person is younger than min_age (warning underage).
age_uncertainreviewOnly the birth year is known and the range straddles min_age.
age_unknownreviewNo date of birth was extracted (warning dob_missing).

API

Age is decided at submit.

The age check uses what the document or Aadhaar step extracted, so it runs inside a session. The console refuses an age check in a workflow without a document or Aadhaar step.

Age is decided at submit.

# 1. Create a session on a workflow that has a document or Aadhaar step and the age check on
curl -X POST https://kycverify.me/api/v1/sessions \
  -H "x-api-key: $KYC_API_KEY" \
  -H "content-type: application/json" \
  -d '{ "workflow_id": "wf_…", "vendor_data": "user-42" }'

# 2. After the session.status_updated webhook, read the decision
curl https://kycverify.me/api/v1/sessions/ses_…/decision \
  -H "x-api-key: $KYC_API_KEY"

decision.checks[] · age

{
  "kind": "age",
  "status": "review",
  "score": null,
  "data": { "min_age": 18, "age_range": [17, 18], "reason": "age_uncertain" },
  "warnings": [
    { "code": "age_uncertain", "message": "Only the birth year (2008) is known; the minimum age cannot be confirmed", "severity": "warn" }
  ]
}

Limits

What it does not do.

Stated up front, so you can decide what to pair it with.

  • No facial age estimation. The check needs a document or Aadhaar step that yields a date of birth.

FAQ

Age verification: questions.

Can I run age verification without keeping the date of birth?

The identity keeps the date of birth with the session until your retention period purges it. Shorten retention_days on the app to minimise how long it is held.

Try it in the sandbox today.

Every check is available from the first sign-up, with test keys and a default workflow. Talk to us when you are ready to verify real people.