Connect your endpoint
- An admin opens Settings → Webhooks.
- Enter your webhook URL (must be
https://and publicly reachable) and pick the events to send. - Click Connect and copy the signing secret (
whsec_…) — it’s shown only once. Use Rotate later to issue a new one. - Click Send test event to deliver a sample
message.receivedpayload and inspect your server’s response.
Events
The request we send
Each event is aPOST with a JSON body:
conversation is omitted for contact.* events, message is present on
message.received and message.sent — on message.sent it also carries
sentBy — and assignment (agentId, agentName) is added on
conversation.assigned. Test deliveries include "test": true.
message.sent
sentBy tells you where the message came from:
Verify the signature
Every delivery carries these headers:verify-signature.js
Your response
Deliveries are one-way. Return any2xx status to acknowledge the event —
an empty body or {} is fine. We record the status and body on the delivery log
so you can debug your endpoint, but nothing in your response is acted on.
Delivery behavior
Deliveries are fire-and-forget: they never delay message processing. Your endpoint has 10 seconds to respond; non-2xx responses and timeouts are logged and ignored — there are no automatic retries. The Recent deliveries table in settings keeps the last 50 requests with their response bodies for debugging.Example uses
- CRM sync: log every
message.receivedagainst the matching customer record in your CRM. - Ticket sync: mirror
conversation.created/conversation.resolvedinto Jira or Zendesk. - Analytics: stream all events into your warehouse to report on response times and volume by channel.
- Alerting: page an on-call channel when
conversation.createdfires outside business hours.
Need to send messages or change data rather than just receive events? That’s
the public API, and no-code automations are
covered by the Zapier integration.