Overview

The AmbVerify API provides lightning-fast programmatic access to identity verification and modification services. Instant verification endpoints return data immediately, while Modification & Clearance services are processed asynchronously and return their final results via Webhooks.

All requests and responses use JSON. Amounts are in Nigerian Naira (NGN).

Want to integrate our API?

Fill out the form below to instantly generate a request to our integration team via WhatsApp.

Authentication

All endpoints (except Health Check) require a Bearer token in the Authorization header.

Authorization: Bearer YOUR_API_KEY

Your API key is a 64-character string provided by the AmbVerify admin team. Keep it secret — treat it like a password.

Base URL

https://ambverify.com.ng/api/v1

Error Handling

{
  "success": false,
  "error": "Description of what went wrong"
}

Core & Account

GET /api/v1/check_status.php

Query live status updates across all services using any primary identifier (tracking_id, nin, bvn, phone_number, ticket_id, or batch_id).

Query ParameterTypeRequirementDescription
tracking_idstringoptSearch IPE clearance, personalization, or mod tracking ID
ninstringoptSearch by 11-digit NIN (Validations & Modifications)
bvnstringoptSearch by 11-digit BVN (BVN Agency Mods)
phone_numberstringoptSearch by 11-digit phone number (BVN Retrieval)
ticket_idstringoptSearch by 8-digit BVN CRM ticket ID
batch_idstringoptSearch an entire batch submission
Example Status Query
curl -X GET "https://ambverify.com.ng/api/v1/check_status.php?tracking_id=WYZ123456789" \
  -H "Authorization: Bearer YOUR_API_KEY"
<?php
$ch = curl_init('https://ambverify.com.ng/api/v1/check_status.php?tracking_id=WYZ123456789');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer YOUR_API_KEY'
    ]
]);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
?>
const axios = require('axios');

axios.get('https://ambverify.com.ng/api/v1/check_status.php?tracking_id=WYZ123456789', {
    headers: { 'Authorization': 'Bearer YOUR_API_KEY' }
}).then(res => console.log(res.data))
  .catch(err => console.error(err.response ? err.response.data : err));
import requests

url = "https://ambverify.com.ng/api/v1/check_status.php"
headers = { "Authorization": "Bearer YOUR_API_KEY" }
params = { "tracking_id": "WYZ123456789" }

response = requests.get(url, headers=headers, params=params)
print(response.json())
Status Response 200 OK
{
  "success": true,
  "count": 1,
  "data": [
    {
      "service": "ipe_clearance",
      "id": 1201,
      "tracking_id": "WYZ123456789",
      "status": "Successful",
      "reply": "Cleared successfully",
      "nin": "12345678901",
      "created_at": "2026-09-27 10:15:30"
    }
  ]
}
GET /api/v1/wallet.php

Check your real-time API wallet balance and dedicated virtual bank account details for instant auto-funding.

curl -X GET "https://ambverify.com.ng/api/v1/wallet.php" \
  -H "Authorization: Bearer YOUR_API_KEY"
<?php
$ch = curl_init('https://ambverify.com.ng/api/v1/wallet.php');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer YOUR_API_KEY']
]);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
?>
const axios = require('axios');

axios.get('https://ambverify.com.ng/api/v1/wallet.php', {
    headers: { 'Authorization': 'Bearer YOUR_API_KEY' }
}).then(res => console.log(res.data))
  .catch(err => console.error(err.response ? err.response.data : err));
import requests

headers = {"Authorization": "Bearer YOUR_API_KEY"}
response = requests.get("https://ambverify.com.ng/api/v1/wallet.php", headers=headers)
print(response.json())
Success Response 200 OK
{
  "success": true,
  "wallet_balance": 48500.00,
  "currency": "NGN",
  "virtual_account": {
    "account_number": "6615023553",
    "account_name": "AMB - Dev Solutions",
    "bank_name": "PALMPAY"
  }
}
GET /api/v1/prices.php

Fetch the current API pricing for all services, automatically reflecting any custom discounts applied to your account.

Success Response 200 OK
{
  "success": true,
  "currency": "NGN",
  "services": {
    "ipe_clearance": {
      "types": [
        { "validation_type": "IPE Clearance", "price": 400.00 },
        { "validation_type": "HIT Clearance", "price": 900.00 }
      ]
    },
   "nin_validation": {
      "types": [
        { "validation_type": "No Record Found", "price": 400.00 },
        { "validation_type": "Photographic error", "price": 400.00 }
      ]
    },
    "tin_verification": {
      "types": [
        { "validation_type": "TIN ID (Individual)", "price": 300.00 },
        { "validation_type": "TIN Cert (Individual)", "price": 350.00 },
        { "validation_type": "TIN ID (Company)", "price": 300.00 },
        { "validation_type": "TIN Cert (Company)", "price": 350.00 }
      ]
    }
  }
}
GET /api/v1/status.php

Public endpoint — no authentication required. Use this to monitor gateway uptime and server readiness.

curl -X GET "https://ambverify.com.ng/api/v1/status.php"
<?php
$response = file_get_contents('https://ambverify.com.ng/api/v1/status.php');
echo $response;
?>
const axios = require('axios');
axios.get('https://ambverify.com.ng/api/v1/status.php')
  .then(res => console.log(res.data));
import requests
print(requests.get("https://ambverify.com.ng/api/v1/status.php").json())
Response 200 OK
{
  "status": "ok",
  "version": "1.0",
  "service": "AmbVerify API"
}

Instant Verifications

These endpoints process requests instantly, returning the full JSON data and a PDF Slip link in the same response.

POST /api/v1/tin_verification.php

Instant Tax Identification Number (TIN) Verification & Certificate Retrieval for both Individuals (JTB) and Registered Corporate Entities (CAC).

