← Home

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_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  • vng_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.

FieldTypeRequiredDescription
ninstringYesThe 11-digit NIN.
consentbooleanYesMust 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.

FieldTypeRequiredDescription
bvnstringYesThe 11-digit BVN.
consentbooleanYesMust 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"
}
FieldDescription
statusAlways verified on success.
modetest or live, matching the key used.
referenceVerity’s reference for this check. Live references also appear in your verification history.
chargedWhat this check cost, in naira. Always 0 in test mode.
dataThe identity record. Fields the source doesn’t provide are null. photo is a base64 JPEG when available.
requestIdAlso 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:

EndpointNumberResult
/verify/nin10000000001200 verified (sample record)
/verify/nin10000000000404 not_found
/verify/bvn20000000001200 verified (sample record)
/verify/bvn20000000000404 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.

CheckPrice 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"
}
StatusCodeMeaningCharged?
400invalid_requestThe number is missing or isn’t 11 digits.No
401unauthorizedThe API key is missing, invalid or revoked.No
402insufficient_balanceYour wallet doesn’t cover the check.No
403forbiddenThe key’s account isn’t allowed to use the API.No
404not_foundNo record exists for that number.No (refunded)
422consent_requiredconsent wasn’t true.No
429rate_limitedToo many requests; slow down and retry.No
502provider_errorThe identity service failed; retry shortly.No (refunded)
503service_unavailableLive 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.