IdentifyOrg API Documentation
The IdentifyOrg API is organised around REST. It accepts JSON request bodies, returns JSON responses, and uses standard HTTP response codes. All endpoints are versioned under /v1.
https://api.identifyorg.com/v1Authentication
Authenticate every request with your API key in the X-IdentifyOrg-Key header. Test keys are prefixed io_test_ and live keys io_live_. Test keys return realistic sandbox data and never charge your balance. Create an account to get your keys.
Your first verification
Verify a BVN with a single request:
curl -X POST https://api.identifyorg.com/v1/verify/bvn \
-H "X-IdentifyOrg-Key: io_test_xxxx" \
-H "Content-Type: application/json" \
-d '{
"bvn": "12345678901",
"first_name": "Adaeze",
"last_name": "Okafor"
}'A successful response looks like this:
{
"id": "ver_01hxyz...",
"type": "bvn",
"status": "success",
"match": true,
"confidence_score": 98,
"data": {
"full_name": "Adaeze N. Okafor",
"date_of_birth": "1992-04-15",
"phone": "+2348012345678",
"gender": "female"
},
"created_at": "2026-07-02T10:24:00Z"
}Sync vs async
BVN, NIN and FRSC checks are synchronous — the result comes back in the same request. Document verification, face match and some liveness checks are asynchronous: the API returns a job_id immediately, and you either poll GET /v1/jobs/{id} or receive the result on your webhook endpoint.
Errors
IdentifyOrg uses conventional HTTP status codes and returns a structured error object:
{
"error": {
"code": "insufficient_balance",
"message": "Your balance is too low for this verification. Top up to continue.",
"status": 402
}
}| Status | Meaning |
|---|---|
| 200 | Success — verification completed. |
| 202 | Accepted — async job queued; poll or await webhook. |
| 400 | Bad request — invalid payload or malformed identifier. |
| 401 | Unauthorised — missing or invalid API key. |
| 402 | Payment required — insufficient credit balance. |
| 404 | Not found — resource or job does not exist. |
| 429 | Rate limited — too many requests; back off and retry. |
| 5xx | Server error — safe to retry with the same idempotency key. |
Idempotency
Pass an Idempotency-Key header on any POST request to guarantee you are never charged twice for the same verification, even if you retry after a network failure.
