Update a calendar

Update a calendar — only the fields you send change.

PATCH https://api.centerfy.ai/webhooks/inbound/calendars/:id

Headers

HeaderRequiredValueDescription
x-api-keyYesyour sub-account API key (cfy_…)Authenticates the request; or use Authorization: Bearer <key>.

Path parameters

NameTypeRequiredDescription
idstring (uuid)YesThe calendar id.

Body parameters

NameTypeRequiredDefaultDescription
namestringNo—Calendar name.
descriptionstring | nullNo—Description.
colorstringNo—Hex colour in #RRGGBB form, e.g. #3B82F6.
is_defaultbooleanNo—Make this the default calendar. Setting true clears the flag on every other calendar in the sub-account.
is_activebooleanNo—Whether the calendar accepts bookings. Defaults to true.
booking_duration_minutesintegerNo—Length of a booking in minutes; 1–1440. Defaults to 30.
meeting_interval_minutesinteger | nullNo—Minutes between slot start times; 1–1440.
minimum_scheduling_notice_minutesintegerNo—How far ahead a booking must be made, in minutes; minimum 0. Defaults to 0.
date_range_daysintegerNo—How many days ahead can be booked; minimum 1. Defaults to 30.
pre_buffer_minutesintegerNo—Free time kept before each booking; minimum 0. Defaults to 0.
post_buffer_minutesintegerNo—Free time kept after each booking; minimum 0. Defaults to 0.
max_bookings_per_dayinteger | nullNo—Daily booking cap; minimum 1. null for no cap.
max_bookings_per_slotintegerNo—Bookings allowed in the same slot; minimum 1. Defaults to 1.
confirmation_typestringNo—What the public booking page does after booking. One of show_details, redirect. Defaults to show_details.
confirmation_redirect_urlstring | nullNo—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.

© 2026 Centerfy AI. All rights reserved.