status.
Setting up webhooks
Configure your webhook URL in the Merchant Dashboard → Settings → Developer → Webhooks:- Add your webhook endpoint URL
- Select the events you want (or subscribe to all with
"*") - Your signing secret is generated — save it securely (you can view it again anytime via a verification code)
Your signing secret verifies that incoming webhooks are genuinely from Numero. Keep it private and never expose it in client-side code.
How webhooks work
Envelope
Every delivery is aPOST of this structure:
The envelope and
data use the API’s camelCase field names.
Headers
Event types
¹ An inbound credit has no “merchant failure” to report. ² FX conversion and VA creation are synchronous — a failure is returned in the API response (
status: false + a 4xx/503), so there’s nothing to webhook. Branch on the call’s own response for those.
Determine the outcome fromdata.status(Successful/Unsuccessful/Pending) anddata.requestState/data.requestStateDetails— don’t infer it from the event type. A failed outbound transfer/payout fires withstatus: "Unsuccessful"andrequestState: "Failed"; the debit is returned to your wallet through the reversal workflow.
Payloads
TransactionWebhookData — money movement (transfer / funding / payout / internal)
All amounts are in naira.
BillsPurchaseWebhook — VAS
VerificationWebhookData
VirtualAccountCreatedData
CurrencyConversionData
Field casing. The four envelope fields are exactlyid,event,created_atanddata— notecreated_atis snake_case. Everything insidedatais camelCase, matching the rest of the API.
Retries
- Respond
2xxto acknowledge. Any non-2xx (or a timeout) is a failed delivery. - Every webhook is persisted before delivery, so events are never lost if your endpoint is down.
- Failed deliveries are retried automatically with exponential backoff for up to 24 hours, and can be re-sent manually from the dashboard. After 10 consecutive failures the subscription is disabled.
- Webhook delivery never affects the transaction it describes. A failed or refused delivery does not reverse, hold or retry the underlying money movement — treat the webhook as notification, and the transaction status endpoint as the source of truth.