IDFIXER Docs v1
REST API · v1 · Live

Identity & telecom APIs, built for builders.

Verify NIN and BVN records, clear IPE, run validations and personalization, and buy airtime and data, all from your own app or website.

40Endpoints
6Categories
10Free calls
4Languages

Getting Started

  1. Create an account Sign up on IDFIXER and fund your wallet. API calls are paid from your main wallet balance.
  2. Generate your API key Open the Developer API page and create a key.
  3. Send a POST request Send a JSON body that includes your api_key, from your server.
  4. Track your calls Every call, charge and refund is listed in your Developer API history, with CSV export.
Base URL
https://idfixer.com.ng/api/v1
Method
POST
Content-Type
application/json
Auth
api_key in the JSON body

Authentication

Every request must include your API key as the api_key field in the JSON body. You can send it in an X-API-Key header or as Authorization: Bearer YOUR_API_KEY instead. Always call https://, never http://. There is no separate test mode: every call is live, and paid calls are charged to your wallet.

Replace YOUR_API_KEY in the examples with your key. Sign in to see the examples with your key filled in.
Keep your API key secret. Only use it on your server, never in website JavaScript or a mobile app, because anyone who has it can spend your balance. If it leaks, regenerate it on the Developer API page; the old key stops working immediately.
Seeing "Failed to fetch" in your app? The request never reached us, or the reply was blocked. Check that the URL starts with https://idfixer.com.ng/api/v1/ (not http://), and that the path matches an endpoint on this page. Also check that your own server isn't timing out: slip endpoints can take up to about 60 seconds and return a large base64 PDF.

Responses & Billing

Every response is JSON with a success field. Successful calls return "success": true, usually with a transaction_id (or reference) you should store. Failed calls return "success": false and a message.

LabelMeaning
InstantThe result is in the response.
AsyncThe request is accepted and processed in the background. Call the matching status endpoint until it finishes.
ManualProcessed by our team. You get a reference and can follow progress in your dashboard Transaction History.
ChargedYour wallet is charged your API price for that service.
FreeNo charge; only a valid API key is needed.
You are not charged for failed lookups. If a verification finds no record or the provider is down, the charge is not taken (or is refunded automatically). Your prices are shown on the Developer API page.

Errors

Errors use standard HTTP status codes and always include a readable message:

● Error response
{
    "success": false,
    "message": "Insufficient balance."
}
StatusWhen it happens
400A field is missing or invalid (e.g. NIN must be exactly 11 digits.), your balance is too low (Insufficient balance.), or the record was not found.
401Invalid or inactive API key. Check the key, or regenerate it.
403The service is not enabled for your API key (e.g. data purchase). Contact support.
404No record exists (e.g. No record found for this BVN.), or the request you're checking was not found.
422This option is not available through the API; use the dashboard.
500A configuration problem on our side. Contact support.
502 / 503The upstream provider is busy or unavailable. You are not charged; retry after a short wait.

Webhooks

Instant IPE Clearance can notify your server. Save a webhook URL on the Instant IPE Documentation page, and every Instant IPE result is also sent to it as a POST request:

POST → your webhook URL
{
    "tracking_id": "0SLT9LJS17C5G5D",
    "response": "0SLT9LJS17C5G5D",
    "status": "Successful"
}

Delivery is a single attempt with a 5-second timeout and is not retried. Always treat the API response (or a status check) as the source of truth.

Testing

There is no sandbox or test key: every call is live. You can still test your integration without spending money:

  1. Check your key for free. Call List Data Plans. It is free, so a 200 response means your key and request format are correct. A 401 means the key is wrong.
  2. Status endpoints are free. Calls such as Check Status, NIN Validation Status and Personalization Status cost nothing, so you can poll them as often as you need.
  3. Failed lookups are not charged. A missing or invalid field is rejected with a 400 before any charge, so you can safely test your error handling.
  4. Then do one real call. Use a NIN or BVN you are allowed to check and confirm that the charge and result appear in your dashboard Transaction History.

NIN Verification

8 endpoints

NIN Verify (all slips)

Charged Instant
POST https://idfixer.com.ng/api/v1/nin/verify

One endpoint for every NIN slip. method is nin (default), phone or demographic. slip_type is premium (default), standard, regular or vnin; vnin only works with method nin. Send nin for method nin, phone for method phone, or firstname, lastname, dob and gender for method demographic. You are charged the same as the matching endpoint below, and nothing if no record is found.

Body parameters

api_key
string required
Your secret API key.
method
enum optional
nin (default), phone or demographic.
slip_type
enum optional
premium (default), standard, regular or vnin.
nin
string optional
11-digit NIN, for method nin.
curl -X POST 'https://idfixer.com.ng/api/v1/nin/verify' \
  -H 'Content-Type: application/json' \
  -d '{"api_key":"YOUR_API_KEY","method":"nin","slip_type":"standard","nin":"12345678901"}'
<?php
$ch = curl_init('https://idfixer.com.ng/api/v1/nin/verify');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => ['Content-Type: application/json'],
    CURLOPT_POSTFIELDS     => json_encode(array (
      'api_key' => 'YOUR_API_KEY',
      'method' => 'nin',
      'slip_type' => 'standard',
      'nin' => '12345678901',
    )),
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);

print_r($response);
const response = await fetch('https://idfixer.com.ng/api/v1/nin/verify', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
      "api_key": "YOUR_API_KEY",
      "method": "nin",
      "slip_type": "standard",
      "nin": "12345678901"
  }),
});
const data = await response.json();
console.log(data);
import requests

response = requests.post(
    'https://idfixer.com.ng/api/v1/nin/verify',
    json={
        "api_key": "YOUR_API_KEY",
        "method": "nin",
        "slip_type": "standard",
        "nin": "12345678901"
    },
    timeout=60,
)
print(response.json())
● 200 OK
{
    "success": true,
    "transaction_id": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5",
    "user_data": {
        "status": "success",
        "message": "Record found",
        "user_data": {
            "nin": "12345678901",
            "firstName": "JOHN",
            "middleName": "ADE",
            "surname": "DOE",
            "gender": "m",
            "birthDate": "15-05-1990",
            "telephoneNo": "08012345678",
            "photo": "<base64 string>"
        },
        "pdf_base64": "<base64 string>",
        "address": "12 SAMPLE STREET, IKEJA, LAGOS"
    }
}

NIN Premium Slip

Charged Instant
POST https://idfixer.com.ng/api/v1/nin/premium-slip

Returns the full NIN record, with photo and a printable premium slip (pdf_base64).

Body parameters

api_key
string required
Your secret API key.
nin
string required
11-digit National Identification Number.
curl -X POST 'https://idfixer.com.ng/api/v1/nin/premium-slip' \
  -H 'Content-Type: application/json' \
  -d '{"api_key":"YOUR_API_KEY","nin":"12345678901"}'
<?php
$ch = curl_init('https://idfixer.com.ng/api/v1/nin/premium-slip');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => ['Content-Type: application/json'],
    CURLOPT_POSTFIELDS     => json_encode(array (
      'api_key' => 'YOUR_API_KEY',
      'nin' => '12345678901',
    )),
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);

print_r($response);
const response = await fetch('https://idfixer.com.ng/api/v1/nin/premium-slip', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
      "api_key": "YOUR_API_KEY",
      "nin": "12345678901"
  }),
});
const data = await response.json();
console.log(data);
import requests

response = requests.post(
    'https://idfixer.com.ng/api/v1/nin/premium-slip',
    json={
        "api_key": "YOUR_API_KEY",
        "nin": "12345678901"
    },
    timeout=60,
)
print(response.json())
● 200 OK
{
    "success": true,
    "transaction_id": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5",
    "user_data": {
        "status": "success",
        "message": "Record found",
        "user_data": {
            "nin": "12345678901",
            "firstName": "JOHN",
            "middleName": "ADE",
            "surname": "DOE",
            "gender": "m",
            "birthDate": "15-05-1990",
            "telephoneNo": "08012345678",
            "photo": "<base64 string>"
        },
        "pdf_base64": "<base64 string>",
        "address": "12 SAMPLE STREET, IKEJA, LAGOS"
    }
}
● 400 Error
{
    "success": false,
    "message": "Record not found."
}

NIN Standard Slip

Charged Instant
POST https://idfixer.com.ng/api/v1/nin/standard-slip

Same lookup as Premium, returned with the standard slip design.

Body parameters

api_key
string required
Your secret API key.
nin
string required
11-digit National Identification Number.
curl -X POST 'https://idfixer.com.ng/api/v1/nin/standard-slip' \
  -H 'Content-Type: application/json' \
  -d '{"api_key":"YOUR_API_KEY","nin":"12345678901"}'
<?php
$ch = curl_init('https://idfixer.com.ng/api/v1/nin/standard-slip');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => ['Content-Type: application/json'],
    CURLOPT_POSTFIELDS     => json_encode(array (
      'api_key' => 'YOUR_API_KEY',
      'nin' => '12345678901',
    )),
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);

print_r($response);
const response = await fetch('https://idfixer.com.ng/api/v1/nin/standard-slip', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
      "api_key": "YOUR_API_KEY",
      "nin": "12345678901"
  }),
});
const data = await response.json();
console.log(data);
import requests

response = requests.post(
    'https://idfixer.com.ng/api/v1/nin/standard-slip',
    json={
        "api_key": "YOUR_API_KEY",
        "nin": "12345678901"
    },
    timeout=60,
)
print(response.json())
● 200 OK
{
    "success": true,
    "transaction_id": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5",
    "user_data": {
        "status": "success",
        "message": "Record found",
        "user_data": {
            "nin": "12345678901",
            "firstName": "JOHN",
            "middleName": "ADE",
            "surname": "DOE",
            "gender": "m",
            "birthDate": "15-05-1990",
            "telephoneNo": "08012345678",
            "photo": "<base64 string>"
        },
        "pdf_base64": "<base64 string>",
        "address": "12 SAMPLE STREET, IKEJA, LAGOS"
    }
}

NIN Regular Slip

Charged Instant
POST https://idfixer.com.ng/api/v1/nin/regular-slip

Same lookup as Premium, returned with the regular slip design.

Body parameters

