Skip to main content

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

Signing secrets are never in a listing. They appear only when you create an endpoint or rotate its secret. verification_status is diagnostic:

POST /v1/sites/{siteId}/webhooks

secret is returned once, here. Store it before you discard the response. No read endpoint can give it back.
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.
Returns the updated webhook.

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

Newest first. Pass the previous page’s 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.
A ping is terminal after one attempt; it never enters the retry schedule. A 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.
This needs config:write, not stats:read. It causes Traceten to make a real outbound request on your behalf, which is not a read.

POST /v1/sites/{siteId}/webhooks/{webhookId}/rotate-secret

Destructive. The old secret stops verifying immediately. There is no overlap window, so any receiver still checking against the old value will reject every delivery until you deploy the new one. Deploy a receiver that accepts both, rotate, then remove the old one.
The new secret is returned once, here.

Errors

Next