Webhooks
Get an HTTPS request on your server when content is published, a review is requested, someone finishes a tour or answers a survey.
A webhook endpoint is a URL on your server that Cueston POSTs events to. Each endpoint subscribes to the event types it wants.
Add an endpoint
In Settings → Integrations → Webhooks, add the URL and pick the events. Or use the API:
curl https://app.cueston.com/api/webhooks \
-H "Authorization: Bearer $CUESTON_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "url": "https://example.com/webhooks/cueston", "events": ["content.published", "survey.answered"] }'The response includes the endpoint's signing secret (whsec_…). It's shown only once, here and when you rotate it. Store it on your server to verify signatures.
Managing webhooks needs the "Change workspace settings" permission. A workspace can have up to 20 endpoints. URLs must use https.
The request
Every request is a POST with a JSON body:
{
"id": "evt_…",
"type": "content.published",
"createdAt": "2026-10-26T09:30:00.000Z",
"workspaceId": 42,
"data": {
"contentType": "tour",
"contentId": 318,
"name": "Invoice flow",
"environment": "production",
"version": 7,
"versionId": 1290,
"publishedBy": { "userId": 12, "email": "ada@acme.com" },
"rollback": false
}
}The id stays the same across retries and redeliveries: use it to ignore duplicates.
| Header | Value |
|---|---|
Cueston-Signature | t=<unix seconds>,v1=<signature>. See Verify signatures. |
Cueston-Event-Id | The event's id |
Cueston-Event-Type | The event's type |
Cueston-Delivery-Attempt | 1 for the first attempt, then 2, 3… |
User-Agent | Cueston-Webhooks/1.0 (+https://cueston.com) |
Respond quickly
Return any 2xx status within 10 seconds. Anything else, including a redirect, counts as a failure and is retried. Do slow work after you respond.