Skip to main content
Webhooks push events to a URL you control the moment something happens in your workspace, so you don’t have to poll the API.

Set up

Create a webhook from Settings → Developers → Webhooks (or via the API with a webhooks:manage key). You provide:
  • a URL to receive POST requests
  • the events to subscribe to
  • a generated signing secret

Payload

Every delivery is a POST with this body:
{
  "event": "ticket.created",
  "timestamp": "2026-06-30T12:00:00Z",
  "organization_id": "org_...",
  "data": { /* the resource */ },
  "metadata": { "delivery_id": "...", "attempt": 1, "version": "1.0" }
}

Available events

EventFires when
conversation.startedA new conversation begins
conversation.endedA conversation is closed
conversation.assignedA conversation is assigned
message.receivedAn inbound message arrives
message.sentAn outbound message is sent
ticket.created / ticket.updated / ticket.closedTicket lifecycle
broadcast.sent / broadcast.failedBroadcast outcome
user.createdA workspace user is created
lead.createdA new lead is captured
Fetch the live, authoritative list any time from GET /api/v1/webhooks/events.

Verify signatures

Each request is signed with HMAC-SHA256 using your webhook secret. Recompute the signature over the raw request body and compare it to the signature header before trusting a payload. Reject anything that doesn’t match.

Retries

Failed deliveries are retried with exponential backoff. Inspect delivery history and responses under GET /api/v1/webhooks/{id}/logs.