Every passport, parsed in about 20 seconds.
Drop a passport — one page or several — and get back structured JSON with every field, confidence scores, and validation status. No setup required.
One call in, one document out.
A clean JSON envelope with every field, a per-field confidence score, an MRZ checksum result, and a request id you can quote in support tickets.
- Passport number
- Last name
- First name
- Middle name
- Gender
- Nationality
- Birth date
- Issue date
- Expiry date
- Country of issue
- Place of issue
- Place of birth
- Mother name
- Father name
- Spouse name
{
"success": true,
"request_id": "req_8c4ae2…",
"latency_ms": 19840,
"fields": {
"surname": { "value": "GARCIA", "confidence": 99.6, "band": "verified" },
"given_names": { "value": "MARÍA ELENA", "confidence": 98.4, "band": "verified" },
"document_number": { "value": "AB1234567", "confidence": 99.8, "band": "verified" },
"nationality": { "value": "ESP", "confidence": 99.9, "band": "verified" },
"date_of_birth": { "value": "1989-04-12", "confidence": 99.7, "band": "verified" },
"date_of_expiry": { "value": "2032-08-09", "confidence": 99.5, "band": "verified" },
"mrz_valid": { "value": true, "confidence": 100, "band": "verified" }
},
// Added only when you request a target language (here: language=Arabic).
// The English "fields" above never change. Each entry keeps the value exactly
// as printed on the document ("native") plus its translation ("translatory").
"translation": {
"fields": {
"surname": { "label": "اسم العائلة", "native": "GARCIA", "translatory": "غارثيا", "band": "verified" },
"given_names": { "label": "الاسم", "native": "MARÍA ELENA", "translatory": "ماريا إيلينا", "band": "verified" },
"nationality": { "label": "الجنسية", "native": "ESP", "translatory": "إسبانيا", "band": "verified" },
"date_of_birth": { "label": "تاريخ الميلاد", "native": "1989-04-12", "translatory": "١٩٨٩-٠٤-١٢", "band": "verified" }
}
}
}Designed for the hardest 1% of passports.
Most OCRs handle clean scans. We're built for blurry, glare-flecked phone shots, off-angle bio pages, and visa stamps that bleed into the MRZ.
Every ICAO 9303 field
Names, dates, document number, MRZ, issuing state, gender, nationality — the full visual inspection zone returned in a single response, plus optional family fields where present.
About 20 seconds, synchronously
Around 20 seconds end to end, measured on production traffic. No queueing, no warmup — built for synchronous KYC.
MRZ checksum validation
Every machine-readable line is checksum-verified per ICAO. Tampered or printed-by-hand passports fail loudly, not silently.
Multi-page intelligent merge
Drop a bio page, a visa page, and a stamps page in any order. Fields are reconciled across pages and conflicts surfaced.
Per-field confidence scores
Five confidence bands per field, not per document. Auto-route uncertain extractions to a reviewer instead of failing the whole call.
Images never stored · results purged in 30 days
The document image is processed in memory and never written to disk. The extracted fields are kept for up to 30 days so they appear in your extraction history, then purged — and purged immediately if you delete your account.
If it's a passport, we read it.
180+ issuing countries with continuous benchmarking against fresh in-the-wild documents. Every UN member state. Every modern e-passport variant.
2 free instantly. 5 with a free account. No card.
Test the full production API end-to-end before you ever talk to billing. Volume pricing kicks in automatically when you keep going.
Put it in front of real customer documents.
One API key, every modern passport, in production this afternoon.