One API. One response. No OCR infrastructure to maintain.
Passports and ID cards, read automatically.
Full 2-line MRZ extraction.
3-line MRZ extraction.
ICAO checksum verification on every field.
Corrects rotation and perspective automatically — a safety net for sideways or upside-down photos.
OCR isn't enough.
Extraction alone tells you what a document says. Validation tells you whether to trust it.
Every field ships with a pass/fail check — plus a single review_recommended flag when something's worth a second look.
One request in, one response out.
No job creation, polling, or webhooks — the same three snippets as the docs' Quick Start.
curl https://misfora.com/v1/scan \ -H "Authorization: Bearer msf_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" \ -F "file=@passport.jpg"
import requests
response = requests.post(
"https://misfora.com/v1/scan",
headers={"Authorization": "Bearer msf_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"},
files={"file": open("passport.jpg", "rb")},
)
response.raise_for_status()
print(response.json())const fs = require("fs");
const form = new FormData();
form.append("file", fs.readFileSync("passport.jpg"), "passport.jpg");
const res = await fetch("https://misfora.com/v1/scan", {
method: "POST",
headers: { Authorization: "Bearer msf_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" },
body: form,
});
console.log(await res.json());Full request/response reference, every field, and every error code: read the docs.
Standard access & Enterprise.
Limits sized to your use case, agreed when we set up your account — no fixed public tier to pick from.
Request API accessHigher volume, and a response schema mapped to your own systems if the default JSON shape doesn't fit your pipeline as-is.
Talk to usTry it before you integrate.
Want to see it work first? Run a scan on our free public scanner — same OCR pipeline as the API, no signup required.
Try the Free ScannerQuestions
What documents are supported?+
How fast is a typical response?+
Do you store uploaded documents?+
Does the API validate MRZ check digits?+
What's the difference between TD1 and TD3?+
type: "passport", TD1 → type: "id_card".