Skip to content
Lira APILira API

Test Numbers

Use these identifiers to simulate the scenarios your integration must handle. Requests made with a sandbox API key return these seeded responses instantly. No provider is called.

How Sandbox Works

  • Determined by the API key you send. Sandbox and live keys are issued separately from your dashboard.
  • Sandbox requests are free (priceUsdAtCall: 0) but still count toward your sandbox rate limits and show up in your verification list alongside live records.
  • Async sandbox requests fire a real webhook to your registered webhook URL after a short delay (approximately 3 seconds).

Unknown identifiers

  • Sending an identifier not listed on this page returns TEST_NUMBER_NOT_FOUND.
  • Sending a bank code outside the per-country list below returns INVALID_BANK_CODE.

Account Verification (POST /verify/account)

CountryaccountNumberbankCodeScenarioSuccess name
NG0000000001000014SUCCESSTest Okoye
NG0000000002000014NOT_FOUND
NG0000000003000014PROVIDER_ERROR
GH1000000001GH010100SUCCESSSandbox Mensah
GH1000000002GH010100NOT_FOUND
GH1000000003GH010100PROVIDER_ERROR
ZM3000000001023SUCCESSTest Banda
ZM3000000002023NOT_FOUND
ZM3000000003023PROVIDER_ERROR
CI4000000001ORANGESUCCESSAlpha Kouamé
CI4000000002ORANGENOT_FOUND
CI4000000003ORANGEPROVIDER_ERROR
SN5000000001ORANGESUCCESSSandbox Diop
SN5000000002ORANGENOT_FOUND
SN5000000003ORANGEPROVIDER_ERROR
CM6000000001MTNSUCCESSTest Nkomo
CM6000000002MTNNOT_FOUND
CM6000000003MTNPROVIDER_ERROR
BF7000000001ORANGESUCCESSAlpha Ouedraogo
BF7000000002ORANGENOT_FOUND
BF7000000003ORANGEPROVIDER_ERROR
ML8000000001ORANGESUCCESSSandbox Traoré
ML8000000002ORANGENOT_FOUND
ML8000000003ORANGEPROVIDER_ERROR
BJ9000000001ORANGESUCCESSTest Hounsou
BJ9000000002ORANGENOT_FOUND
BJ9000000003ORANGEPROVIDER_ERROR
TG0100000001ORANGESUCCESSAlpha Agbeko
TG0100000002ORANGENOT_FOUND
TG0100000003ORANGEPROVIDER_ERROR
TZ2000000001003SUCCESSTest Shekimweri
TZ2000000002003NOT_FOUND
TZ2000000003003PROVIDER_ERROR
ET1000000000001231402SUCCESSSandbox Bekele
ET1000000000002231402NOT_FOUND
ET1000000000003231402PROVIDER_ERROR
GBGB-VERIFIED-001200000SUCCESS: strong match, no major riskSANDBOX TEST ACCOUNT
GBGB-HIGHRISK-002200000SUCCESS: strong match, significant risk (verified: false)SANDBOX HIGH RISK
GBGB-NOTFOUND-003200000NOT_FOUND
CN6228480402564890018CN-INDIVSUCCESS: individual strong matchSANDBOX TEST
CN6228480402564890026CN-INDIVIDENTITY_MISMATCH: individual weak matchSANDBOX WEAK
CN321872160000ABOCCNBJSUCCESS: business strong match (0.98)SANDBOX BIZ CO
CN321872160001ABOCCNBJIDENTITY_MISMATCH: business partial match (0.80)SANDBOX BIZ PARTIAL

Phone Verification (POST /verify/phone)

