POST.
Setting up an endpoint
You can create endpoints in the dashboard under Integrations → Webhooks, or through the API.- Enter a name and a public
https://URL. - Pick the events you want. Nothing is selected automatically. Messaging events can be limited to one channel (for example only
whatsapp) orall. - Copy the signing secret (it starts with
whsec_) when it is shown. You need it to verify signatures. - New endpoints start paused. Enable the endpoint, then send a test event to check your receiver handles it.
What a delivery looks like
Payloads are deliberately small. To get the full record, call the API with the ID from
data.
Responding
- Return any
2xxstatus as soon as you have stored the event. Do slow work afterwards. - Requests time out after 8 seconds (4 seconds to connect).
- Redirects are not followed and count as a failure.
Retries
Network errors, timeouts,408, 429 and 5xx responses are retried. Other 4xx responses and redirects are final.
An event is attempted at most 6 times, with delays of roughly 10 seconds, 1 minute, 5 minutes, 30 minutes and 2 hours (with some random jitter). A Retry-After header on your response can lengthen a delay.
Delivery history in the dashboard shows each attempt’s status code, duration and outcome, and lets you resend a delivery.
Delivery guarantees
- At least once. The same delivery can arrive more than once. Use the
X-Webhook-Deliveryheader to ignore duplicates. - Not ordered. Events can arrive out of order. Use
occurred_atif order matters. - Up to a minute’s delay. Deliveries are sent by a scheduler that runs every minute.
- A manual resend gets a new delivery ID, on purpose.