TIN ID (Individual): ₦300.00 TIN Cert (Individual): ₦350.00 TIN ID (Company): ₦300.00 TIN Cert (Company): ₦350.00
Request Parameters
ParameterTypeRequirementDescription
type string req Target entity category: individual or company
format string opt Output format: id (TIN ID Card Slip) or certificate (Official Tax Certificate). Default is id.
id_number string req (individual) Applicant's 11-digit NIN or BVN
first_name string opt Applicant's First Name (as registered with NIMC/Bank)
last_name string opt Applicant's Last Name / Surname
dob string opt Format: YYYY-MM-DD
rc_number string req (company) CAC RC or BN Number (e.g. RC123456, BN654321)
company_type string opt company, business_name, incorporated_trustee, limited_partnership (default: company)
Example 1: Individual TIN ID Slip
{
  "type": "individual",
  "format": "id",
  "id_number": "12345678901",
  "first_name": "JOHN",
  "last_name": "DOE",
  "dob": "1990-05-15"
}
Example 2: Corporate Official TIN Certificate
{
  "type": "company",
  "format": "certificate",
  "rc_number": "RC123456",
  "company_type": "company"
}
Success Response 200 OK
{
  "success": true,
  "message": "TIN verification successful.",
  "type": "company",
  "amount_charged": 350.00,
  "data": {
    "tax_id": "2301928374650",
    "name": "ACME ENTERPRISES NIGERIA",
    "id_number": "BN1029384",
    "registration_type": "Business Name",
    "status": "ACTIVE",
    "ticket_id": "TINCOM19283746501234",
    "pdf_url": "https://ambverify.com.ng/download_slip.php?id=270926-AB12CD34EF56&api=1"
  },
  "slip_url": "https://ambverify.com.ng/download_slip.php?id=270926-AB12CD34EF56&api=1"
}
Note: Slips and certificates are served directly via AmbVerify's encrypted high-speed gateway. If embedded in an iframe, the document transmits an AMB_SLIP_DOWNLOAD event containing the raw base64 string for direct client downloads.
POST /api/v1/nin_verification.php

V1 (Standard): Fully refundable upon record failure. Returns verified demographic citizen data and instant official PDF slip download links.

Basic: ₦110.00 Regular: ₦110.00 Standard: ₦110.00 Premium: ₦110.00 vNIN: ₦110.00
FieldTypeRequirementDescription
ninstringreq11-digit National Identification Number
slip_typestringoptbasic, regular, standard, premium, vnin (default: basic)
curl -X POST "https://ambverify.com.ng/api/v1/nin_verification.php" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"nin": "12345678901", "slip_type": "premium"}'
<?php
$ch = curl_init('https://ambverify.com.ng/api/v1/nin_verification.php');
curl_setopt_array($ch, [
    CURLOPT_POST           => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer YOUR_API_KEY',
        'Content-Type: application/json'
    ],
    CURLOPT_POSTFIELDS     => json_encode([
        'nin'       => '12345678901',
        'slip_type' => 'premium'
    ])
]);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
?>
const axios = require('axios');

axios.post('https://ambverify.com.ng/api/v1/nin_verification.php', {
    nin: '12345678901',
    slip_type: 'premium'
}, {
    headers: {
        'Authorization': 'Bearer YOUR_API_KEY',
        'Content-Type': 'application/json'
    }
}).then(res => console.log(res.data))
  .catch(err => console.error(err.response ? err.response.data : err));
import requests

url = "https://ambverify.com.ng/api/v1/nin_verification.php"
headers = {"Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json"}
payload = {"nin": "12345678901", "slip_type": "premium"}

print(requests.post(url, json=payload, headers=headers).json())
Success Response 200 OK
{
  "success": true,
  "report_id": "011026-F9B2C1",
  "allow_slip": 1,
  "slip_download_url": "https://ambverify.com.ng/download_slip.php?report_id=011026-F9B2C1&slip_type=nin_premium",
  "data": {
    "nin": "12345678901",
    "firstname": "KABIR",
    "surname": "SULAIMAN",
    "middlename": "DANLAMI",
    "dob": "1994-08-12",
    "gender": "Male",
    "telephoneno": "08012345678",
    "residence_address": "Plot 24 Innovation Drive, Garki II",
    "residence_town": "Abuja",
    "residence_lga": "Municipal",
    "residence_state": "FCT",
    "photo": "data:image/jpeg;base64,/9j/4AAQSkZJRg..."
  }
}
POST /api/v1/nin_v2.php

STRICT V2: High-priority channel. Wallet is charged upfront. Non-refundable on verification failure (auto-refunded on timeout only).

Basic: ₦100.00 Regular: ₦100.00 Standard: ₦100.00 Premium: ₦100.00 vNIN: ₦100.00
curl -X POST "https://ambverify.com.ng/api/v1/nin_v2.php" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"nin": "12345678901", "slip_type": "standard"}'
<?php
$ch = curl_init('https://ambverify.com.ng/api/v1/nin_v2.php');
curl_setopt_array($ch, [
    CURLOPT_POST           => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer YOUR_API_KEY',
        'Content-Type: application/json'
    ],
    CURLOPT_POSTFIELDS     => json_encode(['nin' => '12345678901', 'slip_type' => 'standard'])
]);
echo curl_exec($ch);
curl_close($ch);
?>
const axios = require('axios');
axios.post('https://ambverify.com.ng/api/v1/nin_v2.php', 
  { nin: '12345678901', slip_type: 'standard' },
  { headers: { 'Authorization': 'Bearer YOUR_API_KEY', 'Content-Type': 'application/json' } }
).then(res => console.log(res.data));
import requests
headers = {"Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json"}
print(requests.post("https://ambverify.com.ng/api/v1/nin_v2.php", json={"nin": "12345678901", "slip_type": "standard"}, headers=headers).json())
POST /api/v1/bvn_verification.php
Basic: ₦80.00 Plastic: ₦100.00 Advance: ₦100.00
FieldTypeRequirementDescription
bvnstringreq11-digit Bank Verification Number
slip_typestringoptbasic, plastic, advance (default: basic)
Example Request
curl -X POST "https://ambverify.com.ng/api/v1/bvn_verification.php" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "bvn": "22223333444",
    "slip_type": "basic"
  }'
<?php
$payload = [
    'bvn'       => '22223333444',
    'slip_type' => 'basic'
];

$ch = curl_init('https://ambverify.com.ng/api/v1/bvn_verification.php');
curl_setopt_array($ch, [
    CURLOPT_POST           => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer YOUR_API_KEY',
        'Content-Type: application/json'
    ],
    CURLOPT_POSTFIELDS     => json_encode($payload)
]);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
?>
const axios = require('axios');

axios.post('https://ambverify.com.ng/api/v1/bvn_verification.php', {
    bvn: '22223333444',
    slip_type: 'basic'
}, {
    headers: {
        'Authorization': 'Bearer YOUR_API_KEY',
        'Content-Type': 'application/json'
    }
}).then(res => console.log(res.data))
  .catch(err => console.error(err.response ? err.response.data : err));
