Developer Documentation

Comprehensive API documentation for NIN verification slips, BVN verification slips, and IPE clearance services. Integrate seamlessly with our secure APIs.

How to use this page: The table below lists every available endpoint. Click any "View Details" link to jump to full documentation with code examples. Each section also shows all slip tier endpoints in a clear table — no need to guess!

Quick Reference — All API Endpoints

Every endpoint at a glance. Use this table to quickly find the URL you need.

Service Slip Tier Method Endpoint URL Details
NIN Verification by NIN Number
NIN by NIN Premium POST https://abjiktech.com.ng/api/verification/nin_by_nin.php View Details ↓
NIN by NIN Standard POST https://abjiktech.com.ng/api/verification/nin_standard_slip.php View Details ↓
NIN by NIN Regular POST https://abjiktech.com.ng/api/verification/nin_regular_slip.php View Details ↓
NIN by NIN VNIN POST https://abjiktech.com.ng/api/verification/vnin_slip.php View Details ↓
NIN Verification by Phone Number
NIN by Phone Premium POST https://abjiktech.com.ng/api/verification/nin_by_phone_premium.php View Details ↓
NIN by Phone Standard POST https://abjiktech.com.ng/api/verification/nin_by_phone_standard.php View Details ↓
NIN by Phone Regular POST https://abjiktech.com.ng/api/verification/nin_by_phone_regular.php View Details ↓
NIN by Phone VNIN POST https://abjiktech.com.ng/api/verification/vnin_slip.php View Details ↓
NIN Verification by Demographics
NIN by Demo Premium POST https://abjiktech.com.ng/api/verification/nin_by_demo.php View Details ↓
BVN Verification
BVN Verification Premium POST https://abjiktech.com.ng/api/verification/bvn_premium_slip.php View Details ↓
BVN Verification Standard POST https://abjiktech.com.ng/api/verification/bvn_full_details_slip.php View Details ↓
IPE Clearance (API)
IPE Clearance Submit Request POST https://abjiktech.com.ng/api/verification/ipe_clearance.php View Details ↓
IPE Clearance Check Status POST https://abjiktech.com.ng/api/verification/get_status.php View Details ↓
NIN Validation (API)
NIN Validation Submit Request POST https://abjiktech.com.ng/api/verification/validation.php View Details ↓
NIN Validation Check Status POST https://abjiktech.com.ng/api/verification/validation_status.php View Details ↓
NIN Personalization (API)
NIN Personalization Submit Request POST https://abjiktech.com.ng/api/verification/personalization.php View Details ↓
NIN Personalization Check Status POST https://abjiktech.com.ng/api/verification/personalization_status.php View Details ↓
BVN Retrieval (API)
BVN Retrieval by Phone Submit Request POST https://abjiktech.com.ng/api/verification/bvn_retrieval.php View Details ↓
BVN Retrieval by Phone Check Status POST https://abjiktech.com.ng/api/verification/bvn_retrieval_status.php View Details ↓
NIN Modification (API)
NIN Name Submit Request POST https://abjiktech.com.ng/api/modification/nin_name.php View Details ↓
NIN Phone Submit Request POST https://abjiktech.com.ng/api/modification/nin_phone.php View Details ↓
NIN Address Submit Request POST https://abjiktech.com.ng/api/modification/nin_address.php View Details ↓
BVN Modification (API)
BVN Name Submit Request POST https://abjiktech.com.ng/api/modification/bvn_name.php View Details ↓
BVN Phone Submit Request POST https://abjiktech.com.ng/api/modification/bvn_phone.php View Details ↓
BVN Address Submit Request POST https://abjiktech.com.ng/api/modification/bvn_address.php View Details ↓
BVN Date of Birth Submit Request POST https://abjiktech.com.ng/api/modification/bvn_dob.php View Details ↓
Modification Utilities (API)
Check Modification Status Check Status POST https://abjiktech.com.ng/api/verification/get_status.php View Details ↓
List BVN Enrollment Types Lookup POST https://abjiktech.com.ng/api/modification/get_bvn_banks.php View Details ↓
Notification POST

API Authentication

All API requests require authentication using your API key. Include it in the request payload as shown below.

PARAMETER api_key: "YOUR_API_KEY_HERE"
// PHP Example
$apiKey = 'YOUR_API_KEY_HERE';
$url = 'https://abjiktech.com.ng/api/verification/nin_by_nin.php';

$payload = json_encode([
    'api_key' => $apiKey,
    'nin' => '12345678901'
]);
// JavaScript Example
const apiKey = 'YOUR_API_KEY_HERE';
const url = 'https://abjiktech.com.ng/api/verification/nin_by_nin.php';

const payload = {
    api_key: apiKey,
    nin: '12345678901'
};
# Python Example
import requests
import json

api_key = 'YOUR_API_KEY_HERE'
url = 'https://abjiktech.com.ng/api/verification/nin_by_nin.php'

payload = {
    'api_key': api_key,
    'nin': '12345678901'
}

1 NIN Verification Slips by NIN Number

Generate NIN verification slips using the 11-digit NIN number. 4 slip tiers available — each with its own endpoint URL, same request parameters, no special access needed. Need the tracking ID and address? Use Regular or VNIN — Premium and Standard return identity fields only.

Slip Tier Method Endpoint URL
Premium Slip POST https://abjiktech.com.ng/api/verification/nin_by_nin.php
Standard Slip POST https://abjiktech.com.ng/api/verification/nin_standard_slip.php
Regular Slip POST https://abjiktech.com.ng/api/verification/nin_regular_slip.php
VNIN Slip POST https://abjiktech.com.ng/api/verification/vnin_slip.php

Code Examples & Parameters — Click to expand

All 4 slip tiers accept the same parameters — just change the endpoint URL to the one you need from the table above.

POST https://abjiktech.com.ng/api/verification/nin_by_nin.php (Premium — swap URL for other tiers)
Request Parameters
Parameter Type Required Description
api_key string Yes Your API authentication key
nin string Yes 11-digit NIN number
{
    "api_key": "YOUR_API_KEY_HERE",
    "nin": "12345678901"
}
{
    "status": "success",
    "response_code": "00",
    "user_data": {
        "nin": "12345678901",
        "firstName": "JOHN",
        "middleName": "MICHAEL",
        "surname": "DOE",
        "gender": "m",
        "birthDate": "1985-05-15",
        "telephoneNo": "08012345678",
        "photo": "base64_encoded_jpeg..."
    },
    "message": "PDF generated successfully",
    "pdf_base64": "base64_encoded_pdf_data_here..."
}

