Dpaverify Docs
API ReferenceVerification APIs

Background checks

Police clearance (certificate of good conduct) verification against the DCI portal.

POST
/v1/verifications/background.police-clearance

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.

Authorization

ApiKey
headerAuthorizationBearer <token>

Your API key. sk_test_… keys use the sandbox (sample data, free); sk_live_… keys query the real sources and are charged.

Header Parameters

Idempotency-Key?string

Makes retries safe: a repeat with the same key and body returns the original verification without charging again. Up to 255 characters.

Lengthlength <= 255

Request Body

application/json
  1. body
refNumber*string

Reference number printed on the certificate.

Match^PCC-[A-Z0-9]{6,12}$
idNumber*string

National ID number of the certificate holder.

Match^\d{6,10}$

Response Body

Verification completed; see result.

application/json
  1. response

One verification. Returned by every verification API, by GET /v1/verifications/{id}, and in webhooks.

id*string

Unique id; use it to fetch the verification again.

api*string

The verification API that was called, e.g. identity.national-id.

status*string

COMPLETED includes "not found" answers; FAILED means the source failed and the charge was refunded.

Value in"PENDING""COMPLETED""FAILED"
environment*string

TEST for test keys (sandbox data), LIVE for live keys.

Value in"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*string

Amount charged in KES, as a decimal string. "0" for test keys and failed verifications.

latencyMs?|

Time the source took to answer, in milliseconds.

createdAt*string
Formatdate-time
completedAt?|
Formatdate-time
curl -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"}'
Example Response
{  "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"}