import requests

url = "https://ambverify.com.ng/api/v1/bvn_verification.php"
headers = {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json"
}
payload = {
    "bvn": "22223333444",
    "slip_type": "basic"
}

response = requests.post(url, json=payload, headers=headers)
print(response.json())
Success Response 200 OK
{
  "success": true,
  "report_id": "011026-A1B2C3",
  "slip_download_url": "https://ambverify.com.ng/download_slip.php?report_id=011026-A1B2C3&slip_type=bvn_basic",
  "data": {
    "bvn": "22223333444",
    "firstname": "JOHN",
    "surname": "DOE",
    "middlename": "MICHAEL",
    "dob": "1990-05-15",
    "gender": "Male",
    "telephoneno": "08012345678",
    "enrollmentBank": "First Bank",
    "photo": "data:image/jpeg;base64,/9j/4AAQSkZJRg..."
  }
}
POST /api/v1/phone_verification.php

V1 (Standard): Fully refundable upon record failure. Verify NIN demographic records and generate official slips directly by phone number.

Basic: ₦110.00 Regular: ₦110.00 Standard: ₦110.00 Premium: ₦110.00 vNIN: ₦110.00
FieldTypeRequirementDescription
phonestringreq11-digit Nigerian phone number (e.g. 08012345678)
slip_typestringoptbasic, regular, standard, premium, vnin (default: basic)
curl -X POST "https://ambverify.com.ng/api/v1/phone_verification.php" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"phone": "08012345678", "slip_type": "standard"}'
<?php
$ch = curl_init('https://ambverify.com.ng/api/v1/phone_verification.php');
curl_setopt_array($ch, [
    CURLOPT_POST           => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer YOUR_API_KEY',
        'Content-Type: application/json'
    ],
    CURLOPT_POSTFIELDS     => json_encode(['phone' => '08012345678', 'slip_type' => 'standard'])
]);
echo curl_exec($ch);
curl_close($ch);
?>
const axios = require('axios');
axios.post('https://ambverify.com.ng/api/v1/phone_verification.php', 
  { phone: '08012345678', slip_type: 'standard' },
  { headers: { 'Authorization': 'Bearer YOUR_API_KEY', 'Content-Type': 'application/json' } }
).then(res => console.log(res.data));
import requests
headers = {"Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json"}
print(requests.post("https://ambverify.com.ng/api/v1/phone_verification.php", json={"phone": "08012345678", "slip_type": "standard"}, headers=headers).json())
Success Response 200 OK
{
  "success": true,
  "report_id": "011026-P8D2A3",
  "allow_slip": 1,
  "slip_download_url": "https://ambverify.com.ng/download_slip.php?report_id=011026-P8D2A3&slip_type=nin_standard",
  "data": {
    "nin": "72041234567",
    "firstname": "ZAINAB",
    "surname": "ALIYU",
    "telephoneno": "08012345678",
    "photo": "data:image/jpeg;base64,/9j/4AAQSkZJRg..."
  }
}
POST /api/v1/phone_v2.php

STRICT V2: High-priority channel. Wallet is charged upfront. Non-refundable on verification failure (auto-refunded on timeout only).

Basic: ₦100.00 Regular: ₦100.00 Standard: ₦100.00 Premium: ₦100.00 vNIN: ₦100.00
curl -X POST "https://ambverify.com.ng/api/v1/phone_v2.php" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"phone": "08012345678", "slip_type": "premium"}'
<?php
$ch = curl_init('https://ambverify.com.ng/api/v1/phone_v2.php');
curl_setopt_array($ch, [
    CURLOPT_POST           => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer YOUR_API_KEY',
        'Content-Type: application/json'
    ],
    CURLOPT_POSTFIELDS     => json_encode(['phone' => '08012345678', 'slip_type' => 'premium'])
]);
echo curl_exec($ch);
curl_close($ch);
?>
const axios = require('axios');
axios.post('https://ambverify.com.ng/api/v1/phone_v2.php', 
  { phone: '08012345678', slip_type: 'premium' },
  { headers: { 'Authorization': 'Bearer YOUR_API_KEY', 'Content-Type': 'application/json' } }
).then(res => console.log(res.data));
import requests
headers = {"Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json"}
print(requests.post("https://ambverify.com.ng/api/v1/phone_v2.php", json={"phone": "08012345678", "slip_type": "premium"}, headers=headers).json())
POST /api/v1/demo_verification.php

Perform demographic lookups using First Name, Last Name, Gender, and Date of Birth. If multiple citizens share the demographic parameters, an array of candidate profiles is returned.

Basic: ₦100.00 Regular: ₦100.00 Standard: ₦100.00 Premium: ₦100.00 vNIN: ₦100.00
FieldTypeRequirementDescription
first_namestringreqApplicant First Name (e.g. JOHN)
last_namestringreqApplicant Surname / Last Name (e.g. DOE)
genderstringreqm (Male) or f (Female)
dobstringreqFormat: YYYY-MM-DD or DD-MM-YYYY
slip_typestringoptbasic, regular, standard, premium, vnin (default: basic)
curl -X POST "https://ambverify.com.ng/api/v1/demo_verification.php" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "first_name": "JOHN",
    "last_name": "DOE",
    "gender": "m",
    "dob": "1990-05-15",
    "slip_type": "standard"
  }'
<?php
$payload = [
    'first_name' => 'JOHN',
    'last_name'  => 'DOE',
    'gender'     => 'm',
    'dob'        => '1990-05-15',
    'slip_type'  => 'standard'
];
$ch = curl_init('https://ambverify.com.ng/api/v1/demo_verification.php');
curl_setopt_array($ch, [
    CURLOPT_POST           => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer YOUR_API_KEY', 'Content-Type: application/json'],
    CURLOPT_POSTFIELDS     => json_encode($payload)
]);
echo curl_exec($ch);
curl_close($ch);
?>
const axios = require('axios');
axios.post('https://ambverify.com.ng/api/v1/demo_verification.php', {
    first_name: 'JOHN',
    last_name: 'DOE',
    gender: 'm',
    dob: '1990-05-15',
    slip_type: 'standard'
}, {
    headers: { 'Authorization': 'Bearer YOUR_API_KEY', 'Content-Type': 'application/json' }
}).then(res => console.log(res.data));
import requests
headers = {"Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json"}
payload = {"first_name": "JOHN", "last_name": "DOE", "gender": "m", "dob": "1990-05-15", "slip_type": "standard"}
print(requests.post("https://ambverify.com.ng/api/v1/demo_verification.php", json=payload, headers=headers).json())