This is what nin_by_nin.php (Premium) and nin_standard_slip.php (Standard) actually return — identity fields only. There is no trackingId and no address in this shape. If your users need the tracking ID and residential address, see the "Response (Full Details)" tab and use the Regular or VNIN slip endpoint instead.

{
    "status": "success",
    "response_code": "00",
    "user_data": {
        "nin": "12345678901",
        "firstname": "JOHN",
        "surname": "DOE",
        "middlename": "MICHAEL",
        "gender": "m",
        "birthdate": "1985-05-15",
        "telephoneno": "08012345678",
        "trackingId": "ABC1234567890XY",
        "residence_AdressLine1": "123 Sample Street",
        "residence_Town": "Ikeja",
        "residence_state": "Lagos",
        "birthcountry": "Nigeria",
        "birthstate": "Lagos",
        "birthlga": "Ikeja",
        "photo": "base64_encoded_jpeg...",
        "signature": "base64_encoded_jpeg..."
    },
    "message": "PDF generated successfully",
    "pdf_base64": "base64_encoded_pdf_data_here...",
    "transaction_id": "6ada933bafdb83488dc4e92a41da86"
}

Only the Regular Slip (nin_regular_slip.php) and VNIN Slip (vnin_slip.php) endpoints return this shape. This is the complete NIN record, including the real 15-character NIMC trackingId, residential address (residence_AdressLine1, residence_Town, residence_state) and place of birth (birthcountry, birthstate, birthlga). Swap the endpoint URL to nin_regular_slip.php or vnin_slip.php (same request parameters) to get this response. The user_data object is passed through exactly as our upstream provider returns it, so always read fields defensively. Note: the top-level transaction_id is our own internal reference for this request (useful for support lookups) — it is not issued by NIMC. The real NIMC tracking ID is user_data.trackingId.

$apiKey = "YOUR_API_KEY_HERE";
$nin = "12345678901"; // your NIN

$url = 'https://abjiktech.com.ng/api/verification/nin_by_nin.php';

// Make API request
$payload = json_encode([
    'api_key' => $apiKey,
    'nin' => $nin
]);

$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST => true,
    CURLOPT_POSTFIELDS => $payload,
    CURLOPT_HTTPHEADER => [
        'Content-Type: application/json',
        'Content-Length: ' . strlen($payload)
    ]
]);

$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$curlError = curl_error($ch);
curl_close($ch);

// Handle response
if ($curlError) {
    echo "API connection failed: " . $curlError;
    exit;
}

$apiResponse = json_decode($response, true);

if ($apiResponse['status'] === 'success' && !empty($apiResponse['pdf_base64'])) {
    // Decode and save PDF
    $pdfData = base64_decode($apiResponse['pdf_base64']);
    $fileName = "nin_slip_" . $nin . ".pdf";
    file_put_contents($fileName, $pdfData);
    echo "PDF saved successfully: " . $fileName;
} else {
    echo "Error: " . $apiResponse['message'];
}

2 NIN Verification Slips by Phone Number

Generate NIN verification slips using registered phone number. 4 slip tiers available — each with its own endpoint URL.

Slip Tier Method Endpoint URL
Premium Slip POST https://abjiktech.com.ng/api/verification/nin_by_phone_premium.php
Standard Slip POST https://abjiktech.com.ng/api/verification/nin_by_phone_standard.php
Regular Slip POST https://abjiktech.com.ng/api/verification/nin_by_phone_regular.php
VNIN Slip POST https://abjiktech.com.ng/api/verification/vnin_slip.php

Code Examples & Parameters — Click to expand

All 4 slip tiers accept the same parameters — just change the endpoint URL to the one you need from the table above.

POST https://abjiktech.com.ng/api/verification/nin_by_phone_premium.php (Premium — swap URL for other tiers)
Request Parameters
Parameter Type Required Description
api_key string Yes Your API authentication key
phone string Yes 11-digit phone number (e.g., 08012345678)
{
    "api_key": "YOUR_API_KEY_HERE",
    "phone": "08012345678"
}
{
    "status": "success",
    "response_code": "00",
    "user_data": {
        "nin": "12345678901",
        "first_name": "JOHN",
        "last_name": "DOE",
        "middle_name": "MICHAEL",
        "gender": "MALE",
        "date_of_birth": "15-05-1985",
        "phone_number": "08012345678",
        "address": "123 Sample Street, Lagos"
    },
    "message": "PDF generated successfully",
    "pdf_base64": "base64_encoded_pdf_data_here..."
}

3 NIN Verification Slips by Demographic Details

Generate NIN verification slips using personal demographic information.

Slip Tier Method Endpoint URL
Premium Slip POST https://abjiktech.com.ng/api/verification/nin_by_demo.php

Code Examples & Parameters — Click to expand

POST https://abjiktech.com.ng/api/verification/nin_by_demo.php
Request Parameters
Parameter Type Required Description
api_key string Yes Your API authentication key
firstname string Yes Individual's first name
lastname string Yes Individual's last name
dob string Yes Date of birth (DD-MM-YYYY format)
gender string Yes Accepts m, f, male, or female (case-insensitive)

This endpoint matches against the provider's records by exact first name, last name, date of birth, and gender — there is no middle name parameter. Demographic search is inherently less reliable than searching by NIN number: even a genuine NIN holder will get a "No record found" response if any of these details differ from what was recorded at NIMC enrollment. If you have the individual's NIN, prefer the NIN-by-NIN endpoint for an exact-match lookup.

