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 ↓
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. Refundable: if the provider rejects the submission, you are automatically refunded.

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

ParameterTypeRequiredDescription
api_keystringYesYour API authentication key
tracking_idstringYesNIN tracking ID (5–30 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"
    },
    "provider": { "success": true, "approved": true, "category": "to_get_slip", "tracking_id": "0SXXXXXXXXXXX" }
}

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
// Completed
{
    "success": true,
    "status": "completed",
    "tracking_id": "0SXXXXXXXXXXX",
    "nin": "12345678901",
    "message": "Personalization completed."
}

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/modification/check_status.php

Status Flow: pendingprocessingcompleted or failed. Check regularly using the transaction_id from your submission.

Parameters & Examples — Click to expand

POST https://abjiktech.com.ng/api/modification/check_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",
        "result_data": "IPE clearance completed successfully. Reference: IPE-789012",
        "note": "Request processed successfully."
    }
}

HTTP Status: 200 OK

{
    "success": true,
    "message": "Transaction status retrieved successfully.",
    "data": {
        "transaction_id": "bvn_name_a1b2c3d4e5f6...",
        "service_type": "BVN Name Modification",
        "bvn": "12345678901",
        "new_value": "John Doe",
        "status": "failed",
        "price": "5000.00",
        "submitted_at": "2026-05-08 09:20:15",
        "processed_at": "2026-05-09 11:30:45",
        "failure_reason": "Invalid BVN or enrollment type not supported.",
        "note": "Request could not be processed."
    }
}

HTTP Status: 200 OK

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

$url = 'https://abjiktech.com.ng/api/modification/check_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);
}
?>