Async & Modification Services

POST /api/v1/nin_validation.php
No Record Found: ₦400.00 Mod Validation: ₦400.00

Submit one or more NINs for manual validation. Wallet is charged immediately. You can track status via Webhooks or by Polling the GET endpoint.

FieldTypeRequirementDescription
ninsarrayreqArray of 11-digit NINs (Max 100)
validation_typestringreqNo Record Found, Photographic error, Modification validation, Bank validation, SIM validation
Example Submission Request
curl -X POST "https://ambverify.com.ng/api/v1/nin_validation.php" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "validation_type": "No Record Found",
    "nins": ["12345678901", "98765432101"]
  }'
<?php
$payload = [
    'validation_type' => 'No Record Found',
    'nins'            => ['12345678901', '98765432101']
];
$ch = curl_init('https://ambverify.com.ng/api/v1/nin_validation.php');
curl_setopt_array($ch, [
    CURLOPT_POST           => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer YOUR_API_KEY', 'Content-Type: application/json'],
    CURLOPT_POSTFIELDS     => json_encode($payload)
]);
echo curl_exec($ch);
curl_close($ch);
?>
const axios = require('axios');
axios.post('https://ambverify.com.ng/api/v1/nin_validation.php', {
    validation_type: 'No Record Found',
    nins: ['12345678901', '98765432101']
}, {
    headers: { 'Authorization': 'Bearer YOUR_API_KEY', 'Content-Type': 'application/json' }
}).then(res => console.log(res.data));
import requests
headers = {"Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json"}
payload = {"validation_type": "No Record Found", "nins": ["12345678901", "98765432101"]}
print(requests.post("https://ambverify.com.ng/api/v1/nin_validation.php", json=payload, headers=headers).json())
Status Polling Endpoint
GET https://ambverify.com.ng/api/v1/nin_validation.php?nin=12345678901
Authorization: Bearer YOUR_API_KEY
Status Response 200 OK
{
  "success": true,
  "data": {
    "request_id": 101,
    "batch_id": "A3F8C901",
    "nin": "12345678901",
    "validation_type": "No Record Found",
    "status": "Successful",
    "reply": "Validation record updated successfully.",
    "created_at": "2026-09-27 10:15:30"
  }
}
POST /api/v1/nin_modification.php
Name: ₦5,000.00 Phone: ₦5,000.00 Address: ₦5,000.00 DOB: ₦50,000.00 Name & Phone: ₦11,000.00 Name & DOB: ₦55,000.00

Submit an official manual request to modify NIMC NIN details. Our backend team processes the modification and uploads the verified slip documents.

Request Parameters (Always Required)
FieldTypeRequirementDescription
ninstringreq11-digit National Identification Number
modification_typestringreqname, phone, address, dob, name_phone, name_dob, dob_phone
Additional Parameters by Modification Type
TypeRequired Target FieldsNotes
name first_name, surname middle_name is optional
phone new_phone New 11-digit phone number to link
address address, state, lga, town New residential location details
dob new_dob, passport_photo_base64, affidavit_photo_base64 Date format: YYYY-MM-DD. Both images base64 encoded.
name_dob first_name, surname, new_dob, passport_photo_base64, affidavit_photo_base64 Combines Name and DOB fields
Example Request (Name Modification)
{
  "nin": "12345678901",
  "modification_type": "name",
  "first_name": "JOHN",
  "middle_name": "EMMANUEL",
  "surname": "DOE"
}
Submission Response 201 Created
{
  "success": true,
  "message": "NIN Modification request submitted successfully.",
  "batch_id": "A4D9F12B",
  "request_id": 503,
  "nin": "12345678901",
  "modification_type": "name",
  "amount_charged": 2500.00,
  "wallet_balance": 47500.00
}
GET /api/v1/nin_modification.php

Poll the status and download the verified modification documents (Picture 1 and Picture 2) using nin or request_id.

GET https://ambverify.com.ng/api/v1/nin_modification.php?nin=12345678901
Authorization: Bearer YOUR_API_KEY
Status Response 200 OK
{
  "success": true,
  "data": {
    "request_id": 503,
    "nin": "12345678901",
    "modification_type": "name",
    "status": "submitted_self_service",
    "status_label": "Completed",
    "admin_note": "Modification completed successfully.",
    "slip_url_1": "https://ambverify.com.ng/uploads/admin/final_6701a2b.pdf",
    "slip_url_2": "https://ambverify.com.ng/uploads/admin/final2_891bc3.jpg",
    "created_at": "2026-09-27 12:45:00"
  }
}
Automated Webhook Notification

When our team completes the job or marks it failed, your Webhook URL automatically receives a POST event:

{
  "event": "status_update",
  "service": "nin_modification",
  "nin": "12345678901",
  "request_id": 503,
  "status": "submitted_self_service",
  "reply": "Modification completed successfully.",
  "timestamp": "2026-09-27T13:10:00Z"
}
If a modification request cannot be processed and is marked failed, the fee is automatically refunded back to your API wallet.
POST /api/v1/ipe_clearance.php
IPE: ₦400.00 HIT: ₦900.00

Submit tracking IDs for Normal IPE or HIT Clearance processing. You can receive your final cleared NIN and status through Webhooks or by Polling the Status Check endpoint.

FieldTypeRequirementDescription
tracking_idsarrayreqArray of Tracking IDs (Max 100 per request)
clearance_typestringoptIPE (Normal Clearance) or HIT (HIT Clearance). Default is IPE.
Example Submission Request
{
  "clearance_type": "IPE",
  "tracking_ids": [
    "WYZ123456789",
    "ABC987654321"
  ]
}
Submission Response 201 Created

If an item clears immediately upon submission, its status will be Successful with the resolved 11-digit NIN. Otherwise, it queues as Pending.