{
    "api_key": "YOUR_API_KEY_HERE",
    "firstname": "JOHN",
    "lastname": "DOE",
    "dob": "15-05-1985",
    "gender": "MALE"
}
{
    "status": "success",
    "response_code": "00",
    "user_data": {
        "response_code": "00",
        "description": "Successful",
        "verificationType": "NIN-VERIFY",
        "verificationStatus": "VERIFIED",
        "transactionStatus": "SUCCESSFUL",
        "transactionReference": 1783936751000,
        "searchParameter": "JOHN DOE",
        "response": [
            {
                "firstname": "JOHN",
                "surname": "DOE",
                "middlename": "MICHAEL",
                "gender": "Male",
                "telephoneno": "08012345678",
                "nin": "12345678901",
                "birthdate": "15-05-1985",
                "photo": "base64_encoded_jpeg_data...",
                "birthcountry": "Nigeria",
                "birthlga": "Example LGA",
                "birthstate": "Example State",
                "residence_AdressLine1": "123 Sample Street",
                "signature": "base64_encoded_image_data...",
                "trackingId": "S7Y0NYF88000A09",
                "residence_Town": "Example Town",
                "residence_state": "Example State"
            }
        ]
    },
    "matches": 1,
    "records": [
        {
            "nin": "12345678901",
            "firstname": "JOHN",
            "surname": "DOE",
            "middlename": "MICHAEL",
            "gender": "Male",
            "birthdate": "15-05-1985",
            "birthlga": "Example LGA",
            "birthstate": "Example State",
            "residence_state": "Example State",
            "page": 1
        }
    ],
    "message": "PDF generated successfully",
    "pdf_base64": "base64_encoded_pdf_data..."
}

Field names are the provider's own casing (note residence_AdressLine1 is misspelled by the provider, and firstname/surname are lowercase, nested inside user_data.response[]) — always read fields defensively rather than assuming the exact shape shown here. Multiple matches: since this endpoint searches by demographic details rather than an exact NIN, more than one person can share the same first name, last name, date of birth, and gender. When that happens, matches will be > 1, user_data.response[] and records[] will each contain one entry per match, and the single pdf_base64 contains one page per match — the provider's own message field tells you to have the end user pick the page that's theirs (e.g. "2 records matched these details. Each one is on its own page in the PDF - select the one that is yours.").

$apiKey = "YOUR_API_KEY_HERE";
$firstName = "JOHN";
$lastName = "DOE";
$dob = "1985-05-15"; // yyyy-mm-dd from form
$gender = "MALE";

// Convert DOB from yyyy-mm-dd to dd-mm-yyyy
$formattedDob = date("d-m-Y", strtotime($dob));

$url = 'https://abjiktech.com.ng/api/verification/nin_by_demo.php';

$payload = json_encode([
    'api_key' => $apiKey,
    'firstname' => $firstName,
    'lastname' => $lastName,
    'dob' => $formattedDob,
    'gender' => $gender
]);

$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST => true,
    CURLOPT_POSTFIELDS => $payload,
    CURLOPT_HTTPHEADER => [
        'Content-Type: application/json',
        'Content-Length: ' . strlen($payload)
    ],
    CURLOPT_SSL_VERIFYPEER => false,
    CURLOPT_SSL_VERIFYHOST => false
]);

$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$curlError = curl_error($ch);
curl_close($ch);

if (!empty($curlError)) {
    echo "cURL Error: $curlError";
} elseif ($httpCode !== 200) {
    echo "HTTP Error: $httpCode";
} else {
    $result = json_decode($response, true);
    
    if (!empty($result['pdf_base64'])) {
        $pdfData = base64_decode($result['pdf_base64']);
        $filePath = 'nin_slip_' . time() . '.pdf';
        file_put_contents($filePath, $pdfData);
        echo "PDF saved successfully: $filePath";
    } else {
        echo "Error: " . $result['message'];
    }
}

4 BVN Verification Slips

Generate BVN verification slips using 11-digit BVN number. 2 service tiers available — each with its own endpoint URL.

Slip Tier Method Endpoint URL
Premium Slip POST https://abjiktech.com.ng/api/verification/bvn_premium_slip.php
Standard Slip POST https://abjiktech.com.ng/api/verification/bvn_full_details_slip.php

Code Examples & Parameters — Click to expand

Both slip tiers accept the same parameters — just change the endpoint URL to the one you need from the table above.

POST https://abjiktech.com.ng/api/verification/bvn_premium_slip.php (Premium — swap URL for Standard tier)
Request Parameters
Parameter Type Required Description
api_key string Yes Your API authentication key
bvn string Yes 11-digit BVN number
{
    "api_key": "YOUR_API_KEY_HERE",
    "bvn": "12345678901"
}
{
    "status": "success",
    "response_code": "00",
    "user_data": {
        "bvn": "12345678901",
        "first_name": "JOHN",
        "last_name": "DOE",
        "middle_name": "MICHAEL",
        "gender": "MALE",
        "date_of_birth": "15-05-1985",
        "phone_number": "08012345678",
        "address": "123 Sample Street, Lagos"
    },
    "message": "BVN slip generated successfully",
    "pdf_base64": "base64_encoded_pdf_data_here..."
}

5 IPE Clearance Services (API)

Manual Pending Service: Submit IPE clearance requests via API. Your request is stored as pending for manual processing by the admin team. Your balance is validated at submission, and actual deduction happens only when the request is completed. Use the Check Status endpoint to track progress.

Service Method Endpoint URL
IPE Clearance Submission POST https://abjiktech.com.ng/api/verification/ipe_clearance.php
IPE Check Status POST https://abjiktech.com.ng/api/verification/get_status.php

How it works: When you call this endpoint, your balance is checked for sufficiency and the IPE request is saved as "pending". Actual deduction happens only when the request is completed by the processing team. You'll receive a transaction ID to track your request.

Code Examples & Parameters — Click to expand

POST https://abjiktech.com.ng/api/verification/ipe_clearance.php
Request Parameters
Parameter Type Required Description
api_key string Yes Your API authentication key
trackingID string Yes Unique tracking ID for the IPE submission (1-20 alphanumeric characters)
{
    "api_key": "YOUR_API_KEY_HERE",
    "trackingID": "IPE202400001"
}
{
    "success": true,
    "message": "IPE clearance request submitted successfully. Your request is now pending processing.",
    "data": {
        "transaction_id": "ipe_a1b2c3d4e5f6a1b2c3d4e5f6",
        "tracking_id": "IPE202400001",
        "status": "pending",
        "amount_charged": "500.00",
        "balance_before": "5000.00",
        "balance_after": "5000.00",
        "note": "Your IPE clearance is being processed. You can check the status in your transaction history."
    }
}

HTTP Status: 200 OK

// Insufficient balance
{
    "success": false,
    "message": "Insufficient balance. Your balance is ₦200.00 but IPE clearance costs ₦500.00"
}

// Duplicate tracking ID
{
    "success": false,
    "message": "This tracking ID has already been submitted and is pending processing."
}

// Invalid parameters
{
    "success": false,
    "message": "Invalid trackingID format. Must be 1 to 20 alphanumeric characters."
}

HTTP Status: 400 Bad Request

