Sandbox & test IDs
Build with

Test your Myaza KYC integration end to end — webhooks, polling, the full result payload (biodata, facial match, OCR data, captured-media URLs), and every failure branch — without calling any government database or burning provider credits.

EnvironmentKey prefixReal IDs?Test IDs?Charged?
Sandboxpk_test_ / sk_test_rejectedcanned resultnever
Productionpk_live_ / sk_live_yestreated as realyes

Sandbox accepts only published test IDs. A real (non-test) idNumber is rejected immediately at POST /verify with 422 only_test_ids_allowed.

All sandbox results are fully fake — fake biodata, fake government photos, fake OCR, and fake gov-DB data. No external API is ever called.

How test IDs work
Build with

Pass a test ID in the idNumber field of POST /verify. The last one or two digits encode the scenario; everything before is zero-padding so the value stays format-valid for its ID type. Example for NG BVN:

code
00000000001   verified
00000000002   not_found
00000000004   selfie_mismatch
00000000007   document_expired   (document IDs only)
00000000012   provider_error

Scenario reference

IdxScenarioStatusreasonCodeApplies to
1verifiedverifiedall
2not_foundnot_foundidentity_not_foundall
3gov_validation_failedfailedgov_validation_failedall
4selfie_mismatchfailedselfie_mismatchall
5gov_data_mismatchfailedgov_data_mismatchall
6document_data_mismatchfaileddocument_data_mismatchdocument
7document_expiredfaileddocument_expireddocument
8document_type_mismatchfaileddocument_type_mismatchdocument
9document_unreadablefaileddocument_unreadabledocument
10document_blurryfaileddocument_blurrydocument
11id_number_not_foundfailedid_number_not_founddocument
12provider_errorerrorprovider_errorall
13unsupported_id_typeerrorunsupported_id_typeall
14media_not_founderrormedia_not_foundall
15insufficient_creditserrorinsufficient_creditsall
16system_errorerrorsystem_errorall
17id_type_not_enablederrorid_type_not_enabledall
18document_verification_disablederrordocument_verification_disableddocument
19gov_db_check_disablederrorgov_db_check_disabledall
20sandbox_not_foundnot_foundsandbox_not_foundall
21sandbox_failedfailedsandbox_failedall

Document-only scenarios (6–11, 18) are not published for number-only IDs (BVN/NIN/vNIN).

The verified test ID per ID type

Change the trailing digits per the table above to pick a different scenario.

CountryID typeFormatverified test ID
NGbvn / nin11 digits00000000001
NGvnin16 chars0000000000000001
NGpassportA + 8 digitsA00000001
NGdrivers-licenseTST + 8 digitsTST00000001
NGpvc19 digits0000000000000000001
GHghana-cardGHA-NNNNNNNNN-NGHA-000000001-0
GHvoters10 digits0000000001
GHssnitC + 12 digitsC000000000001
GHpassportG + 8 digitsG00000001
KEnational-id8 digits00000001
KEpassportK + 8 digitsK00000001
ZAnational-id13 digits0000000000001
ZApassportZ + 8 digitsZ00000001
CIcniCI + 9 digitsCI000000001
CIresidence-cardCR + 9 digitsCR000000001

Example — number-only ID
Build with

shell
curl -X POST https://your-server/api/kyc/verify \
  -H "Authorization: Bearer pk_test_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "country": "NG",
    "idType": "bvn",
    "idNumber": "00000000001",
    "userData": { "firstName": "Chidi", "lastName": "Okafor", "dateOfBirth": "1990-04-12" },
    "metadata": { "requestId": "test-001" }
  }'

Document IDs
Build with

In sandbox, OCR is never run — a fake OCR result is returned instead. Either let the SDK document flow default to the verified fixture (no ID number collected), or pick a scenario by passing the document test ID in idNumber (e.g. A00000007 for an expired passport) or via the sandboxOutcome override below.

Overrides
Build with

Both go in metadata and are ignored in production.

  • sandboxOutcome — force any scenario regardless of the test ID, e.g. "sandboxOutcome": "selfie_mismatch".
  • sandboxDelayMs — how long pending → completed takes (0–60000 ms). Defaults to ~1200 ms; set 0 for an instant result.

Captured media
Build with

Media uploaded under a test ID is kept for 3 days, then the bytes are replaced with a placeholder (an image for stills, a sample clip for videos). The data.media URLs in webhooks keep working — they just serve the placeholder after the sweep.

Webhook simulator
Build with

From a webhook endpoint's detail page (or POST /api/dashboard/webhooks/:id/simulate with { "event": "verification.completed" }), fire a realistic, correctly-signed sample payload of any event at your endpoint to test signature verification and your handler — without running a verification. It uses the real delivery path (HMAC signing + retry).

Notes
Build with

  • Sandbox verifications are never charged, even for the insufficient_credits scenario.
  • Test IDs bypass the ID-type allowlist, so a new organization can test immediately. Use the id_type_not_enabled scenario to simulate a revoked allowlist.
  • Branch on the stable reasonCode, not the human-readable reason.