dz_cnibe · schema v1

Algerian ID cards, as structured data.

Post the front and back of a national ID card. Get back thirteen named fields in Arabic and Latin script, MRZ check-digit results, the face crop, and a confidence for every value — in one request, with no SDK to install.

A test key is issued the moment you sign up. Live access is approved per account.

The whole API

One endpoint. Multipart in, JSON out.

cURL
curl -sS https://api.sifax.app/v1/extract \
  -H "Authorization: Bearer $IDOCR_API_KEY" \
  -F "front=@front.jpg" \
  -F "back=@back.jpg"
200 OK
{
  "request_id": "req_01J...",
  "schema_version": "1",
  "document_type": "dz_cnibe",
  "status": "ok",
  "error_code": null,
  "fields": {
    "surname_latin":      { "value": "BENALI",        "confidence": 0.99, "source": "mrz" },
    "given_names_latin":  { "value": "MOHAMED AMINE", "confidence": 0.99, "source": "mrz" },
    "surname_arabic":     { "value": "بن علي",         "confidence": 0.93, "source": "ocr" },
    "date_of_birth":      { "value": "1990-01-15",    "confidence": 0.99, "source": "cross_check" },
    "national_id_number": { "value": "109900123456789012", "confidence": 0.97, "source": "ocr" },
    "expiry_date":        { "value": "2030-01-14",    "confidence": 0.99, "source": "cross_check" }
  },
  "checks": { "mrz_found": true, "mrz_valid": true, "expired": false, "warnings": [] },
  "photo": { "jpeg_base64": "..." },
  "timings_ms": { "total": 700 }
}

What comes back

Every field is an object with a value, a confidence in [0, 1], and its source. A field that could not be read is present with an empty value — never silently dropped.

  • surname_latin
  • given_names_latin
  • surname_arabic
  • given_names_arabic
  • date_of_birth
  • place_of_birth
  • sex
  • blood_group
  • national_id_number
  • card_number
  • issue_date
  • expiry_date
  • nationality

Verified, not guessed

MRZ check digits are validated and cross-checked against the printed side. Every field says whether it came from the MRZ, from OCR, or from both agreeing.

Arabic and Latin

Names and places come back in both scripts, exactly as printed. Confidence is per field, so you can gate on the ones you care about.

Sub-second typical

Per-stage timings ride along in every response, so a slow call tells you which stage was slow instead of leaving you to guess.

Keys you can rotate

Test and live modes, a rate limit per key, instant revocation. Secrets are stored as a hash and shown once, at creation.

Try it against a real card in about a minute.

Sign up, get a test key, and run a card through the dashboard playground before you write a single line of integration code.

Get a test key