Swiftend
Get API access

Swiftend API

One REST API for identity, financial and business verification in Nigeria — NIN, BVN, bank account, driver's licence, CAC, address and NINAuth enterprise onboarding. HTTPS, JSON in and out, one authentication scheme and one response envelope across every service.

v1 · 2026 https://swiftend.com Postman collection ↓

Introduction

Every endpoint uses the same authentication and returns the same response envelope. Identity and business lookups are GET requests that take the identifier as a query parameter and your credential as a header. Responses are JSON.

Base URL

https://swiftend.com

Authentication

Send your Swiftend serviceid on every request as a header. client-id is accepted as an alias.

serviceid: <your-swiftend-serviceid>
Keep your serviceid private. Each successful verification is billed to your wallet.

Response format

Every verification returns the same envelope: ResponseInfo (the outcome) and ResponseData (the record, when found).

{
  "ResponseInfo": {
    "ResponseCode": "00",          // "00" = found, "99" = not found
    "Parameter": "<what you queried>",
    "Source": "...",
    "Message": "Result Found",
    "Sub_Message": "",
    "Timestamp": "10/02/2026 9:15:02 PM"
  },
  "ResponseData": { /* the record */ }
}

Not found (code 99)

When no record matches the identifier, every service returns the same shape with ResponseData as null.

{
  "ResponseInfo": {
    "ResponseCode": "99",
    "Parameter": "<what you queried>",
    "Source": "NIMC",
    "Message": "Result Not Found",
    "Sub_Message": "",
    "Timestamp": "10/02/2026 9:15:02 PM"
  },
  "ResponseData": null
}

Status / response codes

CodeMeaning
00Result found — ResponseData populated.
99Result not found — no record for the identifier.
87Access denied — invalid credential, or the service is not enabled for you.
—HTTP 401 missing/invalid credential · 503 temporary, retry.

NIN Verification

Verify a National Identification Number and return the holder's record (names, DOB, gender, photo, etc.).

GET /verifynin/?regNo={nin}
ParamInNotes
regNoqueryrequired — the 11-digit NIN
serviceidheaderrequired

Example

curl 'https://swiftend.com/verifynin/?regNo=12345678901' \
  --header 'serviceid: <your-swiftend-serviceid>'

200 — found

{
  "ResponseInfo": { "ResponseCode": "00", "Message": "Result Found", "Source": "NIMC", "Timestamp": "..." },
  "ResponseData": {
    "nin": "12345678901", "firstname": "ADA", "surname": "OKAFOR", "middlename": "N",
    "birthdate": "1990-01-01", "gender": "f", "telephoneno": "0801...", "photo": "<base64>",
    "residence_state": "Lagos", "residence_lga": "Ikeja", "residence_AddressLine1": "..."
  }
}

NIN Slip

Same NIN lookup, returning the record used to render a NIN slip.

GET /verifyninslip/?regNo={nin}
ParamInNotes
regNoqueryrequired — the 11-digit NIN
serviceidheaderrequired

200 — found

{
  "ResponseInfo": { "ResponseCode": "00", "Message": "Result Found", "Source": "NIMC" },
  "ResponseData": {
    "nin": "12345678901", "firstname": "ADA", "middlename": "N", "surname": "OKAFOR",
    "birthdate": "1990-01-01", "photo": "<base64>",
    "residence_state": "Lagos", "residence_lga": "Ikeja", "residence_AddressLine1": "..."
  }
}

BVN Verification

Verify a Bank Verification Number and return the holder's record.

GET /verifybvn/?bvn={bvn}
ParamInNotes
bvnqueryrequired — the 11-digit BVN
serviceidheaderrequired

200 — found

{
  "ResponseInfo": { "ResponseCode": "00", "Message": "Result Found" },
  "ResponseData": {
    "BVN": "22345678901", "firstName": "ADA", "middleName": "N", "lastName": "OKAFOR",
    "dateOfBirth": "01-Jan-1990", "gender": "Female", "maritalStatus": "...",
    "lgaOfOrigin": "...", "lgaOfResidence": "...", "enrollmentBank": "...",
    "enrollmentBranch": "...", "levelOfAccount": "...", "email": "...", "image": "<base64>"
  }
}

