Documents in, JSON out
OCR for teudat zehut, passports, driver's licenses and bank cheques — Hebrew and Latin fields, check-digit validation, public registry checks, one API call.
- Pay to
- —
- Amount
- 4,500.00
- Date
- 2026-09-07
⑈80001234⑈ 11 14841 ⑆ 0000123456
- שם משפחה
- ישראלי
- שם פרטי
- ישראל
- מספר זהות
- 1 2345678 2
I<ISR123456782<<<<<<<<<<<<<<<
- Surname
- ISRAELI
- Given name
- ISRAEL
- Passport No.
- 12345678
- Date of birth
- 01 JAN 1990
P<ISRISRAELI<<ISRAEL<<<<<<<<<<<<<<<<<<
- Images are never stored
- Check digits verified locally, no model in the loop
- One multipart POST, JSON back
How it works
- 01Detect
Classical image analysis finds every document on the page — a card, a sefach, a cheque — and returns its box; the vision model is asked only when it finds nothing.
- 02Crop at full resolution
Each document is cut from the original image, never from a downscaled page, so small print stays readable.
- 03Extract
Structured output: the model fills a fixed schema — Hebrew names from the print, Latin names only from the MRZ, dates as ISO.
- 04Validate locally
ICAO 9303 MRZ and MICR check digits, the Israeli ID check digit and printed-vs-machine-read cross-checks — pure math, no model in the loop.
What is read
Six document types, one response shape.
- Teudat zehut (ID card) + sefachBoth card layouts and the appendix sheet
- id_number
- first_name_he
- last_name_he
- date_of_birth
- date_of_issue
- date_of_expiry
- address
- marital_status
- spouse
- children[]
- Israeli passportTD3 MRZ with check digits
- passport_number
- mrz_lines
- last_name_en
- first_name_en
- last_name_he
- first_name_he
- nationality
- sex
- dates
- Foreign passportAny country, Latin names only
- passport_number
- mrz_lines
- last_name_en
- first_name_en
- nationality
- sex
- dates
- Driver's licenseField numbers 4d, 5, 8, 9
- license_number
- id_number
- names
- dates
- address
- categories
- Disability cardNames, ID and file number, validity month
- id_number
- file_number
- names
- date_of_expiry
- Bank chequeFront, and the guarantee stamp on the back
- micr_line
- bank
- branch
- account
- cheque_number
- drawer
- payee
- amount
- amount_words
- date
- guarantor
Public registries
Check what was read against Israeli public lists, or search them yourself.
- Bank of IsraelRestricted bank accounts and severely restricted corporations
- NBCTFDesignated terror operatives and organizations
- Registrar of CompaniesRegistered companies, their status and the violator mark
On every extraction
Switch it on in settings or per request: every number and account read is looked up exactly, the full name as whole words.
- check_registries=true
- id_number
- spouse_id_number
- child_id_number
- drawer_id_number
- guarantor_id_number
- account
- name_he
- name_en
Search
The Registries page and one API call search by number, bank account or name, results grouped by registry with the date of its data.
- GET /api/v1/registries/search
- id
- bank
- branch
- account
- name
Informational only: the lists are local copies as of their last download, a match may be wrong, and "not found" does not mean unlisted. Nothing read from a document is sent to any registry.
Privacy
- Images are read in memory and discarded once the result is returned — never stored, never logged.
- Per document we keep metadata — time, type, verdict, model, tokens, cost — never the image, its name or the values read from it.
- The result is stored only if you switch it on, encrypted, until you delete it.
- Nothing is sold or used for training. Servers are in Israel; documents are read by Anthropic's API and sign-in runs on Clerk, both in the US. The self-hosted variant with a local model never leaves your machine.
Personal data is processed under the Israeli Privacy Protection Law (Amendment 13).Read the Privacy Policy
Two ways to use it
Same engine, same API, your choice where it runs.
Cloud
Sign-up is by invitation: an admin invites you by e-mail, then 5 documents at our expense, then your own Anthropic API key — billed by Anthropic, no subscription here.
Request accessSelf-host
Open source. One compose command brings up the web app, the engine and Caddy; Ollama runs the vision model on your own GPU.
AUTH_MODE=none MAKOR_BACKEND=ollama docker compose --profile ollama up -d --build
API
Every account gets REST access with its own key. One multipart POST, JSON back.
curl -s -X POST https://makor.pro/api/v1/extract \ -H "Authorization: Bearer ak_…" \ -F "file=@document.jpg" \ -F "check_registries=true"
{
"document_type": "teudat_zehut",
"fields": {
"id_number": {
"value": "123456782",
"confidence": "high"
},
"last_name_he": {
"value": "ישראלי",
"confidence": "high"
}
},
"validation": {
"overall": "verified"
},
"registries": {
"checked": [
"id_number"
],
"matches": []
}
}