TeronaPay
Product

Webhooks built like Stripe's.

Real-time event delivery to your endpoint with signatures, retries, secret rotation, alerts, and replay. Designed for production from day one.

Built-in

Everything you'd expect, plus replay.

Signed deliveries

Every POST carries X-Nowpesa-Signature with t=<unix>,v1=<hex_hmac>. Verify server-side with HMAC-SHA256 over `<t>.<body>`.

Retry with exponential backoff

We retry failed deliveries up to 6 times over ~12 hours. Each attempt is logged in the dashboard with its status code and response snippet.

Secret rotation without downtime

Rotate your signing secret → both X-Nowpesa-Signature and X-Nowpesa-Signature-Next ship until you Promote. No dropped events.

Alert when your endpoint goes down

After N permanent failures we POST a failure-burst alert to your ops URL. We also POST a recovery alert when the endpoint starts succeeding again.

Replay from the dashboard

Any past delivery (delivered or failed) can be re-fired with one click. Same event_id, so your idempotency stays intact.

Idempotent fan-out

Webhook delivery happens at-least-once via an outbox relay. Your handler should be idempotent on (event_id) — never double-process the same event.

Per-request callback URLs

Pass callback_url on any payment or payout to route that request's events to a single URL — skipping your registered endpoints for just that request. Signed with your callback secret, same HMAC scheme.

Event catalog

Six event types cover the whole money-movement lifecycle.

Event typeWhat it means
payment.succeededInbound payment captured. Ledger credited.
payment.failedInbound payment declined or expired.
payment.refundedRefund slice succeeded. Ledger reversed.
payment.refund_failedRefund slice failed at the channel.
payout.succeededOutbound transfer to M-Pesa completed.
payout.failedOutbound transfer reversed; reservation released.

Full payload reference at /docs/webhook-events.

Wire up webhooks in minutes

Webhooks — signed, retried, replayable · TeronaPay