List Agent Webhook Deliveries
GET/api/support/agent/webhooks/:webhook/deliveries
Lists the delivery log of one outbound support webhook — every event that was (or is about to be) POSTed to it, with the exact body sent, how many attempts were made and what came back. Newest first by default. A delivery is tried up to 3 times (retries after 30 seconds, then 5 minutes) before it is marked failed; ping rows are the tenant's "send test" deliveries and are tried once.
support:readGrant this scope to your token under Settings → Developer → Personal Access Tokens.
Each delivery is POSTed as JSON with the headers X-SKU-Event (the event name), X-SKU-Delivery (this delivery's id) and X-SKU-Signature (sha256= followed by the hex HMAC-SHA256 of the raw body, keyed with the webhook's secret).
Path parameters
webhook(integer) — the webhook id.
Query parameters — every filter is optional
filter[status](string) — one value or a comma-separated list of: pending, delivered, failedfilter[event](string) — one event name or a comma-separated list: ticket.created, ticket.updated, ticket.replied, ticket.resolved, pingfilter[ticket_id](integer) — one ticket id or a comma-separated listfilter[created_at](string) — a single dayYYYY-MM-DDor an inclusivefrom,torangesort(string) — prefix with-for descending. Allowed sorts: id, created_at, status, response_code, attempts, delivered_at. Default:-id.page,per_page(integer) — standard pagination;per_pagedefault 10, maximum 100
An unknown filter[...] key or sort field is rejected with 400.
Response fields (each entry in data[]; standard pagination envelope)
id(integer),webhook_id(integer)event(string) — one of: ticket.created, ticket.updated, ticket.replied, ticket.resolved, pingticket_id(integer, nullable) — null for apingstatus(string) — one of: pending (queued or between retries), delivered, failedresponse_code(integer, nullable) — the HTTP status the endpoint answered with on the last attempt; null when no response came backattempts(integer) — attempts made so far (max 3)delivered_at(ISO-8601, nullable)error(string, nullable, max 2000) — the last failure reason (HTTP 503: ..., a connection error,Webhook is disabled., ...)payload(object) — the exact JSON body sent:event,occurred_at,ticket(the customer-facing ticket fields: id, number, tenant_id, subject, type, status, status_label, priority, source, visibility, tags, requester {id, name, email}, assignee {id, name} or null, created_at, updated_at, resolved_at, closed_at, url),actor({id, name}, nullable),change({from, to}, nullable),message(only onticket.replied, and only for a customer-visible message: id, author {id, name}, via, body_text, created_at; otherwise null). Apingpayload isevent,occurred_at,webhook{id, events}.created_at(ISO-8601)
Authentication: Bearer token with the support:read scope, or an authenticated session, from a caller with an active support role (any role, including viewer). No tenant context — this endpoint is central.
Request
Responses
- 200
- 400
- 401
- 403
- 404
- 429
OK
Response Headers
Bad Request
Response Headers
Unauthorized
Response Headers
Forbidden
Response Headers
Not Found
Response Headers
Rate limited — platform limit is 1,000 requests/min; individual tokens may carry lower limits. Honor the Retry-After header before retrying. See the Rate Limits guide.