Verity API · v1
API documentation
Verify Nigerian NIN and BVN records from your own application.
Overview
The Verity API is a JSON REST API over HTTPS. Every request is a POST with a JSON body; every response is JSON.
| Base URL |
|---|
https://verity.com.ng/api/v1 |
Each check needs the person’s consent. Send "consent": true only when the person has agreed to have their NIN or BVN verified, as required by the Nigeria Data Protection Act.
Authentication
Authenticate with an API key from the Developers page of a verified Verity business account (create a business account, complete Business verification, then create a key), sent as a Bearer token:
Authorization: Bearer vng_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxvng_test_…keys run in test mode: fixed sample results, never charged.vng_live_…keys run real checks and charge your wallet.- Keep keys on your server. Never put them in browser or mobile app code. Revoke a key immediately if it leaks.
Quick start
Create a test key, then run this. It returns a sample result without charging anything.
curl -X POST https://verity.com.ng/api/v1/verify/nin \
-H "Authorization: Bearer $VERITY_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "nin": "10000000001", "consent": true }'Verify a NIN
POST /verify/nin. Looks up a National Identification Number.
| Field | Type | Required | Description |
|---|---|---|---|
nin | string | Yes | The 11-digit NIN. |
consent | boolean | Yes | Must be true: the person agreed to this check. |
curl -X POST https://verity.com.ng/api/v1/verify/nin \
-H "Authorization: Bearer $VERITY_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "nin": "12345678901", "consent": true }'Verify a BVN
POST /verify/bvn. Looks up a Bank Verification Number.
| Field | Type | Required | Description |
|---|---|---|---|
bvn | string | Yes | The 11-digit BVN. |
consent | boolean | Yes | Must be true: the person agreed to this check. |
curl -X POST https://verity.com.ng/api/v1/verify/bvn \
-H "Authorization: Bearer $VERITY_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "bvn": "22222222222", "consent": true }'Response
A successful check returns 200:
{
"status": "verified",
"mode": "test",
"type": "NIN",
"reference": "test_5f1c9a0e2b7d43aa91c2",
"charged": { "amount": 0, "currency": "NGN" },
"data": {
"idNumber": "10000000001",
"firstName": "Ada",
"middleName": "Test",
"lastName": "Okafor",
"fullName": "Ada Test Okafor",
"dateOfBirth": "1994-03-12",
"gender": "Female",
"phone": "08000000000",
"photo": null
},
"requestId": "req_5f1c9a0e2b7d43aa91c2e8f0"
}| Field | Description |
|---|---|
status | Always verified on success. |
mode | test or live, matching the key used. |
reference | Verity’s reference for this check. Live references also appear in your verification history. |
charged | What this check cost, in naira. Always 0 in test mode. |
data | The identity record. Fields the source doesn’t provide are null. photo is a base64 JPEG when available. |
requestId | Also sent as the X-Request-Id header. Quote it when contacting support. |
Test mode
Requests made with a test key never reach the identity provider and are never charged. Use these numbers:
| Endpoint | Number | Result |
|---|---|---|
/verify/nin | 10000000001 | 200 verified (sample record) |
/verify/nin | 10000000000 | 404 not_found |
/verify/bvn | 20000000001 | 200 verified (sample record) |
/verify/bvn | 20000000000 | 404 not_found |
Any other valid number returns 404 not_found in test mode. Validation, consent and authentication errors behave exactly as in live mode.
Billing
Live checks are paid from your Verity wallet, the same wallet as dashboard checks.
| Check | Price per check |
|---|---|
| NIN | ₦150.00 |
| BVN | ₦150.00 |
The fee is reserved when the check starts. If no record is found or the identity service fails, it’s refunded automatically. If your balance is too low the request fails with 402 insufficient_balance and nothing is charged.
Errors
Errors use standard HTTP status codes and a JSON body with a stable code you can branch on:
{
"error": {
"code": "insufficient_balance",
"message": "Your Verity wallet doesn't cover this check. Top up from the dashboard."
},
"requestId": "req_9b2e41d0c3a84f17b6aa0c51"
}| Status | Code | Meaning | Charged? |
|---|---|---|---|
| 400 | invalid_request | The number is missing or isn’t 11 digits. | No |
| 401 | unauthorized | The API key is missing, invalid or revoked. | No |
| 402 | insufficient_balance | Your wallet doesn’t cover the check. | No |
| 403 | forbidden | The key’s account isn’t allowed to use the API. | No |
| 404 | not_found | No record exists for that number. | No (refunded) |
| 422 | consent_required | consent wasn’t true. | No |
| 429 | rate_limited | Too many requests; slow down and retry. | No |
| 502 | provider_error | The identity service failed; retry shortly. | No (refunded) |
| 503 | service_unavailable | Live verification is temporarily unavailable. | No |
Rate limits
Each key can make 60 requests per minute. Over that you’ll get 429 rate_limited; wait a few seconds and retry. Need more? Email support@verity.com.ng.