CountryphoneNumberScenarioSuccess subscriber name
NG+2348000000001SUCCESSTest Okoye
NG+2348000000002NOT_FOUND
NG+2348000000003PROVIDER_ERROR
GH (needs networkCode: "MTN")+2330000000001SUCCESSSandbox Mensah
GH+2330000000002NOT_FOUND
GH+2330000000003PROVIDER_ERROR
UG+2560000000001SUCCESSSandbox Nakato
UG+2560000000002NOT_FOUND
UG+2560000000003PROVIDER_ERROR
ZM+2600000000001SUCCESSTest Banda
ZM+2600000000002NOT_FOUND
ZM+2600000000003PROVIDER_ERROR
CI+2250000000001SUCCESSAlpha Kouamé
CI+2250000000002NOT_FOUND
CI+2250000000003PROVIDER_ERROR
SN+2210000000001SUCCESSSandbox Diop
SN+2210000000002NOT_FOUND
SN+2210000000003PROVIDER_ERROR
CM+2370000000001SUCCESSTest Nkomo
CM+2370000000002NOT_FOUND
CM+2370000000003PROVIDER_ERROR
BF+2260000000001SUCCESSAlpha Ouedraogo
BF+2260000000002NOT_FOUND
BF+2260000000003PROVIDER_ERROR
ML+2230000000001SUCCESSSandbox Traoré
ML+2230000000002NOT_FOUND
ML+2230000000003PROVIDER_ERROR
BJ+2290000000001SUCCESSTest Hounsou
BJ+2290000000002NOT_FOUND
BJ+2290000000003PROVIDER_ERROR
TG+2280000000001SUCCESSAlpha Agbeko
TG+2280000000002NOT_FOUND
TG+2280000000003PROVIDER_ERROR
TZ (needs networkCode: "503")+2550000000001SUCCESSTest Shekimweri
TZ+2550000000002NOT_FOUND
TZ+2550000000003PROVIDER_ERROR
ET (needs networkCode: "TELEBIRR")+251911000001SUCCESSSandbox Tadesse
ET+251911000002NOT_FOUND
ET+251911000003PROVIDER_ERROR
ET (needs networkCode: "MPESA")+251911000011SUCCESSSandbox Lemma
ET+251911000012NOT_FOUND
ET+251911000013PROVIDER_ERROR

BVN Identity Verification (POST /verify/identity, NG)

idNumberScenario
22222222201SUCCESS
22222222202NOT_FOUND
22222222203PROVIDER_ERROR

SUCCESS: example response for 22222222201

JSON
{
  "id": "8f3a7b2c-4d5e-6f7a-8b9c-0d1e2f3a4b5c",
  "status": "success",
  "verificationType": "BVN",
  "idType": "bvn",
  "country": "NG",
  "identifier": "22222222201",
  "verifiedAt": "2026-04-21T09:15:32.104Z",
  "verified": true,
  "firstName": "Test",
  "lastName": "Okoye",
  "middleName": "Sandbox",
  "dateOfBirth": "1990-01-01",
  "phoneNumber": "+2348000000001",
  "gender": "Male",
  "enrollmentBranch": "Victoria Island",
  "enrollmentInstitution": "Access Bank",
  "registrationDate": "2010-05-15",
  "nin": "12345678901",
  "levelOfAccount": "Tier 3",
  "address": {
    "town": "Lagos",
    "lga": "Eti-Osa",
    "state": "Lagos",
    "street": "10 Sandbox Street"
  },
  "title": "Mr",
  "maritalStatus": "Single",
  "lgaOfOrigin": "Onitsha North",
  "otherMobile": "+2348000000099",
  "stateOfOrigin": "Anambra",
  "watchListed": "NO",
  "nameOnCard": "OKOYE TEST SANDBOX",
  "image": "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=",
  "validation": null
}

id and verifiedAt vary per call; everything else is deterministic. image is a 1×1 transparent PNG encoded as base64 (lets you exercise your decoding pipeline end-to-end without a real photo). validation is populated only when your request includes a validation block (see the BVN reference for the full matcher schema).

NOT_FOUND: example response for 22222222202

JSON
{
  "id": "…",
  "status": "failed",
  "verificationType": "BVN",
  "idType": "bvn",
  "country": "NG",
  "identifier": "22222222202",
  "verifiedAt": "…",
  "error": { "code": "BVN_NOT_FOUND", "message": "BVN not found" }
}

PROVIDER_ERROR: example response for 22222222203

JSON
{
  "id": "…",
  "status": "error",
  "verificationType": "BVN",
  "idType": "bvn",
  "country": "NG",
  "identifier": "22222222203",
  "verifiedAt": "…",
  "error": { "code": "PROVIDER_ERROR", "message": "Simulated upstream provider error" }
}

Note the different status values: failed is a business failure (BVN does not exist upstream); error is an infrastructure failure (upstream provider returned 5xx). Matches live behavior.

NIN Identity Verification (POST /verify/identity, TZ)

identifierScenarioSuccess name
11111111111111111101SUCCESSTest Mwangi
11111111111111111102NIN_NOT_FOUND
11111111111111111103IDENTITY_MISMATCH
11111111111111111104PROVIDER_ERROR

NIN identifiers are exactly 20 digits. The validation object must include firstName and lastName; motherFirstName, placeOfBirth, dateOfBirth, and sex are optional and used to answer the identity challenge question.

SUCCESS: example response for 11111111111111111101