{
  "success": true,
  "batch_id": "8F2B1A9C",
  "api_request_id": 104,
  "items_submitted": 2,
  "clearance_type": "IPE",
  "amount_charged": 6000.00,
  "wallet_balance": 44000.00,
  "items": [
    {
      "id": 1201,
      "tracking_id": "WYZ123456789",
      "status": "Successful",
      "reply": "12345678901",
      "nin": "12345678901"
    },
    {
      "id": 1202,
      "tracking_id": "ABC987654321",
      "status": "Pending",
      "reply": "",
      "nin": ""
    }
  ]
}
GET /api/v1/ipe_clearance.php • /api/v1/ipe_status.php

Query the status of any clearance request at any time using your tracking_id, request_id, or batch_id.

GET https://ambverify.com.ng/api/v1/ipe_clearance.php?tracking_id=WYZ123456789
Authorization: Bearer YOUR_API_KEY
Status Response 200 OK
{
  "success": true,
  "data": {
    "id": 1201,
    "api_request_id": 104,
    "tracking_id": "WYZ123456789",
    "clearance_type": "IPE",
    "status": "Successful",
    "reply": "Cleared successfully",
    "nin": "12345678901",
    "reply_tid": "12345678901",
    "amount": 3000.00,
    "created_at": "2026-09-27 10:15:30"
  }
}
Both nin and reply_tid contain the resolved 11-digit NIN. If a request is marked Failed, the service fee is automatically refunded to your wallet.
POST /api/v1/bvn_retrieval.php
Retrieval: ₦800.00

Submit applicant details to retrieve a lost BVN. Results are delivered either via Webhook upon completion or by polling the Status Endpoint.

FieldTypeRequirementDescription
first_namestringreqApplicant First Name (e.g. JOHN)
last_namestringreqApplicant Surname / Last Name (e.g. DOE)
phone_numberstringreq11-digit linked phone number (e.g. 08012345678)
Example Submission Request
curl -X POST "https://ambverify.com.ng/api/v1/bvn_retrieval.php" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "first_name": "JOHN",
    "last_name": "DOE",
    "phone_number": "08012345678"
  }'
<?php
$payload = [
    'first_name'   => 'JOHN',
    'last_name'    => 'DOE',
    'phone_number' => '08012345678'
];

$ch = curl_init('https://ambverify.com.ng/api/v1/bvn_retrieval.php');
curl_setopt_array($ch, [
    CURLOPT_POST           => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer YOUR_API_KEY',
        'Content-Type: application/json'
    ],
    CURLOPT_POSTFIELDS     => json_encode($payload)
]);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
?>
const axios = require('axios');

axios.post('https://ambverify.com.ng/api/v1/bvn_retrieval.php', {
    first_name: 'JOHN',
    last_name: 'DOE',
    phone_number: '08012345678'
}, {
    headers: {
        'Authorization': 'Bearer YOUR_API_KEY',
        'Content-Type': 'application/json'
    }
}).then(res => console.log(res.data))
  .catch(err => console.error(err.response ? err.response.data : err));
import requests

url = "https://ambverify.com.ng/api/v1/bvn_retrieval.php"
headers = {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json"
}
payload = {
    "first_name": "JOHN",
    "last_name": "DOE",
    "phone_number": "08012345678"
}

response = requests.post(url, json=payload, headers=headers)
print(response.json())
Submission Response 201 Created
{
  "success": true,
  "message": "BVN retrieval request submitted successfully. Your request is now pending processing.",
  "data": {
    "status": "pending",
    "transaction_id": "8F2B1A9C",
    "first_name": "JOHN",
    "last_name": "DOE",
    "phone_number": "08012345678"
  }
}
GET / POST /api/v1/bvn_retrieval_status.php

Query status anytime using transaction_id or phone_number via GET or POST.

GET https://ambverify.com.ng/api/v1/bvn_retrieval_status.php?transaction_id=8F2B1A9C
Authorization: Bearer YOUR_API_KEY
Status Response 200 OK
{
  "success": true,
  "data": {
    "transaction_id": "8F2B1A9C",
    "request_id": 482,
    "status": "completed",
    "bvn_number": "22223333444",
    "bvn": "22223333444",
    "first_name": "JOHN",
    "last_name": "DOE",
    "phone_number": "08012345678",
    "message": "Cleared successfully.",
    "created_at": "2026-09-27 10:30:15"
  }
}
Automated Webhook Notification

When completed or rejected, your Webhook URL automatically receives:

{
  "event": "status_update",
  "service": "bvn_retrieval",
  "phone_number": "08012345678",
  "request_id": 482,
  "api_request_id": 105,
  "status": "Completed",
  "bvn_number": "22223333444",
  "bvn": "22223333444",
  "reply": "Cleared successfully.",
  "timestamp": "2026-09-27T10:45:00Z"
}
If a retrieval request is rejected (e.g. no BVN linked to phone), the service fee is automatically refunded to your wallet.
POST /api/v1/bvn_agency_modification.php

Submit Bank Verification Number modifications across any of our 7 supported Agency Banks. Status updates and resolution reports are returned via Webhooks or by Polling the GET endpoint.

Supported Agency Banks
Standard Agency First Bank Bank of Agric Heritage Bank NIBSS Microfinance Bank LAPO
Supported Modification Types
Name Only Date of Birth Only Phone Number Only Name and Date of Birth Date of Birth and Phone Number Name and Phone Number
Request Parameters
FieldTypeRequirementDescription
bank_typestringreqTarget bank: Standard Agency, First Bank, Bank of Agric, Heritage Bank, NIBSS, Microfinance Bank, LAPO
modification_typestringreqName Only, Date of Birth Only, Phone Number Only, Name and Date of Birth, Date of Birth and Phone Number, Name and Phone Number
bvnstringreq11-digit BVN to modify
ninstringreq11-digit linked National Identification Number
nin_slip_base64stringreqBase64 encoded NIN slip document (JPG, PNG, or PDF)
old_first_name / new_first_namestringoptOld and new first name (as applicable)
old_last_name / new_last_namestringoptOld and new surname (as applicable)
old_dob / new_dobstringoptFormat: YYYY-MM-DD (as applicable)
old_phone / new_phonestringopt11-digit phone numbers (as applicable)
Example Submission Request
curl -X POST "https://ambverify.com.ng/api/v1/bvn_agency_modification.php" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "target_bank": "First Bank",
    "modification_type": "Name and Date of Birth",
    "bvn": "22223333444",
    "nin": "12345678901",
    "old_first_name": "JOHN",
    "new_first_name": "JONATHAN",
    "old_last_name": "DOE",
    "new_last_name": "SMITH",
    "old_dob": "1990-05-15",
    "new_dob": "1992-06-20",
    "nin_slip_base64": "data:image/jpeg;base64,/9j/4AAQSkZJRg..."
  }'
