curl -X POST "https://verification.didit.me/v3/database-validation/" \
-H "x-api-key: YOUR_API_KEY" \
-F "issuing_state=NGA" \
-F "services=nga_bank_verification_number" \
-F "vendor_data=user-1234" \
-F "bvn=11111111111" \
-F "selfie=@./selfie.jpg"
{
"request_id": "req_01H…",
"status": "Approved",
"issuing_state": "NGA",
"match_type": "full_match",
"validations": [
{
"outcome_code": "MATCH",
"service_id": "nga_bank_verification_number",
"service_name": "Nigeria Bank Verification Number (BVN)",
"source_data": {
"date_of_birth": "1990-01-01",
"first_name": "John",
"last_name": "Doe"
},
"validation": {
"identification_number": "full_match"
}
}
]
}
{
"request_id": "req_01H…",
"status": "Declined",
"issuing_state": "NGA",
"match_type": "no_match",
"validations": [
{
"outcome_code": "BIOMETRIC_NO_MATCH",
"service_id": "nga_bank_verification_number",
"service_name": "Nigeria Bank Verification Number (BVN)",
"source_data": {
"identification_number": "NO_MATCH"
},
"validation": {
"identification_number": "no_match"
}
}
]
}
{
"request_id": "req_01H…",
"status": "In Review",
"issuing_state": "NGA",
"match_type": null,
"validations": [
{
"outcome_code": "INCONCLUSIVE",
"service_id": "nga_bank_verification_number",
"service_name": "Nigeria Bank Verification Number (BVN)",
"source_data": {},
"validation": {}
}
]
}
{
"request_id": "req_01H…",
"status": "Declined",
"issuing_state": "NGA",
"match_type": "no_match",
"validations": [
{
"outcome_code": "DOCUMENT_NOT_FOUND",
"service_id": "nga_bank_verification_number",
"service_name": "Nigeria Bank Verification Number (BVN)",
"source_data": {
"identification_number": "NO_MATCH"
},
"validation": {
"identification_number": "no_match"
}
}
]
}
🇳🇬 Nigeria
Nigeria Bank Verification Number (BVN)
Verifies input data against the Nigerian Banking Industry database. Requires a selfie: the enrolment portrait held against the BVN is face-matched with it, and the record is only returned when the two are the same person. Authoritative real-time identity lookup for Nigeria. Real-time lookup, pay-per-call.
POST
/
v3
/
database-validation
/
curl -X POST "https://verification.didit.me/v3/database-validation/" \
-H "x-api-key: YOUR_API_KEY" \
-F "issuing_state=NGA" \
-F "services=nga_bank_verification_number" \
-F "vendor_data=user-1234" \
-F "bvn=11111111111" \
-F "selfie=@./selfie.jpg"
{
"request_id": "req_01H…",
"status": "Approved",
"issuing_state": "NGA",
"match_type": "full_match",
"validations": [
{
"outcome_code": "MATCH",
"service_id": "nga_bank_verification_number",
"service_name": "Nigeria Bank Verification Number (BVN)",
"source_data": {
"date_of_birth": "1990-01-01",
"first_name": "John",
"last_name": "Doe"
},
"validation": {
"identification_number": "full_match"
}
}
]
}
{
"request_id": "req_01H…",
"status": "Declined",
"issuing_state": "NGA",
"match_type": "no_match",
"validations": [
{
"outcome_code": "BIOMETRIC_NO_MATCH",
"service_id": "nga_bank_verification_number",
"service_name": "Nigeria Bank Verification Number (BVN)",
"source_data": {
"identification_number": "NO_MATCH"
},
"validation": {
"identification_number": "no_match"
}
}
]
}
{
"request_id": "req_01H…",
"status": "In Review",
"issuing_state": "NGA",
"match_type": null,
"validations": [
{
"outcome_code": "INCONCLUSIVE",
"service_id": "nga_bank_verification_number",
"service_name": "Nigeria Bank Verification Number (BVN)",
"source_data": {},
"validation": {}
}
]
}
{
"request_id": "req_01H…",
"status": "Declined",
"issuing_state": "NGA",
"match_type": "no_match",
"validations": [
{
"outcome_code": "DOCUMENT_NOT_FOUND",
"service_id": "nga_bank_verification_number",
"service_name": "Nigeria Bank Verification Number (BVN)",
"source_data": {
"identification_number": "NO_MATCH"
},
"validation": {
"identification_number": "no_match"
}
}
]
}
Verifies input data against the Nigerian Banking Industry database. Requires a selfie: the enrolment portrait held against the BVN is face-matched with it, and the record is only returned when the two are the same person. Didit exposes this service through
POST /v3/database-validation/ so you can verify the submitted data against the authoritative source and receive normalized match results.
Coverage
- Coverage: ~ 100%
- Country: Nigeria
- Service ID:
nga_bank_verification_number - Data domain: Financial
- Category: Banking
Inputs
| Field | Required | Example |
|---|---|---|
bvn | Yes | 11111111111 |
selfie | Yes | @./selfie.jpg |
first_name | No | John |
last_name | No | Doe |
date_of_birth | No | 1990-01-01 |
vendor_data | No | user-1234 |
- Required inputs:
bvn,selfie - Optional inputs:
first_name,last_name,date_of_birth,vendor_data - Consent: Not required
- Workflow availability: Available in workflow with field mapping
- Coverage: ~ 100%
- Price: $0.35 per successful query
bvn is not printed on an identity document, so no step produces it on its own. Collect it from a Questionnaire answer, a Document AI extraction field, or a value you send when you create the session, and map it on the Database Validation step. Until it is mapped the workflow editor shows this service disabled and names the missing input; at run time a missing input means the check is skipped before any query, so you are never billed for a database that could not be asked.
Body parameters
string
default:"NGA"
required
ISO 3166-1 alpha-3 country code for this database service.Example:
NGAstring
default:"nga_bank_verification_number"
required
Array containing this service ID. Pinning the service keeps the request scoped to this exact database.Example:
nga_bank_verification_numberstring
default:"11111111111"
required
Bank Verification Number.Example:
11111111111file
required
Selfie image file to upload for biometric database validation. Accepted formats: JPEG, PNG, or WebP.Example:
@./selfie.jpgstring
default:"John"
Given name to validate.Example:
Johnstring
default:"Doe"
Family name to validate.Example:
Doestring
default:"1990-01-01"
Date of birth in
YYYY-MM-DD format.Example: 1990-01-01string
default:"user-1234"
Your stable user reference for this person, such as your internal user ID. Didit uses it to link standalone checks to the same end user and reduce duplicate-detection noise.Example:
user-1234Input rules & validation notes
- Nigerian Bank Verification Number (exactly 11 digits)
bvnmust contain digits only; remove spaces, hyphens, and punctuation before sending the request.bvnmust be exactly 11 characters long.
How to call it
curl -X POST "https://verification.didit.me/v3/database-validation/" \
-H "x-api-key: YOUR_API_KEY" \
-F "issuing_state=NGA" \
-F "services=nga_bank_verification_number" \
-F "vendor_data=user-1234" \
-F "bvn=11111111111" \
-F "selfie=@./selfie.jpg"
Every successful call returns HTTP 200. The outcome_code field tells you what actually happened — distinguishing, for example, a real biometric mismatch (BIOMETRIC_NO_MATCH) from a selfie that could not be read (BIOMETRIC_IMAGE_UNUSABLE). The status shown is the default feature status; your configured Partial Match / No Match actions can override it.MATCH — The registry confirmed the identity and every checked field matched.{
"request_id": "req_01H…",
"status": "Approved",
"issuing_state": "NGA",
"match_type": "full_match",
"validations": [
{
"outcome_code": "MATCH",
"service_id": "nga_bank_verification_number",
"service_name": "Nigeria Bank Verification Number (BVN)",
"source_data": {
"date_of_birth": "1990-01-01",
"first_name": "John",
"last_name": "Doe"
},
"validation": {
"identification_number": "full_match"
}
}
]
}
BIOMETRIC_NO_MATCH — The face-match score was below the acceptance threshold - the selfie is not the same person as the registry photo.{
"request_id": "req_01H…",
"status": "Declined",
"issuing_state": "NGA",
"match_type": "no_match",
"validations": [
{
"outcome_code": "BIOMETRIC_NO_MATCH",
"service_id": "nga_bank_verification_number",
"service_name": "Nigeria Bank Verification Number (BVN)",
"source_data": {
"identification_number": "NO_MATCH"
},
"validation": {
"identification_number": "no_match"
}
}
]
}
INCONCLUSIVE — The registry could not determine whether the person matches - the result is genuinely uncertain (they may or may not be in the registry). This is NOT a no-match and NOT a technical image problem; no field is asserted, so match_type is null and the check is sent to review.{
"request_id": "req_01H…",
"status": "In Review",
"issuing_state": "NGA",
"match_type": null,
"validations": [
{
"outcome_code": "INCONCLUSIVE",
"service_id": "nga_bank_verification_number",
"service_name": "Nigeria Bank Verification Number (BVN)",
"source_data": {},
"validation": {}
}
]
}
DOCUMENT_NOT_FOUND — The submitted document number does not correspond to any record in the registry.{
"request_id": "req_01H…",
"status": "Declined",
"issuing_state": "NGA",
"match_type": "no_match",
"validations": [
{
"outcome_code": "DOCUMENT_NOT_FOUND",
"service_id": "nga_bank_verification_number",
"service_name": "Nigeria Bank Verification Number (BVN)",
"source_data": {
"identification_number": "NO_MATCH"
},
"validation": {
"identification_number": "no_match"
}
}
]
}
Returned data
The exact fields surfaced insource_data depend on what the registry returns. The generated example for nga_bank_verification_number currently documents this normalized shape:
date_of_birthfirst_namelast_name
Pricing & SLAs
Nigeria Bank Verification Number (BVN) queries are billed only when Didit receives a conclusive result from the validation source.- Per-call price: $0.35 USD.
- Billing: per successful query. You are not charged when the registry is unreachable, when required fields are missing, or when the request is rejected before reaching the source.
- Latency: typical p95 < 2 s.
- Availability: 99.9% per quarter on Didit’s side; downstream source availability varies by country and dataset.