api_key
string required
Your secret API key.
nin
string required
11-digit National Identification Number.
curl -X POST 'https://idfixer.com.ng/api/v1/nin/regular-slip' \
  -H 'Content-Type: application/json' \
  -d '{"api_key":"YOUR_API_KEY","nin":"12345678901"}'
<?php
$ch = curl_init('https://idfixer.com.ng/api/v1/nin/regular-slip');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => ['Content-Type: application/json'],
    CURLOPT_POSTFIELDS     => json_encode(array (
      'api_key' => 'YOUR_API_KEY',
      'nin' => '12345678901',
    )),
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);

print_r($response);
const response = await fetch('https://idfixer.com.ng/api/v1/nin/regular-slip', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
      "api_key": "YOUR_API_KEY",
      "nin": "12345678901"
  }),
});
const data = await response.json();
console.log(data);
import requests

response = requests.post(
    'https://idfixer.com.ng/api/v1/nin/regular-slip',
    json={
        "api_key": "YOUR_API_KEY",
        "nin": "12345678901"
    },
    timeout=60,
)
print(response.json())
● 200 OK
{
    "success": true,
    "transaction_id": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5",
    "user_data": {
        "status": "success",
        "message": "Record found",
        "user_data": {
            "nin": "12345678901",
            "firstName": "JOHN",
            "middleName": "ADE",
            "surname": "DOE",
            "gender": "m",
            "birthDate": "15-05-1990",
            "telephoneNo": "08012345678",
            "photo": "<base64 string>"
        },
        "pdf_base64": "<base64 string>",
        "address": "12 SAMPLE STREET, IKEJA, LAGOS"
    }
}

NIN Data (no slip)

Charged Instant
POST https://idfixer.com.ng/api/v1/nin/by-nin

Returns the NIN record data only, for when you do not need a printable slip.

Body parameters

api_key
string required
Your secret API key.
nin
string required
11-digit National Identification Number.
curl -X POST 'https://idfixer.com.ng/api/v1/nin/by-nin' \
  -H 'Content-Type: application/json' \
  -d '{"api_key":"YOUR_API_KEY","nin":"12345678901"}'
<?php
$ch = curl_init('https://idfixer.com.ng/api/v1/nin/by-nin');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => ['Content-Type: application/json'],
    CURLOPT_POSTFIELDS     => json_encode(array (
      'api_key' => 'YOUR_API_KEY',
      'nin' => '12345678901',
    )),
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);

print_r($response);
const response = await fetch('https://idfixer.com.ng/api/v1/nin/by-nin', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
      "api_key": "YOUR_API_KEY",
      "nin": "12345678901"
  }),
});
const data = await response.json();
console.log(data);
import requests

response = requests.post(
    'https://idfixer.com.ng/api/v1/nin/by-nin',
    json={
        "api_key": "YOUR_API_KEY",
        "nin": "12345678901"
    },
    timeout=60,
)
print(response.json())
● 200 OK
{
    "success": true,
    "transaction_id": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5",
    "user_data": {
        "status": "success",
        "message": "Record found",
        "user_data": {
            "nin": "12345678901",
            "firstName": "JOHN",
            "middleName": "ADE",
            "surname": "DOE",
            "gender": "m",
            "birthDate": "15-05-1990",
            "telephoneNo": "08012345678",
            "photo": "<base64 string>"
        },
        "pdf_base64": "<base64 string>",
        "address": "12 SAMPLE STREET, IKEJA, LAGOS"
    }
}

NIN by Phone Number

Charged Instant
POST https://idfixer.com.ng/api/v1/nin/by-phone

Finds a NIN record using the phone number registered to it.

Body parameters

api_key
string required
Your secret API key.
phone
string required
11-digit phone number, e.g. 08012345678.
variant
string optional
Slip design: premium (default), standard or regular.
curl -X POST 'https://idfixer.com.ng/api/v1/nin/by-phone' \
  -H 'Content-Type: application/json' \
  -d '{"api_key":"YOUR_API_KEY","phone":"08012345678","variant":"premium"}'
<?php
$ch = curl_init('https://idfixer.com.ng/api/v1/nin/by-phone');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => ['Content-Type: application/json'],
    CURLOPT_POSTFIELDS     => json_encode(array (
      'api_key' => 'YOUR_API_KEY',
      'phone' => '08012345678',
      'variant' => 'premium',
    )),
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);

print_r($response);
const response = await fetch('https://idfixer.com.ng/api/v1/nin/by-phone', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
      "api_key": "YOUR_API_KEY",
      "phone": "08012345678",
      "variant": "premium"
  }),
});
const data = await response.json();
console.log(data);
import requests

response = requests.post(
    'https://idfixer.com.ng/api/v1/nin/by-phone',
    json={
        "api_key": "YOUR_API_KEY",
        "phone": "08012345678",
        "variant": "premium"
    },
    timeout=60,
)
print(response.json())
● 200 OK
{
    "success": true,
    "transaction_id": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5",
    "user_data": {
        "status": "success",
        "message": "Record found",
        "user_data": {
            "nin": "12345678901",
            "firstName": "JOHN",
            "middleName": "ADE",
            "surname": "DOE",
            "gender": "m",
            "birthDate": "15-05-1990",
            "telephoneNo": "08012345678",
            "photo": "<base64 string>"
        },
        "pdf_base64": "<base64 string>",
        "address": "12 SAMPLE STREET, IKEJA, LAGOS"
    }
}

NIN by Demographics

Charged Instant
POST https://idfixer.com.ng/api/v1/nin/by-demo

Finds a NIN record using name, date of birth and gender.

Body parameters

api_key
string required
Your secret API key.
firstname
string required
First name.
lastname
string required
Surname.
dob
string required
Date of birth: DD-MM-YYYY (YYYY-MM-DD and DD/MM/YYYY are also accepted).
gender
string required
m or f (male / female also accepted).
variant
string optional
Slip design: premium (default), standard or regular.
curl -X POST 'https://idfixer.com.ng/api/v1/nin/by-demo' \
  -H 'Content-Type: application/json' \
  -d '{"api_key":"YOUR_API_KEY","firstname":"JOHN","lastname":"DOE","dob":"15-05-1990","gender":"m"}'
<?php
$ch = curl_init('https://idfixer.com.ng/api/v1/nin/by-demo');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => ['Content-Type: application/json'],
    CURLOPT_POSTFIELDS     => json_encode(array (
      'api_key' => 'YOUR_API_KEY',
      'firstname' => 'JOHN',
      'lastname' => 'DOE',
      'dob' => '15-05-1990',
      'gender' => 'm',
    )),
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);

print_r($response);
const response = await fetch('https://idfixer.com.ng/api/v1/nin/by-demo', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
      "api_key": "YOUR_API_KEY",
      "firstname": "JOHN",
      "lastname": "DOE",
      "dob": "15-05-1990",
      "gender": "m"
  }),
});
const data = await response.json();
console.log(data);
import requests

response = requests.post(
    'https://idfixer.com.ng/api/v1/nin/by-demo',
    json={
        "api_key": "YOUR_API_KEY",
        "firstname": "JOHN",
        "lastname": "DOE",
        "dob": "15-05-1990",
        "gender": "m"
    },
    timeout=60,
)
print(response.json())
● 200 OK
{
    "success": true,
    "transaction_id": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5",
    "user_data": {
        "status": "success",
        "message": "Record found",
        "user_data": {
            "nin": "12345678901",
            "firstName": "JOHN",
            "middleName": "ADE",
            "surname": "DOE",
            "gender": "m",
            "birthDate": "15-05-1990",
            "telephoneNo": "08012345678",
            "photo": "<base64 string>"
        },
        "pdf_base64": "<base64 string>",
        "address": "12 SAMPLE STREET, IKEJA, LAGOS"
    }
}

vNIN Slip

Charged Instant
POST https://idfixer.com.ng/api/v1/vnin/premium-slip

Generates a virtual NIN (vNIN) slip. Only available by NIN number.

Body parameters

api_key
string required
Your secret API key.
nin
string required
11-digit National Identification Number.
curl -X POST 'https://idfixer.com.ng/api/v1/vnin/premium-slip' \
  -H 'Content-Type: application/json' \
  -d '{"api_key":"YOUR_API_KEY","nin":"12345678901"}'
<?php
$ch = curl_init('https://idfixer.com.ng/api/v1/vnin/premium-slip');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => ['Content-Type: application/json'],
    CURLOPT_POSTFIELDS     => json_encode(array (
      'api_key' => 'YOUR_API_KEY',
      'nin' => '12345678901',
    )),
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);

print_r($response);
const response = await fetch('https://idfixer.com.ng/api/v1/vnin/premium-slip', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
      "api_key": "YOUR_API_KEY",
      "nin": "12345678901"
  }),
});
const data = await response.json();
console.log(data);
import requests

response = requests.post(
    'https://idfixer.com.ng/api/v1/vnin/premium-slip',
    json={
        "api_key": "YOUR_API_KEY",
        "nin": "12345678901"
    },
    timeout=60,
)
print(response.json())
● 200 OK
{
    "success": true,
    "transaction_id": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5",
    "user_data": {
        "status": "success",
        "message": "Record found",
        "user_data": {
            "nin": "12345678901",
            "firstName": "JOHN",
            "middleName": "ADE",
            "surname": "DOE",
            "gender": "m",
            "birthDate": "15-05-1990",
            "telephoneNo": "08012345678",
            "photo": "<base64 string>"
        },
        "pdf_base64": "<base64 string>",
        "address": "12 SAMPLE STREET, IKEJA, LAGOS"
    }
}

BVN Services

7 endpoints

BVN Verify (all slips)

Charged Instant
POST https://idfixer.com.ng/api/v1/bvn/verify

One endpoint for both BVN slips. slip_type is premium (default) or standard. Charged the same as BVN Premium Slip or BVN Standard Slip, and nothing if no record is found.

Body parameters

api_key
string required
Your secret API key.
bvn
string required
11-digit BVN.
slip_type
enum optional
premium (default) or standard.
curl -X POST 'https://idfixer.com.ng/api/v1/bvn/verify' \
  -H 'Content-Type: application/json' \
  -d '{"api_key":"YOUR_API_KEY","bvn":"12345678901","slip_type":"premium"}'
