Skip to main content
A webhook is an HTTP POST Inboxapp sends to your server when something changes: a message arrives, a thread is archived, a contact’s status moves. Create webhooks in Settings → Webhooks and choose the event types each one receives.

The event

Every event has the same envelope:

Events are thin

Webhooks follow the thin-event pattern: an event names the object that changed and carries only the values of the change, never the object itself.
  • Small payloads. An event is a few hundred bytes, whatever the size of the conversation behind it.
  • Out-of-order events are harmless. You read the current state from object.url, so a late event can’t overwrite newer data with old.
  • Idempotent by design. Handling the same event twice reads the same state twice.
handler.ts
object.url answers 404 once the object is deleted.
Verify each request before trusting it. See Verifying webhook signatures.

Event types

Each event type has its own page under Event types with its full schema.
  • thread.assigned reports the thread’s own assignee. contact.assigneeChanged reports the contact’s default.
  • Values in data are the ones that change wrote. They can be out of date by the time you read them.
  • New event types and data fields can be added within v2. Ignore what you don’t know.

Delivery

Each event is delivered once, with no retries, and your response isn’t checked. Events for every platform your team has linked arrive on the same webhook. Your endpoint should:
  1. Answer with a 2xx quickly, and do the work afterwards
  2. Deduplicate on id
  3. Store the highest seq it has processed

Replay missed events

Events are kept for 7 days, up to 25,000 per team. After downtime, read what you missed from the seq of the last event you processed:
replay.ts
A page can hold fewer events than limit. Continue from lastSeq while hasMore is true. Filter with type, repeated for several.