Phone Verification

Look up the identity behind a phone number, optionally matching against a name. Sent as a POST with a JSON body.

POST /verifyphone/
Body keyNotes
idstringrequired — the phone number
firstnameoptional — for name matching
lastnameoptional — for name matching
ParamInNotes
serviceidheaderrequired

Example

curl 'https://swiftend.com/verifyphone/' \
  --header 'serviceid: <your-swiftend-serviceid>' \
  --header 'Content-Type: application/json' \
  --data '{ "idstring": "08000000000", "firstname": "", "lastname": "" }'

200 — found

{
  "ResponseInfo": { "ResponseCode": "00", "Message": "Result Found", "Source": "NIMC" },
  "ResponseData": {
    "telephoneno": "08000000000", "gender": "f", "year_of_birth": "1990",
    "state": "Lagos", "lga": "Ikeja",
    "residence_state": "Lagos", "residence_Town": "Ikeja", "residencestatus": "...",
    "self_origin_state": "Anambra", "self_origin_lga": "...", "self_origin_place": "..."
  }
}

Bank Account

Resolve a Nigerian bank account number to its account name.

GET /verifyaccount/?accountId={account}&bankCode={code}
ParamInNotes
accountIdqueryrequired — the 10-digit account number
bankCodequeryrequired — the bank's CBN code
serviceidheaderrequired

200 — found

{
  "ResponseInfo": { "ResponseCode": "00", "Message": "Result Found", "Source": "NIBSS" },
  "ResponseData": {
    "AccountName": "ADA N OKAFOR", "Account": "0123456789",
    "FirstName": "ADA", "MiddleName": "N", "LastName": "OKAFOR"
  }
}

Driver's Licence

Verify a Nigerian driver's licence number.

GET /verifyLicense/?id={licenceNo}
ParamInNotes
idqueryrequired — the licence number
serviceidheaderrequired

200 — found

{
  "ResponseInfo": { "ResponseCode": "00", "Message": "Result Found", "Source": "FRSC" },
  "ResponseData": {
    "licenseNo": "ABC12345AA", "firstName": "ADA", "middleName": "N", "lastName": "OKAFOR",
    "gender": "Female", "birthDate": "1990-01-01",
    "issuedDate": "2021-01-01", "expiryDate": "2026-01-01",
    "stateOfIssue": "Lagos", "photo": "<base64>"
  }
}

CAC / Company

Verify a company registered with the Corporate Affairs Commission — by RC number or by name.

GET /verifycac/?rcNo={rc}&type={type}
ParamInNotes
rcNoquerythe RC / registration number
companyquerycompany name (alternative to rcNo)
typequeryregistration type (e.g. RC / BN / IT)
serviceidheaderrequired

200 — found

{
  "ResponseInfo": { "ResponseCode": "00", "Message": "Result Found", "Source": "CAC" },
  "ResponseData": {
    "Company": "HARMONY LOGISTICS LIMITED", "RegistrationNo": "RC1234567",
    "RegistrationDate": "2018-05-10", "TypeofEntity": "RC", "Status": "ACTIVE",
    "Address": "12 Marina Road", "City": "Lagos", "State": "Lagos", "LGA": "Lagos Island",
    "Email": "info@harmony-logistics.example", "Shareholders": [ /* ... */ ]
  }
}

Business Name Search

Search the Corporate Affairs Commission register by business name or registration number.

GET /namesearch/?regno={name-or-rc}
ParamInNotes
regnoqueryrequired — business name or registration number
serviceidheaderrequired

200 — found

{
  "ResponseInfo": { "ResponseCode": "00", "Message": "Result Found", "Source": "Business Name search" },
  "ResponseData": {
    "Company": "HARMONY LOGISTICS LIMITED", "RegistrationNo": "RC1234567",
    "Type": "RC", "Status": "ACTIVE", "State": "Lagos", "LGA": "Lagos Island",
    "Objectives": "...", "Secretary": "...", "Shareholder": "..."
  }
}

