Overview
We’ve expanded our webhook system with many new event types and a new event schema. This guide covers how to migrate from legacy webhooks to the new format.Legacy webhooks only supported three campaign target events. The new system
adds support for threads, messages, prospects, tags, statuses, and
campaigns—all using a consistent dot notation format.
What’s changed
Event types
Legacy webhooks only supported three events in camelCase format:targetContactedtargetFollowUpSenttargetReplied
resource.action) and adds many more event types. See the full event reference below.
Payload schema
The payload structure has changed significantly. The legacy format uses a flat structure with anexternal field, while the new format uses nested objects with a prospect field and additional context.
Legacy format:
- The
externalfield is nowprospectand includes full context (tags, status, notes, valuation) - New envelope fields:
id,seq,teamIdat the top level - The
eventfield is nowtype - The
platformfield has moved from the top level into the data objects
Retry behavior
Legacy webhooks used aggressive retry logic (up to 10 retries over 24 hours). The new system attempts delivery once. Use the Events API to recover any missed events.Events API
A new endpoint is available to replay missed events from the last 7 days:afterSeq- Return events after this sequence number (omit to start from the beginning)limit- Maximum events to return (default: 100, max: 1000)
lastSeq as the afterSeq parameter for subsequent requests to paginate through all events.
Migration steps
1. update your webhook handler
Since the schema is different, you’ll need to update your handler to process the new format. You can switch over at any time—disabling “Use legacy events” in your webhook configuration will immediately start sending the new format.2. implement missed event recovery
Add a background job that periodically polls the Events API to catch any missed webhooks:3. update webhook configuration
Once your handler supports the new format, go to Settings → Webhooks and disable the “Use legacy events” option on your webhook configuration.4. subscribe to new event types
With the new system, you can now subscribe to many more event types beyond the original three. Update your webhook configuration to include any additional events you want to receive.Event reference
All available event types in the new system: Thread eventsthread.created- A new thread was createdthread.deleted- A thread was deletedthread.assigned- A thread was assigned to a team memberthread.unassigned- A thread was unassigned from a team memberthread.archived- A thread was archivedthread.unarchived- A thread was unarchivedthread.typing- Someone is typing in a thread
message.created- A new message was sent or receivedmessage.edited- A message was editedmessage.deleted- A message was deletedmessage.reactionAdded- A reaction was added to a messagemessage.reactionRemoved- A reaction was removed from a message
prospect.created- A new prospect was addedprospect.statusChanged- A prospect’s pipeline status changedprospect.tagsChanged- A prospect’s tags were updatedprospect.notesChanged- A prospect’s notes were updatedprospect.valuationChanged- A prospect’s valuation was updatedprospect.enriched- A prospect was enriched with additional data
tag.created- A new tag was createdtag.updated- A tag was updatedtag.deleted- A tag was deleted
status.created- A new pipeline status was createdstatus.updated- A pipeline status was updatedstatus.deleted- A pipeline status was deleted
campaign.created- A new campaign was createdcampaign.started- A campaign was startedcampaign.paused- A campaign was pausedcampaign.resumed- A campaign was resumedcampaign.completed- A campaign completed
target.contacted- A prospect was first contacted by a campaign (previouslytargetContacted)target.followUpSent- A follow-up message was sent to a prospect (previouslytargetFollowUpSent)target.replied- A prospect replied to a campaign message (previouslytargetReplied)