<?php
$payload = [
    'target_bank'       => 'First Bank',
    'modification_type' => 'Name and Date of Birth',
    'bvn'               => '22223333444',
    'nin'               => '12345678901',
    'old_first_name'    => 'JOHN',
    'new_first_name'    => 'JONATHAN',
    'old_last_name'     => 'DOE',
    'new_last_name'     => 'SMITH',
    'old_dob'           => '1990-05-15',
    'new_dob'           => '1992-06-20',
    'nin_slip_base64'   => 'data:image/jpeg;base64,/9j/4AAQSkZJRg...'
];

$ch = curl_init('https://ambverify.com.ng/api/v1/bvn_agency_modification.php');
curl_setopt_array($ch, [
    CURLOPT_POST           => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer YOUR_API_KEY',
        'Content-Type: application/json'
    ],
    CURLOPT_POSTFIELDS     => json_encode($payload)
]);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
?>
const axios = require('axios');

const payload = {
    target_bank: 'First Bank',
    modification_type: 'Name and Date of Birth',
    bvn: '22223333444',
    nin: '12345678901',
    old_first_name: 'JOHN',
    new_first_name: 'JONATHAN',
    old_last_name: 'DOE',
    new_last_name: 'SMITH',
    old_dob: '1990-05-15',
    new_dob: '1992-06-20',
    nin_slip_base64: 'data:image/jpeg;base64,/9j/4AAQSkZJRg...'
};

axios.post('https://ambverify.com.ng/api/v1/bvn_agency_modification.php', payload, {
    headers: {
        'Authorization': 'Bearer YOUR_API_KEY',
        'Content-Type': 'application/json'
    }
}).then(res => console.log(res.data))
  .catch(err => console.error(err.response ? err.response.data : err));
import requests

url = "https://ambverify.com.ng/api/v1/bvn_agency_modification.php"
headers = {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json"
}
payload = {
    "target_bank": "First Bank",
    "modification_type": "Name and Date of Birth",
    "bvn": "22223333444",
    "nin": "12345678901",
    "old_first_name": "JOHN",
    "new_first_name": "JONATHAN",
    "old_last_name": "DOE",
    "new_last_name": "SMITH",
    "old_dob": "1990-05-15",
    "new_dob": "1992-06-20",
    "nin_slip_base64": "data:image/jpeg;base64,/9j/4AAQSkZJRg..."
}

response = requests.post(url, json=payload, headers=headers)
print(response.json())
Submission Response 201 Created
{
  "success": true,
  "message": "BVN Agency Modification request submitted successfully.",
  "data": {
    "request_id": 240,
    "batch_id": "D7E1B4C9",
    "bvn": "22223333444",
    "nin": "12345678901",
    "bank_type": "First Bank",
    "modification_type": "Name and Date of Birth",
    "status": "PENDING",
    "amount_charged": "4,500.00",
    "wallet_balance": "45,500.00"
  }
}
Status Polling Endpoint
GET https://ambverify.com.ng/api/v1/bvn_agency_modification.php?bvn=22223333444
Authorization: Bearer YOUR_API_KEY
Status Response 200 OK
{
  "success": true,
  "data": {
    "request_id": 240,
    "bvn": "22223333444",
    "nin": "12345678901",
    "modification_type": "First Bank - Name and Date of Birth",
    "status": "COMPLETED",
    "admin_note": "Modification treated successfully.",
    "report_file_url": "https://ambverify.com.ng/uploads/reports/report_17109283.jpg",
    "created_at": "2026-09-27 14:00:00"
  }
}
POST /api/v1/ipe_modification.php
Name: ₦700.00 Phone: ₦700.00 DOB: ₦700.00 Address: ₦700.00
FieldTypeRequirementDescription
tracking_idsarrayreqArray of Tracking IDs (Max 100 per request)
modification_typestringreqName, Address, Date of Birth, Phone
curl -X POST "https://ambverify.com.ng/api/v1/ipe_modification.php" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "modification_type": "Name",
    "tracking_ids": ["WYZ123456789"]
  }'
<?php
$payload = [
    'modification_type' => 'Name',
    'tracking_ids'      => ['WYZ123456789']
];
$ch = curl_init('https://ambverify.com.ng/api/v1/ipe_modification.php');
curl_setopt_array($ch, [
    CURLOPT_POST           => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer YOUR_API_KEY', 'Content-Type: application/json'],
    CURLOPT_POSTFIELDS     => json_encode($payload)
]);
echo curl_exec($ch);
curl_close($ch);
?>
const axios = require('axios');
axios.post('https://ambverify.com.ng/api/v1/ipe_modification.php', {
    modification_type: 'Name',
    tracking_ids: ['WYZ123456789']
}, {
    headers: { 'Authorization': 'Bearer YOUR_API_KEY', 'Content-Type': 'application/json' }
}).then(res => console.log(res.data));
import requests
headers = {"Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json"}
payload = {"modification_type": "Name", "tracking_ids": ["WYZ123456789"]}
print(requests.post("https://ambverify.com.ng/api/v1/ipe_modification.php", json=payload, headers=headers).json())
Status Polling Endpoint
GET https://ambverify.com.ng/api/v1/ipe_modification.php?tracking_id=WYZ123456789
Authorization: Bearer YOUR_API_KEY
POST /api/v1/special_validation.php

Submit one or more 11-digit NIN records for expedited manual special validation.

No Record Found: ₦700.00 Mod Validation: ₦700.00 Photography Error: ₦700.00 Bank Validation: ₦700.00
FieldTypeRequirementDescription
ninsarrayreqArray of 11-digit NINs (Max 100 per request)
validation_typestringreqNo record found, Mod validation, Photography error, Bank validation
Example Request (JSON Body)
{
  "validation_type": "No record found",
  "nins": [
    "12345678901",
    "09876543212"
  ]
}
Submission Response 201 Created
{
  "success": true,
  "batch_id": "E8C1D4A2",
  "api_request_id": 310,
  "items_submitted": 2,
  "validation_type": "No record found",
  "amount_charged": 1400.00,
  "wallet_balance": 48600.00,
  "items": [
    {
      "nin": "12345678901",
      "status": "New",
      "id": 1401
    }
  ]
}
GET /api/v1/special_validation.php

