Skip to main content
Verify customer identities using a wide range of Nigerian and international identity documents. All verification endpoints support idempotency to prevent duplicate charges.

How it works

  1. Choose the appropriate verification type for your use case
  2. Send a POST request with the required identifier (BVN, NIN, etc.)
  3. Receive a normalized result with the verification data

Available verification types

Identity

Business

Financial

Phone

Credit

History

Authentication

All verification POST endpoints require:
  • X-Numero-Api-Key header
  • X-Numero-Signature header (request signature)
GET endpoints (history, details) only require X-Numero-Api-Key.

Idempotency

All verification POST endpoints accept an optional idempotencyKey parameter. If you send the same idempotencyKey twice, the second request will return the cached result without charging you again.

Standard response format

All verification endpoints return this structure:

Reading normalizedResult

normalizedResult is a flat map of the data the provider returned. Read it with these four rules in mind — they apply to every verification type. 1. A field can be null, and null is an answer. We return every field the provider sends, including the ones it has no value for. "email": null means the source holds no email for this subject — not that the field is unsupported. Handle null gracefully on every field; do not assume a value is present because it was present on a previous request.
2. The key set is stable per verification type. A field that is null for one subject and populated for another is present in both responses. You can code against a fixed shape and branch on null. 3. Every value is a string (or null) — numbers included. A credit score comes back as "658", not 658. Parse before doing arithmetic or comparisons. 4. Booleans are "True" / "False" — capitalised strings, not JSON booleans. Compare case-insensitively (value?.toLowerCase() === "true"), not against "true". 5. Nested data is flattened with dot and index notation. A nested object becomes "score.ficoScore.score": "658"; a list becomes "loans[0].amount". The key is the full path.