Address Verification

Submit a physical address for field verification. This is asynchronous — the result is delivered to your callbackURL when the visit completes.

GET /verifyaddress/?FullAddress=…&State=…&callbackURL=…
ParamInNotes
FullAddressqueryrequired — the address to verify
State, lgaqueryrequired — location
FirstName, LastName, PhoneNoquerythe resident
BVNqueryoptional — resident's BVN
callbackURLqueryrequired — where the result is posted
JobIDqueryyour reference for the job
serviceidheaderrequired

200 — job accepted

{
  "ResponseInfo": { "ResponseCode": "00", "Message": "Address verification in progress" },
  "ResponseData": { "JobID": "JOB-2026-000123", "Status": "PENDING" }
}

Callback (posted to your callbackURL when the visit completes)

{
  "JobID": "JOB-2026-000123", "Status": "VERIFIED",
  "FullAddress": "12 Marina Road, Lagos", "State": "Lagos", "LGA": "Lagos Island",
  "Cordinate": "6.4541,3.3947", "Verifier": "...", "ContactPerson": "...",
  "Desc_Landmark": "...", "CustomerPhoto": "<base64>", "Comment": "..."
}

NINAuth Enterprise Registration

Register an enterprise and return its NINAuth Enterprise ID (client_id, e.g. ENT…, created as awaiting_approval). Sent as multipart/form-data.

POST /ninauth/enterprise/register/
FieldTypeNotes
datatext (JSON)required — name, email, phone_number, address, website, industry, company_type, and exactly 2 directors
logofilerequired — png/jpg, ≤ 5 MB
cac_memart, cac_certificate, ndpa_certificate, data_protection_policyfilerequired — pdf/png/jpg, ≤ 5 MB each
regulatory_licencefileFinance only — with regulatory_licence_type + regulatory_licence_number in data
serviceidheaderrequired
Exactly two directors. Use industry / company_type values from Industry & Company Types. Full request shape is in the Postman collection.

Industry & Company Types

GET /ninauth/enterprise/registration-data/

Returns the valid industry and company_type values — use the text values exactly as returned.

200 — Enterprise ID returned

{
  "status": 200, "success": true, "message": "success",
  "data": {
    "client_id": "ENT87D5E1DD26B2",
    "name": "Harmony Logistics Limited",
    "status": "awaiting_approval",
    "created_at": "2026-10-02T08:15:02.000000Z"
  }
}

Webhooks

Some results are produced asynchronously. When you supply a callbackURL on the request, Swiftend sends an HTTP POST to it when the job completes — today this applies to Address Verification.

POST {your callbackURL} · Content-Type: application/json

Payload

The body is the standard response envelope. ResponseInfo.Parameter carries your JobID, and ResponseData.Status the final verdict.

{
  "ResponseInfo": {
    "ResponseCode": "00",
    "Parameter": "JOB-2026-000123",
    "Source": "Swiftend AVS",
    "Message": "Address Verified",
    "Timestamp": "10/03/2026 9:15:02 PM"
  },
  "ResponseData": {
    "Status": "VERIFIED",
    "FullAddress": "12 Marina Road, Lagos", "State": "Lagos", "LGA": "Lagos Island",
    "Cordinate": "6.4541,3.3947",
    "FirstName": "ADA", "LastName": "OKAFOR", "PhoneNo": "0801...", "Alias": "...",
    "Verifier": "...", "ContactPerson": "...", "Desc_Landmark": "...", "Comment": "...",
    "CustomerPhoto": "<base64>", "AddressPhoto1": "<base64>"
  }
}

Handling

GuidelineNotes
AcknowledgeRespond with HTTP 2xx promptly so the delivery is marked complete.
CorrelateMatch ResponseInfo.Parameter (the JobID) to a job you submitted before acting on it.
StatusMoves from PENDING (at submission) to the final verdict, e.g. VERIFIED.
EndpointYour callbackURL must be publicly reachable over HTTPS and accept a POST.
Treat the callback as a notification, not a source of truth you cannot re-check: correlate every payload to a JobID you originated.