$apiKey = "YOUR_API_KEY_HERE";
$trackingID = "IPE202400001";

$url = 'https://abjiktech.com.ng/api/verification/ipe_clearance.php';

$payload = json_encode([
    'api_key' => $apiKey,
    'trackingID' => $trackingID
]);

$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST => true,
    CURLOPT_POSTFIELDS => $payload,
    CURLOPT_HTTPHEADER => [
        'Content-Type: application/json',
        'Content-Length: ' . strlen($payload)
    ]
]);

$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

$result = json_decode($response, true);

if ($result['success'] === true) {
    echo "IPE submitted! Transaction ID: " . $result['data']['transaction_id'];
    echo "Status: " . $result['data']['status'];
    echo "Balance after: ₦" . $result['data']['balance_after'];
} else {
    echo "Error: " . $result['message'];
}

5b IPE Clearance — Check Status (API)

Check the status of a previously submitted IPE clearance request. When the IPE is completed, the response includes the new NIN and new tracking ID.

ServiceMethodEndpoint URL
IPE Check Status POST https://abjiktech.com.ng/api/verification/get_status.php
IPE Check Status — Parameters & Examples Click to expand
POST https://abjiktech.com.ng/api/verification/get_status.php
Request Parameters
ParameterTypeRequiredDescription
api_keystringYesYour API key for authentication
trackingIDstringYesThe tracking ID from the original IPE submission
Possible Status Values
StatusDescriptionExtra Data
completedIPE clearance done successfullyReturns newNIN and newTrackingID
pendingRequest awaiting processing—
processingCurrently being worked on—
inprogressRequest is in progress at the provider—
failedRequest could not be completed—
blockedRequest has been blocked—
incompletedRequest is incomplete—
insufficient_fingerprintEnrolment fingerprints were insufficient for clearance—
ABISUndergoing ABIS verification—
Example Request
{
    "api_key": "YOUR_API_KEY_HERE",
    "trackingID": "NIN-TRK-12345678"
}
Success Response — Completed (200)
{
    "success": true,
    "data": {
        "trackingID": "NIN-TRK-12345678",
        "status": "completed",
        "newNIN": "98765432101",
        "newTrackingID": "NIN-TRK-99887766",
        "transaction_id": "ipe_a1b2c3d4e5f6",
        "submitted_at": "2026-03-10 14:30:00",
        "completed_at": "2026-03-11 09:15:00",
        "message": "IPE clearance has been completed successfully. New NIN and tracking ID are available."
    }
}
Success Response — Pending (200)
{
    "success": true,
    "data": {
        "trackingID": "NIN-TRK-12345678",
        "status": "pending",
        "transaction_id": "ipe_a1b2c3d4e5f6",
        "submitted_at": "2026-03-10 14:30:00",
        "message": "Your IPE clearance request is still pending and awaiting processing."
    }
}
Error — Not Found (404)
{
    "success": false,
    "message": "No IPE request found with the provided trackingID for your account.",
    "data": {
        "trackingID": "NIN-TRK-INVALID",
        "status": "not_found"
    }
}
PHP Code Example
PHP Example — IPE Check Status

$url = "https://abjiktech.com.ng/api/verification/get_status.php";

$payload = json_encode([
    'api_key'    => 'YOUR_API_KEY_HERE',
    'trackingID' => 'NIN-TRK-12345678'
]);

$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => ['Content-Type: application/json'],
    CURLOPT_POSTFIELDS     => $payload,
]);

$response = curl_exec($ch);
curl_close($ch);

$result = json_decode($response, true);

if ($result['success'] === true) {
    $data = $result['data'];
    echo "Status: " . $data['status'];
    
    if ($data['status'] === 'completed') {
        echo "New NIN: " . $data['newNIN'];
        echo "New Tracking ID: " . $data['newTrackingID'];
    } else {
        echo $data['message'];
    }
} else {
    echo "Error: " . $result['message'];
}

6. NIN Validation (API)

Manual Pending Service: Submit NIN validation requests via API. This API collects the NIN and error type, stores the request as pending for manual processing by the admin team, and checks your balance at submission. Actual deduction happens only when the request is completed. Use the Check Status endpoint to track progress.

Service Method Endpoint URL
NIN Validation POST https://abjiktech.com.ng/api/verification/validation.php
Validation Check Status POST https://abjiktech.com.ng/api/verification/get_status.php
NIN Validation — Submit Request Click to expand
POST https://abjiktech.com.ng/api/verification/validation.php
Request Parameters
Parameter Type Required Description
api_key string Yes Your API key for authentication
nin string Yes The NIN to validate — must be exactly 11 digits
error_type string Yes The validation/error type. Must be one of the allowed values listed below.
Allowed error_type Values
Value Description
no_recordNo Record Found
simbank_validationSIM/Bank Validation
modificationModification Validation
photo_errorPhotographic Error
Example Request (JSON Body)
{
    "api_key": "YOUR_API_KEY_HERE",
    "nin": "12345678901",
    "error_type": "no_record"
}
Success Response (200)
{
    "success": true,
    "message": "NIN validation request submitted successfully. Your request is now pending processing.",
    "data": {
        "transaction_id": "nin_val_a1b2c3d4e5f6g7h8i9j0kl",
        "ticket_id": "TKT17100000001234",
        "nin": "12345678901",
        "error_type": "no_record",
        "error_type_label": "No Record Found",
        "status": "pending",
        "amount_charged": "300.00",
        "balance_before": "5,000.00",
        "balance_after": "5,000.00",
        "note": "Your NIN validation is being processed. You can check the status in your transaction history."
    }
}
Error Responses
// Invalid error_type
{
    "success": false,
    "message": "Invalid error_type. Allowed values: no_record, simbank_validation, modification, photo_error",
    "allowed_types": {
        "no_record": "No Record Found",
        "simbank_validation": "SIM/Bank Validation",
        "modification": "Modification Validation",
        "photo_error": "Photographic Error"
    }
}

// Insufficient balance
{
    "success": false,
    "message": "Insufficient balance. Your balance is ₦100.00 but NIN validation costs ₦300.00"
}

// Invalid NIN
{
    "success": false,
    "message": "Invalid NIN format. Must be exactly 11 digits."
}
PHP Code Example
PHP Example — NIN Validation

$url = "https://abjiktech.com.ng/api/verification/validation.php";