<?php
$ch = curl_init('https://idfixer.com.ng/api/v1/bvn/verify');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => ['Content-Type: application/json'],
    CURLOPT_POSTFIELDS     => json_encode(array (
      'api_key' => 'YOUR_API_KEY',
      'bvn' => '12345678901',
      'slip_type' => 'premium',
    )),
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);

print_r($response);
const response = await fetch('https://idfixer.com.ng/api/v1/bvn/verify', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
      "api_key": "YOUR_API_KEY",
      "bvn": "12345678901",
      "slip_type": "premium"
  }),
});
const data = await response.json();
console.log(data);
import requests

response = requests.post(
    'https://idfixer.com.ng/api/v1/bvn/verify',
    json={
        "api_key": "YOUR_API_KEY",
        "bvn": "12345678901",
        "slip_type": "premium"
    },
    timeout=60,
)
print(response.json())
● 200 OK
{
    "success": true,
    "transaction_id": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5",
    "user_data": {
        "bvn": "22123456789",
        "nin": "12345678901",
        "first_name": "JOHN",
        "middle_name": "ADE",
        "last_name": "DOE",
        "date_of_birth": "15-05-1990",
        "gender": "Male",
        "phone": "08012345678",
        "address": "12 SAMPLE STREET, IKEJA",
        "state_of_origin": "LAGOS",
        "lga": "IKEJA",
        "name_on_card": "JOHN DOE",
        "photo": "<base64 string>",
        "pdf_base64": "<base64 string>"
    }
}

BVN Premium Slip

Charged Instant
POST https://idfixer.com.ng/api/v1/bvn/premium-slip

Returns the full BVN record, with photo and a printable premium slip.

Body parameters

api_key
string required
Your secret API key.
bvn
string required
11-digit Bank Verification Number.
curl -X POST 'https://idfixer.com.ng/api/v1/bvn/premium-slip' \
  -H 'Content-Type: application/json' \
  -d '{"api_key":"YOUR_API_KEY","bvn":"22123456789"}'
<?php
$ch = curl_init('https://idfixer.com.ng/api/v1/bvn/premium-slip');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => ['Content-Type: application/json'],
    CURLOPT_POSTFIELDS     => json_encode(array (
      'api_key' => 'YOUR_API_KEY',
      'bvn' => '22123456789',
    )),
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);

print_r($response);
const response = await fetch('https://idfixer.com.ng/api/v1/bvn/premium-slip', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
      "api_key": "YOUR_API_KEY",
      "bvn": "22123456789"
  }),
});
const data = await response.json();
console.log(data);
import requests

response = requests.post(
    'https://idfixer.com.ng/api/v1/bvn/premium-slip',
    json={
        "api_key": "YOUR_API_KEY",
        "bvn": "22123456789"
    },
    timeout=60,
)
print(response.json())
● 200 OK
{
    "success": true,
    "transaction_id": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5",
    "user_data": {
        "bvn": "22123456789",
        "nin": "12345678901",
        "first_name": "JOHN",
        "middle_name": "ADE",
        "last_name": "DOE",
        "date_of_birth": "15-05-1990",
        "gender": "Male",
        "phone": "08012345678",
        "address": "12 SAMPLE STREET, IKEJA",
        "state_of_origin": "LAGOS",
        "lga": "IKEJA",
        "name_on_card": "JOHN DOE",
        "photo": "<base64 string>",
        "pdf_base64": "<base64 string>"
    }
}
● 404 Error
{
    "success": false,
    "message": "No record found for this BVN."
}

BVN Standard Slip

Charged Instant
POST https://idfixer.com.ng/api/v1/bvn/standard-slip

Same lookup as BVN Premium, returned with the standard slip design.

Body parameters

api_key
string required
Your secret API key.
bvn
string required
11-digit Bank Verification Number.
curl -X POST 'https://idfixer.com.ng/api/v1/bvn/standard-slip' \
  -H 'Content-Type: application/json' \
  -d '{"api_key":"YOUR_API_KEY","bvn":"22123456789"}'
<?php
$ch = curl_init('https://idfixer.com.ng/api/v1/bvn/standard-slip');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => ['Content-Type: application/json'],
    CURLOPT_POSTFIELDS     => json_encode(array (
      'api_key' => 'YOUR_API_KEY',
      'bvn' => '22123456789',
    )),
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);

print_r($response);
const response = await fetch('https://idfixer.com.ng/api/v1/bvn/standard-slip', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
      "api_key": "YOUR_API_KEY",
      "bvn": "22123456789"
  }),
});
const data = await response.json();
console.log(data);
import requests

response = requests.post(
    'https://idfixer.com.ng/api/v1/bvn/standard-slip',
    json={
        "api_key": "YOUR_API_KEY",
        "bvn": "22123456789"
    },
    timeout=60,
)
print(response.json())
● 200 OK
{
    "success": true,
    "transaction_id": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5",
    "user_data": {
        "bvn": "22123456789",
        "nin": "12345678901",
        "first_name": "JOHN",
        "middle_name": "ADE",
        "last_name": "DOE",
        "date_of_birth": "15-05-1990",
        "gender": "Male",
        "phone": "08012345678",
        "address": "12 SAMPLE STREET, IKEJA",
        "state_of_origin": "LAGOS",
        "lga": "IKEJA",
        "name_on_card": "JOHN DOE",
        "photo": "<base64 string>",
        "pdf_base64": "<base64 string>"
    }
}
● 404 Error
{
    "success": false,
    "message": "No record found for this BVN."
}

BVN Retrieval

Charged Async
POST https://idfixer.com.ng/api/v1/bvn/retrieval

Finds a BVN from a phone number and name. You get a transaction_id back; poll BVN Retrieval Status for the result. If no BVN is found, the charge is refunded automatically. Set retrieval_type to central_risk to submit a Central Risk ticket instead (processed by our team).

Body parameters

api_key
string required
Your secret API key.
retrieval_type
string optional
bvn_retrieval (default) or central_risk.
phone
string required
11-digit phone number (bvn_retrieval).
first_name
string required
First name (bvn_retrieval).
middle_name
string optional
Middle name (bvn_retrieval).
last_name
string required
Surname (bvn_retrieval).
ticket_id
string optional
Required when retrieval_type is central_risk.
batch_id
string optional
Optional, central_risk only.
curl -X POST 'https://idfixer.com.ng/api/v1/bvn/retrieval' \
  -H 'Content-Type: application/json' \
  -d '{"api_key":"YOUR_API_KEY","retrieval_type":"bvn_retrieval","phone":"08012345678","first_name":"JOHN","last_name":"DOE"}'
<?php
$ch = curl_init('https://idfixer.com.ng/api/v1/bvn/retrieval');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => ['Content-Type: application/json'],
    CURLOPT_POSTFIELDS     => json_encode(array (
      'api_key' => 'YOUR_API_KEY',
      'retrieval_type' => 'bvn_retrieval',
      'phone' => '08012345678',
      'first_name' => 'JOHN',
      'last_name' => 'DOE',
    )),
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);

print_r($response);
const response = await fetch('https://idfixer.com.ng/api/v1/bvn/retrieval', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
      "api_key": "YOUR_API_KEY",
      "retrieval_type": "bvn_retrieval",
      "phone": "08012345678",
      "first_name": "JOHN",
      "last_name": "DOE"
  }),
});
const data = await response.json();
console.log(data);
import requests

response = requests.post(
    'https://idfixer.com.ng/api/v1/bvn/retrieval',
    json={
        "api_key": "YOUR_API_KEY",
        "retrieval_type": "bvn_retrieval",
        "phone": "08012345678",
        "first_name": "JOHN",
        "last_name": "DOE"
    },
    timeout=60,
)
print(response.json())
● 200 OK
{
    "success": true,
    "reference": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5",
    "transaction_id": "BVNR3F9A1C27D84E6B5F0A9C2D1E",
    "request_status": "pending",
    "message": "BVN retrieval submitted. Poll /api/v1/bvn/retrieval-status with this transaction_id for the result."
}

BVN Retrieval Status

Free Instant
POST https://idfixer.com.ng/api/v1/bvn/retrieval-status

Checks a BVN Retrieval. data.status is In-Progress, Successful (with bvn and full_name) or Failed (refunded: true). Poll every few seconds until it is no longer In-Progress.

Body parameters

api_key
string required
Your secret API key.
transaction_id
string optional
transaction_id from BVN Retrieval. Send this or reference.
reference
string optional
reference from BVN Retrieval.
curl -X POST 'https://idfixer.com.ng/api/v1/bvn/retrieval-status' \
  -H 'Content-Type: application/json' \
  -d '{"api_key":"YOUR_API_KEY","transaction_id":"BVNR3F9A1C27D84E6B5F0A9C2D1E"}'
<?php
$ch = curl_init('https://idfixer.com.ng/api/v1/bvn/retrieval-status');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => ['Content-Type: application/json'],
    CURLOPT_POSTFIELDS     => json_encode(array (
      'api_key' => 'YOUR_API_KEY',
      'transaction_id' => 'BVNR3F9A1C27D84E6B5F0A9C2D1E',
    )),
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);

print_r($response);
const response = await fetch('https://idfixer.com.ng/api/v1/bvn/retrieval-status', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
      "api_key": "YOUR_API_KEY",
      "transaction_id": "BVNR3F9A1C27D84E6B5F0A9C2D1E"
  }),
});
const data = await response.json();
console.log(data);
import requests

response = requests.post(
    'https://idfixer.com.ng/api/v1/bvn/retrieval-status',
    json={
        "api_key": "YOUR_API_KEY",
        "transaction_id": "BVNR3F9A1C27D84E6B5F0A9C2D1E"
    },
    timeout=60,
)
print(response.json())
● 200 OK
{
    "success": true,
    "data": {
        "reference": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5",
        "transaction_id": "BVNR3F9A1C27D84E6B5F0A9C2D1E",
        "phone": "08012345678",
        "status": "Successful",
        "bvn": "22123456789",
        "full_name": "JOHN DOE",
        "refunded": false
    }
}

BVN Modification

Charged Manual
POST https://idfixer.com.ng/api/v1/bvn/modification

