The three objects
A wallet holds four balances, always returned together:
Wallet balances are a strictly-maintained sub-ledger of your merchant pooled wallet. A customer wallet can never spend another customer’s balance — every debit is guarded against that wallet’s own available balance.
The KYC ladder
Capabilities unlock as the customer verifies more. You never provide more than a step needs — a wallet that only holds value asks for nothing but a name. This is the default ladder; the requirements and per-tier limits are configurable by your Numero admin, so what a given tier unlocks (and its transaction limits) may differ for your account.
This reflects CBN’s identity requirements — full identity for moving money out is BVN and NIN and a government ID. Each item is a real, billable verification Numero performs; a tier only rises when the check genuinely passes.
Each endpoint below states the tier it requires. Calling an endpoint above the customer’s current tier returns a clear
403 telling you which step is missing — never a silent failure.
A typical integration
Base URL, auth, and test mode
- Base URL:
https://api.usenumero.com/numeroaccount - Auth: every request sends
X-Numero-Api-Key. Money-movingPOSTs also require a request signature — see Request Signing. WaaS endpoints are additionally scope-gated: your key must carrycustomers:write,customer_wallet:read,customer_wallet:write, and/orkyc:writeas appropriate. - Test mode: send a
test_key_…key and everything below runs against simulated providers on an isolated test wallet — same base URL, same endpoints, live balances never touched. See Test Mode.
{ status, message, code, version, data, error }.
Webhooks
Numero emits an event to your configured webhook endpoint for every wallet action, so you don’t have to poll. Each event body is{ "event": "<name>", "data": { … } }, where data is the same shape as the corresponding API response.
A payout returns immediately in
Held/pending; the payout.sent or payout.failed event tells you the final outcome once the bank transfer resolves.