Appointments events
Outbound webhook events for appointments: when each one fires and the exact JSON payload Centerfy POSTs to your URL.
7 events. Subscribe to them in Settings → API & Webhooks → Webhooks or with the outbound webhook subscription endpoints. Delivery, authentication headers and the common envelope are described in the webhooks overview.
| Event | When it fires |
|---|---|
appointment.created | A new appointment is booked in this sub-account. |
appointment.updated | An appointment’s fields change (time, status, calendar, etc.). |
appointment.deleted | An appointment is deleted. The payload carries its last known state. |
appointment.confirmed | An appointment’s status changes to confirmed. appointment.updated is sent as well. |
appointment.cancelled | An appointment’s status changes to cancelled. appointment.updated is sent as well. |
appointment.no_show | An appointment is marked as a no-show. appointment.updated is sent as well. |
appointment.completed | An appointment is marked completed. appointment.updated is sent as well. |
appointment.created
Appointment created. A new appointment is booked in this sub-account.
{
"event": "appointment.created",
"occurred_at": "2026-06-20T14:30:00.000Z",
"sub_account_id": "<sub account uuid>",
"organization_id": "<organization uuid>",
"appointment": {
"id": "<uuid>",
"contact_id": "<uuid>",
"calendar_id": "<uuid>",
"title": "Consultation call",
"description": null,
"appointment_date": "2026-06-20T14:30:00+00:00",
"duration_minutes": 30,
"location": "Phone",
"notes": "Discuss pricing",
"status": "scheduled",
"created_at": "2026-06-20T14:00:00.000Z",
"updated_at": "2026-06-20T14:00:00.000Z"
}
}appointment.updated
Appointment updated. An appointment’s fields change (time, status, calendar, etc.).
{
"event": "appointment.updated",
"occurred_at": "2026-06-20T14:30:00.000Z",
"sub_account_id": "<sub account uuid>",
"organization_id": "<organization uuid>",
"appointment": {
"id": "<uuid>",
"contact_id": "<uuid>",
"calendar_id": "<uuid>",
"title": "Consultation call",
"description": null,
"appointment_date": "2026-06-20T14:30:00+00:00",
"duration_minutes": 30,
"location": "Phone",
"notes": "Discuss pricing",
"status": "scheduled",
"created_at": "2026-06-20T14:00:00.000Z",
"updated_at": "2026-06-20T14:00:00.000Z"
}
}appointment.deleted
Appointment deleted. An appointment is deleted. The payload carries its last known state.
{
"event": "appointment.deleted",
"occurred_at": "2026-06-20T14:30:00.000Z",
"sub_account_id": "<sub account uuid>",
"organization_id": "<organization uuid>",
"appointment": {
"id": "<uuid>",
"contact_id": "<uuid>",
"calendar_id": "<uuid>",
"title": "Consultation call",
"description": null,
"appointment_date": "2026-06-20T14:30:00+00:00",
"duration_minutes": 30,
"location": "Phone",
"notes": "Discuss pricing",
"status": "scheduled",
"created_at": "2026-06-20T14:00:00.000Z",
"updated_at": "2026-06-20T14:00:00.000Z"
}
}appointment.confirmed
Appointment confirmed. An appointment’s status changes to confirmed. appointment.updated is sent as well.
{
"event": "appointment.confirmed",
"occurred_at": "2026-06-20T14:30:00.000Z",
"sub_account_id": "<sub account uuid>",
"organization_id": "<organization uuid>",
"previous_status": "scheduled",
"appointment": {
"id": "<uuid>",
"contact_id": "<uuid>",
"calendar_id": "<uuid>",
"title": "Consultation call",
"description": null,
"appointment_date": "2026-06-20T14:30:00+00:00",
"duration_minutes": 30,
"location": "Phone",
"notes": "Discuss pricing",
"status": "confirmed",
"created_at": "2026-06-20T14:00:00.000Z",
"updated_at": "2026-06-20T14:00:00.000Z"
}
}appointment.cancelled
Appointment cancelled. An appointment’s status changes to cancelled. appointment.updated is sent as well.
{
"event": "appointment.cancelled",
"occurred_at": "2026-06-20T14:30:00.000Z",
"sub_account_id": "<sub account uuid>",
"organization_id": "<organization uuid>",
"previous_status": "scheduled",
"appointment": {
"id": "<uuid>",
"contact_id": "<uuid>",
"calendar_id": "<uuid>",
"title": "Consultation call",
"description": null,
"appointment_date": "2026-06-20T14:30:00+00:00",
"duration_minutes": 30,
"location": "Phone",
"notes": "Discuss pricing",
"status": "cancelled",
"created_at": "2026-06-20T14:00:00.000Z",
"updated_at": "2026-06-20T14:00:00.000Z"
}
}appointment.no_show
Appointment no-show. An appointment is marked as a no-show. appointment.updated is sent as well.
{
"event": "appointment.no_show",
"occurred_at": "2026-06-20T14:30:00.000Z",
"sub_account_id": "<sub account uuid>",
"organization_id": "<organization uuid>",
"previous_status": "scheduled",
"appointment": {
"id": "<uuid>",
"contact_id": "<uuid>",
"calendar_id": "<uuid>",
"title": "Consultation call",
"description": null,
"appointment_date": "2026-06-20T14:30:00+00:00",
"duration_minutes": 30,
"location": "Phone",
"notes": "Discuss pricing",
"status": "no_show",
"created_at": "2026-06-20T14:00:00.000Z",
"updated_at": "2026-06-20T14:00:00.000Z"
}
}appointment.completed
Appointment completed. An appointment is marked completed. appointment.updated is sent as well.
{
"event": "appointment.completed",
"occurred_at": "2026-06-20T14:30:00.000Z",
"sub_account_id": "<sub account uuid>",
"organization_id": "<organization uuid>",
"previous_status": "scheduled",
"appointment": {
"id": "<uuid>",
"contact_id": "<uuid>",
"calendar_id": "<uuid>",
"title": "Consultation call",
"description": null,
"appointment_date": "2026-06-20T14:30:00+00:00",
"duration_minutes": 30,
"location": "Phone",
"notes": "Discuss pricing",
"status": "completed",
"created_at": "2026-06-20T14:00:00.000Z",
"updated_at": "2026-06-20T14:00:00.000Z"
}
}