South African ID documents in, structured JSON out.

Six endpoints covering every South African identity document, plus any passport that follows the ICAO standard.

The card most South Africans carry. Eight fields off the front face.

Smart ID, front, a specimen document showing the sample data returned by /api/v1/ocr/sa-id-smart-front.
Specimen artwork. Sample data, not a real document./api/v1/ocr/sa-id-smart-front
200 OKapplication/json
{  "success": true,  "documentType": "sa-id-smart-front",  "confidence": "high",  "data": {    "surname": "MOKOENA",    "names": "LERATO PRECIOUS",    "sex": "F",    "dateOfBirth": "1991-03-14",    "idNumber": "9103140000088",    "countryOfBirth": "RSA",    "citizenshipStatus": "Citizen",    "nationality": "RSA"  },  "meta": {    "processedAt": "2026-03-12T09:41:07.412Z",    "latencyMs": 2614  }}

Six documents. One response shape.

Every endpoint returns the same envelope, so the parsing code you write once works for all of them. Fields that cannot be read come back as null rather than a guess.

Smart ID, front

The card most South Africans carry. Eight fields off the front face.

/api/v1/ocr/sa-id-smart-front

Smart ID, back

The reverse carries the card number and when it was issued.

/api/v1/ocr/sa-id-smart-back

Green book

The older green barcoded book. Still in wide circulation.

/api/v1/ocr/sa-id-greenbook

Driver's licence, front

Vehicle codes, restrictions and the professional-driving expiry, alongside the identity fields.

/api/v1/ocr/sa-drivers-front

Driver's licence, back

The barcode itself is encrypted and cannot be decoded. The printed fields can.

/api/v1/ocr/sa-drivers-back

Passport, any country

Read through the ICAO Doc 9303 machine-readable zone, so it is not limited to South Africa.

/api/v1/ocr/passport

Every field, per endpoint

A POST and a bearer token.

Send the image as multipart form data or base64 JSON. You get back the extracted fields, a confidence level of high, medium or low, and the real time the request took in meta.latencyMs.

Image formats
JPEG, PNG, WebP
Maximum size
4MB per request
Auth
Bearer token, SHA-256 hashed at rest
Free tier
50 requests a month, no card
curl -X POST https://jongaocr.co.za/api/v1/ocr/sa-id-smart-front \
  -H "Authorization: Bearer $JONGA_TOKEN" \
  -F "image=@id-card.jpg"
request_logsevery column
id
0f9c3a1e-6b44-4d70-ae51-2c8f9d0b7e13
token_id
4a7e2b90-1f35-4c88-9a02-6d4be1770c95points at a token row that holds only a SHA-256 hash
endpoint
sa-id-smart-front
status
success
latency_ms
1842
image_size_bytes
318004the size of the image, never the image
created_at
2026-09-17T09:14:02Z

Never written, anywhere

  • the image bytes
  • the extracted fields
  • the response body
A sample row, with the real column list. There is nowhere in it to put a name, a face or an identity number.

The document does not stay here.

Identity documents are the most sensitive thing your users will ever hand you. Jonga is built so that holding onto them is not possible rather than merely discouraged.

  • Processed in memory only

    Images are never written to disk, object storage or a database. The buffer is discarded the moment extraction finishes.

  • No personal data in the logs

    We record the token, the endpoint, the status, the latency and the file size. Response payloads are never logged, not in traces and not in error reports.

  • Tokens stored as hashes

    API tokens are kept as SHA-256 hashes. The raw token is shown to you once, at creation, and never again.

  • Built against POPIA, useful for FICA

    Written for the Protection of Personal Information Act from the start. Every sub-processor we use is named on the privacy page.

How the data is handled, in full

We do not publish an accuracy number.

Everyone in this category leads with one. Ninety-nine point something percent, measured on a set nobody outside the company has seen, on documents that are not yours.

We have not run that benchmark, so we are not going to quote it. What we can tell you is exactly what happens when a field is unreadable: it comes back as null, never as a guess, and the response carries a confidence level derived from how many fields came back empty.

Fifty requests a month are free, and every response reports its own real latency. Point it at your own documents and find out.

Free while you build.

50 requests a month, 1 API token, and all six document types. No card, no call, no trial clock.

R0a month, indefinitely

The free tier runs on the same engine and the same accuracy as everything else. Nothing is held back to make you upgrade.

When you outgrow it

Paid plans are priced and specified, but billing is not switched on yet. Join the waitlist and you will be told the day it is, before anyone else.

Popular
R299 / 1,000 a month
Ultimate
R1,499 / 10,000 a month
Compare the plans

Questions you should be asking.

If yours is not here, ask it. A person reads that inbox, usually within a business day.

Ask a question
Why not just call a vision model myself?

You can, and for one document type it is a reasonable afternoon. The work that follows is the part people underestimate: a prompt per document side, a schema per document, handling the cases where a field is genuinely unreadable rather than hallucinating one, image preprocessing so a phone photo does not blow your token budget, rate limiting, and never letting any of it touch a log. That is what is behind these endpoints.

Which passports does the passport endpoint handle?

Any passport that follows ICAO Doc 9303, which is the machine-readable standard essentially every country issues to. The two MRZ lines come back raw as well as parsed, so you can run the check digits yourself. The X gender marker is supported.

What happens when a field cannot be read?

It returns null. Nothing is ever filled in by inference. The response also carries a confidence level of high, medium or low, which is derived from how many fields came back null, so a worn green book with an unreadable barcode will tell you so rather than quietly returning something plausible.

Do you store the images?

No. Images are processed in memory and the buffer is discarded once extraction completes. Nothing is written to disk or object storage. What is retained is request metadata: which token, which endpoint, the status, the latency and the file size.

Is the data kept in South Africa?

Not today. The database and hosting run in EU and US regions, and every sub-processor is named on the privacy page. South African data residency is on the Enterprise roadmap rather than something we currently offer, and we would rather say so than imply otherwise.

Can I verify an ID number against Home Affairs?

No. Jonga reads what is printed on the document and returns it as structured data. It does not check that person against any government database, and it is not a fraud or liveness check. Pair it with a verification provider if that is what you need.

Fifty requests. No card.

Create a token and make your first call in the next ten minutes.

Start free