Skip to content

API reference

Results

Status is the outcome. Identity is included once a result exists. A later manual decision can change an approval.

Status

StatusMeaning
createdWaiting for the guest to open the link.
in_progressThe guest is in the face or document steps.
processingAutomated checks are running.
needs_reviewA person has to approve or decline. This is not a decline.
approvedAccepted.
declinedRejected. The guest may still have attempts left when decision.retryableStep is set.
cancelledYou cancelled it.
expiredThe 24 hours ran out.

stage is the screen the desktop watcher shows: waiting_for_phone, face, document, reviewing, then the final status. attempt runs from 1 to 3.

Decision

decision is null until there is an outcome. A decline reason declines the check. A review flag does not. A check that errors does not approve on its own.

"decision": {
  "outcome": "needs_review",
  "source": "automated",
  "reasons": [],
  "reviewFlags": [
    { "code": "layout_mismatch", "title": "Layout doesn't match the genuine document" }
  ],
  "retryableStep": null,
  "decidedAt": "2026-10-07T16:04:11.000Z"
}

After a person decides, source is manual and these fields are added:

  • previousOutcome — what it was before this decision.
  • reasonCode — the reviewer’s reason. The free-text note is not included.
  • decidedBy — customer or venueora. You do not receive the reviewer’s email.

Manual approve codes: manual_documents_verified, false_positive_layout, false_positive_template, false_positive_tamper, false_positive_recapture, false_positive_face, customer_known_in_person, other.

Manual decline codes: document_not_authentic, document_tampered, document_recaptured, face_mismatch, not_live, under_age, expired_document, suspected_fraud, other.

Automated decline reasons

These appear in decision.reasons[].code when the checks decline. retryableStep is face, document, or null when the guest cannot try again.

CodeRetry
face_not_liveface
face_mismatchface
document_unreadabledocument
mrz_invaliddocument
barcode_missingdocument
data_mismatchdocument
document_expireddocument
id_not_helddocument
under_agenone
synthetic_medianone
document_not_authenticnone
declined_after_reviewnone
processing_errorface

Review flags

These do not decline. Status becomes needs_review.

CodeWhy it waited
layout_mismatchThe layout does not match the genuine document.
template_mismatchThe printed design differs from genuine examples.
possible_tamperingSigns of a replaced photo, duplicated areas, or edited text.
possible_recaptureSigns of a photo of a screen or a print.
provenance_unavailableThe AI-image check could not run.
automated_checks_incompleteThe checks did not finish after several tries.
authenticity_incompleteThe document could not be straightened, or an authenticity check failed to run.
face_compare_unavailableThe face comparison did not complete.
barcode_partial_matchThe licence front only partly matches the barcode.
licence_dates_conflictMore than one date of birth was read from the licence.
held_document_unconfirmedThe number on the held document could not be read.
apparent_age_mismatchThe face looks younger than the minimum age. Estimated age is never itself a decline.

Identity

identity is null until a result is stored. Fields can still be null when a value could not be read. dateOfBirth is YYYY-MM-DD. age is the age in whole years at decision time. issuingCountry is GB, IE, or US when known.

"identity": {
  "firstName": "Alex",
  "lastName": "Morgan",
  "fullName": "Alex Morgan",
  "dateOfBirth": "1998-04-12",
  "age": 28,
  "sex": "F",
  "nationality": "GBR",
  "documentNumber": "123456789",
  "issuingCountry": "GB",
  "issuingRegion": null,
  "expiryDate": "2030-04-11",
  "issueDate": "2020-04-12",
  "address": null
}

documentType is passport or driving_licence. ID images and the extracted identity are deleted after 30 days, unless the check is still needs_review. A manual decision starts that clock again. The outcome, reason codes, and checks stay.

A clear automated approval is not a government database match. A good real-time face swap, a lookalike with a genuine document, or a forged card whose number matches the forged name and date of birth can still pass the automated declines. Authenticity checks then raise review flags rather than decline.