Document field explorer

Every successful scan returns the same structured object. Here is each field, its type and whether it can be null — a known-but-absent value is null, never a missing key.

meta

What this scan is and how it went: its id, its status, whether it drew a credit, and where the time went.

FieldTypeNullableDescription
schema_versionstringnoThe revision of this body, always 1.0. A key removed or renamed moves the major segment, so a consumer that pins this value stops loudly rather than reading a key that no longer means what it did.
idstringnoScan identifier: a UUID version 7 (RFC 9562), canonical lower-case 8-4-4-4-12. Its leading 48 bits are the millisecond the scan was made, so ids sort in the order the scans happened — but treat the value as opaque: nothing else about it is part of the contract.
statusenumnoOutcome of a scan. Exactly these five string values; there are no numeric codes.
billedbooleannoWhether this scan was charged to the balance.
confidenceenumnoHow strongly the recognition backs this reading as a whole. Each entry of fields carries its own band as well, and they can differ from this one.
timingobjectyesThe split of the request's time. Null on a scan made before the split existed and read back out of storage: only the engine call was timed then, and the two halves cannot be recovered from it.
timing.upload_msintegernoFrom the request's headers reaching the server to its body being received and validated, with your key resolved and its rate limit checked. The allowance, idempotency and credit gates are claimed after this number is taken, so they are not in it. Dominated by your own connection and by how large the image is — this is the half you can shrink, by sending a smaller picture from closer by.
timing.processing_msintegernoThe recognition itself — the server-side engine call.
timing.total_msintegernoFrom the request arriving to the result being complete. At least upload_ms + processing_ms; the remainder is the gates that run after upload_ms is taken — the allowance, the idempotency check and the credit hold — plus preparing the result images and mapping the engine's output into this body. It stops there: writing the history row and serializing the response happen after the number is fixed, so the same figure is stored and returned.
created_atdate-timenoTimestamp, ISO-8601 in UTC (YYYY-MM-DDTHH:MM:SSZ).
referencestringyesThe request's reference, echoed back.

document

What kind of document was recognised and which state issued it. Null when nothing was recognised.

FieldTypeNullableDescription
kindstringnoDocument type, e.g. passport.
countrystringyesThe state that issued the document, ISO 3166-1 alpha-3. The same reading as issuing_state under the name most callers filter on; null when nothing was read.
country_namestringyesThe issuing state's name, as read from the document.
issuing_statestringyesThe issuing state, ISO 3166-1 alpha-3 — the same reading as country, under the name the machine-readable zone gives it.
type_namestringyesThe document type under its full name. Null on a scan read back from storage, which keeps no engine output.
type_confidenceenumnoHow strongly the document-type match is backed.
is_expiredbooleanyesWhether the document had already expired when the scan was made. Null when no expiry date was read, which is a different answer from false.
days_remainingintegeryesDays until expiry at the time of the scan; negative once expired.

holder

The person the document identifies. Null when nothing was recognised.

FieldTypeNullableDescription
given_namesstringyesThe holder's given names, as printed. Null when none was read.
surnamestringyesThe holder's surname, as printed. Null when none was read.
full_namestringyesThe holder's name as the document prints it in one combined field. Null when the document carries no such field — it is not composed from the two above.
birth_datedateyesThe holder's date of birth, ISO-8601 (YYYY-MM-DD). Null when none was read.
sexenumyesThe sex the document states: M, F, or X for unspecified. Null when none was read.
nationalitystringyesThe holder's nationality, ISO 3166-1 alpha-3. Null when none was read; it is not assumed from the issuing state.

fields[]

Every field read off the printed page, re-keyed to a stable name. One entry per reading, each with its own language and confidence band.

FieldTypeNullableDescription
idstringnoIdentity of this entry, unique across fields: the key and the language identifier the value was read as, plus an occurrence counter when the same pair is reported twice. name is the semantic key and repeats — a document that carries a field in two scripts yields one entry per language — so use id, not name, to address or key a single entry.
namestringnoOur stable snake_case key.
labelstringnoOur human label.
categoryenumnoWhich group of the report a field belongs to.
valuestringyesThe value of this reading: the national-script spelling when language names one, the transliterated Latin value otherwise. Null when the field is empty.
languagestringyesThe language this reading was made in, e.g. Greek; null for the neutral, transliterated Latin reading.
confidenceenumnoHow strongly the recognition backs this value: high, medium or low. An unknown or missing probability reads as low.

mrz

The machine-readable zone: a verdict on whether it checks out, the reason when it does not, and the lines themselves exactly as read.

FieldTypeNullableDescription
statusenumnoVerdict on the machine-readable zone: passed (present, every check digit valid and nothing contradicting the printed page), failed (present but something did not check out) or absent (the document carries none).
reasonstringyesOne plain sentence naming what did not check out, for failed; null otherwise.
linesstring[]yesThe zone's lines in order, exactly as read — two for a TD3 passport, three for a TD1 card. The zone's alphabet is A-Z, 0-9 and the filler <, so a line carries no whitespace. Null when the document carries none.
textstringyesThe same lines run together with nothing between them: one unbroken string, with no newlines and no spaces. Null when there are none.

images

Crops taken from the picture you sent, each one a data URL.

FieldTypeNullableDescription
document_cropstringyesThe document itself, cropped out of the uploaded picture and deskewed — the front side of a card, the data page of a booklet.
rearstringyesThe reverse side of the document, when the picture carried one and a crop of it was produced.
main_photostringyesThe holder's photograph as printed on the document.
signaturestringyesThe holder's signature as printed on the document.
watermark_facestringyesThe faint second copy of the holder's face printed into the page as a security feature — a different image from main_photo, and the one a verifier compares against it. Null when the document carries none.
barcodestringyesThe barcode area of the document, when it carries one.
chipstringyesThe chip area of the document, when it carries one.

quality

Whether the picture you sent was good enough to recognise from.

FieldTypeNullableDescription
overallenumnoWhether the uploaded picture was good enough to recognize from. not_checked when nothing measured it — a scan read back from storage, which keeps no engine output.

authenticity

Authenticity verification. It does not run under the recognition-only call, which reports it as not checked.

FieldTypeNullableDescription
overallenumnonot_checked under the recognition-only scenario; populated by authenticity verification later.
checksobject[]noOne entry per authenticity check that ran. Always present; empty under the recognition-only scenario, where nothing ran.
checks.namestringnoOur stable snake_case key for this check.
checks.labelstringnoOur human label for this check.
checks.resultenumnoOutcome of a single check.
checks.detailstringyesOne plain sentence about what this check saw, or null when it has nothing to add.

Try it on a real document in the live demo, or see per-country structure under passport OCR.