Skip to main content
Collections and payouts finish asynchronously, after the customer approves a prompt or the bank settles. Webhooks tell you the moment that happens, so you don’t need to poll.

Set up

1

Build an HTTPS endpoint

A POST route on your server, for example https://merchant.co.ke/webhooks/tanda.
2

Register it in the dashboard

Go to Webhooks in the dashboard. Sandbox and production each have their own URL.
3

Generate a webhook secret

Under Developers → API keys. You’ll use it to verify every request.
4

Test it

Create a sandbox transaction and call Simulate webhook to send yourself an event.

Delivery

Retries stop after the third retry. If your server was down for longer, find the missed events with List webhook deliveries and replay them with Resend webhook, or check the transactions directly.

Write a reliable handler

Verify, queue, acknowledge. Do the slow work in the background so you always answer within the timeout.
Node.js (Express)
When you process an event:
  • Key on transactionId (or your externalReference) so a duplicate does nothing.
  • Never move backwards. Ignore a pending that arrives after successful or failed.
  • Acknowledge events you don’t use. Return 2xx for unknown event types so they aren’t retried.
  • Double-check before irreversible actions. For high-value orders, confirm with Get transaction before you ship.

Inspect and replay

Verify webhooks

Reject requests that didn’t come from Tanda.

Events and payloads

Every event, field and status.