Receive a Webhook
Expose an endpoint, test it locally with a tunnel, and confirm receipt of your first event.
1. Expose an endpoint
Your endpoint must accept a POST request with a JSON body and respond 2xx quickly.
app.post('/webhooks/wajub', express.raw({ type: '*/*' }), (req, res) => {
// 1. Verify the signature (see next page)
// 2. Acknowledge immediately
res.sendStatus(200);
// 3. Process in a background task (queue) to avoid blocking
enqueue(req.body);
});Respond fast, process later
Wajub considers a response beyond 10 s as a failure and will redeliver. Acknowledge
with 200 immediately, then process the event asynchronously (job queue).
2. Test locally with a tunnel
Expose your local server via a tunnel, then provide the public URL in the Dashboard.
# Example with an HTTPS tunnel
ngrok http 3000
# → https://random-id.ngrok.app → paste /webhooks/wajub in the Dashboard3. Trigger an event
Make a test payment (Quickstart) with a
sandbox test number, then check
Konsole → Webhooks to confirm the delivery reached your
endpoint. You should receive payment.succeeded. If it failed, use the endpoint's Retry
action to resend the same event once your handler is fixed — there is no way to author a
synthetic event on demand, only resend a real one or send a fixed connectivity-test payload.
/payments201412msMTN MoMo/payments/trx.PVrU8x2k20088msMTN MoMo/transfers202690msOrange Money/payments4021203msWave/balance20042ms—/payments5005012msCinetPayThen move on to signature verification before production.
Related pages