Update an appointment
update an appointment.
PATCH
https://api.centerfy.ai/webhooks/inbound/appointments/:id Headers
| Header | Required | Value | Description |
|---|---|---|---|
x-api-key | Yes | your sub-account API key (cfy_…) | Authenticates the request; or Authorization: Bearer <key>. |
Content-Type | Yes | application/json | JSON request body. |
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
id | string (uuid) | Yes | The appointment id (as returned from create). |
Body parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
title | string | No | — | New title; required to be non-empty, so it is only applied when a non-empty value is given (empty is ignored). |
description | string | No | — | Nullable text; presence of the key sets it (empty string clears it). |
appointment_date | string | No | — | New start as ISO 8601; if provided it must parse (include UTC offset/Z or pass timezone), else 400. A present-but-empty value is ignored. |
timezone | string | No | — | IANA timezone used to interpret a bare appointment_date. |
duration_minutes | integer | No | — | Positive integer; non-integer or <= 0 → 400. |
location | string | No | — | Nullable text; presence of the key sets it (empty clears). |
notes | string | No | — | Nullable text; presence of the key sets it (empty clears). |
status | string | No | — | One of: scheduled, confirmed, completed, cancelled, no_show (case-insensitive). Other values → 400. |
calendar_id | string | No | — | Reassign to another calendar; must be a valid UUID and reference an existing calendar, else 400. |
contact_id | string | No | — | Reassign to another contact; must be a valid UUID and reference an existing contact, else 400/404. |
Request body
{
"title": "Discovery Call (rescheduled)",
"appointment_date": "2026-06-21T16:00:00Z",
"duration_minutes": 45,
"status": "confirmed",
"notes": "Pushed back one day"
}Example
curl -X PATCH "https://api.centerfy.ai/webhooks/inbound/appointments/{id}" \
-H "x-api-key: $CENTERFY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"title": "Discovery Call (rescheduled)",
"appointment_date": "2026-06-21T16:00:00Z",
"duration_minutes": 45,
"status": "confirmed",
"notes": "Pushed back one day"
}' import { CenterfyClient } from "@centerfy/sdk";
const centerfy = new CenterfyClient({ apiKey: process.env.CENTERFY_API_KEY! });
const result = await centerfy.appointments.update("<appointmentId>", {
"title": "Discovery Call (rescheduled)",
"appointment_date": "2026-06-21T16:00:00Z",
"duration_minutes": 45,
"status": "confirmed",
"notes": "Pushed back one day"
});
console.log(result); centerfy appointments update <appointmentId> '{"title":"Discovery Call (rescheduled)","appointment_date":"2026-06-21T16:00:00Z","duration_minutes":45,"status":"confirmed","notes":"Pushed back one day"}' MCP tool: centerfy_appointments_update (see MCP server)
Response
{
"status": "success",
"updated": true,
"appointment_id": "c3d4e5f6-a7b8-4c9d-0e1f-2a3b4c5d6e7f"
}Errors
400— for an invalid appointment id, a bad date, an invalid duration, status, or calendar_id.404— if the appointment or a referenced contact does not exist.500— on failure.
Notes
Only fields present in the body change; an empty effective update returns 400 ‘no updatable fields provided’.