Block Slots Setup
Create and manage blocked time periods on your GoHighLevel calendars. Blocked slots prevent bookings during specific windows, which is useful for lunch breaks, team meetings, vacations, or maintenance periods.
Prerequisites
Before you begin, confirm the following:
- A GoHighLevel sub-account with at least one calendar configured
- A Private Integration Token (PIT) with the calendars scope enabled
- Your
locationIdfrom Settings > Business Info - A valid
calendarIdto block time on - A REST client like Postman, Insomnia, or
curlinstalled
Set Up Authentication
Block slot endpoints use the same Bearer token as all calendar operations.
- Go to Settings > Integrations > Private Integrations
- Select or create a PIT with calendars scope (read and write)
- Copy the token:
export GHL_TOKEN="your-private-integration-token"
export LOCATION_ID="your-location-id"
Required headers:
Authorization: Bearer $GHL_TOKEN
Content-Type: application/json
Version: 2021-07-28
Make Your First Call
Create a blocked time slot:
curl -X POST "https://services.leadconnectorhq.com/calendars/blocked-slots" \
-H "Authorization: Bearer $GHL_TOKEN" \
-H "Content-Type: application/json" \
-H "Version: 2021-07-28" \
-d '{
"locationId": "'"$LOCATION_ID"'",
"calendarId": "your-calendar-id",
"startTime": "2026-03-10T12:00:00-05:00",
"endTime": "2026-03-10T13:00:00-05:00",
"title": "Lunch Break",
"assignedUserId": "team-member-id"
}'
The title field is optional but recommended for dashboard visibility. The assignedUserId specifies which team member’s schedule to block (required for round-robin calendars).
Update a blocked slot:
curl -X PUT "https://services.leadconnectorhq.com/calendars/blocked-slots/{blockId}" \
-H "Authorization: Bearer $GHL_TOKEN" \
-H "Content-Type: application/json" \
-H "Version: 2021-07-28" \
-d '{
"startTime": "2026-03-10T12:00:00-05:00",
"endTime": "2026-03-10T13:30:00-05:00",
"title": "Extended Lunch"
}'
List blocked slots for a calendar:
curl -X GET "https://services.leadconnectorhq.com/calendars/blocked-slots?\
locationId=$LOCATION_ID&\
calendarId=your-calendar-id&\
startDate=2026-03-10&\
endDate=2026-03-14" \
-H "Authorization: Bearer $GHL_TOKEN" \
-H "Version: 2021-07-28"
Delete a blocked slot:
curl -X DELETE "https://services.leadconnectorhq.com/calendars/blocked-slots/{blockId}" \
-H "Authorization: Bearer $GHL_TOKEN" \
-H "Version: 2021-07-28"
Handle the Response
A successful POST returns 200 with the block object including id, calendarId, startTime, endTime, title, and assignedUserId.
The GET (list) endpoint returns a blockedSlots array filtered by the date range you specify. Each object includes the same fields plus creation metadata.
Blocked slots affect the Free Slots endpoint immediately. Any time window covered by a block will not appear as available. This happens without any additional configuration.
Common errors:
- 401 — Token invalid or expired.
- 404 — Block ID or calendar ID not found.
- 422 — Missing required fields. The create call needs
locationId,calendarId,startTime, andendTime. - 400 — Invalid time format. Use ISO 8601 with timezone offset.
Test Your Setup
Verify blocked slots work correctly:
- Query free slots for a calendar on a specific date. Note an available time.
- Create a block covering that time window
- Re-query free slots for the same date. Confirm the blocked time no longer appears.
- List blocks for the date range and verify your new block is included
- Delete the test block and confirm the time slot returns to the free slots response
If the blocked slot does not affect availability, verify the calendarId and assignedUserId match the calendar and team member configuration.
Next Steps
Read the full Block Slots guide for recurring block patterns and bulk blocking strategies. Use Free Slots to verify availability after blocking, or manage appointments around blocked time with Appointment CRUD.