Sandbox 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)

Country accountNumber bankCode Scenario Success name
NG 0000000001 044 SUCCESS Test Okoye
NG 0000000002 044 NOT_FOUND β€”
NG 0000000003 044 PROVIDER_ERROR β€”
GH 1000000001 GH010100 SUCCESS Sandbox Mensah
GH 1000000002 GH010100 NOT_FOUND β€”
GH 1000000003 GH010100 PROVIDER_ERROR β€”
ZM 3000000001 023 SUCCESS Test Banda
ZM 3000000002 023 NOT_FOUND β€”
ZM 3000000003 023 PROVIDER_ERROR β€”
CI 4000000001 ORANGE SUCCESS Alpha KouamΓ©
CI 4000000002 ORANGE NOT_FOUND β€”
CI 4000000003 ORANGE PROVIDER_ERROR β€”
SN 5000000001 ORANGE SUCCESS Sandbox Diop
SN 5000000002 ORANGE NOT_FOUND β€”
SN 5000000003 ORANGE PROVIDER_ERROR β€”
CM 6000000001 MTN SUCCESS Test Nkomo
CM 6000000002 MTN NOT_FOUND β€”
CM 6000000003 MTN PROVIDER_ERROR β€”
BF 7000000001 ORANGE SUCCESS Alpha Ouedraogo
BF 7000000002 ORANGE NOT_FOUND β€”
BF 7000000003 ORANGE PROVIDER_ERROR β€”
ML 8000000001 ORANGE SUCCESS Sandbox TraorΓ©
ML 8000000002 ORANGE NOT_FOUND β€”
ML 8000000003 ORANGE PROVIDER_ERROR β€”
BJ 9000000001 ORANGE SUCCESS Test Hounsou
BJ 9000000002 ORANGE NOT_FOUND β€”
BJ 9000000003 ORANGE PROVIDER_ERROR β€”
TG 0100000001 ORANGE SUCCESS Alpha Agbeko
TG 0100000002 ORANGE NOT_FOUND β€”
TG 0100000003 ORANGE PROVIDER_ERROR β€”

Phone Verification (POST /verify/phone)

Country phoneNumber Scenario Success subscriber name
NG +2348000000001 SUCCESS Test Okoye
NG +2348000000002 NOT_FOUND β€”
NG +2348000000003 PROVIDER_ERROR β€”
GH (needs networkCode: "MTN") +2330000000001 SUCCESS Sandbox Mensah
GH +2330000000002 NOT_FOUND β€”
GH +2330000000003 PROVIDER_ERROR β€”
UG +2560000000001 SUCCESS Sandbox Nakato
UG +2560000000002 NOT_FOUND β€”
UG +2560000000003 PROVIDER_ERROR β€”
ZM +2600000000001 SUCCESS Test Banda
ZM +2600000000002 NOT_FOUND β€”
ZM +2600000000003 PROVIDER_ERROR β€”
CI +2250000000001 SUCCESS Alpha KouamΓ©
CI +2250000000002 NOT_FOUND β€”
CI +2250000000003 PROVIDER_ERROR β€”
SN +2210000000001 SUCCESS Sandbox Diop
SN +2210000000002 NOT_FOUND β€”
SN +2210000000003 PROVIDER_ERROR β€”
CM +2370000000001 SUCCESS Test Nkomo
CM +2370000000002 NOT_FOUND β€”
CM +2370000000003 PROVIDER_ERROR β€”
BF +2260000000001 SUCCESS Alpha Ouedraogo
BF +2260000000002 NOT_FOUND β€”
BF +2260000000003 PROVIDER_ERROR β€”
ML +2230000000001 SUCCESS Sandbox TraorΓ©
ML +2230000000002 NOT_FOUND β€”
ML +2230000000003 PROVIDER_ERROR β€”
BJ +2290000000001 SUCCESS Test Hounsou
BJ +2290000000002 NOT_FOUND β€”
BJ +2290000000003 PROVIDER_ERROR β€”
TG +2280000000001 SUCCESS Alpha Agbeko
TG +2280000000002 NOT_FOUND β€”
TG +2280000000003 PROVIDER_ERROR β€”

BVN Identity Verification (POST /verify/identity β€” NG)

idNumber Scenario
22222222201 SUCCESS
22222222202 NOT_FOUND
22222222203 PROVIDER_ERROR

SUCCESS β€” example response for 22222222201

{
  "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

{
  "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

{
  "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.

Lipa Na M-Pesa (POST /verify/lipa-na-mpesa β€” KE)

identifier identifierType Scenario Success name
500001 paybill SUCCESS Test Paybill Org
500002 paybill NOT_FOUND β€”
500003 paybill PROVIDER_ERROR β€”
600001 till SUCCESS Test Till Merchant
600002 till NOT_FOUND β€”
600003 till PROVIDER_ERROR β€”

M-Pesa Agent (POST /verify/mpesa-agent β€” KE)

agentCode Scenario Success name
700001 SUCCESS Test Njoroge Agent
700002 NOT_FOUND β€”
700003 PROVIDER_ERROR β€”

Sandbox-valid bank & operator codes

Any bank/operator code outside this list returns INVALID_BANK_CODE.

  • NG: 044 (Access), 058 (GTBank), 057 (Zenith), 033 (UBA), 011 (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
  • 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:

    {
      "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.