Verify NIN (enhanced)
curl --request POST \
--url https://api.sendpadi.com/api/v1/merchant/identity/nin/enhanced \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: <idempotency-key>' \
--header 'X-Api-Key: <api-key>' \
--header 'X-Signature: <x-signature>' \
--header 'X-Timestamp: <x-timestamp>' \
--data '
{
"nin": "22222222222"
}
'const options = {
method: 'POST',
headers: {
'X-Timestamp': '<x-timestamp>',
'X-Signature': '<x-signature>',
'Idempotency-Key': '<idempotency-key>',
'X-Api-Key': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({nin: '22222222222'})
};
fetch('https://api.sendpadi.com/api/v1/merchant/identity/nin/enhanced', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.sendpadi.com/api/v1/merchant/identity/nin/enhanced"
payload = { "nin": "22222222222" }
headers = {
"X-Timestamp": "<x-timestamp>",
"X-Signature": "<x-signature>",
"Idempotency-Key": "<idempotency-key>",
"X-Api-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"success": true,
"data": {
"transactionId": "idv_txn_001",
"reference": "IDV-abc",
"status": "completed",
"product": "nin_enhanced",
"idType": "nin",
"level": "enhanced",
"charge": {
"amount": 100,
"currency": "NGN"
},
"lookupType": "record",
"record": {
"idNumber": "22222222222",
"firstName": "John",
"middleName": "Michael",
"lastName": "Doe",
"fullName": "John Michael Doe",
"gender": "Male",
"dateOfBirth": "1990-01-01",
"phoneNumber": "08012345678",
"photo": "<base64>",
"email": "john.doe@example.com",
"address": "1 Example Street, Ikeja, Lagos",
"stateOfOrigin": "Lagos",
"nationality": "Nigeria"
},
"match": null
}
}{
"success": false,
"message": "Insufficient funds. NIN costs 70 NGN; your available balance is 0 NGN.",
"error": "INSUFFICIENT_BALANCE"
}{
"success": false,
"message": "No record was found for this NIN. The lookup was completed and has been charged.",
"error": "IDENTITY_NOT_FOUND",
"data": {
"transactionId": "idv_txn_001",
"reference": "IDV-abc",
"status": "completed",
"refunded": false,
"charge": {
"amount": 70,
"currency": "NGN"
}
}
}{
"success": false,
"message": "NIN verification is temporarily unavailable. Please try again shortly. You have not been charged.",
"error": "IDENTITY_PROVIDER_UNAVAILABLE",
"data": {
"transactionId": "idv_txn_001",
"reference": "IDV-abc",
"status": "failed",
"refunded": true,
"charge": {
"amount": 70,
"currency": "NGN"
}
}
}Identity
Verify NIN (enhanced)
Look up the full NIN record including photo when available. Charged from your NGN wallet when the provider answers. Scope: identity:write. Requires Idempotency-Key.
POST
/
api
/
v1
/
merchant
/
identity
/
nin
/
enhanced
Verify NIN (enhanced)
curl --request POST \
--url https://api.sendpadi.com/api/v1/merchant/identity/nin/enhanced \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: <idempotency-key>' \
--header 'X-Api-Key: <api-key>' \
--header 'X-Signature: <x-signature>' \
--header 'X-Timestamp: <x-timestamp>' \
--data '
{
"nin": "22222222222"
}
'const options = {
method: 'POST',
headers: {
'X-Timestamp': '<x-timestamp>',
'X-Signature': '<x-signature>',
'Idempotency-Key': '<idempotency-key>',
'X-Api-Key': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({nin: '22222222222'})
};
fetch('https://api.sendpadi.com/api/v1/merchant/identity/nin/enhanced', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.sendpadi.com/api/v1/merchant/identity/nin/enhanced"
payload = { "nin": "22222222222" }
headers = {
"X-Timestamp": "<x-timestamp>",
"X-Signature": "<x-signature>",
"Idempotency-Key": "<idempotency-key>",
"X-Api-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"success": true,
"data": {
"transactionId": "idv_txn_001",
"reference": "IDV-abc",
"status": "completed",
"product": "nin_enhanced",
"idType": "nin",
"level": "enhanced",
"charge": {
"amount": 100,
"currency": "NGN"
},
"lookupType": "record",
"record": {
"idNumber": "22222222222",
"firstName": "John",
"middleName": "Michael",
"lastName": "Doe",
"fullName": "John Michael Doe",
"gender": "Male",
"dateOfBirth": "1990-01-01",
"phoneNumber": "08012345678",
"photo": "<base64>",
"email": "john.doe@example.com",
"address": "1 Example Street, Ikeja, Lagos",
"stateOfOrigin": "Lagos",
"nationality": "Nigeria"
},
"match": null
}
}{
"success": false,
"message": "Insufficient funds. NIN costs 70 NGN; your available balance is 0 NGN.",
"error": "INSUFFICIENT_BALANCE"
}{
"success": false,
"message": "No record was found for this NIN. The lookup was completed and has been charged.",
"error": "IDENTITY_NOT_FOUND",
"data": {
"transactionId": "idv_txn_001",
"reference": "IDV-abc",
"status": "completed",
"refunded": false,
"charge": {
"amount": 70,
"currency": "NGN"
}
}
}{
"success": false,
"message": "NIN verification is temporarily unavailable. Please try again shortly. You have not been charged.",
"error": "IDENTITY_PROVIDER_UNAVAILABLE",
"data": {
"transactionId": "idv_txn_001",
"reference": "IDV-abc",
"status": "failed",
"refunded": true,
"charge": {
"amount": 70,
"currency": "NGN"
}
}
}Part of Identity. List prices first with List products. Live keys debit your NGN wallet when the provider answers (found or not found). Provider-down errors are refunded.
1
Confirm price
GET /api/v1/merchant/identity/products → copy price for nin_enhanced. Skip products where available is false.2
Verify
The sample body is the minimum:
nin only. That returns the full record. Optionally send firstName, middleName, lastName, dateOfBirth, phoneNumber if you also want a match object.lookupType is record. Returns the basic fields plus email, address, and enrollment details when the provider has them. record.photo is raw base64 when present. match is null unless you sent match fields.
Sandbox (test keys): any 11-digit number returns a sample payload and does not debit your wallet. All zeros (
00000000000) returns IDENTITY_NOT_FOUND.Authorizations
API key id (sp_test_… / sp_live_…)
Headers
Unix time in seconds
HMAC-SHA256 signature
UUID. Required on money-moving writes.
Body
application/json
11-digit NIN. Digits only.
Optional. Compared with the record and returned in match.
Optional. Compared with the record and returned in match.
Optional. Compared with the record and returned in match.
Optional. YYYY-MM-DD or DD-MM-YYYY. Compared with the record.
Optional. Compared with the record using the last 10 digits.
Response
OK
The response is of type object.

