Skip to content

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.

EventDescription
survey.response_completedA survey response has been submitted

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": {}
}
}
FieldTypeDescription
surveyIdUUIDThe survey’s ID
eventTypestringsurvey.response_completed
eventIdUUIDUnique identifier for this event
timestampISO 8601When the event occurred
data.responseIdUUIDThe submitted response’s ID
data.completedAtISO 8601When the response was submitted
data.answersobjectQuestion answers keyed by question ID
data.embeddedDataobjectEmbedded data passed into the survey
data.metadataobjectAdditional response metadata
FieldRequiredDescription
nameYesA descriptive name (up to 200 characters)
urlYesHTTPS endpoint URL (up to 2,000 characters)
secretNoSigning secret for HMAC-SHA256 verification (16–500 characters)
headersNoCustom HTTP headers to include in deliveries
activeNoWhether the webhook is active (default: true)
retryPolicyNoArray of retry delays in seconds (up to 10 entries)
  • Maximum 10 webhooks per survey.
  • Webhook URLs must use HTTPS.
  • URLs cannot point to localhost, private IPs, or internal DNS suffixes.

All fields are optional when updating. Set secret to null to remove the signing secret.

Deleting a webhook removes it and all associated delivery logs permanently.

Survey webhooks use the same delivery mechanism as ticket webhooks.

The default retry delays are:

AttemptDelay
1st retry1 second
2nd retry5 seconds
3rd retry30 seconds
4th retry5 minutes
5th retry30 minutes
6th retry2 hours

After 10 consecutive failed deliveries, the webhook is automatically disabled. Re-enable it manually after resolving the issue with your endpoint.

Every delivery attempt is logged. You can filter deliveries by:

FilterDescription
deliveredShow only successful or failed deliveries
fromStart date for filtering
toEnd date for filtering

You can manually retry a failed delivery. The webhook must be active and the delivery must not have already succeeded.

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.

FieldRequiredDescription
fromYesStart of the date range
toYesEnd of the date range
failedOnlyNoOnly resend failed deliveries (default: false)

A maximum of 500 deliveries can be resent per request.

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": {}
}
}