Background checks
Police clearance (certificate of good conduct) verification against the DCI portal.
Verifies a DCI police clearance (certificate of good conduct) against the DCI portal, using its reference number and the holder's ID number. Returns the verdict, holder name, issue and expiry dates (valid one year from issue) and any recorded offences. found: false with reason CERTIFICATE_NOT_FOUND or ID_MISMATCH is DCI's own answer. Checks can take up to a minute.
Price: set by your bundle; one charge per call. "Not found" answers (result.found: false) are charged. Source failures return 502 and are refunded.
Try it: choose a scenario from the example menu under the code sample and press Test Request. Paste your test key into Authentication in the window that opens (it is remembered); test keys return sandbox sample data, free.
ApiKeyAuthorizationBearer <token>Your API key. sk_test_… keys use the sandbox (sample data, free); sk_live_… keys query the real sources and are charged.
Idempotency-Key?stringMakes retries safe: a repeat with the same key and body returns the original verification without charging again. Up to 255 characters.
length <= 255application/json- body
refNumber*stringReference number printed on the certificate.
^PCC-[A-Z0-9]{6,12}$idNumber*stringNational ID number of the certificate holder.
^\d{6,10}$Verification completed; see result.
application/json- response
One verification. Returned by every verification API, by GET /v1/verifications/{id}, and in webhooks.
id*stringUnique id; use it to fetch the verification again.
api*stringThe verification API that was called, e.g. identity.national-id.
status*stringCOMPLETED includes "not found" answers; FAILED means the source failed and the charge was refunded.
"PENDING""COMPLETED""FAILED"environment*stringTEST for test keys (sandbox data), LIVE for live keys.
"LIVE""TEST"result*|The answer, specific to each API (see its examples). Always has found: false when the source holds no record.
error*|Set when status is FAILED.
cost*stringAmount charged in KES, as a decimal string. "0" for test keys and failed verifications.
latencyMs?|Time the source took to answer, in milliseconds.
createdAt*stringdate-timecompletedAt?|date-timecurl -X POST 'https://restapi.nilinde.com/v1/verifications/background.police-clearance' \ -H 'Idempotency-Key: 6f1c2a90-order-1042' \ -H 'Content-Type: application/json' \ -d '{ "refNumber": "PCC-6QSLJEYKG", "idNumber": "12345678"}'{ "id": "cmhd2k7q80001s60h3x9f2a1b", "api": "background.police-clearance", "status": "COMPLETED", "environment": "LIVE", "result": { "found": true, "refNumber": "PCC-6QSLJEYKG", "certificate": { "verdict": "VALID", "valid": true, "holderName": "JANE WANJIKU DOE", "issuedOn": "2026-02-10, 09:14:03", "expiresOn": "2027-02-10", "status": "Approved", "offencesRecorded": false, "offenceCount": "NIL", "offences": [] } }, "error": null, "cost": "50", "latencyMs": 412, "createdAt": "2026-10-30T09:15:02.118Z", "completedAt": "2026-10-30T09:15:02.530Z"}