Skip to content

Webhooks

Subscribe to ticket events and receive HTTP POST notifications to your server when things happen in DeskFork.

Settings → Developers → Webhooks → Add webhook

FieldDescription
URLHTTPS endpoint on your server
EventsWhich events to subscribe to
SecretUsed to sign deliveries (auto-generated)

Each delivery includes a signature header:

X-DeskFork-Signature: sha256=<hex-digest>

Verify with HMAC-SHA256:

import { createHmac } from "node:crypto";
function verifyWebhook(payload: string, signature: string, secret: string): boolean {
const expected = createHmac("sha256", secret)
.update(payload)
.digest("hex");
return `sha256=${expected}` === signature;
}
{
"id": "evt_01j9abc123",
"type": "ticket.created",
"created_at": "2026-06-28T10:00:00Z",
"workspace": "acme",
"data": {
"ticket": {
"id": "TKT-0042",
"subject": "Order not received",
"status": "open",
"channel": "email",
"contact": { "email": "customer@deskfork.com", "name": "Jane Doe" }
}
}
}
EventFired when
ticket.createdNew ticket created (any channel)
ticket.assignedAssignee added or changed
ticket.status_changedStatus transition (open → pending → resolved → closed)
ticket.taggedTag added or removed
message.createdReply or internal note added
sla.warningSLA deadline is approaching (< 20% time remaining)
sla.breachedSLA target missed
contact.createdNew contact record created
contact.updatedContact fields updated

Failed deliveries (non-2xx) are retried with exponential backoff:

AttemptDelay
1Immediate
21 minute
35 minutes
430 minutes
52 hours

After 5 failures the webhook is marked degraded and paused. Re-enable it under Settings → Developers → Webhooks.

Each event has a unique id. Your endpoint should store processed event IDs and skip duplicates to handle retries safely.