Submits a BVN modification for our team to process. Get variant_id from the BVN Modification page on your dashboard. Extra fields depend on the variant: change of name needs new_first_name, new_surname (new_middle_name optional); change of DOB needs new_dob; address needs address_line_1, town_city, state (address_line_2, postal_code optional); phone needs new_phone.

Body parameters

api_key
string required
Your secret API key.
bvn
string required
11-digit BVN.
nin
string required
11-digit National Identification Number.
enrollment_type
string required
AGENCY or one of: Nibss Modification, First Bank Modifications, Access Bank Modifications, Keystone Bank Modifications, Heritage Bank Modifications, Gt Bank Modifications, Lapo Microbank Mod.
variant_id
integer required
Modification type, from your dashboard.
curl -X POST 'https://idfixer.com.ng/api/v1/bvn/modification' \
  -H 'Content-Type: application/json' \
  -d '{"api_key":"YOUR_API_KEY","bvn":"22123456789","nin":"12345678901","enrollment_type":"AGENCY","variant_id":1,"new_first_name":"JOHN","new_surname":"DOE"}'
<?php
$ch = curl_init('https://idfixer.com.ng/api/v1/bvn/modification');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => ['Content-Type: application/json'],
    CURLOPT_POSTFIELDS     => json_encode(array (
      'api_key' => 'YOUR_API_KEY',
      'bvn' => '22123456789',
      'nin' => '12345678901',
      'enrollment_type' => 'AGENCY',
      'variant_id' => 1,
      'new_first_name' => 'JOHN',
      'new_surname' => 'DOE',
    )),
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);

print_r($response);
const response = await fetch('https://idfixer.com.ng/api/v1/bvn/modification', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
      "api_key": "YOUR_API_KEY",
      "bvn": "22123456789",
      "nin": "12345678901",
      "enrollment_type": "AGENCY",
      "variant_id": 1,
      "new_first_name": "JOHN",
      "new_surname": "DOE"
  }),
});
const data = await response.json();
console.log(data);
import requests

response = requests.post(
    'https://idfixer.com.ng/api/v1/bvn/modification',
    json={
        "api_key": "YOUR_API_KEY",
        "bvn": "22123456789",
        "nin": "12345678901",
        "enrollment_type": "AGENCY",
        "variant_id": 1,
        "new_first_name": "JOHN",
        "new_surname": "DOE"
    },
    timeout=60,
)
print(response.json())
● 200 OK
{
    "success": true,
    "reference": "REQ-20261007-8F3A2C",
    "message": "Request submitted successfully. It will be processed shortly."
}

BVN Registration

Charged Manual
POST https://idfixer.com.ng/api/v1/bvn/registration

Submits a BVN user creation request for our team to process.

Body parameters

api_key
string required
Your secret API key.
bvn
string required
BVN.
first_name
string required
First name.
last_name
string required
Surname.
agent_location, bank, account_no, account_name, email, phone_no, home_address, state_of_residence, date_of_birth, local_government, geo_political_zone
string optional
Optional extra details.
curl -X POST 'https://idfixer.com.ng/api/v1/bvn/registration' \
  -H 'Content-Type: application/json' \
  -d '{"api_key":"YOUR_API_KEY","bvn":"22123456789","first_name":"JOHN","last_name":"DOE"}'
<?php
$ch = curl_init('https://idfixer.com.ng/api/v1/bvn/registration');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => ['Content-Type: application/json'],
    CURLOPT_POSTFIELDS     => json_encode(array (
      'api_key' => 'YOUR_API_KEY',
      'bvn' => '22123456789',
      'first_name' => 'JOHN',
      'last_name' => 'DOE',
    )),
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);

print_r($response);
const response = await fetch('https://idfixer.com.ng/api/v1/bvn/registration', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
      "api_key": "YOUR_API_KEY",
      "bvn": "22123456789",
      "first_name": "JOHN",
      "last_name": "DOE"
  }),
});
const data = await response.json();
console.log(data);
import requests

response = requests.post(
    'https://idfixer.com.ng/api/v1/bvn/registration',
    json={
        "api_key": "YOUR_API_KEY",
        "bvn": "22123456789",
        "first_name": "JOHN",
        "last_name": "DOE"
    },
    timeout=60,
)
print(response.json())
● 200 OK
{
    "success": true,
    "reference": "REQ-20261007-8F3A2C",
    "message": "Request submitted successfully. It will be processed shortly."
}

IPE & Validation

9 endpoints

Instant IPE Clearance

Charged Instant
POST https://idfixer.com.ng/api/v1/nin/instant-ipe

Clears a NIN from the IPE list using its Tracking ID. If you saved a webhook URL on your Developer page, the result is also sent there (see Webhooks).

Body parameters

api_key
string required
Your secret API key.
tracking_id
string required
15-character NIMC Tracking ID (letters and numbers).
curl -X POST 'https://idfixer.com.ng/api/v1/nin/instant-ipe' \
  -H 'Content-Type: application/json' \
  -d '{"api_key":"YOUR_API_KEY","tracking_id":"0SLT9LJS17C5G5D"}'
<?php
$ch = curl_init('https://idfixer.com.ng/api/v1/nin/instant-ipe');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => ['Content-Type: application/json'],
    CURLOPT_POSTFIELDS     => json_encode(array (
      'api_key' => 'YOUR_API_KEY',
      'tracking_id' => '0SLT9LJS17C5G5D',
    )),
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);

print_r($response);
const response = await fetch('https://idfixer.com.ng/api/v1/nin/instant-ipe', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
      "api_key": "YOUR_API_KEY",
      "tracking_id": "0SLT9LJS17C5G5D"
  }),
});
const data = await response.json();
console.log(data);
import requests

response = requests.post(
    'https://idfixer.com.ng/api/v1/nin/instant-ipe',
    json={
        "api_key": "YOUR_API_KEY",
        "tracking_id": "0SLT9LJS17C5G5D"
    },
    timeout=60,
)
print(response.json())
● 200 OK
{
    "success": true,
    "transaction_id": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5",
    "data": {
        "tracking_id": "0SLT9LJS17C5G5D",
        "status": "successful",
        "reply": "..."
    }
}

Instant IPE Status

Free Instant
POST https://idfixer.com.ng/api/v1/nin/instant-ipe-status

Checks the live status of an Instant IPE Tracking ID.

Body parameters

api_key
string required
Your secret API key.
tracking_id
string required
15-character NIMC Tracking ID (letters and numbers).
curl -X POST 'https://idfixer.com.ng/api/v1/nin/instant-ipe-status' \
  -H 'Content-Type: application/json' \
  -d '{"api_key":"YOUR_API_KEY","tracking_id":"0SLT9LJS17C5G5D"}'
<?php
$ch = curl_init('https://idfixer.com.ng/api/v1/nin/instant-ipe-status');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => ['Content-Type: application/json'],
    CURLOPT_POSTFIELDS     => json_encode(array (
      'api_key' => 'YOUR_API_KEY',
      'tracking_id' => '0SLT9LJS17C5G5D',
    )),
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);

print_r($response);
const response = await fetch('https://idfixer.com.ng/api/v1/nin/instant-ipe-status', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
      "api_key": "YOUR_API_KEY",
      "tracking_id": "0SLT9LJS17C5G5D"
  }),
});
const data = await response.json();
console.log(data);
import requests

response = requests.post(
    'https://idfixer.com.ng/api/v1/nin/instant-ipe-status',
    json={
        "api_key": "YOUR_API_KEY",
        "tracking_id": "0SLT9LJS17C5G5D"
    },
    timeout=60,
)
print(response.json())
● 200 OK
{
    "success": true,
    "data": {
        "tracking_id": "0SLT9LJS17C5G5D",
        "status": "successful",
        "reply": "..."
    }
}

NIN IPE Clearance

Charged Async
POST https://idfixer.com.ng/api/v1/nin/ipe

Submits a NIN for IPE clearance. Check progress with NIN IPE Status using the reference returned in data.

Body parameters

api_key
string required
Your secret API key.
nin
string required
11-digit National Identification Number.
curl -X POST 'https://idfixer.com.ng/api/v1/nin/ipe' \
  -H 'Content-Type: application/json' \
  -d '{"api_key":"YOUR_API_KEY","nin":"12345678901"}'
<?php
$ch = curl_init('https://idfixer.com.ng/api/v1/nin/ipe');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => ['Content-Type: application/json'],
    CURLOPT_POSTFIELDS     => json_encode(array (
      'api_key' => 'YOUR_API_KEY',
      'nin' => '12345678901',
    )),
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);

print_r($response);
const response = await fetch('https://idfixer.com.ng/api/v1/nin/ipe', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
      "api_key": "YOUR_API_KEY",
      "nin": "12345678901"
  }),
});
const data = await response.json();
console.log(data);
import requests

response = requests.post(
    'https://idfixer.com.ng/api/v1/nin/ipe',
    json={
        "api_key": "YOUR_API_KEY",
        "nin": "12345678901"
    },
    timeout=60,
)
print(response.json())
● 200 OK
{
    "success": true,
    "transaction_id": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5",
    "data": {
        "status": "success",
        "reference": "IPE_REF_12345",
        "message": "..."
    }
}

NIN IPE Status

Charged Instant
POST https://idfixer.com.ng/api/v1/nin/ipe-status

Checks a NIN IPE Clearance request. Note: each successful status check is charged at the IPE price.

Body parameters

api_key
string required
Your secret API key.
reference
string required
reference returned by NIN IPE Clearance.
curl -X POST 'https://idfixer.com.ng/api/v1/nin/ipe-status' \
  -H 'Content-Type: application/json' \
  -d '{"api_key":"YOUR_API_KEY","reference":"IPE_REF_12345"}'
<?php
$ch = curl_init('https://idfixer.com.ng/api/v1/nin/ipe-status');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => ['Content-Type: application/json'],
    CURLOPT_POSTFIELDS     => json_encode(array (
      'api_key' => 'YOUR_API_KEY',
      'reference' => 'IPE_REF_12345',
    )),
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);

print_r($response);
const response = await fetch('https://idfixer.com.ng/api/v1/nin/ipe-status', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
      "api_key": "YOUR_API_KEY",
      "reference": "IPE_REF_12345"
  }),
});
const data = await response.json();
console.log(data);
import requests

