Skip to content

The result

The export in verification.completed and in GET /api/v1/verifications/{id} is what the checks read and decided. Which blocks are filled depends on the flow and on the document.

{
"status": "ready",
"created_at": "2026-11-01T10:19:40Z",
"personal_info": {
"first_name": "ERIKA",
"last_name": "MUSTERMANN",
"date_of_birth": "1983-08-12",
"nationality": "D",
"sex": "F"
},
"document_info": {
"document_type": "national_id",
"issuing_country": "D",
"document_number": "T22000129",
"expiry_date": "2031-07-31"
},
"contact_info": {},
"additional_data": { "place_of_birth": "BERLIN" },
"verification_checks": {
"document_expiry": "passed",
"mrz_quality": "passed",
"face_match": "passed",
"name_consistency": "passed"
},
"biometric_results": { "face_match_distance": 0.38 }
}
BlockFrom
personal_infodocument (and nfc)first_name, last_name, date_of_birth (YYYY-MM-DD), nationality, sex — as printed in the machine-readable zone (ICAO codes: D Germany, ESP Spain, …).
document_infodocumentdocument_type, issuing_country, document_number, expiry_date; personal_number when the document carries a second number (e.g. the DNI/NIE on Spanish cards).
contact_infoform_data, email, phoneThe values the person entered or confirmed.
additional_datadocumentFurther fields some documents carry (address, place of birth, …).
verification_checksallEach check by name with its outcome (below).
biometric_resultslivenessface_match_distance (lower = more alike) and similar measures.
nfc_datanfcThe chip read and its authentication.
amlamlSanctions screening: possible matches with the lists screened.
attributeskeys set up for attributesE.g. {"age_over_18": {"value": true, "source": "document"}} instead of the identity.

verification_checks maps each check that ran to its outcome: passed, failed, or not_used when another check decided instead. Checks you may see: document_expiry, mrz_quality, mandatory_fields, name_consistency, sides_match, template_consistency, forgery, face_match, nfc_chip, chip_face_match, chip_document_face_match, aml_screening, wallet_claims.

reason_code (in webhooks and GET) says why a verification ended as it did. Examples: DOCUMENT_EXPIRED, BIOMETRIC_FACE_MATCH_FAILED, NAME_MISMATCH, MISSING_MANDATORY_FIELDS, IMAGE_TOO_BLURRY, POTENTIAL_FORGERY, SIDES_DO_NOT_MATCH, MRZ_QUALITY_LOW, COMPLETION_TIMEOUT, ABANDONED. New codes are added over time: show a generic message for codes you don’t know, and log them.