Docs contentsYaliyomo ya nyaraka

The digid.kyc/1 document

The fields of the JSON document a verification ends in, for your backend.

A verification ends in one JSON document, digid.kyc/1: who the card says the person is, the checks and the verdict, the face match and the fingerprints. The Flutter and Web SDKs build it with the same code, so it is byte-for-byte the same shape everywhere. digid sends it nowhere; your app sends it to your backend.

Example

Abbreviated, with synthetic values. A document with fingerprints is larger, because it carries the images.

{
  "schema": "digid.kyc/1",
  "created_at": "2026-10-29T18:40:00Z",
  "sdk": { "api_version": "0.1.0", "platform": "android" },
  "licence": { "state": "licensed", "evaluation": false },
  "subject": {
    "nin": "19900101111110000123",
    "given_names": "AMINA JUMA",
    "surname": "HASSAN",
    "sex": "female",
    "date_of_birth": "1990-01-01",
    "date_of_birth_source": "nin",
    "card_type": "citizen",
    "expiry_date": null
  },
  "document": {
    "type": "nida_id",
    "overall": "pass",
    "checks": [{ "id": "nin_format", "status": "pass", "detail": "20 digits; first 8 form a valid date" }]
  },
  "face": { "verdict": "match", "score": 0.0, "threshold": 0.0, "liveness": { "passed": true } },
  "fingerprints": [
    { "code": "L2", "finger": "left_index", "format": "wsq", "ppi": 500, "width": 522, "height": 539,
      "capture": "contactless", "image_b64": "/6D/qAB6…" }
  ],
  "integrity": { … }
}

Top level

Field Type Meaning
schema string Always digid.kyc/1. A breaking change would be digid.kyc/2.
created_at string When the capture finished, from the device clock, UTC (RFC 3339)
sdk.api_version string The engine version
sdk.platform string android, ios, web
licence.state string licensed, grace (expired, inside the grace period) or evaluation
licence.evaluation boolean true when no valid licence was applied: the result is watermarked and never better than review
subject object or null What the card says; null for a fingerprint-only capture
document object or null The card, its checks and the verdict
face object or null The face match; null without a selfie step
fingerprints list Accepted fingerprints; empty without the fingerprint step
integrity object The tamper check. See Verify on your backend.

The document also carries the fields NIDA's biometric verification needs, ready to use; they are described for customers who sign in, in NIDA fingerprint submission fields.

subject

Field NIDA card Driving licence
nin The 20-digit NIN null
given_names Given names, as printed Given names (field 2)
surname Surname Surname (field 1)
sex male or female null
date_of_birth YYYY-MM-DD, from the NIN YYYY-MM-DD (field 3)
date_of_birth_source nin: NIDA cards print no date of birth; the NIN's first 8 digits are it card
card_type citizen, resident or refugee null
expiry_date YYYY-MM-DD, or null when the card prints none YYYY-MM-DD (field 4b)
residence absent Permanent place of residence (field 8)

Unread values are null. Names are upper case, as printed.

document

Field Meaning
type nida_id or tz_driving_licence
overall The verdict: pass, review or fail
checks Every check: id, status (pass, fail, warn, not_applicable, unverifiable) and a readable detail. See Check codes.
driving_licence Licences only: licence_number (field 5), reference_number (4d), issue_date (4a), expiry_date (4b), issuing_authority (4c), categories (9, for example ["A", "B"])
back Only when the back was read. See Back of the card.

The verdict:

  • pass: every check passed and, where the flow had them, the face matched and liveness passed.
  • review: nothing failed outright, but something is unverified or uncertain. Route it to a person.
  • fail: a check failed.

face

Field Meaning
verdict match, uncertain or no_match
liveness.passed true when the liveness check passed
score, threshold Numbers for your audit trail. verdict already applies them; do not apply your own cut-off.

fingerprints

Each accepted finger: code (NIDA's finger code: R or L for the hand, then a digit from 1 to 5), finger (spelled out, for example right_middle), format (wsq), ppi (500), width, height, capture (contactless or contact) and image_b64 (the WSQ file, base64). See Fingerprints for NIDA.

Versions and compatibility

  • New optional fields can appear in digid.kyc/1 at any time. The driving licence fields and document.back arrived this way. Ignore fields you do not know.
  • A NIDA document without a back is unchanged by those additions.
  • A change that could break a reader becomes digid.kyc/2.

Native Android and iOS

The native SDKs hand your app the engine result instead (finishJson() / finishJSON()). It has the same verdict (overall), checks and face match, with the card under card (NIDA), driving_licence or card_back, the licence status under licence (including licence_id and org_name), and liveness beside face. Customers who sign in can read its full field list in the full field reference.