$payload = json_encode([
    'api_key'    => 'YOUR_API_KEY_HERE',
    'nin'        => '12345678901',
    'error_type' => 'no_record'
]);

$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => ['Content-Type: application/json'],
    CURLOPT_POSTFIELDS     => $payload,
]);

$response = curl_exec($ch);
curl_close($ch);

$result = json_decode($response, true);

if ($result['success'] === true) {
    echo "Validation submitted! Transaction ID: " . $result['data']['transaction_id'];
    echo "Ticket ID: " . $result['data']['ticket_id'];
    echo "Error Type: " . $result['data']['error_type_label'];
    echo "Status: " . $result['data']['status'];
    echo "Balance after: ₦" . $result['data']['balance_after'];
} else {
    echo "Error: " . $result['message'];
}

6b NIN Validation — Check Status (API)

Check the status of a previously submitted NIN validation request. Use either your ticket_id or transaction_id to look up the request.

ServiceMethodEndpoint URL
Validation Check Status POST https://abjiktech.com.ng/api/verification/validation_status.php
Validation Check Status — Parameters & Examples Click to expand
POST https://abjiktech.com.ng/api/verification/validation_status.php
Request Parameters
ParameterTypeRequiredDescription
api_keystringYesYour API key for authentication
ticket_idstringOne ofThe ticket ID returned from the submission response
transaction_idstringOne ofThe transaction ID returned from the submission response

You must provide either ticket_id or transaction_id (at least one is required).

Possible Status Values
StatusDescription
pendingRequest awaiting processing
processingCurrently being worked on
inprogressValidation is in progress
successNIN validation completed successfully
failedValidation request has failed
suspendedRequest has been suspended
invalid ninThe NIN was found to be invalid
Example Request (by ticket_id)
{
    "api_key": "YOUR_API_KEY_HERE",
    "ticket_id": "TKT17100000001234"
}
Example Request (by transaction_id)
{
    "api_key": "YOUR_API_KEY_HERE",
    "transaction_id": "nin_val_a1b2c3d4e5f6g7h8i9j0kl"
}
Success Response — Completed (200)
{
    "success": true,
    "data": {
        "ticket_id": "TKT17100000001234",
        "transaction_id": "nin_val_a1b2c3d4e5f6g7h8i9j0kl",
        "nin": "12345678901",
        "error_type": "no_record",
        "status": "success",
        "submitted_at": "2026-03-10 14:30:00",
        "message": "Your NIN validation has been completed successfully."
    }
}
Success Response — Pending (200)
{
    "success": true,
    "data": {
        "ticket_id": "TKT17100000001234",
        "transaction_id": "nin_val_a1b2c3d4e5f6g7h8i9j0kl",
        "nin": "12345678901",
        "error_type": "no_record",
        "status": "pending",
        "submitted_at": "2026-03-10 14:30:00",
        "message": "Your NIN validation request is still pending and awaiting processing."
    }
}
Error — Not Found (404)
{
    "success": false,
    "message": "No validation request found with the provided identifier for your account.",
    "data": {
        "identifier": "TKT-INVALID",
        "status": "not_found"
    }
}
PHP Code Example
PHP Example — Validation Check Status

$url = "https://abjiktech.com.ng/api/verification/validation_status.php";

$payload = json_encode([
    'api_key'   => 'YOUR_API_KEY_HERE',
    'ticket_id' => 'TKT17100000001234'
]);

$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => ['Content-Type: application/json'],
    CURLOPT_POSTFIELDS     => $payload,
]);

$response = curl_exec($ch);
curl_close($ch);

$result = json_decode($response, true);

if ($result['success'] === true) {
    $data = $result['data'];
    echo "Ticket: " . $data['ticket_id'];
    echo "Status: " . $data['status'];
    echo $data['message'];
} else {
    echo "Error: " . $result['message'];
}

NIN Personalization (API)

Submit a NIN personalization request by tracking ID. Your balance is charged upfront at your account's personalization_price. The request is forwarded to the provider and processed asynchronously — poll the status endpoint until it is completed. Charge policy: you are only refunded if the provider does not accept the submission at all. Once the request is accepted, the charge is final and non-refundable regardless of outcome — including if it failed or NIMC returns no record for the tracking ID.

1. Submit — POST https://abjiktech.com.ng/api/verification/personalization.php

ParameterTypeRequiredDescription
api_keystringYesYour API authentication key
tracking_idstringYesNIN tracking ID (exactly 15 alphanumeric characters)
{
    "api_key": "YOUR_API_KEY_HERE",
    "tracking_id": "0SXXXXXXXXXXX"
}
{
    "success": true,
    "message": "NIN personalization submitted successfully.",
    "data": {
        "transaction_id": "nin_per_xxxxxxxxxxxxxxxxxxxxxx",
        "tracking_id": "0SXXXXXXXXXXX",
        "status": "inprogress",
        "amount_charged": "200.00",
        "balance_before": "5000.00",
        "balance_after": "4800.00"
    }
}

2. Check Status — POST https://abjiktech.com.ng/api/verification/personalization_status.php

ParameterTypeRequiredDescription
api_keystringYesYour API authentication key
tracking_idstringYesThe tracking ID from your submit request

Status values

StatusMeaningExtra
inprogressStill being processed by the provider—
completedPersonalization successfulResponse includes nin
failedCould not be completed / no record foundNot refundable
{
    "api_key": "YOUR_API_KEY_HERE",
    "tracking_id": "0SXXXXXXXXXXX"
}
{
    "success": true,
    "status": "inprogress",
    "tracking_id": "0SXXXXXXXXXXX",
    "nin": null,
    "message": "Your personalization request is still being processed."
}
{
    "success": true,
    "status": "completed",
    "tracking_id": "0SXXXXXXXXXXX",
    "nin": "12345678901",
    "message": "Personalization completed."
}
{
    "success": true,
    "status": "failed",
    "tracking_id": "0SXXXXXXXXXXX",
    "nin": null,
    "refunded": false,
    "message": "Personalization failed. This request is not refundable."
}

BVN Retrieval by Phone Number (API)

Find the BVN linked to a phone number. Your balance is charged when you submit, at your account's bvn_retrieval_price, and the request is queued for our retrieval team — most requests are completed within 24 hours. Poll the status endpoint with the transaction_id until status is completed (the BVN is in bvn) or failed. A failed request is refunded in full automatically. Submitting a phone number that already has an open request on your account, or that was retrieved for you in the last 30 days, is refused with 409 and not charged — the response carries the existing transaction_id, so a retry loop can never pay twice for the same number.

