POST a signed JSON payload to it every time the events you care about occur.
Create a webhook
Register an endpoint in the Questra dashboard or via the API:events (or pass an empty array) to receive all event types.
The response includes a secret field — copy it immediately. It is only shown once. You use it to verify payload signatures.
Payload format
Every webhook delivery is aPOST request with:
Content-Type: application/jsonX-Questra-Signature: sha256=<hmac>X-Questra-Event: <event-type>X-Questra-Delivery: <run-id>
data depends on the event type. See Organization events and Survey events for the full payload reference.
Verify signatures
Each request includes anX-Questra-Signature header with an HMAC-SHA256 hex digest of the raw request body, signed with your webhook secret.
Always verify the signature before processing a delivery.
Retry behavior
If your endpoint does not return an HTTP2xx response within 30 seconds, Questra treats the delivery as failed and retries automatically:
| Attempt | Delay after previous attempt |
|---|---|
| 1st retry | ~1 second |
| 2nd retry | ~2 seconds |
| 3rd retry | ~4 seconds |
| 4th retry | ~8 seconds |
| 5th retry | up to 60 seconds |
failed and no further retries occur.
All attempts — including failures — are recorded in the delivery log. You can inspect them in the dashboard or via GET /webhooks/{id}/deliveries.
Delivery logs
View delivery history in the Questra dashboard or via the API:Rotate a secret
If your secret is ever compromised, rotate it immediately. The old secret is invalidated as soon as you rotate.Test an endpoint
Send a syntheticsurvey.created event to verify your endpoint is reachable and your signature verification works: