Webhooks
NexaPay sends signed outbound webhooks to the merchantwebhookUrl whenever merchant account events complete.
How Signing Works
- NexaPay signs each webhook payload with the merchant’s
webhookSecret - Merchants verify the signature before trusting the payload
- Signature verification should happen in your backend, not in browser code
Headers
NexaPay includes headers similar to:x-nexapay-signaturex-nexapay-timestampx-nexapay-eventx-nexapay-event-idx-nexapay-business-id
Signature Scheme
The signature is computed over the raw body plus timestamp using HMAC SHA-256.Webhook Events
deposit.received
Sent when money is credited to a merchant virtual account or business account.
withdrawal.completed
Sent when a merchant withdrawal settles successfully.
withdrawal.failed
Sent when a merchant withdrawal does not complete.
cross_border.collection.success
Sent when a cross-border collection succeeds and the merchant’s NGN wallet has been credited.
cross_border.collection.failed
Sent when a cross-border collection fails before the merchant wallet is credited.
cross_border.collection.review
Sent when provider confirmation does not match the expected amount or currency. The collection is held for review and the merchant wallet is not automatically credited.
Merchant Webhook Secret
NexaPay exposes the merchant webhook secret from the dashboard for authenticated users.Reveal Secret
GET /business/webhook-secret
Returns the current webhook secret so the merchant can verify signatures.
Regenerate Secret
POST /business/webhook-secret/regenerate
Rotates the secret and returns the new value. Merchants should update their backend immediately after regenerating.
Delivery Rules
- Webhooks are sent after the relevant transaction is committed.
- Delivery is best-effort with retries.
- Merchants should deduplicate using
eventId. - Merchants should verify the signature before processing the payload.