response = requests.post(
    'https://idfixer.com.ng/api/v1/nin/ipe-status',
    json={
        "api_key": "YOUR_API_KEY",
        "reference": "IPE_REF_12345"
    },
    timeout=60,
)
print(response.json())
● 200 OK
{
    "success": true,
    "transaction_id": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5",
    "data": {
        "status": "success",
        "message": "..."
    }
}

NIN Validation

Charged Async
POST https://idfixer.com.ng/api/v1/nin/validation

Opens a NIN validation request. You are charged when it is accepted; poll NIN Validation Status for the outcome. validation_type is one of: no_record_found (No Record Found), sim_validation (SIM Validation), bank_validation (Bank Validation), modification_validation (Modification Validation) or photographic_error (Photographic Error). The short names no_record, sim, bank, modification and photo_error also work. An unknown type is rejected before you are charged.

Body parameters

api_key
string required
Your secret API key.
nin
string required
11-digit National Identification Number.
validation_type
enum optional
no_record_found (default), sim_validation, bank_validation, modification_validation or photographic_error.
curl -X POST 'https://idfixer.com.ng/api/v1/nin/validation' \
  -H 'Content-Type: application/json' \
  -d '{"api_key":"YOUR_API_KEY","nin":"12345678901","validation_type":"sim_validation"}'
<?php
$ch = curl_init('https://idfixer.com.ng/api/v1/nin/validation');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => ['Content-Type: application/json'],
    CURLOPT_POSTFIELDS     => json_encode(array (
      'api_key' => 'YOUR_API_KEY',
      'nin' => '12345678901',
      'validation_type' => 'sim_validation',
    )),
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);

print_r($response);
const response = await fetch('https://idfixer.com.ng/api/v1/nin/validation', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
      "api_key": "YOUR_API_KEY",
      "nin": "12345678901",
      "validation_type": "sim_validation"
  }),
});
const data = await response.json();
console.log(data);
import requests

response = requests.post(
    'https://idfixer.com.ng/api/v1/nin/validation',
    json={
        "api_key": "YOUR_API_KEY",
        "nin": "12345678901",
        "validation_type": "sim_validation"
    },
    timeout=60,
)
print(response.json())
● 200 OK
{
    "success": true,
    "transaction_id": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5",
    "request_status": "pending",
    "data": {
        "status": "success",
        "transaction_id": "VAL-88213",
        "message": "..."
    }
}

NIN Validation Status

Free Instant
POST https://idfixer.com.ng/api/v1/nin/validation-status

Checks a NIN Validation request. Send either nin or the transaction_id found in the data of the submission response.

Body parameters

api_key
string required
Your secret API key.
nin
string optional
11-digit NIN. Send this or transaction_id.
transaction_id
string optional
data.transaction_id from NIN Validation.
curl -X POST 'https://idfixer.com.ng/api/v1/nin/validation-status' \
  -H 'Content-Type: application/json' \
  -d '{"api_key":"YOUR_API_KEY","nin":"12345678901"}'
<?php
$ch = curl_init('https://idfixer.com.ng/api/v1/nin/validation-status');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => ['Content-Type: application/json'],
    CURLOPT_POSTFIELDS     => json_encode(array (
      'api_key' => 'YOUR_API_KEY',
      'nin' => '12345678901',
    )),
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);

print_r($response);
const response = await fetch('https://idfixer.com.ng/api/v1/nin/validation-status', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
      "api_key": "YOUR_API_KEY",
      "nin": "12345678901"
  }),
});
const data = await response.json();
console.log(data);
import requests

response = requests.post(
    'https://idfixer.com.ng/api/v1/nin/validation-status',
    json={
        "api_key": "YOUR_API_KEY",
        "nin": "12345678901"
    },
    timeout=60,
)
print(response.json())
● 200 OK
{
    "success": true,
    "data": {
        "nin": "12345678901",
        "status": "Successful",
        "response": "Validation Successful"
    }
}

Instant NIN Validation

Charged Async
POST https://idfixer.com.ng/api/v1/nin/instant-validation

Submits a NIN for instant validation. Use Instant Validation Status to follow it.

Body parameters

api_key
string required
Your secret API key.
nin_number
string required
11-digit NIN.
curl -X POST 'https://idfixer.com.ng/api/v1/nin/instant-validation' \
  -H 'Content-Type: application/json' \
  -d '{"api_key":"YOUR_API_KEY","nin_number":"12345678901"}'
<?php
$ch = curl_init('https://idfixer.com.ng/api/v1/nin/instant-validation');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => ['Content-Type: application/json'],
    CURLOPT_POSTFIELDS     => json_encode(array (
      'api_key' => 'YOUR_API_KEY',
      'nin_number' => '12345678901',
    )),
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);

print_r($response);
const response = await fetch('https://idfixer.com.ng/api/v1/nin/instant-validation', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
      "api_key": "YOUR_API_KEY",
      "nin_number": "12345678901"
  }),
});
const data = await response.json();
console.log(data);
import requests

response = requests.post(
    'https://idfixer.com.ng/api/v1/nin/instant-validation',
    json={
        "api_key": "YOUR_API_KEY",
        "nin_number": "12345678901"
    },
    timeout=60,
)
print(response.json())
● 200 OK
{
    "success": true,
    "transaction_id": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5",
    "data": {
        "status": "pending",
        "message": "..."
    }
}

Instant Validation Status

Free Instant
POST https://idfixer.com.ng/api/v1/nin/instant-validation-status

Checks an Instant NIN Validation request.

Body parameters

api_key
string required
Your secret API key.
nin_number
string required
11-digit NIN.
curl -X POST 'https://idfixer.com.ng/api/v1/nin/instant-validation-status' \
  -H 'Content-Type: application/json' \
  -d '{"api_key":"YOUR_API_KEY","nin_number":"12345678901"}'
<?php
$ch = curl_init('https://idfixer.com.ng/api/v1/nin/instant-validation-status');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => ['Content-Type: application/json'],
    CURLOPT_POSTFIELDS     => json_encode(array (
      'api_key' => 'YOUR_API_KEY',
      'nin_number' => '12345678901',
    )),
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);

print_r($response);
const response = await fetch('https://idfixer.com.ng/api/v1/nin/instant-validation-status', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
      "api_key": "YOUR_API_KEY",
      "nin_number": "12345678901"
  }),
});
const data = await response.json();
console.log(data);
import requests

response = requests.post(
    'https://idfixer.com.ng/api/v1/nin/instant-validation-status',
    json={
        "api_key": "YOUR_API_KEY",
        "nin_number": "12345678901"
    },
    timeout=60,
)
print(response.json())
● 200 OK
{
    "success": true,
    "data": {
        "status": "successful",
        "message": "..."
    }
}

NIN Validation (Manual)

Charged Manual
POST https://idfixer.com.ng/api/v1/nin/validation-manual

Submits a NIN and name for our team to validate. Get variant_id from the NIN Validation page on your dashboard.

Body parameters

api_key
string required
Your secret API key.
nin
string required
11-digit National Identification Number.
first_name
string required
First name.
last_name
string required
Surname.
variant_id
integer required
Validation type, from your dashboard.
curl -X POST 'https://idfixer.com.ng/api/v1/nin/validation-manual' \
  -H 'Content-Type: application/json' \
  -d '{"api_key":"YOUR_API_KEY","nin":"12345678901","first_name":"JOHN","last_name":"DOE","variant_id":1}'
<?php
$ch = curl_init('https://idfixer.com.ng/api/v1/nin/validation-manual');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => ['Content-Type: application/json'],
    CURLOPT_POSTFIELDS     => json_encode(array (
      'api_key' => 'YOUR_API_KEY',
      'nin' => '12345678901',
      'first_name' => 'JOHN',
      'last_name' => 'DOE',
      'variant_id' => 1,
    )),
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);

print_r($response);
const response = await fetch('https://idfixer.com.ng/api/v1/nin/validation-manual', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
      "api_key": "YOUR_API_KEY",
      "nin": "12345678901",
      "first_name": "JOHN",
      "last_name": "DOE",
      "variant_id": 1
  }),
});
const data = await response.json();
console.log(data);
import requests

response = requests.post(
    'https://idfixer.com.ng/api/v1/nin/validation-manual',
    json={
        "api_key": "YOUR_API_KEY",
        "nin": "12345678901",
        "first_name": "JOHN",
        "last_name": "DOE",
        "variant_id": 1
    },
    timeout=60,
)
print(response.json())
● 200 OK
{
    "success": true,
    "reference": "REQ-20261007-8F3A2C",
    "message": "Request submitted successfully. It will be processed shortly."
}

NIN Personalization

2 endpoints

NIN Personalization

Charged Async
POST https://idfixer.com.ng/api/v1/nin/personalization

Submits a personalization request by Tracking ID. Starts with request_status "pending"; get the result, photo and bio data from Personalization Status (free).

Body parameters

api_key
string required
Your secret API key.
tracking_id
string required
15-character NIMC Tracking ID (letters and numbers).
curl -X POST 'https://idfixer.com.ng/api/v1/nin/personalization' \
  -H 'Content-Type: application/json' \
  -d '{"api_key":"YOUR_API_KEY","tracking_id":"S1E9NVQ8C770C9Y"}'
<?php
$ch = curl_init('https://idfixer.com.ng/api/v1/nin/personalization');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => ['Content-Type: application/json'],
    CURLOPT_POSTFIELDS     => json_encode(array (
      'api_key' => 'YOUR_API_KEY',
      'tracking_id' => 'S1E9NVQ8C770C9Y',
    )),
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);

print_r($response);
const response = await fetch('https://idfixer.com.ng/api/v1/nin/personalization', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
      "api_key": "YOUR_API_KEY",
      "tracking_id": "S1E9NVQ8C770C9Y"
  }),
});
const data = await response.json();
console.log(data);
import requests

response = requests.post(
    'https://idfixer.com.ng/api/v1/nin/personalization',
    json={
        "api_key": "YOUR_API_KEY",
        "tracking_id": "S1E9NVQ8C770C9Y"
    },
    timeout=60,
)
print(response.json())
● 200 OK
{
    "success": true,
    "transaction_id": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5",
    "data": {
        "request_status": "pending",
        "transaction_id": "7a519decee1f202c8e27df4bba3e34"
    }
}