Query live status using nin or request_id.

GET https://ambverify.com.ng/api/v1/special_validation.php?nin=12345678901
Authorization: Bearer YOUR_API_KEY
Status Response 200 OK
{
  "success": true,
  "items": [
    {
      "id": 1401,
      "nin": "12345678901",
      "request_type": "No record found",
      "status": "Successful",
      "reply": "YUSUF MOHAMMED : 15-06-1995",
      "tracking_id": "TRK9823471029-Cr-new",
      "track": "TRK9823471029-Cr-new",
      "photo": "data:image/jpeg;base64,/9j/4AAQSkZJRg...",
      "image": "data:image/jpeg;base64,/9j/4AAQSkZJRg...",
      "created_at": "2026-09-28 12:00:00"
    }
  ],
  "data": {
    "id": 1401,
    "nin": "12345678901",
    "status": "Successful",
    "reply": "YUSUF MOHAMMED : 15-06-1995",
    "tracking_id": "TRK9823471029-Cr-new",
    "track": "TRK9823471029-Cr-new",
    "photo": "data:image/jpeg;base64,/9j/4AAQSkZJRg...",
    "image": "data:image/jpeg;base64,/9j/4AAQSkZJRg..."
  }
}
Note: When cleared by NIMC, items[0] delivers the verified applicant full name & DOB in reply, the NIMC reference in tracking_id, and the applicant's photograph in photo.
Developer Note: Unlike NIN Validation which returns data, Special Validation returns an array of objects inside items. Inspect items[0].status. Possible status values are:
  • New or Pending: Item is in queue awaiting manual clearance.
  • Successful: Request cleared. The resolution note is in items[0].reply.
  • Failed: Request rejected. Fee is automatically refunded to your API wallet.
POST /api/v1/personalization.php

Submit tracking IDs to retrieve verified citizen data and generate official personal slips. Supports instant database caching to eliminate redundant upstream billing.

Regular: ₦150.00 Standard: ₦150.00 Premium: ₦150.00 vNIN: ₦0.00
FieldTypeRequirementDescription
tracking_idsarrayreqArray of Tracking IDs (Max 100 per request)
slip_typestringoptregular, standard, premium, vnin (default: premium)
curl -X POST "https://ambverify.com.ng/api/v1/personalization.php" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "tracking_ids": ["WYZ12345678901"],
    "slip_type": "premium"
  }'
<?php
$payload = [
    'tracking_ids' => ['WYZ12345678901'],
    'slip_type'    => 'premium'
];
$ch = curl_init('https://ambverify.com.ng/api/v1/personalization.php');
curl_setopt_array($ch, [
    CURLOPT_POST           => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer YOUR_API_KEY', 'Content-Type: application/json'],
    CURLOPT_POSTFIELDS     => json_encode($payload)
]);
echo curl_exec($ch);
curl_close($ch);
?>
const axios = require('axios');
axios.post('https://ambverify.com.ng/api/v1/personalization.php', {
    tracking_ids: ['WYZ12345678901'],
    slip_type: 'premium'
}, {
    headers: { 'Authorization': 'Bearer YOUR_API_KEY', 'Content-Type': 'application/json' }
}).then(res => console.log(res.data));
import requests
headers = {"Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json"}
payload = {"tracking_ids": ["WYZ12345678901"], "slip_type": "premium"}
print(requests.post("https://ambverify.com.ng/api/v1/personalization.php", json=payload, headers=headers).json())
Check Status / Poll Result Endpoint
POST https://ambverify.com.ng/api/v1/personalization.php
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json

{
  "tracking_id": "WYZ12345678901",
  "action": "status"
}
POST /api/v1/bvn_crm.php
BVN CRM: ₦1,200.00

Submit BVN CRM queries to resolve failed enrollments. Track status updates and retrieve resolution documents via Webhooks or by Polling the GET endpoint.

FieldTypeRequirementDescription
ticket_idstringreqExactly 8 digits (e.g. 12345678)
batch_idstringreqExactly 7 digits (e.g. 1234567)
enrollment_screenshot_base64stringreqBase64 encoded screenshot of the enrollment error (JPG, PNG, or PDF)
Example Request
curl -X POST "https://ambverify.com.ng/api/v1/bvn_crm.php" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "ticket_id": "12345678",
    "batch_id": "1234567",
    "enrollment_screenshot_base64": "data:image/jpeg;base64,/9j/4AAQSkZJRg..."
  }'
<?php
$payload = [
    'ticket_id' => '12345678',
    'batch_id'  => '1234567',
    'enrollment_screenshot_base64' => 'data:image/jpeg;base64,/9j/4AAQSkZJRg...'
];

$ch = curl_init('https://ambverify.com.ng/api/v1/bvn_crm.php');
curl_setopt_array($ch, [
    CURLOPT_POST           => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer YOUR_API_KEY',
        'Content-Type: application/json'
    ],
    CURLOPT_POSTFIELDS     => json_encode($payload)
]);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
?>
const axios = require('axios');

axios.post('https://ambverify.com.ng/api/v1/bvn_crm.php', {
    ticket_id: '12345678',
    batch_id: '1234567',
    enrollment_screenshot_base64: 'data:image/jpeg;base64,/9j/4AAQSkZJRg...'
}, {
    headers: {
        'Authorization': 'Bearer YOUR_API_KEY',
        'Content-Type': 'application/json'
    }
}).then(res => console.log(res.data))
  .catch(err => console.error(err.response ? err.response.data : err));
import requests

url = "https://ambverify.com.ng/api/v1/bvn_crm.php"
headers = {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json"
}
payload = {
    "ticket_id": "12345678",
    "batch_id": "1234567",
    "enrollment_screenshot_base64": "data:image/jpeg;base64,/9j/4AAQSkZJRg..."
}

