GoHighLevel API reference

Calendars API

The GoHighLevel Calendars API has 17 documented endpoints here, covering GET, POST and PUT requests. Calendars cover availability, booking, and appointments. If you are looking for open bookable times, HighLevel calls them free slots rather than availability — that vocabulary gap is the most common reason a search for the right endpoint comes up empty.

Every page below carries the full parameter list, the response shape, the OAuth scope, and a curl you can paste into a terminal. Base URL: https://services.leadconnectorhq.com

All calendars endpoints

EndpointMethodPathScope
Create CalendarPOST/calendars/calendars.write
Create Calendar ResourcePOST/calendars/resources/:resourceTypecalendars/resources.write
Create Event NotificationPOST/calendars/:calendarId/notificationscalendars/events.write
Create SchedulePOST/calendars/schedulescalendars.write
Edit Block SlotPUT/calendars/events/block-slots/:eventIdcalendars/events.write
Fetch Calendar ResourcesGET/calendars/resources/:resourceTypecalendars/resources.readonly
Find Event NotificationGET/calendars/:calendarId/notifications/:notificationIdcalendars/events.readonly
Get All SchedulesGET/calendars/schedules/searchcalendars.readonly
Get Calendar ResourceGET/calendars/resources/:resourceType/:idcalendars/resources.readonly
Get CalendarsGET/calendars/calendars.readonly
Get Event NotificationGET/calendars/:calendarId/notificationscalendars/events.readonly
Get GroupsGET/calendars/groupscalendars/groups.readonly
Get SlotsGET/calendars/:calendarId/free-slotscalendars.readonly
Update Calendar ResourcePUT/calendars/resources/:resourceType/:idcalendars/resources.write
Update Event NotificationPUT/calendars/:calendarId/notifications/:notificationIdcalendars/events.write
Update SchedulePUT/calendars/schedules/:idcalendars.write
Validate Groups SlugPOST/calendars/groups/validate-slugcalendars/groups.write

Skip the schema lookup

Hylo hands these schemas to your AI agent over MCP, so it picks the right calendars endpoint and fills the body correctly the first time — then executes the call against your own sub-account when you approve it.

Elsewhere in the reference