The envelope
data and error are mutually exclusive: exactly one of them is non-null on every response.
Failures
HTTP status codes
The status code is real — a failed request never arrives as200. Checking response.ok (or
response.status < 400) is a correct success test.
Examples by status
400 — missing API key400 with a
distinct error.code. Branch on the code, not the status.
Error codes
Grouped by what you should do about them. Authentication & authorization — fix your credentials; retrying unchanged will not help.missing_field · invalid_api_key · invalid_signature · unauthorized · forbidden
Your request — fix the input, then retry.
invalid_request · validation_failed · invalid_amount · invalid_account_number · invalid_bank ·
invalid_bvn · invalid_pin · pin_not_set · invalid_otp · otp_expired · otp_required ·
already_exists · duplicate_request · idempotency_conflict · not_found · not_implemented
Your account’s state — needs an action on your side, often in the dashboard.
insufficient_balance · business_not_found · business_inactive · kyc_required ·
approval_required · activation_required · limit_exceeded · rate_limited
The resource — the thing you named does not exist under your business.
account_not_found · customer_not_found · recipient_not_found · transaction_not_found ·
virtual_account_not_found
Downstream — usually transient. Retry with the same Idempotency-Key.
provider_error · provider_timeout · provider_unavailable · internal_error
A money-movement request that fails with a downstream code may still have reached the provider. Retry
with the same
Idempotency-Key — that is exactly what it is for — or query the relevant status
endpoint before assuming it did not happen.Handling errors
meta.request_id on every failure. It is the one value that lets support find your exact request.
Pagination
List endpoints acceptpageNumber and pageSize:
On a paginated endpoint,
data is the array of records itself and the page details are lifted into
meta.pagination:
A note on older integrations
Some Numero endpoints outside this reference — the ones the Numero dashboards themselves call — still answer with an older envelope (status, message, code, reference) and report failures inside a
200 response. That shape is not part of the developer API and is not supported for integrations.
Everything documented in this reference uses the envelope and status codes above.