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.

  • Images are never stored
  • Check digits verified locally, no model in the loop
  • One multipart POST, JSON back

How it works

  1. 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.

  2. 02Crop at full resolution

    Each document is cut from the original image, never from a downscaled page, so small print stays readable.

  3. 03Extract

    Structured output: the model fills a fixed schema — Hebrew names from the print, Latin names only from the MRZ, dates as ISO.

  4. 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) + sefach
    Both 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 passport
    TD3 MRZ with check digits
    • passport_number
    • mrz_lines
    • last_name_en
    • first_name_en
    • last_name_he
    • first_name_he
    • nationality
    • sex
    • dates
  • Foreign passport
    Any country, Latin names only
    • passport_number
    • mrz_lines
    • last_name_en
    • first_name_en
    • nationality
    • sex
    • dates
  • Driver's license
    Field numbers 4d, 5, 8, 9
    • license_number
    • id_number
    • names
    • dates
    • address
    • categories
  • Disability card
    Names, ID and file number, validity month
    • id_number
    • file_number
    • names
    • date_of_expiry
  • Bank cheque
    Front, 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 Israel
    Restricted bank accounts and severely restricted corporations
  • NBCTF
    Designated terror operatives and organizations
  • Registrar of Companies
    Registered 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 access

Self-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
View on GitHub

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"
response
{
  "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": []
  }
}
Read the API reference
Makor — OCR API for Israeli ID documents and cheques