Skip to main content
Webhooks push event notifications to your server the moment something happens — you don’t have to poll.

Registering an endpoint

From the dashboard (Webhooks → Add webhook) or via the API:
The secret is returned only once on creation. Store it immediately — lose it and you’ll have to rotate.

Event types

Payload shape

Every event uses the same envelope:
The data object shape matches the resource GET response — same shape as GET /v1/sms/:id.

Signature verification

Every request includes two headers:
v1 is the hex HMAC-SHA256 of {t}.{body}, signed with your webhook’s secret. Verify it before trusting the payload:
Reject timestamps older than 5 minutes — stale signatures are replay attempts. Our SDK helpers enforce this by default.

Retry behavior

If your endpoint returns a non-2xx status, we retry with exponential backoff:
Seven attempts total, across roughly 7.5 hours. After that the delivery is marked failed in the dashboard and we stop.

Testing from the dashboard

Webhooks → your webhook → Send test fires a synthetic event at your URL. Use this to prove your signature verification works before shipping. See each delivery attempt (status code, latency, response body) in the Deliveries tab.