Skip to main content
Register a URL, store the secret, verify X-Signature on every delivery.

Register

HTTPS only. The response includes a secret (weh_…).

Envelope

Every delivery is { id, type, timestamp, payload }. id is the event id. payload depends on type. Amounts are minor units (kobo/cents). Confirm with GET /transactions/{id}/verify (or the matching retrieve endpoint) before fulfilling.

Events

Payload

Example: virtual_account.deposit. payload.id is the transaction id. source is the sender’s bank details when present. payload.status is always completed on this event.
Other events use the same envelope. Their payload objects are on the feature guides in the table above.

Verify the signature

Header: X-Signature: sha256=<hmac>. HMAC-SHA256 of the raw body with your webhook secret.
Hash the raw request bytes. Do not parse JSON and re-stringify — key order and spacing will break the signature. Non-2xx or timeout → up to 3 retries. Inspect with GET /webhooks/events.