Webhook Payloads
Reference for webhook event payload shapes delivered to your server.
Reference for the exact payload delivered for each webhook event. All payloads follow the same envelope:
{
"event": "event.name",
"timestamp": "2026-03-27T14:30:00.000Z",
"data": { ... }
}Common fields in data:
subAccountId-- Always present. Identifies which sub-account the event belongs to.locationId-- A stable public identifier for the sub-account, included alongsidesubAccountId. Prefer this when keying records in external systems.contactId-- Present when the event is associated with a specific contact.tags-- Present when the associated contact has tags. Array of tag strings.
contact.created
Fires when a new contact is created.
{
"event": "contact.created",
"timestamp": "2026-03-27T14:30:00.000Z",
"data": {
"subAccountId": "sa_001",
"contactId": "abc123",
"firstName": "Jane",
"lastName": "Doe",
"email": "[email protected]",
"phone": "+15551234567",
"company": "Acme Corp",
"source": "api",
"tags": ["website-lead"],
"lifecycleStage": "lead"
}
}contact.updated
Fires when a contact record is updated.
{
"event": "contact.updated",
"timestamp": "2026-03-27T14:31:00.000Z",
"data": {
"subAccountId": "sa_001",
"contactId": "abc123",
"firstName": "Jane",
"lastName": "Doe",
"email": "[email protected]",
"phone": "+15551234567",
"company": "Acme Corp",
"lifecycleStage": "qualified"
}
}contact.lifecycle_changed
Fires when a contact's lifecycle stage changes.
{
"event": "contact.lifecycle_changed",
"timestamp": "2026-03-27T14:32:00.000Z",
"data": {
"subAccountId": "sa_001",
"contactId": "abc123",
"newStage": "customer",
"previousStage": "qualified"
}
}contact.tag_added
Fires when a tag is added to a contact.
{
"event": "contact.tag_added",
"timestamp": "2026-03-27T14:33:00.000Z",
"data": {
"subAccountId": "sa_001",
"contactId": "abc123",
"tagName": "vip"
}
}message.received
Fires when an inbound message is received on any channel.
{
"event": "message.received",
"timestamp": "2026-03-27T14:34:00.000Z",
"data": {
"subAccountId": "sa_001",
"contactId": "abc123",
"messageId": "msg456",
"conversationId": "conv789",
"channel": "sms",
"bodyText": "Hi, I'd like to schedule an appointment",
"fromAddress": "+15559876543",
"direction": "inbound",
"tags": ["website-lead", "vip"]
}
}message.sent
Fires when an outbound message is confirmed sent by the provider.
{
"event": "message.sent",
"timestamp": "2026-03-27T14:35:00.000Z",
"data": {
"subAccountId": "sa_001",
"messageId": "msg457",
"conversationId": "conv789",
"channel": "sms",
"status": "sent",
"externalId": "SM1234567890abcdef"
}
}message.delivered
Fires when an outbound message is confirmed delivered to the recipient.
{
"event": "message.delivered",
"timestamp": "2026-03-27T14:36:00.000Z",
"data": {
"subAccountId": "sa_001",
"messageId": "msg457",
"conversationId": "conv789",
"channel": "sms",
"status": "delivered",
"externalId": "SM1234567890abcdef"
}
}message.failed
Fires when an outbound message fails to deliver or bounces.
{
"event": "message.failed",
"timestamp": "2026-03-27T14:37:00.000Z",
"data": {
"subAccountId": "sa_001",
"messageId": "msg458",
"conversationId": "conv790",
"channel": "email",
"status": "bounced",
"externalId": "postmark-msg-id-123"
}
}appointment.booked
Fires when a new appointment is booked.
{
"event": "appointment.booked",
"timestamp": "2026-03-27T14:38:00.000Z",
"data": {
"subAccountId": "sa_001",
"contactId": "abc123",
"appointmentId": "appt001",
"calendarId": "cal001",
"appointmentTypeId": "type001",
"appointmentTitle": "30-Min Consultation",
"startTime": 1743508800000,
"endTime": 1743510600000,
"status": "scheduled"
}
}appointment.cancelled
Fires when an appointment is cancelled.
{
"event": "appointment.cancelled",
"timestamp": "2026-03-27T14:45:00.000Z",
"data": {
"subAccountId": "sa_001",
"contactId": "abc123",
"appointmentId": "appt001",
"status": "cancelled"
}
}appointment.rescheduled
Fires when an appointment is moved to a new time.
{
"event": "appointment.rescheduled",
"timestamp": "2026-03-27T14:46:00.000Z",
"data": {
"subAccountId": "sa_001",
"contactId": "abc123",
"appointmentId": "appt001",
"startTime": 1743595200000,
"endTime": 1743597000000,
"status": "scheduled"
}
}appointment.confirmed
Fires when an appointment is confirmed.
{
"event": "appointment.confirmed",
"timestamp": "2026-03-27T14:47:00.000Z",
"data": {
"subAccountId": "sa_001",
"contactId": "abc123",
"appointmentId": "appt001",
"status": "confirmed"
}
}appointment.completed
Fires when an appointment is marked completed.
{
"event": "appointment.completed",
"timestamp": "2026-03-27T14:48:00.000Z",
"data": {
"subAccountId": "sa_001",
"contactId": "abc123",
"appointmentId": "appt001",
"status": "completed"
}
}appointment.no_show
Fires when an appointment is marked as a no-show.
{
"event": "appointment.no_show",
"timestamp": "2026-03-27T14:49:00.000Z",
"data": {
"subAccountId": "sa_001",
"contactId": "abc123",
"appointmentId": "appt001",
"status": "no_show"
}
}opportunity.created
Fires when a new opportunity is created in a pipeline.
{
"event": "opportunity.created",
"timestamp": "2026-03-27T14:39:00.000Z",
"data": {
"subAccountId": "sa_001",
"contactId": "abc123",
"opportunityId": "opp001",
"pipelineId": "pipe001",
"stageId": "stage001",
"title": "Website Redesign",
"value": 5000
}
}opportunity.stage_changed
Fires when an opportunity moves to a different pipeline stage.
{
"event": "opportunity.stage_changed",
"timestamp": "2026-03-27T14:40:00.000Z",
"data": {
"subAccountId": "sa_001",
"contactId": "abc123",
"opportunityId": "opp001",
"pipelineId": "pipe001",
"fromStageId": "stage001",
"toStageId": "stage002",
"title": "Website Redesign"
}
}opportunity.won
Fires when an opportunity is marked as won.
{
"event": "opportunity.won",
"timestamp": "2026-03-27T14:41:00.000Z",
"data": {
"subAccountId": "sa_001",
"contactId": "abc123",
"opportunityId": "opp001",
"pipelineId": "pipe001",
"title": "Website Redesign",
"value": 5000
}
}opportunity.lost
Fires when an opportunity is marked as lost.
{
"event": "opportunity.lost",
"timestamp": "2026-03-27T14:42:00.000Z",
"data": {
"subAccountId": "sa_001",
"contactId": "abc123",
"opportunityId": "opp001",
"pipelineId": "pipe001",
"title": "Website Redesign",
"value": 5000,
"lostReason": "Budget constraints"
}
}opportunity.updated
Fires when an opportunity record is updated.
{
"event": "opportunity.updated",
"timestamp": "2026-03-27T14:50:00.000Z",
"data": {
"subAccountId": "sa_001",
"contactId": "abc123",
"opportunityId": "opp001",
"pipelineId": "pipe001",
"name": "Website Redesign",
"value": 6500,
"changedFields": ["value"]
}
}The changedFields array lists the names of the fields that changed in this update.
opportunity.deleted
Fires when an opportunity is deleted.
{
"event": "opportunity.deleted",
"timestamp": "2026-03-27T14:51:00.000Z",
"data": {
"subAccountId": "sa_001",
"contactId": "abc123",
"opportunityId": "opp001",
"pipelineId": "pipe001",
"name": "Website Redesign"
}
}form.submitted
Fires when a public form is submitted.
{
"event": "form.submitted",
"timestamp": "2026-03-27T14:43:00.000Z",
"data": {
"subAccountId": "sa_001",
"contactId": "abc123",
"formId": "form001",
"submissionId": "sub001",
"formName": "Contact Us",
"fields": {
"name": "Jane Doe",
"email": "[email protected]",
"message": "I'd like more info about your services"
}
}
}invoice.paid
Fires when an invoice payment is received.
{
"event": "invoice.paid",
"timestamp": "2026-03-27T14:44:00.000Z",
"data": {
"subAccountId": "sa_001",
"contactId": "abc123",
"invoiceId": "inv001",
"amount": 1500,
"currency": "usd",
"paidAt": "2026-03-27T14:44:00.000Z"
}
}task.created
Fires when a new task is created.
{
"event": "task.created",
"timestamp": "2026-03-27T14:52:00.000Z",
"data": {
"subAccountId": "sa_001",
"contactId": "abc123",
"taskId": "task001",
"title": "Follow up with Jane",
"status": "todo",
"priority": "high",
"dueDate": 1743595200000,
"assignedTo": "user001"
}
}task.updated
Fires when a task record is updated.
{
"event": "task.updated",
"timestamp": "2026-03-27T14:53:00.000Z",
"data": {
"subAccountId": "sa_001",
"contactId": "abc123",
"taskId": "task001",
"title": "Follow up with Jane",
"status": "in_review",
"priority": "high",
"changedFields": ["status"]
}
}The changedFields array lists the names of the fields that changed in this update.
task.completed
Fires when a task is marked completed.
{
"event": "task.completed",
"timestamp": "2026-03-27T14:54:00.000Z",
"data": {
"subAccountId": "sa_001",
"contactId": "abc123",
"taskId": "task001",
"title": "Follow up with Jane",
"status": "completed",
"priority": "high",
"completedAt": 1743596400000
}
}task.deleted
Fires when a task is deleted.
{
"event": "task.deleted",
"timestamp": "2026-03-27T14:55:00.000Z",
"data": {
"subAccountId": "sa_001",
"contactId": "abc123",
"taskId": "task001",
"title": "Follow up with Jane",
"status": "todo",
"priority": "high"
}
}Payload shapes may vary slightly depending on the data available at the time of the event. Fields shown as present in examples may be null if the corresponding data was not set. The contactId field is included when the event is associated with a specific contact.