How it works
- Choose the appropriate verification type for your use case
- Send a POST request with the required identifier (BVN, NIN, etc.)
- 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-KeyheaderX-Numero-Signatureheader (request signature)
X-Numero-Api-Key.
Idempotency
All verification POST endpoints accept an optionalidempotencyKey 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.
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.