Personalization Status

Free Instant
POST https://idfixer.com.ng/api/v1/nin/personalization-status

Checks a personalization request by tracking_id or transaction_id (transaction_id wins if both are sent). When request_status is "completed", data.user_data holds the bio data and photo (raw base64) and data.pdf_base64 holds a printable slip.

Body parameters

api_key
string required
Your secret API key.
tracking_id
string optional
15-character Tracking ID. Send this or transaction_id.
transaction_id
string optional
data.transaction_id from the submission.
curl -X POST 'https://idfixer.com.ng/api/v1/nin/personalization-status' \
  -H 'Content-Type: application/json' \
  -d '{"api_key":"YOUR_API_KEY","transaction_id":"7a519decee1f202c8e27df4bba3e34"}'
<?php
$ch = curl_init('https://idfixer.com.ng/api/v1/nin/personalization-status');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => ['Content-Type: application/json'],
    CURLOPT_POSTFIELDS     => json_encode(array (
      'api_key' => 'YOUR_API_KEY',
      'transaction_id' => '7a519decee1f202c8e27df4bba3e34',
    )),
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);

print_r($response);
const response = await fetch('https://idfixer.com.ng/api/v1/nin/personalization-status', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
      "api_key": "YOUR_API_KEY",
      "transaction_id": "7a519decee1f202c8e27df4bba3e34"
  }),
});
const data = await response.json();
console.log(data);
import requests

response = requests.post(
    'https://idfixer.com.ng/api/v1/nin/personalization-status',
    json={
        "api_key": "YOUR_API_KEY",
        "transaction_id": "7a519decee1f202c8e27df4bba3e34"
    },
    timeout=60,
)
print(response.json())
● 200 OK
{
    "success": true,
    "data": {
        "request_status": "completed",
        "user_data": {
            "firstName": "JOHN",
            "middleName": "ADE",
            "lastName": "DOE",
            "dateOfBirth": "1990-05-15",
            "gender": "Male",
            "idNumber": "12345678901",
            "photo": "<base64 string>"
        },
        "pdf_base64": "<base64 string>"
    }
}

Other ID Requests

10 endpoints

NIN Modification

Charged Manual
POST https://idfixer.com.ng/api/v1/nin/modification

Submits a NIN modification for our team to process. Get variant_id from the NIN Modification page. Extra fields depend on the variant. Change of name: new_first_name, new_surname (optional new_middle_name and old_first_name/old_middle_name/old_surname). Address: address_line_1, town_city, state (optional address_line_2, postal_code). Phone: new_phone (optional old_phone). Phone + name: new_first_name, new_surname, new_phone (optional old_*). The four date-of-birth types (Change of DOB, DOB Modification (Above 5 Years), DOB + Name, DOB + Phone) need the Attestation & DOB form and attestation_letter, the attestation letter as base64 (PDF, JPG or PNG, max 5MB; a data: URI prefix is fine). Five-year rule: Change of DOB, DOB + Name and DOB + Phone only accept a new date of birth up to 5 years earlier or later than the old one. A bigger change must use DOB Modification (Above 5 Years), which only accepts changes of more than 5 years. Requests that break the rule are rejected with HTTP 422 and are not charged. Form fields: old_dob, new_dob, surname, first_name (middle_name optional), sex, marital_status, phone (11 digits, starts with 0), state_of_origin, lga_of_origin, town_of_origin, place_of_birth, state_of_birth, lga_of_birth, current_residence, resident_address, highest_education, occupation, work_address, requesting_org_address, father_surname, father_first_name, father_state_of_origin, father_lga, mother_surname, mother_first_name, mother_state_of_origin, mother_lga, attestation_number. DOB + Name replaces surname/first_name/middle_name with old_surname, old_first_name, new_surname, new_first_name (old/new middle names optional). DOB + Phone replaces phone with old_phone and new_phone. DOB types are billed at their own price.

Body parameters

api_key
string required
Your secret API key.
nin
string required
11-digit National Identification Number.
variant_id
integer required
Modification type, from your dashboard.
attestation_letter
base64 optional
Required for the three date-of-birth types.
curl -X POST 'https://idfixer.com.ng/api/v1/nin/modification' \
  -H 'Content-Type: application/json' \
  -d '{"api_key":"YOUR_API_KEY","nin":"12345678901","variant_id":1,"new_first_name":"JOHN","new_surname":"DOE"}'
<?php
$ch = curl_init('https://idfixer.com.ng/api/v1/nin/modification');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => ['Content-Type: application/json'],
    CURLOPT_POSTFIELDS     => json_encode(array (
      'api_key' => 'YOUR_API_KEY',
      'nin' => '12345678901',
      'variant_id' => 1,
      'new_first_name' => 'JOHN',
      'new_surname' => 'DOE',
    )),
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);

print_r($response);
const response = await fetch('https://idfixer.com.ng/api/v1/nin/modification', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
      "api_key": "YOUR_API_KEY",
      "nin": "12345678901",
      "variant_id": 1,
      "new_first_name": "JOHN",
      "new_surname": "DOE"
  }),
});
const data = await response.json();
console.log(data);
import requests

response = requests.post(
    'https://idfixer.com.ng/api/v1/nin/modification',
    json={
        "api_key": "YOUR_API_KEY",
        "nin": "12345678901",
        "variant_id": 1,
        "new_first_name": "JOHN",
        "new_surname": "DOE"
    },
    timeout=60,
)
print(response.json())
● 200 OK
{
    "success": true,
    "reference": "REQ-20261007-8F3A2C",
    "message": "Request submitted successfully. It will be processed shortly."
}

Attestation

Charged Manual
POST https://idfixer.com.ng/api/v1/attestation

Submits an attestation request. Only phone and nin are required; you can also send title, surname, first_name, gender, new_dob, old_dob, marital_status, residence/origin/birth details and parents' details (same fields as the dashboard form).

Body parameters

api_key
string required
Your secret API key.
phone
string required
Phone number.
nin
string required
11-digit National Identification Number.
curl -X POST 'https://idfixer.com.ng/api/v1/attestation' \
  -H 'Content-Type: application/json' \
  -d '{"api_key":"YOUR_API_KEY","phone":"08012345678","nin":"12345678901","surname":"DOE","first_name":"JOHN"}'
<?php
$ch = curl_init('https://idfixer.com.ng/api/v1/attestation');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => ['Content-Type: application/json'],
    CURLOPT_POSTFIELDS     => json_encode(array (
      'api_key' => 'YOUR_API_KEY',
      'phone' => '08012345678',
      'nin' => '12345678901',
      'surname' => 'DOE',
      'first_name' => 'JOHN',
    )),
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);

print_r($response);
const response = await fetch('https://idfixer.com.ng/api/v1/attestation', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
      "api_key": "YOUR_API_KEY",
      "phone": "08012345678",
      "nin": "12345678901",
      "surname": "DOE",
      "first_name": "JOHN"
  }),
});
const data = await response.json();
console.log(data);
import requests

response = requests.post(
    'https://idfixer.com.ng/api/v1/attestation',
    json={
        "api_key": "YOUR_API_KEY",
        "phone": "08012345678",
        "nin": "12345678901",
        "surname": "DOE",
        "first_name": "JOHN"
    },
    timeout=60,
)
print(response.json())
● 200 OK
{
    "success": true,
    "reference": "REQ-20261007-8F3A2C",
    "message": "Request submitted successfully. It will be processed shortly."
}

CAC Retrieval

Charged Manual
POST https://idfixer.com.ng/api/v1/cac/retrieval

Retrieves documents for an existing CAC business or company. Track it with CAC Status.

Body parameters

api_key
string required
Your secret API key.
cac_name
string optional
Business/company name. Send this and/or registration_number.
registration_number
string optional
RC/BN number.
retrieval_document
string optional
memart, certificate or status_report.
curl -X POST 'https://idfixer.com.ng/api/v1/cac/retrieval' \
  -H 'Content-Type: application/json' \
  -d '{"api_key":"YOUR_API_KEY","cac_name":"ACME VENTURES","registration_number":"RC1234567","retrieval_document":"certificate"}'
<?php
$ch = curl_init('https://idfixer.com.ng/api/v1/cac/retrieval');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => ['Content-Type: application/json'],
    CURLOPT_POSTFIELDS     => json_encode(array (
      'api_key' => 'YOUR_API_KEY',
      'cac_name' => 'ACME VENTURES',
      'registration_number' => 'RC1234567',
      'retrieval_document' => 'certificate',
    )),
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);

print_r($response);
const response = await fetch('https://idfixer.com.ng/api/v1/cac/retrieval', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
      "api_key": "YOUR_API_KEY",
      "cac_name": "ACME VENTURES",
      "registration_number": "RC1234567",
      "retrieval_document": "certificate"
  }),
});
const data = await response.json();
console.log(data);
import requests

response = requests.post(
    'https://idfixer.com.ng/api/v1/cac/retrieval',
    json={
        "api_key": "YOUR_API_KEY",
        "cac_name": "ACME VENTURES",
        "registration_number": "RC1234567",
        "retrieval_document": "certificate"
    },
    timeout=60,
)
print(response.json())
● 200 OK
{
    "success": true,
    "reference": "REQ-20261007-8F3A2C",
    "message": "Request submitted successfully. It will be processed shortly."
}

CAC Registration

Charged Manual
POST https://idfixer.com.ng/api/v1/cac/registration

Registers a new Business Name, Company or NGO with CAC. Our team files it and uploads the certificate, so poll CAC Status with the reference. Send every document as a base64 string (a data: URI prefix is fine). Documents can be JPG, PNG, WEBP or PDF, up to 5MB each. business_name needs surname, first_name, phone, business_name_1, id_card, passport_photo, signature, and either business_video (base64 MP4/MOV/WEBM/3GP, max 45MB) or business_video_url (an https link). Optional: other_name, dob, gender, alt_phone, email, home_address, business_name_2, business_address. company needs company_name_1, company_type, business_nature, company_address, directors (1 to 10 objects, each with full_name; optional dob, gender, nationality, phone, email, address, id_type, id_number, shares), and the arrays directors_id, passport_photos and signatures (one base64 file per director). Optional: company_name_2, share_capital, num_shares, secretary_name, secretary_phone, secretary_email, proof_of_address. ngo needs ngo_name_1, ngo_name_2 (ngo_name_3 optional), office_state, office_lga, office_city, office_house_no, office_street, ngo_mission, objective_1 to objective_3 (up to objective_6). For each of chairman_, secretary_ and treasurer_ it needs surname, first_name, dob (YYYY-MM-DD, 18+), gender (Male/Female), nationality, phone, email, state, lga, city, house_no, street, id_number (other_name optional), plus the files nin_slip, passport and signature, e.g. chairman_nin_slip. States and LGAs must be spelled exactly as on the dashboard.