1. Submit — POST https://abjiktech.com.ng/api/verification/bvn_retrieval.php

ParameterTypeRequiredDescription
api_keystringYesYour API authentication key
phonestringYes11-digit Nigerian mobile number, e.g. 08031234567. 2348031234567 and +2348031234567 are accepted too.
first_namestringYesFirst name of the person the number is registered to. 2–60 characters: letters, spaces, hyphens, apostrophes and dots.
last_namestringYesSurname of the same person, same rules as first_name. Both names are used to confirm the right person is found.
HTTP Status Codes
200Success — request charged and queued
400Missing/invalid parameters or insufficient balance. Nothing is charged.
401Invalid API key
409Open request or retrieved in the last 30 days for this number. Not charged; existing transaction_id returned.
429Rate limit exceeded (60 requests per hour)
{
    "api_key": "YOUR_API_KEY_HERE",
    "phone": "08031234567",
    "first_name": "Aisha",
    "last_name": "Bello"
}
{
    "success": true,
    "message": "BVN retrieval request submitted successfully. Most requests are completed within 24 hours.",
    "data": {
        "transaction_id": "bvn_ret_xxxxxxxxxxxxxxxxxxxxxx",
        "phone": "08031234567",
        "first_name": "Aisha",
        "last_name": "Bello",
        "status": "pending",
        "amount_charged": "800.00",
        "balance_before": "5000.00",
        "balance_after": "4200.00"
    }
}
{
    "success": false,
    "message": "This phone number already has an open request on your account. You have not been charged.",
    "transaction_id": "bvn_ret_xxxxxxxxxxxxxxxxxxxxxx"
}

2. Check Status — POST https://abjiktech.com.ng/api/verification/bvn_retrieval_status.php

Requests are worked by our team, so checking every few minutes is plenty. Status checks are free. GET with the same parameters in the query string also works.

ParameterTypeRequiredDescription
api_keystringYesYour API authentication key
transaction_idstringEitherThe transaction_id returned at submission. Preferred — it identifies one exact request.
phonestringEitherThe phone number you submitted. Returns your most recent request for it. Ignored if transaction_id is supplied.

Status values

StatusMeaningExtra
pendingQueued or being worked on. Keep polling.—
completedDoneThe 11-digit BVN is in bvn. If more than one BVN is linked to the number, all are in bvns.
failedThe BVN could not be retrievedrefunded is true — the price is back in your balance
{
    "api_key": "YOUR_API_KEY_HERE",
    "transaction_id": "bvn_ret_xxxxxxxxxxxxxxxxxxxxxx"
}

// Or look up by phone (returns your latest request for that number)
{
    "api_key": "YOUR_API_KEY_HERE",
    "phone": "08031234567"
}
{
    "success": true,
    "transaction_id": "bvn_ret_xxxxxxxxxxxxxxxxxxxxxx",
    "phone": "08031234567",
    "first_name": "Aisha",
    "last_name": "Bello",
    "price": "800.00",
    "date": "2026-09-28 10:15:00",
    "bvn": null,
    "refunded": false,
    "status": "pending",
    "message": "Your BVN retrieval request is still being processed. Please check back later."
}
{
    "success": true,
    "transaction_id": "bvn_ret_xxxxxxxxxxxxxxxxxxxxxx",
    "phone": "08031234567",
    "first_name": "Aisha",
    "last_name": "Bello",
    "price": "800.00",
    "date": "2026-09-28 10:15:00",
    "bvn": "22123456789",
    "refunded": false,
    "status": "completed",
    "message": "BVN retrieved successfully."
}
{
    "success": true,
    "transaction_id": "bvn_ret_xxxxxxxxxxxxxxxxxxxxxx",
    "phone": "08031234567",
    "first_name": "Aisha",
    "last_name": "Bello",
    "price": "800.00",
    "date": "2026-09-28 10:15:00",
    "bvn": null,
    "refunded": true,
    "amount_refunded": "800.00",
    "status": "failed",
    "message": "The BVN could not be retrieved for this phone number. Your payment has been refunded."
}

Error Handling

All API responses follow a consistent format. Check the status field for success or error indications.

HTTP Status Codes
200 Success - PDF generated successfully
400 Bad Request - Invalid parameters, insufficient balance, or record not found
429 Too Many Requests - Rate limit exceeded
403 Forbidden - IP address blocked
{
    "status": "success",
    "response_code": "00",
    "user_data": {
        "nin": "12345678901",
        "first_name": "JOHN",
        "last_name": "DOE",
        "middle_name": "MICHAEL",
        "gender": "MALE",
        "date_of_birth": "15-05-1985",
        "phone_number": "08012345678",
        "address": "123 Sample Street, Lagos"
    },
    "message": "PDF generated successfully",
    "pdf_base64": "base64_encoded_data..."
}

HTTP Status: 200 OK

{
    "status": "error",
    "response_code": "01",
    "message": "Invalid NIN number provided",
    "error_code": "INVALID_NIN"
}

HTTP Status: 400 Bad Request

{
    "status": "error",
    "response_code": "02",
    "message": "API Response: Record not found. The ID data you entered does not exist or may be incorrect. Please ensure all details are correct and resubmit"
}

HTTP Status: 400 Bad Request

7 NIN Modification (API)

Manual Pending Service: Submit NIN modification requests on behalf of your users. Each endpoint checks your balance sufficiency and creates a pending request that is processed manually by the admin team. Balance is deducted only when the request is completed. Use the Check Status endpoint to track progress.

All NIN modification endpoints accept JSON (POST) and require your api_key.

ServiceMethodEndpoint
NIN NamePOSThttps://abjiktech.com.ng/api/modification/nin_name.php
NIN PhonePOSThttps://abjiktech.com.ng/api/modification/nin_phone.php
NIN AddressPOSThttps://abjiktech.com.ng/api/modification/nin_address.php
NIN Name Modification — Parameters & Examples

Request Parameters

