Skip to main content
GRP
Step-by-Step Setup 10-15 minutes

Calendar Groups Setup

Calendars & Scheduling Intermediate
Need more detail? Read the full guide for config deep-dives and best practices.

Calendar Groups Setup

Manage calendar groups to create multi-calendar booking pages. Groups let prospects choose from multiple calendar types (discovery call, demo, consultation) on a single page.

Prerequisites

Before you begin, confirm the following:

  • A GoHighLevel sub-account with at least two calendars already created
  • A Private Integration Token (PIT) with the calendars scope enabled
  • Your locationId from Settings > Business Info
  • Calendar IDs for the calendars you want to group (retrieve via GET /calendars)
  • A REST client like Postman, Insomnia, or curl installed

Set Up Authentication

Calendar group endpoints share the same authentication as all calendar operations.

  1. Go to Settings > Integrations > Private Integrations
  2. Select or create a PIT with calendars scope (read and write)
  3. 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 calendar group:

curl -X POST "https://services.leadconnectorhq.com/calendars/groups" \
  -H "Authorization: Bearer $GHL_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Version: 2021-07-28" \
  -d '{
    "locationId": "'"$LOCATION_ID"'",
    "name": "Sales Booking Page",
    "description": "Choose your meeting type",
    "slug": "sales-booking",
    "calendarIds": ["calendar-id-1", "calendar-id-2"]
  }'

Update a calendar group to add or remove calendars:

curl -X PUT "https://services.leadconnectorhq.com/calendars/groups/{groupId}" \
  -H "Authorization: Bearer $GHL_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Version: 2021-07-28" \
  -d '{
    "name": "Updated Sales Page",
    "calendarIds": ["calendar-id-1", "calendar-id-2", "calendar-id-3"]
  }'

Validate a slug before creating a group:

curl -X GET "https://services.leadconnectorhq.com/calendars/groups/slug/validate?\
locationId=$LOCATION_ID&slug=sales-booking" \
  -H "Authorization: Bearer $GHL_TOKEN" \
  -H "Version: 2021-07-28"

Toggle group status (enable or disable):

curl -X PATCH "https://services.leadconnectorhq.com/calendars/groups/{groupId}/status" \
  -H "Authorization: Bearer $GHL_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Version: 2021-07-28" \
  -d '{"isActive": true}'

Delete a calendar group:

curl -X DELETE "https://services.leadconnectorhq.com/calendars/groups/{groupId}" \
  -H "Authorization: Bearer $GHL_TOKEN" \
  -H "Version: 2021-07-28"

Handle the Response

A successful POST returns 200 with the group object including id, name, slug, calendarIds, and isActive status.

The slug validation endpoint returns {"available": true} or {"available": false}. Always validate before creating to avoid 409 conflict errors.

The status toggle endpoint returns the updated group with the new isActive value. Disabled groups hide the booking page from public access but preserve the configuration.

Common errors:

  • 401 — Token invalid or expired.
  • 404 — Group ID or calendar ID not found.
  • 409 — Slug already in use by another group. Use the validate endpoint first.
  • 422 — Missing required fields. The create call needs locationId, name, slug, and calendarIds.

Test Your Setup

Walk through this sequence to confirm groups work correctly:

  1. Validate a unique slug like “test-group-api” using the slug endpoint
  2. Create a group with two calendar IDs. Note the returned id.
  3. Update the group to add a third calendar
  4. Visit the booking page URL (typically https://your-subdomain.com/widget/group/{slug}) and verify all calendars display
  5. Disable the group via the status endpoint and confirm the booking page returns a 404 or disabled message
  6. Delete the test group when finished

If calendars do not appear on the group page, verify each calendarId belongs to the same locationId as the group.

Next Steps

Read the full Calendar Groups guide for advanced group configurations and embedding options. Use Calendar CRUD to manage the individual calendars within your groups, or set up Free Slots to check availability across grouped calendars.

Stay sharp. New guides and playbooks as they drop.