Webhooks Overview
Events & Payloads
All available webhook events with full payload schemas.
Payload envelope
Every webhook delivery — regardless of the event type — shares the same envelope structure:
{
"event": "contact.created",
"delivery_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"timestamp": "2026-03-04T12:00:00.000000Z",
"data": { ... }
}
| Field | Type | Description |
|---|---|---|
event | string | Event name (see below) |
delivery_id | string | UUID unique to this delivery attempt |
timestamp | string | ISO 8601 UTC timestamp |
data | object | Event-specific payload |
Contact events
contact.created
Fired when a new contact is created.
{
"event": "contact.created",
"delivery_id": "uuid",
"timestamp": "2026-03-04T12:00:00.000000Z",
"data": {
"contact": {
"id": 42,
"name": "Sarah Johnson",
"email": "sarah@example.com",
"phone": "+14155551234",
"type": "whatsapp",
"status": "active",
"blacklisted": false,
"tags": [],
"created_at": "2026-03-04T12:00:00.000000Z"
}
}
}
contact.updated
Fired when a contact's fields are changed.
{
"event": "contact.updated",
"delivery_id": "uuid",
"timestamp": "2026-03-04T12:05:00.000000Z",
"data": {
"contact": {
"id": 42,
"name": "Sarah M. Johnson",
"tags": ["vip"],
"updated_at": "2026-03-04T12:05:00.000000Z"
}
}
}
contact.deleted
Fired when a contact is permanently deleted.
{
"event": "contact.deleted",
"delivery_id": "uuid",
"timestamp": "2026-03-04T14:00:00.000000Z",
"data": {
"contact": {
"id": 42,
"name": "Sarah Johnson",
"deleted_at": "2026-03-04T14:00:00.000000Z"
}
}
}
Message events
message.received
Fired when an inbound message arrives from a contact.
{
"event": "message.received",
"delivery_id": "uuid",
"timestamp": "2026-03-04T13:00:00.000000Z",
"data": {
"message": {
"id": 201,
"direction": "inbound",
"channel": "whatsapp",
"content": "Hi, I need help with my order.",
"status": "received",
"sent_at": "2026-03-04T13:00:00.000000Z"
},
"contact": {
"id": 42,
"name": "Sarah Johnson",
"phone": "+14155551234",
"type": "whatsapp"
}
}
}
message.sent
Fired when an outbound message is successfully sent via the API or dashboard.
{
"event": "message.sent",
"delivery_id": "uuid",
"timestamp": "2026-03-04T13:02:00.000000Z",
"data": {
"message": {
"id": 202,
"direction": "outbound",
"channel": "whatsapp",
"content": "Hello! Our team will be with you shortly.",
"status": "sent",
"sent_at": "2026-03-04T13:02:00.000000Z"
},
"contact": {
"id": 42,
"name": "Sarah Johnson"
}
}
}
Booking events
booking.created
Fired when a new booking is created.
{
"event": "booking.created",
"delivery_id": "uuid",
"timestamp": "2026-03-04T14:00:00.000000Z",
"data": {
"booking": {
"id": 101,
"title": "Consultation – Sarah Johnson",
"status": "confirmed",
"starts_at": "2026-03-10T14:00:00.000000Z",
"ends_at": "2026-03-10T15:00:00.000000Z",
"notes": null,
"created_at": "2026-03-04T14:00:00.000000Z"
},
"contact": {
"id": 42,
"name": "Sarah Johnson",
"phone": "+14155551234"
}
}
}
booking.updated
Fired when a booking is modified (e.g., rescheduled).
booking.cancelled
Fired when a booking is cancelled.
{
"event": "booking.cancelled",
"delivery_id": "uuid",
"timestamp": "2026-03-05T09:00:00.000000Z",
"data": {
"booking": {
"id": 101,
"status": "cancelled",
"cancelled_at": "2026-03-05T09:00:00.000000Z"
},
"contact": {
"id": 42,
"name": "Sarah Johnson"
}
}
}
booking.completed
Fired when a booking is marked as completed.
Ticket events
ticket.created
Fired when a new support ticket is opened.
{
"event": "ticket.created",
"delivery_id": "uuid",
"timestamp": "2026-03-04T15:00:00.000000Z",
"data": {
"ticket": {
"id": 55,
"subject": "Issue with booking confirmation",
"status": "open",
"priority": "normal",
"created_at": "2026-03-04T15:00:00.000000Z"
},
"contact": {
"id": 42,
"name": "Sarah Johnson"
}
}
}
Test event
ping
Sent when you trigger a test delivery from the dashboard or via POST /api/v1/webhooks/{id}/test.
{
"event": "ping",
"delivery_id": "uuid",
"timestamp": "2026-03-04T12:00:00.000000Z",
"data": {
"message": "This is a test event from SkyLight Chat."
}
}
All events reference
| Event | Trigger |
|---|---|
contact.created | A contact is created |
contact.updated | A contact is updated |
contact.deleted | A contact is deleted |
message.received | An inbound message arrives |
message.sent | An outbound message is sent |
booking.created | A booking is created |
booking.updated | A booking is updated |
booking.cancelled | A booking is cancelled |
booking.completed | A booking is completed |
ticket.created | A support ticket is opened |
ping | Manual test delivery |
