Configure outbound webhooks under your school's Ticket Webhooks tab to fan out ticket events — created, replied, status changed, resolved — to Slack, Zapier, Make, Pabbly Connect, or any HTTPS endpoint that accepts a signed JSON POST.
Quick answer
Open Dashboard → Support → Ticket Webhooks → Add webhook. Pick your destination type (Generic / Zapier / Make / Pabbly Connect), paste the receiver URL, tick the events you care about, and copy the secret on the confirmation screen. You only see the secret once.
Every ticket event on your school's queue can fan out to your team's chat, automation tool, or in-house helpdesk. Dispatch happens after the user-facing action is saved and sends the configured event payload as JSON. Delivery timing is not guaranteed.
Four event types, each a separate POST:
ticket.created — a new ticket lands in your queue.ticket.replied — somebody (customer, agent, or
internal-noter) added a reply.ticket.status_changed — the ticket moved status (e.g.
open → waiting_on_customer).ticket.resolved — the ticket was just resolved. Fires
in addition to ticket.status_changed so receivers can
subscribe to the more specific event.The body is JSON with the event name, the ticket ref, the subject, the category and priority, plus event-specific fields (the reply content, the previous and new status, the actor's name, etc.).
Every POST carries an X-Ticket-Signature header of the
form sha256=<hex>. The hex is HMAC-SHA256(secret, body)
keyed by your webhook's signing secret — the one you copied
on the create screen. Recompute it on your side and reject
the request if they differ. The X-Ticket-Event header
also carries the event name so you can route without
parsing the body.
The generic sender posts ticket JSON, not Slack's required message format. Use middleware or an automation service to transform the payload into a Slack message, and test delivery. A destination label alone does not make arbitrary JSON compatible with Slack.
Each fire has a 5-second timeout. If your receiver returns a non-2xx or doesn't respond in time, the panel shows the last error message and the timestamp. We don't retry automatically — failed deliveries are visible on the row so you can investigate, but a temporarily-down receiver won't pile up duplicate events.
Use the Test button at any time to send a synthetic
ticket.created event with test: true in the body, so
you can confirm the receiver is wired up correctly without
waiting for a real ticket.
The panel lists every webhook with its status. Disable keeps the row but stops dispatching; Edit lets you change the URL or the event subscription without rotating the secret; Delete is permanent.
If you need to rotate a secret, delete and recreate the webhook — the new row gets a fresh secret which you copy into your receiver.
Still need help with this article?
Send the article URL and the step that needs more explanation.