Webhook management
Every endpoint and its delivery record live on the Webhooks dashboard page, which opens once the account is paying, by subscription or by prepaid balance. It opens on the delivery counts for the last seven days, then your endpoints, then the account wide event feed. From your own backend, create an endpoint with a URL, a description and a list of event types, list them, read one, update a description, an event list or whether the endpoint is enabled, and delete one you no longer want called.The Owner and any Editor can add, edit, rotate, test and replay. A Viewer sees
the same endpoints and deliveries and cannot change them. Roles are set in
Members.
Register an endpoint
Select Add webhook and give it a publichttps:// URL. A plain http://
address, localhost and private network addresses are refused in the form, so a
development listener needs a public tunnel.
Pick the events you want, or keep All events, where a new endpoint starts;
it covers the events we add later, and the row says so in place of a count. Turn
it off and the endpoint needs at least one event to save. Webhooks
overview lists each event and when it fires.
The switch on each row stops deliveries while keeping the endpoint, its secret
and its history. Deleting is not reversible.

Store the signing secret
The secret appears once, in the dialog that opens as the endpoint is created. Copy it there: every later read masks it to its last four characters, and there is no way to ask again. Rotate secret in the row menu, and rotate the signing secret from your backend, issue a new one and reveal it the same way. The previous secret stops verifying the moment the new one is issued, so put the new value in front of your handler first, or accept a short window in which deliveries arrive and fail your check. Each endpoint carries its own secret, so one leak reaches one endpoint. Verifying signatures covers what your handler does with it.Watch the success rate
Two cards above the endpoint list cover the last seven days: Event deliveries plots the daily total with failures drawn over it, and Success rate gives the same window as one percentage with the counts underneath. An account with no deliveries says so in words instead of drawing a flat line at zero. The delivery overview returns the same counts.Read the delivery record
Select an endpoint row to open its record. Each line is one attempt: the response status, the event name, the job it belongs to, when it happened, and which try it was. Two filters run across the whole record rather than the rows on screen: Failed only drops everything that succeeded, and the event filter keeps the types you pick. Open a line for the whole attempt. The headers and body we sent are kept every time. An attempt that did not answer2xx also carries the status, headers and
body your server returned, and the last error; a 2xx line keeps its status and
says the response body was not captured. The API returns the same
list and the
same detail.
Below the endpoints, Events reads the record the other way round: recent
events across every endpoint, newest first, grouped so one event shows each
endpoint it reached and the answer each gave. Use an endpoint’s own record when
you suspect one listener, this feed when you are chasing one job. It takes the
same two filters, and retrieve a list of
events returns it.
Understand a delivery status
The chip on a row carries the response code once your server has given one, and one of four states when it has not.pendingis in flight. The attempt has been made or is being retried, and no final answer has arrived.deliveredmeans your server answered2xx, the only outcome that stops the retries.failedmeans the attempt did not answer2xx. It will be retried.deadmeans the retries for that event are spent. Nothing will send it again on its own.
failed and dead
alike.
Replay a delivery
Replay on any line sends that delivery again to the endpoint meant to receive it, a delivered line included, which is how you reprocess an event after a handler change. When an endpoint has failures, Replay all failed appears above its record and resends every failed delivery for that endpoint, not only the ones loaded. The API does the same for one delivery or all failed deliveries.A replayed delivery can arrive with
result_url set to null. Read the result
with GET /api/v1/jobs/{job_id} when that happens.Send a test event
Send test in the row menu, or its API form, delivers awebhook.test event, signed exactly as a real event is, so a signature that
verifies here verifies in production. It lands in the delivery record too.
API reference
- Webhook endpoints covers registering, updating, rotating and testing
- Webhook deliveries covers the overview, the two feeds and the replays