How webhooks work
Webhooks send HTTP POST requests to your server when events occur in Inbox — a new message arrives, a thread is assigned, a campaign target replies, and more. Instead of polling the API for changes, register a webhook URL and Inbox pushes events to you as they happen.Configure webhooks in Settings → Webhooks in your Inbox dashboard. You choose which event types each webhook receives.
Event envelope
Every webhook delivery wraps event-specific data in a consistent envelope:Unique event ID. Use this to deduplicate deliveries.
Monotonically increasing sequence number per team. Use this to detect missed events and maintain ordering.
The team this event belongs to.
The event type in
resource.action format (e.g., thread.created, message.created).ISO 8601 timestamp of when the event occurred.
Schema version. Currently always
"1.0".The event payload. Structure varies by event type — see individual event pages for details.
Supported event types
Inbox supports 32 event types across 7 categories. Subscribe to individual events or entire categories.Thread events
| Event | Description |
|---|---|
thread.created | A new thread is created |
thread.deleted | A thread is deleted |
thread.assigned | A thread is assigned to a team member |
thread.unassigned | A thread is unassigned from a team member |
thread.archived | A thread is marked as done |
thread.unarchived | A thread is reopened |
thread.typing | A prospect is typing in an X Chat thread |
Message events
| Event | Description |
|---|---|
message.created | A message is sent or received |
message.edited | A message is edited |
message.deleted | A message is deleted |
message.reactionAdded | A reaction is added to a message |
message.reactionRemoved | A reaction is removed from a message |
Prospect events
| Event | Description |
|---|---|
prospect.created | A new prospect is created |
prospect.statusChanged | A prospect’s pipeline status changes |
prospect.tagsChanged | Tags are added or removed from a prospect |
prospect.notesChanged | A prospect’s notes are updated |
prospect.valuationChanged | A prospect’s valuation changes |
prospect.enriched | A prospect is enriched with fresh platform data |
Tag events
| Event | Description |
|---|---|
tag.created | A new tag is created |
tag.updated | A tag is updated |
tag.deleted | A tag is deleted |
Status events
| Event | Description |
|---|---|
status.created | A new pipeline status is created |
status.updated | A pipeline status is updated |
status.deleted | A pipeline status is deleted |
Campaign events
| Event | Description |
|---|---|
campaign.created | A new campaign is created |
campaign.started | A campaign is started |
campaign.paused | A campaign is paused |
campaign.resumed | A campaign is resumed |
campaign.completed | A campaign completes |
Target events
| Event | Description |
|---|---|
target.contacted | A campaign target receives the initial message |
target.followUpSent | A follow-up message is sent to a target |
target.replied | A campaign target replies |
Delivery behavior
Inbox attempts delivery once with no retries. Responses are not checked — delivery is fire-and-forget. Use the Events API to fetch any events your webhook missed. Events are retained for 7 days.Handling webhooks
Your endpoint should:- Deduplicate using
event.idin case of rare duplicate deliveries - Handle events idempotently
- Track the latest
seqvalue so you can backfill missed events via the Events API
Events API
The Events API lets you replay events from the last 7 days. Use it to recover missed webhooks or backfill data.cURL
| Parameter | Type | Description |
|---|---|---|
afterSeq | number | Return events after this sequence number. Omit to start from the beginning. |
limit | number | Maximum events to return. Default: 100, max: 1000. |
lastSeq from the response as afterSeq in your next request to paginate through all events.