ParameterTypeRequiredDescription
api_keystringYesYour API key
ninstringYes11-digit NIN
first_namestringYesNew first name
last_namestringYesNew last name
middle_namestringNoNew middle name
{
    "api_key": "YOUR_API_KEY_HERE",
    "nin": "12345678901",
    "first_name": "John",
    "middle_name": "A",
    "last_name": "Doe"
}
{
    "success": true,
    "message": "NIN name modification request submitted successfully.",
    "transaction_id": "nin_name_a1b2c3d4e5f6..."
}
NIN Phone Modification — Parameters & Examples
ParameterTypeRequiredDescription
api_keystringYesYour API key
ninstringYes11-digit NIN
full_namestringYesFull name of NIN holder
phonestringYesNew 11-digit phone number
{
    "api_key": "YOUR_API_KEY_HERE",
    "nin": "12345678901",
    "full_name": "John A Doe",
    "phone": "08012345678"
}
NIN Address Modification — Parameters & Examples
ParameterTypeRequiredDescription
api_keystringYesYour API key
ninstringYes11-digit NIN
address_line1stringYesNew street address
address_line2stringNoAddress line 2
townstringNoTown/City
postal_codestringNoPostal code
statestringYesState of residence
{
    "api_key": "YOUR_API_KEY_HERE",
    "nin": "12345678901",
    "address_line1": "12 Adeola Street",
    "town": "Ikeja",
    "state": "Lagos"
}

8 BVN Modification (API)

Manual Pending Service: Submit BVN modification requests on behalf of your users. BVN modifications use a bank enrollment type that determines the cost. Use get_bvn_banks.php to list available banks and their prices. Each request checks balance sufficiency and is stored as pending and processed manually by the admin team. Balance is deducted only when the request is completed. Use the Check Status endpoint to track progress.

ServiceMethodEndpoint
List BVN BanksPOSThttps://abjiktech.com.ng/api/modification/get_bvn_banks.php
BVN NamePOSThttps://abjiktech.com.ng/api/modification/bvn_name.php
BVN PhonePOSThttps://abjiktech.com.ng/api/modification/bvn_phone.php
BVN AddressPOSThttps://abjiktech.com.ng/api/modification/bvn_address.php
BVN Date of BirthPOSThttps://abjiktech.com.ng/api/modification/bvn_dob.php
Get BVN Banks — Parameters & Example
// Request
{
    "api_key": "YOUR_API_KEY_HERE"
}

// Response
{
    "success": true,
    "count": 3,
    "banks": [
        { "enrollment_type": "ACCESS_BANK", "enrollment_price": 5000 },
        { "enrollment_type": "GTB",         "enrollment_price": 4500 },
        { "enrollment_type": "ZENITH_BANK", "enrollment_price": 5000 }
    ]
}
BVN Name Modification — Parameters & Examples
ParameterTypeRequiredDescription
api_keystringYesYour API key
bvnstringYes11-digit BVN
first_namestringYesNew first name
last_namestringYesNew last name
middle_namestringNoNew middle name
ninstringNoLinked NIN (if available)
enrollment_typestringYesBank key from get_bvn_banks
{
    "api_key": "YOUR_API_KEY_HERE",
    "bvn": "12345678901",
    "first_name": "John",
    "last_name": "Doe",
    "enrollment_type": "ACCESS_BANK"
}
BVN Phone Modification — Parameters & Examples
ParameterTypeRequiredDescription
api_keystringYesYour API key
bvnstringYes11-digit BVN
phonestringYesNew 11-digit phone number
ninstringNoLinked NIN
enrollment_typestringYesBank key from get_bvn_banks
{
    "api_key": "YOUR_API_KEY_HERE",
    "bvn": "12345678901",
    "phone": "08012345678",
    "enrollment_type": "GTB"
}
BVN Address Modification — Parameters & Examples
ParameterTypeRequiredDescription
api_keystringYesYour API key
bvnstringYes11-digit BVN
address_line1stringYesNew street address
address_line2stringNoAddress line 2
townstringNoTown/City
postal_codestringNoPostal code
statestringYesState of residence
ninstringNoLinked NIN
enrollment_typestringYesBank key from get_bvn_banks
BVN Date of Birth Modification — Parameters & Examples
ParameterTypeRequiredDescription
api_keystringYesYour API key
bvnstringYes11-digit BVN
date_of_birthstringYesNew DOB in YYYY-MM-DD format
ninstringNoLinked NIN
enrollment_typestringYesBank key from get_bvn_banks
{
    "api_key": "YOUR_API_KEY_HERE",
    "bvn": "12345678901",
    "date_of_birth": "1990-05-15",
    "enrollment_type": "ZENITH_BANK"
}

9 Check Modification Status (API)

Look up the current status of any modification request using its transaction_id, nin, or bvn.

ServiceMethodEndpoint
Check Modification StatusPOSThttps://abjiktech.com.ng/api/modification/check_status.php
Parameters & Examples
ParameterTypeRequiredDescription
api_keystringOptionalYour API key (Not required if checking via dashboard session)
transaction_idstringOptionalTransaction ID from the original request (Must provide transaction_id, nin, or bvn)
ninstringOptionalNIN associated with the request (Must provide transaction_id, nin, or bvn)
bvnstringOptionalBVN associated with the request (Must provide transaction_id, nin, or bvn)
typestringYesOne of: nin_name, nin_phone, nin_address, bvn_name, bvn_phone, bvn_address, bvn_dob
// Request
{
    "api_key": "YOUR_API_KEY_HERE",
    "transaction_id": "nin_name_a1b2c3d4e5f6...",
    "type": "nin_name"
}

// Response (pending)
{
    "success": true,
    "transaction_id": "nin_name_a1b2c3d4e5f6...",
    "type": "nin_name",
    "status": "pending",
    "response": null,
    "data": {
        "nin": "12345678901",
        "firstname": "John",
        "middlename": "A",
        "surname": "Doe",
        "created_at": "2026-05-08 10:23:45"
    }
}

// Response (completed)
{
    "success": true,
    "status": "completed",
    "response": "Modification successful. TID: 2345678"
}

9 NIN Validation (API)

Manual Pending Service: Submit NIN validation requests for error types like "No Record Found", "SIM Validation", etc. Each request checks balance sufficiency and creates a pending request that is processed manually by the admin team. Balance is deducted only when the request is completed. Use the Check Status endpoint to track progress.

ServiceMethodEndpoint
NIN ValidationPOSThttps://abjiktech.com.ng/api/verification/validation.php
NIN Validation — Parameters & Examples

Request Parameters

