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. All authenticated merchants receivecustomers:write,customer_wallet:read,customer_wallet:write, andkyc:writeby default, for both test and live keys, including existing merchants. No manual WaaS activation is required. Customer ownership, KYC tiers, wallet limits and available-balance checks still apply. Virtual-card approval remains separate; unrelated API scopes are not granted by this default. - 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.
{ data, error, meta }.
Customer availability versus pool settlement
Normal virtual-account inflows credit the customer’s wallet immediately, net of the configured collection fee. The merchant pool may retain that incoming amount in its own pending settlement balance. Customer compliance or tier-limit breaches can still hold funds for review. External payouts require both the customer’s available balance and sufficient settled funds in the merchant’sCUSTOMER_POOL, including fees and after active holds. Pending
provider settlements cannot fund payouts. Funds in the merchant’s separate primary
wallet are not automatically drawn into the pool.
Reconciliation compares total pool assets (balance plus pending) with total customer
claims (ledger balances plus pending). Different settlement buckets alone are not a
missing-credit discrepancy. Later provider settlement must not credit the customer again.
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.