Docs
Webhook events

survey.answered

An end user finished a survey (completed it, or answered some questions and closed it). Return any 2xx within 10 seconds to acknowledge; anything else is retried with backoff.

Header Parameters

Cueston-Signature*string

t=<unix seconds>,v1=<hex HMAC-SHA256>. The HMAC key is your endpoint's whole secret (whsec_…); the message is <t>.<raw body>. Compare in constant time and reject timestamps more than 5 minutes off. After a rotation a second v1= (old secret) follows for 24 hours.

Cueston-Event-Id*string

Same as id in the body.

Cueston-Event-Type*string

Same as type in the body.

Cueston-Delivery-Attempt*string

1 for the first try.

Request Body

application/json
  1. body
id*string

evt_…, stable across retries and redeliveries — de-duplicate on it.

type*unknown
createdAt*string
Formatdate-time
workspaceId*integer
data*

Response Body

Acknowledged.

Example Requests
POST/survey.answered
JSON
{
  "id": "string",
  "type": "survey.answered",
  "createdAt": "2026-10-26T09:30:00Z",
  "workspaceId": 1201,
  "data": {
    "surveyId": 8,
    "surveyName": "Quarterly NPS",
    "responseId": "c0a8f3e2-5d1b-4b7e-9f0a-2e6c1d4b8a93",
    "version": 3,
    "environment": "production",
    "completed": true,
    "npsScore": 9,
    "answers": [
      {
        "questionId": "string",
        "type": "string",
        "prompt": "string",
        "value": null
      }
    ],
    "userId": "user-123",
    "anonymousId": "anon_8f2c1d9e",
    "sessionId": "sess_4b1e7a20",
    "url": "https://app.acme.com/settings/billing",
    "locale": "de-DE",
    "createdAt": "2026-10-26T09:30:00Z",
    "finishedAt": "2026-10-26T09:30:00Z"
  }
}
JSON
{
  "Cueston-Signature": "string",
  "Cueston-Event-Id": "string",
  "Cueston-Event-Type": "string",
  "Cueston-Delivery-Attempt": "string"
}