BVN Verification
Parents must verify their BVN before credit assessment or loan submission. Skip
this entirely if login/SSO already returned isBvnVerified: true.
Use the same sessionId from step 1 in steps 2 and 3. Use the same bvn
in steps 1 and 3.
Non-production testing: when the API isn’t running in production mode,
Initiate still returns a real session; Choose OTP method doesn’t send a real SMS;
Confirm OTP accepts OTP 000000 only.
BVN 1: Initiate
POST /api/auth/bvn/initiateStarts the BVN lookup. Returns a sessionId and the available OTP delivery
methods (each with a method and a hint). Save sessionId for steps 2 and 3.
Headers
| Header | Value |
|---|---|
Accept | application/json |
Authorization | Bearer {parentAccessToken} |
Content-Type | application/json |
Request body
| Field | Description |
|---|---|
bvn | The parent’s 11-digit BVN. |
{
"bvn": "22222222222"
}Response 200
{
"success": true,
"message": "BVN Lookup successfully initiated.",
"data": {
"sessionId": "7V9JFeOKlO6hV1MQxz9g",
"methods": [
{
"method": "phone",
"hint": "Sms with a verification code will be sent to phone 0810***0397"
},
{
"method": "alternate_phone",
"hint": "Sms with a verification code will be sent to your alternate phone number"
}
]
},
"errors": [],
"statusCode": 200
}| Field | Description |
|---|---|
sessionId | Carry this into BVN 2 and BVN 3. |
methods | Where an OTP can be sent, each has a method key (phone, alternate_phone, …) and a human-readable hint. |
Try it
BVN 2: Choose OTP method
POST /api/auth/bvn/verify-methodSends the OTP via the chosen method (from step 1’s methods list, phone or
alternate_phone).
Headers
| Header | Value |
|---|---|
Accept | application/json |
Authorization | Bearer {parentAccessToken} |
Content-Type | application/json |
Request body
| Field | Description |
|---|---|
sessionId | From BVN 1: Initiate. |
method | phone or alternate_phone, from step 1’s methods. |
phoneNumber | Optional. |
{
"sessionId": "REPLACE_FROM_INITIATE",
"method": "phone",
"phoneNumber": null
}Response 200
{
"success": true,
"message": "OTP sent successfully.",
"data": {
"message": "OTP sent successfully."
},
"errors": [],
"statusCode": 200
}Try it
BVN 3: Confirm OTP
POST /api/auth/bvn/confirmConfirms the OTP and persists the BVN on the parent’s account. Use the same bvn
as BVN 1: Initiate.
Non-production: use OTP 000000.
Headers
| Header | Value |
|---|---|
Accept | application/json |
Authorization | Bearer {parentAccessToken} |
Content-Type | application/json |
Request body
| Field | Description |
|---|---|
sessionId | From BVN 1: Initiate. |
otp | The code delivered in step 2. |
bvn | Same BVN as step 1. |
bvnPhoneNumber | Optional. |
{
"sessionId": "REPLACE_FROM_INITIATE",
"otp": "000000",
"bvn": "22222222222",
"bvnPhoneNumber": "08012345678"
}Response 200
{
"success": true,
"message": "BVN verified successfully.",
"data": {
"message": "BVN verified successfully."
},
"errors": [],
"statusCode": 200
}