Survey Webhooks
Survey webhooks send HTTP POST requests to your URLs when a survey response is completed. Use them to trigger follow-up actions, sync responses to external systems, or build real-time dashboards.
Supported events
Section titled “Supported events”| Event | Description |
|---|---|
survey.response_completed | A survey response has been submitted |
Payload format
Section titled “Payload format”Every webhook delivery sends a JSON payload with this structure:
{ "surveyId": "uuid", "eventType": "survey.response_completed", "eventId": "uuid", "timestamp": "2025-01-15T10:30:00.000Z", "data": { "responseId": "uuid", "completedAt": "2025-01-15T10:29:55.000Z", "answers": { "question-id": { "value": "Answer text", "choiceIds": ["choice-1", "choice-2"] } }, "embeddedData": {}, "metadata": {} }}| Field | Type | Description |
|---|---|---|
surveyId | UUID | The survey’s ID |
eventType | string | survey.response_completed |
eventId | UUID | Unique identifier for this event |
timestamp | ISO 8601 | When the event occurred |
data.responseId | UUID | The submitted response’s ID |
data.completedAt | ISO 8601 | When the response was submitted |
data.answers | object | Question answers keyed by question ID |
data.embeddedData | object | Embedded data passed into the survey |
data.metadata | object | Additional response metadata |
Managing webhooks
Section titled “Managing webhooks”Creating a webhook
Section titled “Creating a webhook”| Field | Required | Description |
|---|---|---|
name | Yes | A descriptive name (up to 200 characters) |
url | Yes | HTTPS endpoint URL (up to 2,000 characters) |
secret | No | Signing secret for HMAC-SHA256 verification (16–500 characters) |
headers | No | Custom HTTP headers to include in deliveries |
active | No | Whether the webhook is active (default: true) |
retryPolicy | No | Array of retry delays in seconds (up to 10 entries) |
Limits
Section titled “Limits”- Maximum 10 webhooks per survey.
- Webhook URLs must use HTTPS.
- URLs cannot point to localhost, private IPs, or internal DNS suffixes.
Updating a webhook
Section titled “Updating a webhook”All fields are optional when updating. Set secret to null to remove the signing secret.
Deleting a webhook
Section titled “Deleting a webhook”Deleting a webhook removes it and all associated delivery logs permanently.
Delivery and retries
Section titled “Delivery and retries”Survey webhooks use the same delivery mechanism as ticket webhooks.
Retry policy
Section titled “Retry policy”The default retry delays are:
| Attempt | Delay |
|---|---|
| 1st retry | 1 second |
| 2nd retry | 5 seconds |
| 3rd retry | 30 seconds |
| 4th retry | 5 minutes |
| 5th retry | 30 minutes |
| 6th retry | 2 hours |
Auto-disable
Section titled “Auto-disable”After 10 consecutive failed deliveries, the webhook is automatically disabled. Re-enable it manually after resolving the issue with your endpoint.
Delivery logs
Section titled “Delivery logs”Every delivery attempt is logged. You can filter deliveries by:
| Filter | Description |
|---|---|
delivered | Show only successful or failed deliveries |
from | Start date for filtering |
to | End date for filtering |
Retrying deliveries
Section titled “Retrying deliveries”You can manually retry a failed delivery. The webhook must be active and the delivery must not have already succeeded.
Bulk resend
Section titled “Bulk resend”Resend all deliveries within a date range. This is useful if your endpoint was down for a period and you need to replay missed events.
| Field | Required | Description |
|---|---|---|
from | Yes | Start of the date range |
to | Yes | End of the date range |
failedOnly | No | Only resend failed deliveries (default: false) |
A maximum of 500 deliveries can be resent per request.
Testing a webhook
Section titled “Testing a webhook”Send a test payload to verify your endpoint. The test payload includes sample data:
{ "surveyId": "your-survey-id", "eventType": "test", "eventId": "generated-uuid", "timestamp": "2025-01-15T10:30:00.000Z", "data": { "message": "This is a test delivery from the survey webhook system.", "responseId": "00000000-0000-0000-0000-000000000000", "completedAt": "2025-01-15T10:30:00.000Z", "answers": { "question-id": { "value": "Sample answer", "choiceIds": [] } }, "embeddedData": {}, "metadata": {} }}Related pages
Section titled “Related pages”- Webhooks overview — how webhooks work and signature verification
- Ticket webhooks — webhooks for ticket lifecycle events