Body parameters

api_key
string required
Your secret API key.
cac_type
string required
business_name, company or ngo.
…
mixed required
Fields for that type (see above).
curl -X POST 'https://idfixer.com.ng/api/v1/cac/registration' \
  -H 'Content-Type: application/json' \
  -d '{"api_key":"YOUR_API_KEY","cac_type":"business_name","surname":"DOE","first_name":"JOHN","phone":"08012345678","business_name_1":"ACME VENTURES","business_name_2":"ACME GLOBAL VENTURES","business_address":"12 Ahmadu Bello Way, Kano","id_card":"<base64 string>","passport_photo":"<base64 string>","signature":"<base64 string>","business_video_url":"https://drive.google.com/file/d/xyz/view"}'
<?php
$ch = curl_init('https://idfixer.com.ng/api/v1/cac/registration');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => ['Content-Type: application/json'],
    CURLOPT_POSTFIELDS     => json_encode(array (
      'api_key' => 'YOUR_API_KEY',
      'cac_type' => 'business_name',
      'surname' => 'DOE',
      'first_name' => 'JOHN',
      'phone' => '08012345678',
      'business_name_1' => 'ACME VENTURES',
      'business_name_2' => 'ACME GLOBAL VENTURES',
      'business_address' => '12 Ahmadu Bello Way, Kano',
      'id_card' => '<base64 string>',
      'passport_photo' => '<base64 string>',
      'signature' => '<base64 string>',
      'business_video_url' => 'https://drive.google.com/file/d/xyz/view',
    )),
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);

print_r($response);
const response = await fetch('https://idfixer.com.ng/api/v1/cac/registration', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
      "api_key": "YOUR_API_KEY",
      "cac_type": "business_name",
      "surname": "DOE",
      "first_name": "JOHN",
      "phone": "08012345678",
      "business_name_1": "ACME VENTURES",
      "business_name_2": "ACME GLOBAL VENTURES",
      "business_address": "12 Ahmadu Bello Way, Kano",
      "id_card": "<base64 string>",
      "passport_photo": "<base64 string>",
      "signature": "<base64 string>",
      "business_video_url": "https://drive.google.com/file/d/xyz/view"
  }),
});
const data = await response.json();
console.log(data);
import requests

response = requests.post(
    'https://idfixer.com.ng/api/v1/cac/registration',
    json={
        "api_key": "YOUR_API_KEY",
        "cac_type": "business_name",
        "surname": "DOE",
        "first_name": "JOHN",
        "phone": "08012345678",
        "business_name_1": "ACME VENTURES",
        "business_name_2": "ACME GLOBAL VENTURES",
        "business_address": "12 Ahmadu Bello Way, Kano",
        "id_card": "<base64 string>",
        "passport_photo": "<base64 string>",
        "signature": "<base64 string>",
        "business_video_url": "https://drive.google.com/file/d/xyz/view"
    },
    timeout=60,
)
print(response.json())
● 200 OK
{
    "success": true,
    "reference": "REQ-20261007-8F3A2C",
    "message": "Request submitted successfully. It will be processed shortly."
}

CAC Status

Free Instant
POST https://idfixer.com.ng/api/v1/cac/status

Checks a CAC registration or retrieval by its reference. status is pending, in_progress, completed or failed. admin_response holds our team's note (for example the RC/BN number). files lists the documents we attached; send include_files=true to get them as base64.

Body parameters

api_key
string required
Your secret API key.
reference
string required
reference returned when you placed the request.
include_files
boolean optional
true to include each file as base64.
curl -X POST 'https://idfixer.com.ng/api/v1/cac/status' \
  -H 'Content-Type: application/json' \
  -d '{"api_key":"YOUR_API_KEY","reference":"SRV58D1A88A1792608730","include_files":true}'
<?php
$ch = curl_init('https://idfixer.com.ng/api/v1/cac/status');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => ['Content-Type: application/json'],
    CURLOPT_POSTFIELDS     => json_encode(array (
      'api_key' => 'YOUR_API_KEY',
      'reference' => 'SRV58D1A88A1792608730',
      'include_files' => true,
    )),
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);

print_r($response);
const response = await fetch('https://idfixer.com.ng/api/v1/cac/status', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
      "api_key": "YOUR_API_KEY",
      "reference": "SRV58D1A88A1792608730",
      "include_files": true
  }),
});
const data = await response.json();
console.log(data);
import requests

response = requests.post(
    'https://idfixer.com.ng/api/v1/cac/status',
    json={
        "api_key": "YOUR_API_KEY",
        "reference": "SRV58D1A88A1792608730",
        "include_files": True
    },
    timeout=60,
)
print(response.json())
● 200 OK
{
    "success": true,
    "data": {
        "reference": "SRV58D1A88A1792608730",
        "type": "Business Name Registration",
        "status": "completed",
        "admin_response": "Registered. BN 1234567",
        "files": [
            {
                "index": 0,
                "extension": "pdf",
                "size": 182233,
                "base64": "<base64 string>"
            }
        ],
        "created_at": "2026-10-24 10:00:00",
        "updated_at": "2026-10-27 14:30:00"
    }
}

Services & Prices

Free Instant
POST https://idfixer.com.ng/api/v1/services

Lists every endpoint with what a successful call costs on your account. available is false when a service isn't switched on for you. Call it by GET with your key in an Authorization: Bearer header, or by POST.

Body parameters

api_key
string required
Your secret API key.
curl -X POST 'https://idfixer.com.ng/api/v1/services' \
  -H 'Content-Type: application/json' \
  -d '{"api_key":"YOUR_API_KEY"}'
<?php
$ch = curl_init('https://idfixer.com.ng/api/v1/services');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => ['Content-Type: application/json'],
    CURLOPT_POSTFIELDS     => json_encode(array (
      'api_key' => 'YOUR_API_KEY',
    )),
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);

print_r($response);
const response = await fetch('https://idfixer.com.ng/api/v1/services', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
      "api_key": "YOUR_API_KEY"
  }),
});
const data = await response.json();
console.log(data);
import requests

response = requests.post(
    'https://idfixer.com.ng/api/v1/services',
    json={
        "api_key": "YOUR_API_KEY"
    },
    timeout=60,
)
print(response.json())
● 200 OK
{
    "success": true,
    "currency": "NGN",
    "services": [
        {
            "code": "nin/premium-slip",
            "name": "NIN Premium Slip",
            "price": 120,
            "available": true
        },
        {
            "code": "bvn/premium-slip",
            "name": "BVN Premium Slip",
            "price": 105,
            "available": true
        }
    ]
}

Wallet Balance

Free Instant
POST https://idfixer.com.ng/api/v1/balance

Returns the wallet balance your API calls are charged from. Call it by GET with your key in an Authorization: Bearer header, or by POST with api_key in the JSON body. Check it before a large batch so calls don't fail with "Insufficient balance".

Body parameters

api_key
string required
Your secret API key.
curl -X POST 'https://idfixer.com.ng/api/v1/balance' \
  -H 'Content-Type: application/json' \
  -d '{"api_key":"YOUR_API_KEY"}'
<?php
$ch = curl_init('https://idfixer.com.ng/api/v1/balance');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => ['Content-Type: application/json'],
    CURLOPT_POSTFIELDS     => json_encode(array (
      'api_key' => 'YOUR_API_KEY',
    )),
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);

print_r($response);
const response = await fetch('https://idfixer.com.ng/api/v1/balance', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
      "api_key": "YOUR_API_KEY"
  }),
});
const data = await response.json();
console.log(data);
import requests

response = requests.post(
    'https://idfixer.com.ng/api/v1/balance',
    json={
        "api_key": "YOUR_API_KEY"
    },
    timeout=60,
)
print(response.json())
● 200 OK
{
    "success": true,
    "developer": "you@example.com",
    "wallet_balance": 43500.5,
    "currency": "NGN"
}

Check Status

Free Instant
POST https://idfixer.com.ng/api/v1/status

Fetches the current status of any request our team processes (NIN or BVN modification, CAC, attestation, delinking, JAMB and the other requests on this page that return a reference). Send the reference by POST (JSON body) or GET (/status?reference=…, with your key in an Authorization: Bearer header). status is pending, in_progress, completed or failed. admin_response holds our team's note. files lists any documents we attached; add include_files=true to receive them as base64. You can only look up your own requests. For NIN Validation, IPE and Personalization, use their own status endpoints.

Body parameters

api_key
string required
Your secret API key.
reference
string required
reference returned when you placed the request.
include_files
boolean optional
true to include attached files as base64.
curl -X POST 'https://idfixer.com.ng/api/v1/status' \
  -H 'Content-Type: application/json' \
  -d '{"api_key":"YOUR_API_KEY","reference":"SRV58D1A88A1792608730"}'
<?php
$ch = curl_init('https://idfixer.com.ng/api/v1/status');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => ['Content-Type: application/json'],
    CURLOPT_POSTFIELDS     => json_encode(array (
      'api_key' => 'YOUR_API_KEY',
      'reference' => 'SRV58D1A88A1792608730',
    )),
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);

print_r($response);
const response = await fetch('https://idfixer.com.ng/api/v1/status', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
      "api_key": "YOUR_API_KEY",
      "reference": "SRV58D1A88A1792608730"
  }),
});
const data = await response.json();
console.log(data);
import requests

