What this covers
Managing the endpoints Traceten sends events to. If you want to know what those events look like or how to verify their signatures, start with the Webhooks guide.{siteId} is your snippet key (ttid_…) when you authenticate with an API key. Reading needs stats:read. Registering a webhook and rotating its secret need credentials:write, because both hand back a signing secret. Editing, deleting and testing need config:write.
GET /v1/sites/{siteId}/webhooks
verification_status is diagnostic:
POST /v1/sites/{siteId}/webhooks
url must be https://, must not embed credentials, and must not point at a private, loopback or internal address. event_types defaults to ["ai_session.classified"].
Registration sends one real ping through the delivery path, which is why verification_status is often already verified in this response. A failed ping does not block creation, it just leaves the endpoint unverified.
Ten webhooks per site.
PATCH /v1/sites/{siteId}/webhooks/{webhookId}
Send at least one of url, event_types, enabled.
DELETE /v1/sites/{siteId}/webhooks/{webhookId}
Removes the endpoint and its delivery log. Returns 204 with no body. Unlike site deletion this is immediate; there is no window and no restore.
GET /v1/sites/{siteId}/webhooks/{webhookId}/deliveries
next_before back as before to page. next_before is null when the page was not full.
Test pings appear in this log with
event_type: "webhook.ping". Exclude them before you compute a
success rate, or your own test sends will skew it.POST /v1/sites/{siteId}/webhooks/{webhookId}/test
Sends one signed ping through the same path as real events and returns the outcome inline. Allowed on a disabled webhook, so you can prove an endpoint before switching it on.
429 means the endpoint is currently rate-capped, nothing was proved either way, and verification_status is untouched. Click again in a moment.
The ping payload we deliver to your endpoint carries
site_id as the site’s internal UUID,
not the snippet key you used in the request URL. That is a property of the outbound webhook
contract rather than this API, and it differs from ai_session.classified and
conversion.attributed, which carry the ttid_. See event payloads.config:write, not stats:read. It causes Traceten to make a real outbound request on your behalf, which is not a read.