JSON
{
  "id": "…",
  "status": "success",
  "verificationType": "NIN",
  "idType": "nin",
  "country": "TZ",
  "identifier": "11111111111111111101",
  "verified": true,
  "firstName": "Test",
  "lastName": "Mwangi",
  "gender": "M",
  "dateOfBirth": "1990-01-01",
  "placeOfBirth": "Dar es Salaam",
  "verifiedAt": "…"
}

NIN_NOT_FOUND: example response for 11111111111111111102

JSON
{
  "id": "…",
  "status": "failed",
  "verificationType": "NIN",
  "idType": "nin",
  "country": "TZ",
  "identifier": "11111111111111111102",
  "verified": false,
  "verifiedAt": "…",
  "error": { "code": "NIN_NOT_FOUND", "message": "NIN not found" }
}

IDENTITY_MISMATCH: example response for 11111111111111111103

JSON
{
  "id": "…",
  "status": "failed",
  "verificationType": "NIN",
  "idType": "nin",
  "country": "TZ",
  "identifier": "11111111111111111103",
  "verified": false,
  "verifiedAt": "…",
  "error": { "code": "IDENTITY_MISMATCH", "message": "Identity attributes did not match" }
}

PROVIDER_ERROR: example response for 11111111111111111104

JSON
{
  "id": "…",
  "status": "error",
  "verificationType": "NIN",
  "idType": "nin",
  "country": "TZ",
  "identifier": "11111111111111111104",
  "verifiedAt": "…",
  "error": { "code": "PROVIDER_ERROR", "message": "Simulated upstream provider error" }
}

Lipa Na M-Pesa (POST /verify/lipa-na-mpesa, KE)

identifieridentifierTypeScenarioSuccess name
500001paybillSUCCESSTest Paybill Org
500002paybillNOT_FOUND
500003paybillPROVIDER_ERROR
600001tillSUCCESSTest Till Merchant
600002tillNOT_FOUND
600003tillPROVIDER_ERROR

M-Pesa Agent (POST /verify/mpesa-agent, KE)

agentCodeScenarioSuccess name
700001SUCCESSTest Njoroge Agent
700002NOT_FOUND
700003PROVIDER_ERROR

Sandbox-valid bank & operator codes

Any bank/operator code outside this list returns INVALID_BANK_CODE.

  • NG: 000014 (Access), 000013 (GTBank), 000015 (Zenith), 000004 (UBA), 000016 (First Bank)
  • GH: GH010100 (Ghana Commercial Bank)
  • ZM: 014 (FNB), 016 (Stanbic), 017 (Standard Chartered), 022 (UBA), 023 (Zanaco), 025 (ZICB), 028 (AB Bank)
  • CI, SN, CM, BF, ML, BJ, TG: ORANGE, MTN, MOOV, WAVE
  • TZ: 003 (CRDB Bank), 004 (NMB Bank), 013 (Exim Bank), 015 (NBC Bank), 006 (Stanbic Bank), 011 (Diamond Trust Bank), 009 (Bank of Africa), 020 (ABSA Bank), 021 (I&M Bank), 040 (Ecobank Tanzania), 046 (Amana Bank), 031 (Azania Bank), 024 (DCB Commercial Bank), 034 (BancABC), 039 (Mkombozi Bank), 048 (TPB Bank); phone operator codes: 503 (Vodacom M-Pesa), 504 (Airtel Money), 501 (Tigo Pesa / Zantel), 506 (Halotel HaloPesa), 507 (Azam Mobile Money)
  • ET: 231402 (Commercial Bank of Ethiopia). Live calls accept all 43 ET institution codes, see supported banks; sandbox is a single bank to keep test surface focused.
  • GB: 200000 (sandbox sort-code).
  • CN: CN-INDIV (individual accounts), ABOCCNBJ (business accounts).
  • UG: bank-account verification is not supported. Use phone verification instead.
  • KE: no bank code field, lipa-na-mpesa and mpesa-agent endpoints do not take one.

Testing Async Webhooks

  1. Register a webhook URL in your dashboard and subscribe to verification.completed.

  2. POST a verification request with "mode": "async". You will receive a pending response immediately.

  3. After about 3 seconds, your webhook URL receives a verification.completed event:

    JSON
    {
      "event": "verification.completed",
      "data": {
        "id": "verif_abc123",
        "status": "success",
        "type": "ACCOUNT_NUMBER",
        "accountName": "Test Okoye"
      }
    }
  4. If your process crashes before delivery, the verification stays pending. This is intentional (lets you test crash recovery in your own code).