Webhook events and stats
The events an endpoint can subscribe to, and how the deliveries went.
Runs any of 2 calls on your workspace.
Events
GET /webhooks/events lists every event an endpoint can name in eventTypes, each with a sentence saying when it fires, and the limits an endpoint is held to: maxEndpoints for the workspace, which its plan decides, and maxAddresses and maxDomains for one allowlist. It needs webhooks:read.
{ "object": "webhook_catalogue", "events": [ { "id": "email.sent", "label": "A message left OpenEmail." }, { "id": "email.bounced", "label": "A message bounced." } ], "maxEndpoints": 10, "maxAddresses": 50, "maxDomains": 20}An endpoint that names no events receives every email event except email.replied, so email.replied and the other families reach only an endpoint that asks for them by name.
Stats
GET /webhooks/stats reads how the deliveries went inside a window, the Analytics tab of the Webhooks page: attempts, delivered and failed, the median time a receiver took to answer, a series of buckets, the events sent and the response codes received. It needs webhooks:read. endpointIds narrows it to some endpoints, since and until set the window, 30 days by default, and grain and offsetMinutes shape the series. Each try of an event counts as one attempt.
{ "object": "webhook_stats", "since": "2026-09-02T00:00:00.000Z", "until": "2026-10-02T00:00:00.000Z", "grain": "day", "endpointIds": [], "totals": { "attempts": 1280, "delivered": 1266, "failed": 14, "medianDurationMs": 212 }, "buckets": [{ "bucket": "2026-09-28", "delivered": 44, "failed": 1 }], "events": [{ "id": "email.delivered", "count": 702 }], "codes": [{ "id": "200", "count": 1266 }, { "id": "503", "count": 14 }]}