response = requests.post(url, json=payload, headers=headers)
print(response.json())
Submission Response 201 Created
{
  "success": true,
  "message": "BVN CRM request submitted successfully.",
  "data": {
    "request_id": 42,
    "reference": "CRM-92B8F4A1",
    "ticket_id": "12345678",
    "batch_id": "1234567",
    "status": "pending",
    "amount_charged": "1,000.00",
    "wallet_balance": "49,000.00"
  }
}
Status Polling Endpoint
GET https://ambverify.com.ng/api/v1/bvn_crm.php?reference=CRM-92B8F4A1
Authorization: Bearer YOUR_API_KEY
Status Response 200 OK
{
  "success": true,
  "data": {
    "request_id": 42,
    "reference": "CRM-92B8F4A1",
    "ticket_id": "12345678",
    "batch_id": "1234567",
    "status": "successful",
    "comment": "Ticket resolved successfully by NIBSS CRM.",
    "file_url": "https://ambverify.com.ng/uploads/crm_results/crm_resolution_42.pdf",
    "created_at": "2026-09-27 15:30:00"
  }
}
Automated Webhook Notification
{
  "event": "status_update",
  "service": "bvn_crm",
  "reference": "CRM-92B8F4A1",
  "ticket_id": "12345678",
  "batch_id": "1234567",
  "request_id": 42,
  "status": "successful",
  "file_url": "https://ambverify.com.ng/uploads/crm_results/crm_resolution_42.pdf",
  "comment": "Ticket resolved successfully by NIBSS CRM.",
  "timestamp": "2026-09-27T16:00:00Z"
}
POST /api/v1/backend_mod.php
Gender Mod: ₦10,000.00 DOB 1st Time: ₦56,000.00 DOB 2nd Time: ₦62,000.00

Submit requests to modify NIMC backend records for Gender or Date of Birth (DOB). Track status updates via Webhooks or Polling.

FieldTypeRequirementDescription
ninstringreq11-digit NIN
service_typestringreqGENDER MOD or DOB MOD
genderstringreq (if gender)Male or Female
dob_timestringreq (if dob)first time or second time
dob_agestringreq (if dob)0-5yrs, 6-10yrs, 11-15yrs
new_dobstringoptTarget date: YYYY-MM-DD
curl -X POST "https://ambverify.com.ng/api/v1/backend_mod.php" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "nin": "12345678901",
    "service_type": "GENDER MOD",
    "gender": "Female"
  }'
<?php
$ch = curl_init('https://ambverify.com.ng/api/v1/backend_mod.php');
curl_setopt_array($ch, [
    CURLOPT_POST           => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer YOUR_API_KEY',
        'Content-Type: application/json'
    ],
    CURLOPT_POSTFIELDS     => json_encode([
        'nin'          => '12345678901',
        'service_type' => 'GENDER MOD',
        'gender'       => 'Female'
    ])
]);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
?>
const axios = require('axios');

axios.post('https://ambverify.com.ng/api/v1/backend_mod.php', {
    nin: '12345678901',
    service_type: 'GENDER MOD',
    gender: 'Female'
}, {
    headers: {
        'Authorization': 'Bearer YOUR_API_KEY',
        'Content-Type': 'application/json'
    }
}).then(res => console.log(res.data))
  .catch(err => console.error(err.response ? err.response.data : err));
import requests

url = "https://ambverify.com.ng/api/v1/backend_mod.php"
headers = {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json"
}
payload = {
    "nin": "12345678901",
    "service_type": "GENDER MOD",
    "gender": "Female"
}

response = requests.post(url, json=payload, headers=headers)
print(response.json())
Submission Response 201 Created
{
  "success": true,
  "message": "Backend GENDER MOD request submitted successfully.",
  "data": {
    "request_id": 184,
    "batch_id": "8B1D4F9A",
    "nin": "12345678901",
    "service_type": "GENDER MOD",
    "gender": "Female",
    "status": "New"
  }
}
Status Polling Endpoint
GET https://ambverify.com.ng/api/v1/backend_mod.php?nin=12345678901
Authorization: Bearer YOUR_API_KEY

Webhook Events

When your clearance, modification, or validation requests change status (e.g. from Pending to Successful or Failed), an automated POST request is dispatched to your configured Webhook URL.

Outbound Webhook Payload Example
{
  "event": "status_update",
  "service": "special_validation",
  "nin": "12345678901",
  "request_id": 1401,
  "status": "Successful",
  "status_code": "COMPLETED",
  "reply": "CHUKWUDI EMMANUEL : 10-08-1992",
  "tracking_id": "TRK8492019482-Cr-new",
  "track": "TRK8492019482-Cr-new",
  "photo": "data:image/jpeg;base64,/9j/4AAQSkZJRg...",
  "image": "data:image/jpeg;base64,/9j/4AAQSkZJRg...",
  "timestamp": "2026-09-30T08:07:30Z"
}
Supported Webhook Service Identifiers

Switch on the service key to route the update to the correct table in your database:

Service KeyTarget OperationIdentifying Field
special_validationSpecial NIN Validationnin
nin_validationStandard NIN Validationnin
ipe_clearanceNormal & HIT IPE Clearancetracking_id
nin_modificationNIN Modification Requestsnin
bvn_retrievalBVN Retrievalphone_number
bvn_crmBVN CRM Queriesticket_id or reference
Delivery Guarantee

Your webhook endpoint must return an HTTP 200 OK response. If your server is down or times out, our retry engine automatically retries up to 5 times using exponential backoff.

NIN Extraction

For completed clearance requests, the cleared 11-digit NIN is returned in both nin and reply_tid for universal compatibility with VTU scripts.

Signature Verification

Always verify the X-AmbVerify-Signature header sent with every webhook to confirm that the payload was genuinely generated by AmbVerify.

PHP Webhook Receiver Example
<?php
// 1. Retrieve the raw payload and signature
$payload   = file_get_contents('php://input');
$signature = $_SERVER['HTTP_X_AMBVERIFY_SIGNATURE'] ?? '';

// 2. Your Webhook Secret from your AmbVerify API Partner Dashboard
$secret = 'YOUR_WEBHOOK_SECRET';

// 3. Compute expected hash
$expected = hash_hmac('sha256', $payload, $secret);

// 4. Verify match
if (!hash_equals($expected, $signature)) {
    http_response_code(401);
    exit('Invalid signature');
}

// 5. Parse data
$data = json_decode($payload, true);
$tracking_id = $data['tracking_id'] ?? '';
$status      = $data['status'] ?? '';
$nin         = $data['nin'] ?? $data['reply_tid'] ?? '';

if ($status === 'Successful') {
    // Update your customer's order with the resolved NIN
}

http_response_code(200);
echo json_encode(['received' => true]);
?>

Rate Limits

Current limits per API client:

Support

Need help getting started, or have questions about the API?