ParameterTypeRequiredDescription
api_keystringYesYour API key
ninstringYes11-digit NIN
error_typestringYesError type: no_record, simbank_validation, modification, photo_error
{
    "api_key": "YOUR_API_KEY_HERE",
    "nin": "12345678901",
    "error_type": "no_record"
}
{
    "success": true,
    "message": "NIN validation request submitted successfully",
    "data": {
        "transaction_id": "nin_val_a1b2c3d4e5f6...",
        "nin": "12345678901",
        "error_type": "no_record",
        "status": "pending",
        "price": "500.00"
    }
}

10 IPE Clearance (API)

Manual Pending Service: Submit IPE clearance requests using a tracking ID. Each request checks balance sufficiency and creates a pending request that is processed manually by the admin team. Balance is deducted only when the request is completed. Use the Check Status endpoint to track progress.

ServiceMethodEndpoint
IPE ClearancePOSThttps://abjiktech.com.ng/api/verification/ipe_clearance.php
IPE Clearance — Parameters & Examples

Request Parameters

ParameterTypeRequiredDescription
api_keystringYesYour API key
trackingIDstringYesIPE tracking ID
{
    "api_key": "YOUR_API_KEY_HERE",
    "trackingID": "IPE123456789"
}
{
    "success": true,
    "message": "IPE clearance request submitted successfully",
    "data": {
        "transaction_id": "ipe_a1b2c3d4e5f6...",
        "trackingID": "IPE123456789",
        "status": "pending",
        "price": "1000.00"
    }
}

9 Check Request Status (API)

Check the status of your pending NIN Validation, IPE Clearance, NIN Modification, or BVN Modification requests. All manual services return a transaction_id that you can use to track progress.

Service Method Endpoint URL
Check Status POST https://abjiktech.com.ng/api/verification/get_status.php

Status Flow: pending → processing → completed or failed. Check regularly using the transaction_id from your submission.

Parameters & Examples — Click to expand

POST https://abjiktech.com.ng/api/verification/get_status.php
Request Parameters
Parameter Type Required Description
api_key string Yes Your API authentication key
transaction_id string Yes The transaction_id returned from your submission request
{
    "api_key": "YOUR_API_KEY_HERE",
    "transaction_id": "nin_val_a1b2c3d4e5f6g7h8i9j0kl"
}
{
    "success": true,
    "message": "Transaction status retrieved successfully.",
    "data": {
        "transaction_id": "nin_val_a1b2c3d4e5f6g7h8i9j0kl",
        "service_type": "NIN Validation",
        "nin": "12345678901",
        "error_type": "no_record",
        "status": "pending",
        "price": "300.00",
        "submitted_at": "2026-05-09 14:30:25",
        "note": "Your request is being processed by our team."
    }
}

HTTP Status: 200 OK

{
    "success": true,
    "message": "Transaction status retrieved successfully.",
    "data": {
        "transaction_id": "ipe_a1b2c3d4e5f6a1b2c3d4e5f6",
        "service_type": "IPE Clearance",
        "tracking_id": "IPE202400001",
        "status": "completed",
        "price": "500.00",
        "submitted_at": "2026-05-09 10:15:30",
        "processed_at": "2026-05-09 16:45:12",
        "message": "IPE clearance has been completed successfully. New NIN and tracking ID are available.",
        "newNIN": "12345678901",
        "newTrackingID": "IPE202400099"
    }
}

HTTP Status: 200 OK

{
    "success": true,
    "message": "Transaction status retrieved successfully.",
    "data": {
        "transaction_id": "bvn_name_a1b2c3d4e5f6...",
        "service_type": "BVN Name Modification",
        "bvn": "12345678901",
        "detail": "John Doe",
        "status": "failed",
        "price": "5000.00",
        "submitted_at": "2026-05-08 09:20:15",
        "failure_reason": "Request could not be processed."
    }
}

HTTP Status: 200 OK

$apiKey = "YOUR_API_KEY_HERE";
$transactionId = "nin_val_a1b2c3d4e5f6g7h8i9j0kl";

$url = 'https://abjiktech.com.ng/api/verification/get_status.php';

$payload = json_encode([
    'api_key' => $apiKey,
    'transaction_id' => $transactionId
]);

$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST => true,
    CURLOPT_POSTFIELDS => $payload,
    CURLOPT_HTTPHEADER => [
        'Content-Type: application/json',
        'Content-Length: ' . strlen($payload)
    ]
]);

$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

$result = json_decode($response, true);

if ($result['success'] === true) {
    echo "Status: " . $result['data']['status'];
    echo "Service: " . $result['data']['service_type'];
    if ($result['data']['status'] === 'completed') {
        echo "Result: " . $result['data']['result_data'];
    } elseif ($result['data']['status'] === 'failed') {
        echo "Reason: " . $result['data']['failure_reason'];
    }
} else {
    echo "Error: " . $result['message'];
}

Webhooks (Real-Time Notifications)

To avoid constantly polling our single status check endpoint, you can configure a Webhook URL in your API Summary / Developer Dashboard. Whenever an admin updates the status of your manual processing requests (NIN Modification, BVN Modification, IPE Clearance, etc.), we will immediately send an HTTP POST request to your specified Webhook URL with the updated status and data.

POST Your Configured Webhook Endpoint

Example Webhook Payload

When an event occurs, your endpoint will receive a JSON payload that looks like this:

{
  "event_type": "modification_status_update",
  "timestamp": "2026-05-11T12:00:00+01:00",
  "webhook_id": "wh_a1b2c3d4e5f6g7h8i9j0",
  "data": {
    "transaction_id": "MOD-1234567890",
    "service_type": "NIN Modification",
    "status": "Successful",
    "remarks": "Modification completed successfully",
    "updated_at": "2026-05-11 12:00:00"
  }
}

How to Handle Webhooks (PHP Example)

Your webhook handler should be set up to accept incoming JSON streams, process them, and return an HTTP 200 response to acknowledge receipt.

<?php
// read incoming JSON payload
$input = file_get_contents("php://input");
$event = json_decode($input, true);

// Verify webhook has required data
if (isset($event['event_type']) && isset($event['data'])) {
    
    // Extract transaction detail
    $transactionId = $event['data']['transaction_id'];
    $newStatus = $event['data']['status'];
    $remarks = $event['data']['remarks'];
    
    // Update your database...
    // mysqli_query($conn, "UPDATE my_orders SET status='$newStatus' WHERE txn_id='$transactionId'");

    // IMPORTANT: Always respond with 200 OK so we know you received it.
    http_response_code(200);
    echo json_encode(["status" => "success", "message" => "Webhook received"]);
} else {
    // Bad request
    http_response_code(400);
}
?>