response = requests.post(
    'https://idfixer.com.ng/api/v1/status',
    json={
        "api_key": "YOUR_API_KEY",
        "reference": "SRV58D1A88A1792608730"
    },
    timeout=60,
)
print(response.json())
● 200 OK
{
    "success": true,
    "data": {
        "reference": "SRV58D1A88A1792608730",
        "service": "nin-modification",
        "type": "Change of Name",
        "status": "completed",
        "amount": 6000,
        "admin_response": "Done. New details reflect on NIMC.",
        "files": [],
        "created_at": "2026-10-24 10:00:00",
        "updated_at": "2026-10-25 09:12:00"
    }
}

Self Service Delinking

Charged Manual
POST https://idfixer.com.ng/api/v1/self-service-delinking

Submits a SIM/NIN self-service delinking request.

Body parameters

api_key
string required
Your secret API key.
email
string required
Valid email address.
nin
string required
11-digit National Identification Number.
curl -X POST 'https://idfixer.com.ng/api/v1/self-service-delinking' \
  -H 'Content-Type: application/json' \
  -d '{"api_key":"YOUR_API_KEY","email":"customer@example.com","nin":"12345678901"}'
<?php
$ch = curl_init('https://idfixer.com.ng/api/v1/self-service-delinking');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => ['Content-Type: application/json'],
    CURLOPT_POSTFIELDS     => json_encode(array (
      'api_key' => 'YOUR_API_KEY',
      'email' => 'customer@example.com',
      'nin' => '12345678901',
    )),
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);

print_r($response);
const response = await fetch('https://idfixer.com.ng/api/v1/self-service-delinking', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
      "api_key": "YOUR_API_KEY",
      "email": "customer@example.com",
      "nin": "12345678901"
  }),
});
const data = await response.json();
console.log(data);
import requests

response = requests.post(
    'https://idfixer.com.ng/api/v1/self-service-delinking',
    json={
        "api_key": "YOUR_API_KEY",
        "email": "customer@example.com",
        "nin": "12345678901"
    },
    timeout=60,
)
print(response.json())
● 200 OK
{
    "success": true,
    "reference": "REQ-20261007-8F3A2C",
    "message": "Request submitted successfully. It will be processed shortly."
}

JAMB Services

Charged Manual
POST https://idfixer.com.ng/api/v1/jamb-services

Submits a JAMB request (result checker, admission status, etc.). Get variant_id from the JAMB Services page.

Body parameters

api_key
string required
Your secret API key.
variant_id
integer required
JAMB service type, from your dashboard.
jamb_identifier
string required
JAMB registration number or profile code.
jamb_year
string required
4-digit year, e.g. 2024.
curl -X POST 'https://idfixer.com.ng/api/v1/jamb-services' \
  -H 'Content-Type: application/json' \
  -d '{"api_key":"YOUR_API_KEY","variant_id":1,"jamb_identifier":"1234567890","jamb_year":"2024"}'
<?php
$ch = curl_init('https://idfixer.com.ng/api/v1/jamb-services');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => ['Content-Type: application/json'],
    CURLOPT_POSTFIELDS     => json_encode(array (
      'api_key' => 'YOUR_API_KEY',
      'variant_id' => 1,
      'jamb_identifier' => '1234567890',
      'jamb_year' => '2024',
    )),
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);

print_r($response);
const response = await fetch('https://idfixer.com.ng/api/v1/jamb-services', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
      "api_key": "YOUR_API_KEY",
      "variant_id": 1,
      "jamb_identifier": "1234567890",
      "jamb_year": "2024"
  }),
});
const data = await response.json();
console.log(data);
import requests

response = requests.post(
    'https://idfixer.com.ng/api/v1/jamb-services',
    json={
        "api_key": "YOUR_API_KEY",
        "variant_id": 1,
        "jamb_identifier": "1234567890",
        "jamb_year": "2024"
    },
    timeout=60,
)
print(response.json())
● 200 OK
{
    "success": true,
    "reference": "REQ-20261007-8F3A2C",
    "message": "Request submitted successfully. It will be processed shortly."
}

Airtime & Data

4 endpoints

List Data Plans

Free Instant
POST https://idfixer.com.ng/api/v1/databundle/plans

Lists active data plans and their prices. Use plan_id with Buy Data.

Body parameters

api_key
string required
Your secret API key.
curl -X POST 'https://idfixer.com.ng/api/v1/databundle/plans' \
  -H 'Content-Type: application/json' \
  -d '{"api_key":"YOUR_API_KEY"}'
<?php
$ch = curl_init('https://idfixer.com.ng/api/v1/databundle/plans');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => ['Content-Type: application/json'],
    CURLOPT_POSTFIELDS     => json_encode(array (
      'api_key' => 'YOUR_API_KEY',
    )),
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);

print_r($response);
const response = await fetch('https://idfixer.com.ng/api/v1/databundle/plans', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
      "api_key": "YOUR_API_KEY"
  }),
});
const data = await response.json();
console.log(data);
import requests

response = requests.post(
    'https://idfixer.com.ng/api/v1/databundle/plans',
    json={
        "api_key": "YOUR_API_KEY"
    },
    timeout=60,
)
print(response.json())
● 200 OK
{
    "success": true,
    "data": [
        {
            "plan_id": 12,
            "network": "MTN",
            "plan_type": "SME",
            "plan_name": "MTN 1GB SME",
            "data_amount": "1GB",
            "validity": "30 days",
            "price": "280.00"
        }
    ]
}

Buy Data

Plan price Instant
POST https://idfixer.com.ng/api/v1/databundle/buy

Buys a data bundle. Data access must be enabled for your key; contact support if you get a 403.

Body parameters

api_key
string required
Your secret API key.
plan_id
integer required
plan_id from List Data Plans.
phone
string required
11-digit phone number.
curl -X POST 'https://idfixer.com.ng/api/v1/databundle/buy' \
  -H 'Content-Type: application/json' \
  -d '{"api_key":"YOUR_API_KEY","plan_id":12,"phone":"08012345678"}'
<?php
$ch = curl_init('https://idfixer.com.ng/api/v1/databundle/buy');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => ['Content-Type: application/json'],
    CURLOPT_POSTFIELDS     => json_encode(array (
      'api_key' => 'YOUR_API_KEY',
      'plan_id' => 12,
      'phone' => '08012345678',
    )),
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);

print_r($response);
const response = await fetch('https://idfixer.com.ng/api/v1/databundle/buy', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
      "api_key": "YOUR_API_KEY",
      "plan_id": 12,
      "phone": "08012345678"
  }),
});
const data = await response.json();
console.log(data);
import requests

response = requests.post(
    'https://idfixer.com.ng/api/v1/databundle/buy',
    json={
        "api_key": "YOUR_API_KEY",
        "plan_id": 12,
        "phone": "08012345678"
    },
    timeout=60,
)
print(response.json())
● 200 OK
{
    "success": true,
    "transaction_id": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5",
    "data": {
        "network": "MTN",
        "plan": "MTN 1GB SME",
        "data_amount": "1GB",
        "validity": "30 days",
        "phone": "08012345678"
    }
}

Buy Airtime

Amount sent Instant
POST https://idfixer.com.ng/api/v1/telecom/buy-airtime

Buys airtime. Your wallet is charged the amount you send.

Body parameters

api_key
string required
Your secret API key.
network
string required
MTN, AIRTEL, GLO or 9MOBILE.
phone
string required
11-digit phone number.
amount
number required
Naira amount, 50 to 50,000.
curl -X POST 'https://idfixer.com.ng/api/v1/telecom/buy-airtime' \
  -H 'Content-Type: application/json' \
  -d '{"api_key":"YOUR_API_KEY","network":"MTN","phone":"08012345678","amount":200}'
<?php
$ch = curl_init('https://idfixer.com.ng/api/v1/telecom/buy-airtime');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => ['Content-Type: application/json'],
    CURLOPT_POSTFIELDS     => json_encode(array (
      'api_key' => 'YOUR_API_KEY',
      'network' => 'MTN',
      'phone' => '08012345678',
      'amount' => 200,
    )),
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);

print_r($response);
const response = await fetch('https://idfixer.com.ng/api/v1/telecom/buy-airtime', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
      "api_key": "YOUR_API_KEY",
      "network": "MTN",
      "phone": "08012345678",
      "amount": 200
  }),
});
const data = await response.json();
console.log(data);
import requests

response = requests.post(
    'https://idfixer.com.ng/api/v1/telecom/buy-airtime',
    json={
        "api_key": "YOUR_API_KEY",
        "network": "MTN",
        "phone": "08012345678",
        "amount": 200
    },
    timeout=60,
)
print(response.json())
● 200 OK
{
    "success": true,
    "reference": "AIR-20261007-5D21E9",
    "data": {
        "network": "MTN",
        "phone": "08012345678",
        "amount": 200
    }
}

PUK Retrieval

Charged Manual
POST https://idfixer.com.ng/api/v1/telecom/puk-retrieval

Retrieves a SIM PUK code.

Body parameters

api_key
string required
Your secret API key.
network
string required
MTN, AIRTEL or GLO.
phone
string required
11-digit phone number.
curl -X POST 'https://idfixer.com.ng/api/v1/telecom/puk-retrieval' \
  -H 'Content-Type: application/json' \
  -d '{"api_key":"YOUR_API_KEY","network":"MTN","phone":"08012345678"}'
<?php
$ch = curl_init('https://idfixer.com.ng/api/v1/telecom/puk-retrieval');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => ['Content-Type: application/json'],
    CURLOPT_POSTFIELDS     => json_encode(array (
      'api_key' => 'YOUR_API_KEY',
      'network' => 'MTN',
      'phone' => '08012345678',
    )),
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);

print_r($response);
const response = await fetch('https://idfixer.com.ng/api/v1/telecom/puk-retrieval', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
      "api_key": "YOUR_API_KEY",
      "network": "MTN",
      "phone": "08012345678"
  }),
});
const data = await response.json();
console.log(data);
import requests

response = requests.post(
    'https://idfixer.com.ng/api/v1/telecom/puk-retrieval',
    json={
        "api_key": "YOUR_API_KEY",
        "network": "MTN",
        "phone": "08012345678"
    },
    timeout=60,
)
print(response.json())
● 200 OK
{
    "success": true,
    "reference": "REQ-20261007-8F3A2C",
    "message": "Request submitted successfully. It will be processed shortly."
}
Need help? Contact support from your dashboard or email support@idfixer.com.ng. © 2026 IDFIXER