Webhooks
Push events to external systems in real time. Connect Fesk to your own tools, dashboards, or automation pipelines.
Setup
Go to Settings → Connectors and click Add Webhook. You'll need:
- Delivery URL: the HTTPS endpoint that receives events
- Events: which events to subscribe to
- Secret (optional), an HMAC secret for signature verification
Use Send Test before subscribing to live events. It posts a sample payload so you can confirm that your endpoint can parse Fesk events.
Available events
| Event | Fires when |
|-------|-----------|
| ticket.created | A new ticket is created |
| ticket.updated | Ticket fields change (title, description, priority, tags) |
| ticket.status_changed | Ticket moves to a different status |
| ticket.assigned | Ticket is assigned or reassigned |
| comment.created | A new comment is added to a ticket |
Select one or more events per webhook. You can create multiple webhooks pointing to different URLs with different event sets.
Payload
Each delivery sends a JSON payload with the event type, timestamp, and the full object (ticket or comment) in its current state. The X-Webhook-Event header identifies the event type.
Signature verification
Every delivery includes an X-Webhook-Signature header, the HMAC-SHA256 hex digest of the raw request body, keyed with your webhook's secret. (If you don't provide a secret when creating the webhook, Fesk generates one and shows it once at creation.) Recompute HMAC-SHA256(secret, raw_body) on your end and compare to verify authenticity.
Retry behavior
Failed deliveries (a non-2xx response, or a timeout after 10 seconds) are retried with exponential backoff, up to 2 retries, for 3 total attempts per event. After that the delivery is logged as failed; the subscription stays active and keeps receiving future events, so there's no automatic disabling after repeated failures. There is no replay API, so if your endpoint is down for an extended period, reconcile by polling the relevant endpoints once it's back online.