Skip to main content

Webhooks

NexaPay sends signed outbound webhooks to the merchant webhookUrl 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-signature
  • x-nexapay-timestamp
  • x-nexapay-event
  • x-nexapay-event-id
  • x-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.