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 | 000014 | SUCCESS | Test Okoye |
| NG | 0000000002 | 000014 | NOT_FOUND | — |
| NG | 0000000003 | 000014 | 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 | — |
| TZ | 2000000001 | 003 | SUCCESS | Test Shekimweri |
| TZ | 2000000002 | 003 | NOT_FOUND | — |
| TZ | 2000000003 | 003 | PROVIDER_ERROR | — |
| ET | 1000000000001 | 231402 | SUCCESS | Sandbox Bekele |
| ET | 1000000000002 | 231402 | NOT_FOUND | — |
| ET | 1000000000003 | 231402 | PROVIDER_ERROR | — |
| GB | GB-VERIFIED-001 | 200000 | SUCCESS: strong match, no major risk | SANDBOX TEST ACCOUNT |
| GB | GB-HIGHRISK-002 | 200000 | SUCCESS: strong match, significant risk (verified: false) | SANDBOX HIGH RISK |
| GB | GB-NOTFOUND-003 | 200000 | NOT_FOUND | — |
| CN | 6228480402564890018 | CN-INDIV | SUCCESS: individual strong match | SANDBOX TEST |
| CN | 6228480402564890026 | CN-INDIV | IDENTITY_MISMATCH: individual weak match | SANDBOX WEAK |
| CN | 321872160000 | ABOCCNBJ | SUCCESS: business strong match (0.98) | SANDBOX BIZ CO |
| CN | 321872160001 | ABOCCNBJ | IDENTITY_MISMATCH: business partial match (0.80) | SANDBOX BIZ PARTIAL |
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 | — |
TZ (needs networkCode: "503") | +2550000000001 | SUCCESS | Test Shekimweri |
| TZ | +2550000000002 | NOT_FOUND | — |
| TZ | +2550000000003 | PROVIDER_ERROR | — |
ET (needs networkCode: "TELEBIRR") | +251911000001 | SUCCESS | Sandbox Tadesse |
| ET | +251911000002 | NOT_FOUND | — |
| ET | +251911000003 | PROVIDER_ERROR | — |
ET (needs networkCode: "MPESA") | +251911000011 | SUCCESS | Sandbox Lemma |
| ET | +251911000012 | NOT_FOUND | — |
| ET | +251911000013 | 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.
NIN Identity Verification (POST /verify/identity, TZ)
| identifier | Scenario | Success name |
|---|---|---|
11111111111111111101 | SUCCESS | Test Mwangi |
11111111111111111102 | NIN_NOT_FOUND | — |
11111111111111111103 | IDENTITY_MISMATCH | — |
11111111111111111104 | PROVIDER_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
{
"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
{
"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
{
"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
{
"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)
| 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:
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
-
Register a webhook URL in your dashboard and subscribe to
verification.completed. -
POST a verification request with
"mode": "async". You will receive apendingresponse immediately. -
After about 3 seconds, your webhook URL receives a
verification.completedevent:JSON{ "event": "verification.completed", "data": { "id": "verif_abc123", "status": "success", "type": "ACCOUNT_NUMBER", "accountName": "Test Okoye" } } -
If your process crashes before delivery, the verification stays
pending. This is intentional (lets you test crash recovery in your own code).