Update a calendar
Update a calendar — only the fields you send change.
PATCH
https://api.centerfy.ai/webhooks/inbound/calendars/:id Headers
| Header | Required | Value | Description |
|---|---|---|---|
x-api-key | Yes | your sub-account API key (cfy_…) | Authenticates the request; or use Authorization: Bearer <key>. |
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
id | string (uuid) | Yes | The calendar id. |
Body parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
name | string | No | — | Calendar name. |
description | string | null | No | — | Description. |
color | string | No | — | Hex colour in #RRGGBB form, e.g. #3B82F6. |
is_default | boolean | No | — | Make this the default calendar. Setting true clears the flag on every other calendar in the sub-account. |
is_active | boolean | No | — | Whether the calendar accepts bookings. Defaults to true. |
booking_duration_minutes | integer | No | — | Length of a booking in minutes; 1–1440. Defaults to 30. |
meeting_interval_minutes | integer | null | No | — | Minutes between slot start times; 1–1440. |
minimum_scheduling_notice_minutes | integer | No | — | How far ahead a booking must be made, in minutes; minimum 0. Defaults to 0. |
date_range_days | integer | No | — | How many days ahead can be booked; minimum 1. Defaults to 30. |
pre_buffer_minutes | integer | No | — | Free time kept before each booking; minimum 0. Defaults to 0. |
post_buffer_minutes | integer | No | — | Free time kept after each booking; minimum 0. Defaults to 0. |
max_bookings_per_day | integer | null | No | — | Daily booking cap; minimum 1. null for no cap. |
max_bookings_per_slot | integer | No | — | Bookings allowed in the same slot; minimum 1. Defaults to 1. |
confirmation_type | string | No | — | What the public booking page does after booking. One of show_details, redirect. Defaults to show_details. |
confirmation_redirect_url | string | null | No | — | http(s) URL to send people to; required when confirmation_type is redirect. |
Request body
{
"booking_duration_minutes": 45,
"max_bookings_per_day": 8
}Example
curl -X PATCH "https://api.centerfy.ai/webhooks/inbound/calendars/{id}" \
-H "x-api-key: $CENTERFY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"booking_duration_minutes": 45,
"max_bookings_per_day": 8
}' import { CenterfyClient } from "@centerfy/sdk";
const centerfy = new CenterfyClient({ apiKey: process.env.CENTERFY_API_KEY! });
const result = await centerfy.calendars.update("<calendarId>", {
"booking_duration_minutes": 45,
"max_bookings_per_day": 8
});
console.log(result); centerfy calendars update <calendarId> '{"booking_duration_minutes":45,"max_bookings_per_day":8}' MCP tool: centerfy_calendars_update (see MCP server)
Response
{
"status": "success",
"calendar": {
"id": "4e5f6a7b-8c9d-4e0f-9a1b-2c3d4e5f6a7b",
"name": "Consultations",
"description": "30-minute intro call",
"color": "#3B82F6",
"is_default": true,
"is_active": true,
"booking_duration_minutes": 30,
"booking_location_type": "phone_call",
"meeting_interval_minutes": null,
"minimum_scheduling_notice_minutes": 60,
"date_range_days": 30,
"pre_buffer_minutes": 0,
"post_buffer_minutes": 10,
"max_bookings_per_day": null,
"max_bookings_per_slot": 1,
"confirmation_type": "show_details",
"confirmation_redirect_url": null,
"user_id": null,
"calendar_integration_id": null,
"is_hubspot_calendar": false,
"hubspot_scheduler_id": null,
"hubspot_scheduler_slug": null,
"is_salesforce_calendar": false,
"salesforce_calendar_id": null,
"created_at": "2026-10-01T10:00:00.000Z",
"updated_at": "2026-10-01T10:00:00.000Z"
}
}Errors
400— if name is sent empty, a field is out of range, confirmation_redirect_url isn’t an http(s) URL, or the result would be confirmation_type redirect with no confirmation_redirect_url.404— if the calendar is not in this sub-account.
Notes
Send at least one field.