155 KiB
GHL Calendars API
⚠️ Version Header: All Calendars endpoints use
Version: 2021-04-15(different from most other APIs which use2021-07-28).
Endpoints: 41
Base URL: https://rest.gohighlevel.com/v1
Version Header(s): 2021-04-15
Endpoints
- GET /calendars/ — Get Calendars
- POST /calendars/ — Create Calendar
- GET /calendars/appointments/{appointmentId}/notes — Get Notes
- POST /calendars/appointments/{appointmentId}/notes — Create Note
- DELETE /calendars/appointments/{appointmentId}/notes/{noteId} — Delete Note
- PUT /calendars/appointments/{appointmentId}/notes/{noteId} — Update Note
- GET /calendars/blocked-slots — Get Blocked Slots
- GET /calendars/events — Get Calendar Events
- POST /calendars/events/appointments — Create appointment
- GET /calendars/events/appointments/{eventId} — Get Appointment
- PUT /calendars/events/appointments/{eventId} — Update Appointment
- POST /calendars/events/block-slots — Create Block Slot
- PUT /calendars/events/block-slots/{eventId} — Update Block Slot
- DELETE /calendars/events/{eventId} — Delete Event
- GET /calendars/groups — Get Groups
- POST /calendars/groups — Create Calendar Group
- POST /calendars/groups/validate-slug — Validate group slug
- DELETE /calendars/groups/{groupId} — Delete Group
- PUT /calendars/groups/{groupId} — Update Group
- PUT /calendars/groups/{groupId}/status — Disable Group
- GET /calendars/resources/{resourceType} — List Calendar Resources
- POST /calendars/resources/{resourceType} — Create Calendar Resource
- DELETE /calendars/resources/{resourceType}/{id} — Delete Calendar Resource
- GET /calendars/resources/{resourceType}/{id} — Get Calendar Resource
- PUT /calendars/resources/{resourceType}/{id} — Update Calendar Resource
- POST /calendars/schedules — Create user availability schedule
- GET /calendars/schedules/search — List user availability schedule
- DELETE /calendars/schedules/{id} — Delete user availability schedule
- GET /calendars/schedules/{id} — Get user availability schedule
- PUT /calendars/schedules/{id} — Update user availability schedule
- DELETE /calendars/schedules/{id}/associations/{calendarId} — Remove user availability schedule from a calendar
- PUT /calendars/schedules/{id}/associations/{calendarId} — Apply user availability schedule to a calendar
- DELETE /calendars/{calendarId} — Delete Calendar
- GET /calendars/{calendarId} — Get Calendar
- PUT /calendars/{calendarId} — Update Calendar
- GET /calendars/{calendarId}/free-slots — Get Free Slots
- GET /calendars/{calendarId}/notifications — Get notifications
- POST /calendars/{calendarId}/notifications — Create notification
- DELETE /calendars/{calendarId}/notifications/{notificationId} — Delete Notification
- GET /calendars/{calendarId}/notifications/{notificationId} — Get notification
- PUT /calendars/{calendarId}/notifications/{notificationId} — Update notification
GET /calendars/
Summary: Get Calendars
Get all calendars in a location.
Version Header: 2021-04-15
Operation ID: get-calendars
Tags: Calendars
cURL
curl -X GET 'https://rest.gohighlevel.com/v1/calendars/?locationId=ve9EPM428h8vShlRW1KT&groupId=BqTwX8QFwXzpegMve9EQ&showDrafted=VALUE' \
-H 'Authorization: Bearer YOUR_API_TOKEN' \
-H 'Version: 2021-04-15' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'User-Agent: YourApp/1.0'
Python (http.client)
import http.client
import json
conn = http.client.HTTPSConnection('rest.gohighlevel.com')
headers = {
'Authorization': 'Bearer YOUR_API_TOKEN',
'Version': '2021-04-15',
'Content-Type': 'application/json',
'Accept': 'application/json',
'User-Agent': 'YourApp/1.0',
}
conn.request('GET', '/v1/calendars/?locationId=ve9EPM428h8vShlRW1KT&groupId=BqTwX8QFwXzpegMve9EQ&showDrafted=VALUE', headers=headers)
response = conn.getresponse()
data = json.loads(response.read().decode())
print(json.dumps(data, indent=2))
conn.close()
n8n HTTP Node
{
"name": "GHL - GET calendars",
"type": "n8n-nodes-base.httpRequest",
"parameters": {
"method": "GET",
"url": "https://rest.gohighlevel.com/v1/calendars/",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer YOUR_API_TOKEN"
},
{
"name": "Version",
"value": "2021-04-15"
},
{
"name": "Content-Type",
"value": "application/json"
},
{
"name": "Accept",
"value": "application/json"
},
{
"name": "User-Agent",
"value": "YourApp/1.0"
}
]
},
"sendBody": false,
"bodyParameters": {
"parameters": []
},
"options": {},
"sendQuery": true,
"queryParameters": {
"parameters": [
{
"name": "locationId",
"value": "ve9EPM428h8vShlRW1KT"
},
{
"name": "groupId",
"value": "BqTwX8QFwXzpegMve9EQ"
},
{
"name": "showDrafted",
"value": "VALUE"
}
]
}
}
}
To use in n8n:
- Add an HTTP Request node
- Switch to JSON mode (Parameters → use RAW JSON)
- Paste the JSON above
- Update
YOUR_API_TOKENwith your actual GHL API key
Request Parameters
| Name | Location | Type | Required | Description |
|---|---|---|---|---|
locationId |
Query | string |
✅ | Location Id [example: ve9EPM428h8vShlRW1KT] |
groupId |
Query | string |
— | Group Id [example: BqTwX8QFwXzpegMve9EQ] |
showDrafted |
Query | boolean |
— | Show drafted |
Response Codes
| Code | Description | Schema |
|---|---|---|
200 |
Successful response | - calendars (array of CalendarDTO) |
400 |
Bad Request | Standard error response for bad requests (400). Contains message, statusCode fields. |
401 |
Unauthorized | Standard error response for unauthorized requests (401). Contains message, statusCode fields. |
⚠️ Special Notes & Quirks
⚠️ User-Agent Required: All GHL API requests require a
User-AgentHTTP header. Requests without it may be rejected with a 403 error.
POST /calendars/
Summary: Create Calendar
Create calendar in a location.
Version Header: 2021-04-15
Operation ID: create-calendar
Tags: Calendars
cURL
curl -X POST 'https://rest.gohighlevel.com/v1/calendars/' \
-H 'Authorization: Bearer YOUR_API_TOKEN' \
-H 'Version: 2021-04-15' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'User-Agent: YourApp/1.0' \
-d '{}' # See request body schema below
Python (http.client)
import http.client
import json
conn = http.client.HTTPSConnection('rest.gohighlevel.com')
headers = {
'Authorization': 'Bearer YOUR_API_TOKEN',
'Version': '2021-04-15',
'Content-Type': 'application/json',
'Accept': 'application/json',
'User-Agent': 'YourApp/1.0',
}
payload = json.dumps({})
conn.request('POST', '/v1/calendars/', body=payload, headers=headers)
response = conn.getresponse()
data = json.loads(response.read().decode())
print(json.dumps(data, indent=2))
conn.close()
n8n HTTP Node
{
"name": "GHL - POST calendars",
"type": "n8n-nodes-base.httpRequest",
"parameters": {
"method": "POST",
"url": "https://rest.gohighlevel.com/v1/calendars/",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer YOUR_API_TOKEN"
},
{
"name": "Version",
"value": "2021-04-15"
},
{
"name": "Content-Type",
"value": "application/json"
},
{
"name": "Accept",
"value": "application/json"
},
{
"name": "User-Agent",
"value": "YourApp/1.0"
}
]
},
"sendBody": true,
"bodyParameters": {
"parameters": []
},
"options": {}
}
}
To use in n8n:
- Add an HTTP Request node
- Switch to JSON mode (Parameters → use RAW JSON)
- Paste the JSON above
- Update
YOUR_API_TOKENwith your actual GHL API key
Request Body Schema
- isActive (boolean): Should the created calendar be active or draft
- notifications (array of CalendarNotification): 🚨 Deprecated! Please use 'Calendar Notifications APIs' instead.
- locationId (string) (required) (e.g.
ocQHyuzHvysMo5N5VsXc) - groupId (string) (e.g.
BqTwX8QFwXzpegMve9EQ): Group Id - teamMembers (array of TeamMember): Team members are required for calendars of type: Round Robin, Collective, Class, Service. Personal calendar must have exactly one team member.
- eventType (string)
- name (string) (required) (e.g.
test calendar) - description (string) (e.g.
this is used for testing) - slug (string) (e.g.
test1) - widgetSlug (string) (e.g.
test1) - calendarType (string)
- widgetType (string) (e.g.
classic): Calendar widget type. Choose "default" for "neo" and "classic" for "classic" layout. - eventTitle (string)
- eventColor (string)
- meetingLocation (string): 🚨 Deprecated! Use
locationConfigurations.locationorteamMembers[].locationConfigurations.locationinstead. - locationConfigurations (array of LocationConfiguration): Meeting location configuration for event calendar
- slotDuration (number): This controls the duration of the meeting
- slotDurationUnit (string): Unit for slot duration.
- slotInterval (number): Slot interval reflects the amount of time the between booking slots that will be shown in the calendar.
- slotIntervalUnit (string): Unit for slot interval.
- slotBuffer (number): Slot-Buffer is additional time that can be added after an appointment, allowing for extra time to wrap up
- slotBufferUnit (string): Unit for slot buffer.
- preBuffer (number): Pre-Buffer is additional time that can be added before an appointment, allowing for extra time to get ready
- preBufferUnit (string): Unit for pre-buffer.
- appoinmentPerSlot (number): Maximum bookings per slot (per user). Maximum seats per slot in case of Class Booking Calendar.
- appoinmentPerDay (number): Number of appointments that can be booked for a given day
- allowBookingAfter (number): Minimum scheduling notice for events
- allowBookingAfterUnit (string) (e.g.
days): Unit for minimum scheduling notice - allowBookingFor (number): Minimum number of days/weeks/months for which to allow booking events
- allowBookingForUnit (string) (e.g.
days): Unit for controlling the duration for which booking would be allowed for - openHours (array of OpenHour): This is only to set the standard availability. For custom availability, use the availabilities property
- enableRecurring (boolean): Enable recurring appointments for the calendars. Please note that only one member should be added in the calendar to enable this
- recurring (Recurring)
- formId (string)
- stickyContact (boolean)
- isLivePaymentMode (boolean)
- autoConfirm (boolean)
- shouldSendAlertEmailsToAssignedMember (boolean)
- alertEmail (string)
- googleInvitationEmails (boolean)
- allowReschedule (boolean)
- allowCancellation (boolean)
- shouldAssignContactToTeamMember (boolean)
- shouldSkipAssigningContactForExisting (boolean)
- notes (string)
- pixelId (string)
- formSubmitType (string)
- formSubmitRedirectURL (string)
- formSubmitThanksMessage (string)
- availabilityType (number): Determines which availability type to consider:
- 1: Only custom availabilities will be used.
- 0: Only open hours will be used.
- null: Both custom availabilities and open hours will be considered.
- availabilities (array of Availability): This is only to set the custom availability. For standard availability, use the openHours property
- guestType (string)
- consentLabel (string)
- calendarCoverImage (string) (e.g.
https://path-to-image.com) - lookBusyConfig (string): Look Busy Configuration
Response Codes
| Code | Description | Schema |
|---|---|---|
200 |
Successful response | - calendar (CalendarDTO) (required) |
400 |
Bad Request | Standard error response for bad requests (400). Contains message, statusCode fields. |
401 |
Unauthorized | Standard error response for unauthorized requests (401). Contains message, statusCode fields. |
⚠️ Special Notes & Quirks
⚠️ User-Agent Required: All GHL API requests require a
User-AgentHTTP header. Requests without it may be rejected with a 403 error.
GET /calendars/appointments/{appointmentId}/notes
Summary: Get Notes
Get Appointment Notes
Version Header: 2021-04-15
Operation ID: get-appointment-notes
Tags: Appointment Notes
cURL
curl -X GET 'https://rest.gohighlevel.com/v1/calendars/appointments/VALUE/notes?limit=10&offset=VALUE' \
-H 'Authorization: Bearer YOUR_API_TOKEN' \
-H 'Version: 2021-04-15' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'User-Agent: YourApp/1.0'
Python (http.client)
import http.client
import json
conn = http.client.HTTPSConnection('rest.gohighlevel.com')
headers = {
'Authorization': 'Bearer YOUR_API_TOKEN',
'Version': '2021-04-15',
'Content-Type': 'application/json',
'Accept': 'application/json',
'User-Agent': 'YourApp/1.0',
}
conn.request('GET', '/v1/calendars/appointments/VALUE/notes?limit=10&offset=VALUE', headers=headers)
response = conn.getresponse()
data = json.loads(response.read().decode())
print(json.dumps(data, indent=2))
conn.close()
n8n HTTP Node
{
"name": "GHL - GET notes",
"type": "n8n-nodes-base.httpRequest",
"parameters": {
"method": "GET",
"url": "https://rest.gohighlevel.com/v1/calendars/appointments/VALUE/notes",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer YOUR_API_TOKEN"
},
{
"name": "Version",
"value": "2021-04-15"
},
{
"name": "Content-Type",
"value": "application/json"
},
{
"name": "Accept",
"value": "application/json"
},
{
"name": "User-Agent",
"value": "YourApp/1.0"
}
]
},
"sendBody": false,
"bodyParameters": {
"parameters": []
},
"options": {},
"sendQuery": true,
"queryParameters": {
"parameters": [
{
"name": "limit",
"value": 10
},
{
"name": "offset",
"value": "VALUE"
}
]
}
}
}
To use in n8n:
- Add an HTTP Request node
- Switch to JSON mode (Parameters → use RAW JSON)
- Paste the JSON above
- Update
YOUR_API_TOKENwith your actual GHL API key
Request Parameters
| Name | Location | Type | Required | Description |
|---|---|---|---|---|
limit |
Query | number |
✅ | Limit of notes to fetch [example: 10] |
offset |
Query | number |
✅ | Offset of notes to fetch |
appointmentId |
Path | string |
✅ | Appointment ID |
Response Codes
| Code | Description | Schema |
|---|---|---|
200 |
Successful response | - notes (array of GetNoteSchema) - hasMore (boolean) (e.g. True) |
400 |
Bad Request | Standard error response for bad requests (400). Contains message, statusCode fields. |
401 |
Unauthorized | Standard error response for unauthorized requests (401). Contains message, statusCode fields. |
⚠️ Special Notes & Quirks
⚠️ User-Agent Required: All GHL API requests require a
User-AgentHTTP header. Requests without it may be rejected with a 403 error.
POST /calendars/appointments/{appointmentId}/notes
Summary: Create Note
Create Note
Version Header: 2021-04-15
Operation ID: create-appointment-note
Tags: Appointment Notes
cURL
curl -X POST 'https://rest.gohighlevel.com/v1/calendars/appointments/VALUE/notes' \
-H 'Authorization: Bearer YOUR_API_TOKEN' \
-H 'Version: 2021-04-15' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'User-Agent: YourApp/1.0' \
-d '{}' # See request body schema below
Python (http.client)
import http.client
import json
conn = http.client.HTTPSConnection('rest.gohighlevel.com')
headers = {
'Authorization': 'Bearer YOUR_API_TOKEN',
'Version': '2021-04-15',
'Content-Type': 'application/json',
'Accept': 'application/json',
'User-Agent': 'YourApp/1.0',
}
payload = json.dumps({})
conn.request('POST', '/v1/calendars/appointments/VALUE/notes', body=payload, headers=headers)
response = conn.getresponse()
data = json.loads(response.read().decode())
print(json.dumps(data, indent=2))
conn.close()
n8n HTTP Node
{
"name": "GHL - POST notes",
"type": "n8n-nodes-base.httpRequest",
"parameters": {
"method": "POST",
"url": "https://rest.gohighlevel.com/v1/calendars/appointments/VALUE/notes",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer YOUR_API_TOKEN"
},
{
"name": "Version",
"value": "2021-04-15"
},
{
"name": "Content-Type",
"value": "application/json"
},
{
"name": "Accept",
"value": "application/json"
},
{
"name": "User-Agent",
"value": "YourApp/1.0"
}
]
},
"sendBody": true,
"bodyParameters": {
"parameters": []
},
"options": {}
}
}
To use in n8n:
- Add an HTTP Request node
- Switch to JSON mode (Parameters → use RAW JSON)
- Paste the JSON above
- Update
YOUR_API_TOKENwith your actual GHL API key
Request Parameters
| Name | Location | Type | Required | Description |
|---|---|---|---|---|
appointmentId |
Path | string |
✅ | Appointment ID |
Request Body Schema
- userId (string) (e.g.
GCs5KuzPqTls7vWclkEV) - body (string) (required) (e.g.
lorem ipsum): Note body
Response Codes
| Code | Description | Schema |
|---|---|---|
201 |
Successful response | - note (GetNoteSchema) |
400 |
Bad Request | Standard error response for bad requests (400). Contains message, statusCode fields. |
401 |
Unauthorized | Standard error response for unauthorized requests (401). Contains message, statusCode fields. |
⚠️ Special Notes & Quirks
⚠️ User-Agent Required: All GHL API requests require a
User-AgentHTTP header. Requests without it may be rejected with a 403 error.
DELETE /calendars/appointments/{appointmentId}/notes/{noteId}
Summary: Delete Note
Delete Note
Version Header: 2021-04-15
Operation ID: delete-appointment-note
Tags: Appointment Notes
cURL
curl -X DELETE 'https://rest.gohighlevel.com/v1/calendars/appointments/VALUE/notes/{noteId}' \
-H 'Authorization: Bearer YOUR_API_TOKEN' \
-H 'Version: 2021-04-15' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'User-Agent: YourApp/1.0'
Python (http.client)
import http.client
import json
conn = http.client.HTTPSConnection('rest.gohighlevel.com')
headers = {
'Authorization': 'Bearer YOUR_API_TOKEN',
'Version': '2021-04-15',
'Content-Type': 'application/json',
'Accept': 'application/json',
'User-Agent': 'YourApp/1.0',
}
conn.request('DELETE', '/v1/calendars/appointments/VALUE/notes/{noteId}', headers=headers)
response = conn.getresponse()
data = json.loads(response.read().decode())
print(json.dumps(data, indent=2))
conn.close()
n8n HTTP Node
{
"name": "GHL - DELETE {noteId}",
"type": "n8n-nodes-base.httpRequest",
"parameters": {
"method": "DELETE",
"url": "https://rest.gohighlevel.com/v1/calendars/appointments/VALUE/notes/{noteId}",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer YOUR_API_TOKEN"
},
{
"name": "Version",
"value": "2021-04-15"
},
{
"name": "Content-Type",
"value": "application/json"
},
{
"name": "Accept",
"value": "application/json"
},
{
"name": "User-Agent",
"value": "YourApp/1.0"
}
]
},
"sendBody": false,
"bodyParameters": {
"parameters": []
},
"options": {}
}
}
To use in n8n:
- Add an HTTP Request node
- Switch to JSON mode (Parameters → use RAW JSON)
- Paste the JSON above
- Update
YOUR_API_TOKENwith your actual GHL API key
Request Parameters
| Name | Location | Type | Required | Description |
|---|---|---|---|---|
appointmentId |
Path | string |
✅ | Appointment ID |
Response Codes
| Code | Description | Schema |
|---|---|---|
200 |
Successful response | - success (boolean) (e.g. True) |
400 |
Bad Request | Standard error response for bad requests (400). Contains message, statusCode fields. |
401 |
Unauthorized | Standard error response for unauthorized requests (401). Contains message, statusCode fields. |
⚠️ Special Notes & Quirks
⚠️ User-Agent Required: All GHL API requests require a
User-AgentHTTP header. Requests without it may be rejected with a 403 error.
PUT /calendars/appointments/{appointmentId}/notes/{noteId}
Summary: Update Note
Update Note
Version Header: 2021-04-15
Operation ID: update-appointment-note
Tags: Appointment Notes
cURL
curl -X PUT 'https://rest.gohighlevel.com/v1/calendars/appointments/VALUE/notes/{noteId}' \
-H 'Authorization: Bearer YOUR_API_TOKEN' \
-H 'Version: 2021-04-15' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'User-Agent: YourApp/1.0' \
-d '{}' # See request body schema below
Python (http.client)
import http.client
import json
conn = http.client.HTTPSConnection('rest.gohighlevel.com')
headers = {
'Authorization': 'Bearer YOUR_API_TOKEN',
'Version': '2021-04-15',
'Content-Type': 'application/json',
'Accept': 'application/json',
'User-Agent': 'YourApp/1.0',
}
payload = json.dumps({})
conn.request('PUT', '/v1/calendars/appointments/VALUE/notes/{noteId}', body=payload, headers=headers)
response = conn.getresponse()
data = json.loads(response.read().decode())
print(json.dumps(data, indent=2))
conn.close()
n8n HTTP Node
{
"name": "GHL - PUT {noteId}",
"type": "n8n-nodes-base.httpRequest",
"parameters": {
"method": "PUT",
"url": "https://rest.gohighlevel.com/v1/calendars/appointments/VALUE/notes/{noteId}",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer YOUR_API_TOKEN"
},
{
"name": "Version",
"value": "2021-04-15"
},
{
"name": "Content-Type",
"value": "application/json"
},
{
"name": "Accept",
"value": "application/json"
},
{
"name": "User-Agent",
"value": "YourApp/1.0"
}
]
},
"sendBody": true,
"bodyParameters": {
"parameters": []
},
"options": {}
}
}
To use in n8n:
- Add an HTTP Request node
- Switch to JSON mode (Parameters → use RAW JSON)
- Paste the JSON above
- Update
YOUR_API_TOKENwith your actual GHL API key
Request Parameters
| Name | Location | Type | Required | Description |
|---|---|---|---|---|
appointmentId |
Path | string |
✅ | Appointment ID |
Request Body Schema
- userId (string) (e.g.
GCs5KuzPqTls7vWclkEV) - body (string) (required) (e.g.
lorem ipsum): Note body
Response Codes
| Code | Description | Schema |
|---|---|---|
200 |
Successful response | - note (GetNoteSchema) |
400 |
Bad Request | Standard error response for bad requests (400). Contains message, statusCode fields. |
401 |
Unauthorized | Standard error response for unauthorized requests (401). Contains message, statusCode fields. |
⚠️ Special Notes & Quirks
⚠️ User-Agent Required: All GHL API requests require a
User-AgentHTTP header. Requests without it may be rejected with a 403 error.
GET /calendars/blocked-slots
Summary: Get Blocked Slots
Get Blocked Slots
Version Header: 2021-04-15
Operation ID: get-blocked-slots
Tags: Calendar Events
cURL
curl -X GET 'https://rest.gohighlevel.com/v1/calendars/blocked-slots?locationId=0007BWpSzSwfiuSl0tR2&userId=CVokAlI8fgw4WYWoCtQz&calendarId=BqTwX8QFwXzpegMve9EQ&groupId=ocQHyuzHvysMo5N5VsXc&startTime=1680373800000&endTime=1680978599999' \
-H 'Authorization: Bearer YOUR_API_TOKEN' \
-H 'Version: 2021-04-15' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'User-Agent: YourApp/1.0'
Python (http.client)
import http.client
import json
conn = http.client.HTTPSConnection('rest.gohighlevel.com')
headers = {
'Authorization': 'Bearer YOUR_API_TOKEN',
'Version': '2021-04-15',
'Content-Type': 'application/json',
'Accept': 'application/json',
'User-Agent': 'YourApp/1.0',
}
conn.request('GET', '/v1/calendars/blocked-slots?locationId=0007BWpSzSwfiuSl0tR2&userId=CVokAlI8fgw4WYWoCtQz&calendarId=BqTwX8QFwXzpegMve9EQ&groupId=ocQHyuzHvysMo5N5VsXc&startTime=1680373800000&endTime=1680978599999', headers=headers)
response = conn.getresponse()
data = json.loads(response.read().decode())
print(json.dumps(data, indent=2))
conn.close()
n8n HTTP Node
{
"name": "GHL - GET blocked-slots",
"type": "n8n-nodes-base.httpRequest",
"parameters": {
"method": "GET",
"url": "https://rest.gohighlevel.com/v1/calendars/blocked-slots",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer YOUR_API_TOKEN"
},
{
"name": "Version",
"value": "2021-04-15"
},
{
"name": "Content-Type",
"value": "application/json"
},
{
"name": "Accept",
"value": "application/json"
},
{
"name": "User-Agent",
"value": "YourApp/1.0"
}
]
},
"sendBody": false,
"bodyParameters": {
"parameters": []
},
"options": {},
"sendQuery": true,
"queryParameters": {
"parameters": [
{
"name": "locationId",
"value": "0007BWpSzSwfiuSl0tR2"
},
{
"name": "userId",
"value": "CVokAlI8fgw4WYWoCtQz"
},
{
"name": "calendarId",
"value": "BqTwX8QFwXzpegMve9EQ"
},
{
"name": "groupId",
"value": "ocQHyuzHvysMo5N5VsXc"
},
{
"name": "startTime",
"value": "1680373800000"
},
{
"name": "endTime",
"value": "1680978599999"
}
]
}
}
}
To use in n8n:
- Add an HTTP Request node
- Switch to JSON mode (Parameters → use RAW JSON)
- Paste the JSON above
- Update
YOUR_API_TOKENwith your actual GHL API key
Request Parameters
| Name | Location | Type | Required | Description |
|---|---|---|---|---|
locationId |
Query | string |
✅ | Location Id [example: 0007BWpSzSwfiuSl0tR2] |
userId |
Query | string |
— | User Id - Owner of an appointment. Either of userId, groupId or calendarId is required [example: ... |
calendarId |
Query | string |
— | Either of calendarId, userId or groupId is required [example: BqTwX8QFwXzpegMve9EQ] |
groupId |
Query | string |
— | Either of groupId, calendarId or userId is required [example: ocQHyuzHvysMo5N5VsXc] |
startTime |
Query | string |
✅ | Start Time (in millis) [example: 1680373800000] |
endTime |
Query | string |
✅ | End Time (in millis) [example: 1680978599999] |
Response Codes
| Code | Description | Schema |
|---|---|---|
200 |
Successful response | - events (array of CalendarEventDTO) |
400 |
Bad Request | Standard error response for bad requests (400). Contains message, statusCode fields. |
401 |
Unauthorized | Standard error response for unauthorized requests (401). Contains message, statusCode fields. |
⚠️ Special Notes & Quirks
⚠️ User-Agent Required: All GHL API requests require a
User-AgentHTTP header. Requests without it may be rejected with a 403 error.
GET /calendars/events
Summary: Get Calendar Events
Get Calendar Events
Version Header: 2021-04-15
Operation ID: get-calendar-events
Tags: Calendar Events
cURL
curl -X GET 'https://rest.gohighlevel.com/v1/calendars/events?locationId=0007BWpSzSwfiuSl0tR2&userId=CVokAlI8fgw4WYWoCtQz&calendarId=BqTwX8QFwXzpegMve9EQ&groupId=ocQHyuzHvysMo5N5VsXc&startTime=1680373800000&endTime=1680978599999' \
-H 'Authorization: Bearer YOUR_API_TOKEN' \
-H 'Version: 2021-04-15' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'User-Agent: YourApp/1.0'
Python (http.client)
import http.client
import json
conn = http.client.HTTPSConnection('rest.gohighlevel.com')
headers = {
'Authorization': 'Bearer YOUR_API_TOKEN',
'Version': '2021-04-15',
'Content-Type': 'application/json',
'Accept': 'application/json',
'User-Agent': 'YourApp/1.0',
}
conn.request('GET', '/v1/calendars/events?locationId=0007BWpSzSwfiuSl0tR2&userId=CVokAlI8fgw4WYWoCtQz&calendarId=BqTwX8QFwXzpegMve9EQ&groupId=ocQHyuzHvysMo5N5VsXc&startTime=1680373800000&endTime=1680978599999', headers=headers)
response = conn.getresponse()
data = json.loads(response.read().decode())
print(json.dumps(data, indent=2))
conn.close()
n8n HTTP Node
{
"name": "GHL - GET events",
"type": "n8n-nodes-base.httpRequest",
"parameters": {
"method": "GET",
"url": "https://rest.gohighlevel.com/v1/calendars/events",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer YOUR_API_TOKEN"
},
{
"name": "Version",
"value": "2021-04-15"
},
{
"name": "Content-Type",
"value": "application/json"
},
{
"name": "Accept",
"value": "application/json"
},
{
"name": "User-Agent",
"value": "YourApp/1.0"
}
]
},
"sendBody": false,
"bodyParameters": {
"parameters": []
},
"options": {},
"sendQuery": true,
"queryParameters": {
"parameters": [
{
"name": "locationId",
"value": "0007BWpSzSwfiuSl0tR2"
},
{
"name": "userId",
"value": "CVokAlI8fgw4WYWoCtQz"
},
{
"name": "calendarId",
"value": "BqTwX8QFwXzpegMve9EQ"
},
{
"name": "groupId",
"value": "ocQHyuzHvysMo5N5VsXc"
},
{
"name": "startTime",
"value": "1680373800000"
},
{
"name": "endTime",
"value": "1680978599999"
}
]
}
}
}
To use in n8n:
- Add an HTTP Request node
- Switch to JSON mode (Parameters → use RAW JSON)
- Paste the JSON above
- Update
YOUR_API_TOKENwith your actual GHL API key
Request Parameters
| Name | Location | Type | Required | Description |
|---|---|---|---|---|
locationId |
Query | string |
✅ | Location Id [example: 0007BWpSzSwfiuSl0tR2] |
userId |
Query | string |
— | User Id - Owner of an appointment. Either of userId, groupId or calendarId is required [example: ... |
calendarId |
Query | string |
— | Either of calendarId, userId or groupId is required [example: BqTwX8QFwXzpegMve9EQ] |
groupId |
Query | string |
— | Either of groupId, calendarId or userId is required [example: ocQHyuzHvysMo5N5VsXc] |
startTime |
Query | string |
✅ | Start Time (in millis) [example: 1680373800000] |
endTime |
Query | string |
✅ | End Time (in millis) [example: 1680978599999] |
Response Codes
| Code | Description | Schema |
|---|---|---|
200 |
Successful response | - events (array of CalendarEventDTO) |
400 |
Bad Request | Standard error response for bad requests (400). Contains message, statusCode fields. |
401 |
Unauthorized | Standard error response for unauthorized requests (401). Contains message, statusCode fields. |
⚠️ Special Notes & Quirks
⚠️ User-Agent Required: All GHL API requests require a
User-AgentHTTP header. Requests without it may be rejected with a 403 error.
POST /calendars/events/appointments
Summary: Create appointment
Create appointment
Version Header: 2021-04-15
Operation ID: create-appointment
Tags: Calendar Events
cURL
curl -X POST 'https://rest.gohighlevel.com/v1/calendars/events/appointments' \
-H 'Authorization: Bearer YOUR_API_TOKEN' \
-H 'Version: 2021-04-15' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'User-Agent: YourApp/1.0' \
-d '{}' # See request body schema below
Python (http.client)
import http.client
import json
conn = http.client.HTTPSConnection('rest.gohighlevel.com')
headers = {
'Authorization': 'Bearer YOUR_API_TOKEN',
'Version': '2021-04-15',
'Content-Type': 'application/json',
'Accept': 'application/json',
'User-Agent': 'YourApp/1.0',
}
payload = json.dumps({})
conn.request('POST', '/v1/calendars/events/appointments', body=payload, headers=headers)
response = conn.getresponse()
data = json.loads(response.read().decode())
print(json.dumps(data, indent=2))
conn.close()
n8n HTTP Node
{
"name": "GHL - POST appointments",
"type": "n8n-nodes-base.httpRequest",
"parameters": {
"method": "POST",
"url": "https://rest.gohighlevel.com/v1/calendars/events/appointments",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer YOUR_API_TOKEN"
},
{
"name": "Version",
"value": "2021-04-15"
},
{
"name": "Content-Type",
"value": "application/json"
},
{
"name": "Accept",
"value": "application/json"
},
{
"name": "User-Agent",
"value": "YourApp/1.0"
}
]
},
"sendBody": true,
"bodyParameters": {
"parameters": []
},
"options": {}
}
}
To use in n8n:
- Add an HTTP Request node
- Switch to JSON mode (Parameters → use RAW JSON)
- Paste the JSON above
- Update
YOUR_API_TOKENwith your actual GHL API key
Request Body Schema
-
title (string) (e.g.
Test Event): Title -
meetingLocationType (string) (e.g.
custom): Meeting location type. -
If
addressis provided in the request body, themeetingLocationTypedefaults to custom.- meetingLocationId (string) (e.g.
custom_0): The unique identifier for the meeting location.
- meetingLocationId (string) (e.g.
-
This value can be found in
calendar.locationConfigurationsorcalendar.teamMembers[].locationConfigurations- overrideLocationConfig (boolean) (e.g.
True): Flag to override location config
- overrideLocationConfig (boolean) (e.g.
-
false - If only
meetingLocationIdis provided -
true - If only
meetingLocationTypeis provided- appointmentStatus (string) (e.g.
confirmed) - assignedUserId (string) (e.g.
0007BWpSzSwfiuSl0tR2): Assigned User Id - description (string) (e.g.
Booking a call to discuss the project): Appointment Description - address (string) (e.g.
Zoom): Appointment Address - ignoreDateRange (boolean) (e.g.
False): If set to true, the minimum scheduling notice and date range would be ignored - toNotify (boolean) (e.g.
False): If set to false, the automations will not run - ignoreFreeSlotValidation (boolean) (e.g.
True): If true the time slot validation would be avoided for any appointment creation (even the ignoreDateRange) - rrule (string): RRULE as per the iCalendar (RFC 5545) specification for recurring events. DTSTART is not required, instance ids are calculated on the basis of startTime of the event. The rrule only be applied if ignoreFreeSlotValidation is true.
- calendarId (string) (required) (e.g.
CVokAlI8fgw4WYWoCtQz): Calendar Id - locationId (string) (required) (e.g.
C2QujeCh8ZnC7al2InWR): Location Id - contactId (string) (required) (e.g.
0007BWpSzSwfiuSl0tR2): Contact Id - startTime (string) (required) (e.g.
2021-06-23T03:30:00+05:30): Start Time - endTime (string) (e.g.
2021-06-23T04:30:00+05:30): End Time
- appointmentStatus (string) (e.g.
Response Codes
| Code | Description | Schema |
|---|---|---|
200 |
Successful response | - calendarId (string) (required) (e.g. CVokAlI8fgw4WYWoCtQz): Calendar Id- locationId (string) (required) (e.g. `C2QujeCh8ZnC7al2InW... |
400 |
Bad Request | Standard error response for bad requests (400). Contains message, statusCode fields. |
401 |
Unauthorized | Standard error response for unauthorized requests (401). Contains message, statusCode fields. |
⚠️ Special Notes & Quirks
⚠️ User-Agent Required: All GHL API requests require a
User-AgentHTTP header. Requests without it may be rejected with a 403 error.
GET /calendars/events/appointments/{eventId}
Summary: Get Appointment
Get appointment by ID
Version Header: 2021-04-15
Operation ID: get-appointment
Tags: Calendar Events
cURL
curl -X GET 'https://rest.gohighlevel.com/v1/calendars/events/appointments/VALUE' \
-H 'Authorization: Bearer YOUR_API_TOKEN' \
-H 'Version: 2021-04-15' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'User-Agent: YourApp/1.0'
Python (http.client)
import http.client
import json
conn = http.client.HTTPSConnection('rest.gohighlevel.com')
headers = {
'Authorization': 'Bearer YOUR_API_TOKEN',
'Version': '2021-04-15',
'Content-Type': 'application/json',
'Accept': 'application/json',
'User-Agent': 'YourApp/1.0',
}
conn.request('GET', '/v1/calendars/events/appointments/VALUE', headers=headers)
response = conn.getresponse()
data = json.loads(response.read().decode())
print(json.dumps(data, indent=2))
conn.close()
n8n HTTP Node
{
"name": "GHL - GET VALUE",
"type": "n8n-nodes-base.httpRequest",
"parameters": {
"method": "GET",
"url": "https://rest.gohighlevel.com/v1/calendars/events/appointments/VALUE",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer YOUR_API_TOKEN"
},
{
"name": "Version",
"value": "2021-04-15"
},
{
"name": "Content-Type",
"value": "application/json"
},
{
"name": "Accept",
"value": "application/json"
},
{
"name": "User-Agent",
"value": "YourApp/1.0"
}
]
},
"sendBody": false,
"bodyParameters": {
"parameters": []
},
"options": {}
}
}
To use in n8n:
- Add an HTTP Request node
- Switch to JSON mode (Parameters → use RAW JSON)
- Paste the JSON above
- Update
YOUR_API_TOKENwith your actual GHL API key
Request Parameters
| Name | Location | Type | Required | Description |
|---|---|---|---|---|
eventId |
Path | string |
✅ | Event Id or Instance id. For recurring appointments send masterEventId to modify original series. |
Response Codes
| Code | Description | Schema |
|---|---|---|
200 |
Successful response | - event (CalendarEventDTO) |
400 |
Bad Request | Standard error response for bad requests (400). Contains message, statusCode fields. |
401 |
Unauthorized | Standard error response for unauthorized requests (401). Contains message, statusCode fields. |
⚠️ Special Notes & Quirks
⚠️ User-Agent Required: All GHL API requests require a
User-AgentHTTP header. Requests without it may be rejected with a 403 error.
PUT /calendars/events/appointments/{eventId}
Summary: Update Appointment
Update appointment
Version Header: 2021-04-15
Operation ID: edit-appointment
Tags: Calendar Events
cURL
curl -X PUT 'https://rest.gohighlevel.com/v1/calendars/events/appointments/VALUE' \
-H 'Authorization: Bearer YOUR_API_TOKEN' \
-H 'Version: 2021-04-15' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'User-Agent: YourApp/1.0' \
-d '{}' # See request body schema below
Python (http.client)
import http.client
import json
conn = http.client.HTTPSConnection('rest.gohighlevel.com')
headers = {
'Authorization': 'Bearer YOUR_API_TOKEN',
'Version': '2021-04-15',
'Content-Type': 'application/json',
'Accept': 'application/json',
'User-Agent': 'YourApp/1.0',
}
payload = json.dumps({})
conn.request('PUT', '/v1/calendars/events/appointments/VALUE', body=payload, headers=headers)
response = conn.getresponse()
data = json.loads(response.read().decode())
print(json.dumps(data, indent=2))
conn.close()
n8n HTTP Node
{
"name": "GHL - PUT VALUE",
"type": "n8n-nodes-base.httpRequest",
"parameters": {
"method": "PUT",
"url": "https://rest.gohighlevel.com/v1/calendars/events/appointments/VALUE",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer YOUR_API_TOKEN"
},
{
"name": "Version",
"value": "2021-04-15"
},
{
"name": "Content-Type",
"value": "application/json"
},
{
"name": "Accept",
"value": "application/json"
},
{
"name": "User-Agent",
"value": "YourApp/1.0"
}
]
},
"sendBody": true,
"bodyParameters": {
"parameters": []
},
"options": {}
}
}
To use in n8n:
- Add an HTTP Request node
- Switch to JSON mode (Parameters → use RAW JSON)
- Paste the JSON above
- Update
YOUR_API_TOKENwith your actual GHL API key
Request Parameters
| Name | Location | Type | Required | Description |
|---|---|---|---|---|
eventId |
Path | string |
✅ | Event Id or Instance id. For recurring appointments send masterEventId to modify original series. |
Request Body Schema
-
title (string) (e.g.
Test Event): Title -
meetingLocationType (string) (e.g.
custom): Meeting location type. -
If
addressis provided in the request body, themeetingLocationTypedefaults to custom.- meetingLocationId (string) (e.g.
custom_0): The unique identifier for the meeting location.
- meetingLocationId (string) (e.g.
-
This value can be found in
calendar.locationConfigurationsorcalendar.teamMembers[].locationConfigurations- overrideLocationConfig (boolean) (e.g.
True): Flag to override location config
- overrideLocationConfig (boolean) (e.g.
-
false - If only
meetingLocationIdis provided -
true - If only
meetingLocationTypeis provided- appointmentStatus (string) (e.g.
confirmed) - assignedUserId (string) (e.g.
0007BWpSzSwfiuSl0tR2): Assigned User Id - description (string) (e.g.
Booking a call to discuss the project): Appointment Description - address (string) (e.g.
Zoom): Appointment Address - ignoreDateRange (boolean) (e.g.
False): If set to true, the minimum scheduling notice and date range would be ignored - toNotify (boolean) (e.g.
False): If set to false, the automations will not run - ignoreFreeSlotValidation (boolean) (e.g.
True): If true the time slot validation would be avoided for any appointment creation (even the ignoreDateRange) - rrule (string): RRULE as per the iCalendar (RFC 5545) specification for recurring events. DTSTART is not required, instance ids are calculated on the basis of startTime of the event. The rrule only be applied if ignoreFreeSlotValidation is true.
- calendarId (string) (e.g.
CVokAlI8fgw4WYWoCtQz): Calendar Id - startTime (string) (e.g.
2021-06-23T03:30:00+05:30): Start Time - endTime (string) (e.g.
2021-06-23T04:30:00+05:30): End Time
- appointmentStatus (string) (e.g.
Response Codes
| Code | Description | Schema |
|---|---|---|
200 |
Successful response | - calendarId (string) (required) (e.g. CVokAlI8fgw4WYWoCtQz): Calendar Id- locationId (string) (required) (e.g. `C2QujeCh8ZnC7al2InW... |
400 |
Bad Request | Standard error response for bad requests (400). Contains message, statusCode fields. |
401 |
Unauthorized | Standard error response for unauthorized requests (401). Contains message, statusCode fields. |
⚠️ Special Notes & Quirks
⚠️ User-Agent Required: All GHL API requests require a
User-AgentHTTP header. Requests without it may be rejected with a 403 error.
POST /calendars/events/block-slots
Summary: Create Block Slot
Create block slot
Version Header: 2021-04-15
Operation ID: create-block-slot
Tags: Calendar Events
cURL
curl -X POST 'https://rest.gohighlevel.com/v1/calendars/events/block-slots' \
-H 'Authorization: Bearer YOUR_API_TOKEN' \
-H 'Version: 2021-04-15' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'User-Agent: YourApp/1.0' \
-d '{}' # See request body schema below
Python (http.client)
import http.client
import json
conn = http.client.HTTPSConnection('rest.gohighlevel.com')
headers = {
'Authorization': 'Bearer YOUR_API_TOKEN',
'Version': '2021-04-15',
'Content-Type': 'application/json',
'Accept': 'application/json',
'User-Agent': 'YourApp/1.0',
}
payload = json.dumps({})
conn.request('POST', '/v1/calendars/events/block-slots', body=payload, headers=headers)
response = conn.getresponse()
data = json.loads(response.read().decode())
print(json.dumps(data, indent=2))
conn.close()
n8n HTTP Node
{
"name": "GHL - POST block-slots",
"type": "n8n-nodes-base.httpRequest",
"parameters": {
"method": "POST",
"url": "https://rest.gohighlevel.com/v1/calendars/events/block-slots",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer YOUR_API_TOKEN"
},
{
"name": "Version",
"value": "2021-04-15"
},
{
"name": "Content-Type",
"value": "application/json"
},
{
"name": "Accept",
"value": "application/json"
},
{
"name": "User-Agent",
"value": "YourApp/1.0"
}
]
},
"sendBody": true,
"bodyParameters": {
"parameters": []
},
"options": {}
}
}
To use in n8n:
- Add an HTTP Request node
- Switch to JSON mode (Parameters → use RAW JSON)
- Paste the JSON above
- Update
YOUR_API_TOKENwith your actual GHL API key
Request Body Schema
- title (string) (e.g.
Test Event): Title - calendarId (string) (required) (e.g.
CVokAlI8fgw4WYWoCtQz): Either calendarId or assignedUserId can be set, not both. - assignedUserId (string) (e.g.
CVokAlI8fgw4WYWoCtQz): Either calendarId or assignedUserId can be set, not both. - locationId (string) (required) (e.g.
C2QujeCh8ZnC7al2InWR): Location Id - startTime (string) (e.g.
2021-06-23T03:30:00+05:30): Start Time - endTime (string) (e.g.
2021-06-23T04:30:00+05:30): End Time
Response Codes
| Code | Description | Schema |
|---|---|---|
201 |
Successful response | - id (string) (required) (e.g. 0TkCdp9PfvLeWKYRRvIz): Id- locationId (string) (required) (e.g. C2QujeCh8ZnC7al2InWR): Location Id... |
400 |
Bad Request | Standard error response for bad requests (400). Contains message, statusCode fields. |
401 |
Unauthorized | Standard error response for unauthorized requests (401). Contains message, statusCode fields. |
⚠️ Special Notes & Quirks
⚠️ User-Agent Required: All GHL API requests require a
User-AgentHTTP header. Requests without it may be rejected with a 403 error.
PUT /calendars/events/block-slots/{eventId}
Summary: Update Block Slot
Update block slot by ID
Version Header: 2021-04-15
Operation ID: edit-block-slot
Tags: Calendar Events
cURL
curl -X PUT 'https://rest.gohighlevel.com/v1/calendars/events/block-slots/VALUE' \
-H 'Authorization: Bearer YOUR_API_TOKEN' \
-H 'Version: 2021-04-15' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'User-Agent: YourApp/1.0' \
-d '{}' # See request body schema below
Python (http.client)
import http.client
import json
conn = http.client.HTTPSConnection('rest.gohighlevel.com')
headers = {
'Authorization': 'Bearer YOUR_API_TOKEN',
'Version': '2021-04-15',
'Content-Type': 'application/json',
'Accept': 'application/json',
'User-Agent': 'YourApp/1.0',
}
payload = json.dumps({})
conn.request('PUT', '/v1/calendars/events/block-slots/VALUE', body=payload, headers=headers)
response = conn.getresponse()
data = json.loads(response.read().decode())
print(json.dumps(data, indent=2))
conn.close()
n8n HTTP Node
{
"name": "GHL - PUT VALUE",
"type": "n8n-nodes-base.httpRequest",
"parameters": {
"method": "PUT",
"url": "https://rest.gohighlevel.com/v1/calendars/events/block-slots/VALUE",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer YOUR_API_TOKEN"
},
{
"name": "Version",
"value": "2021-04-15"
},
{
"name": "Content-Type",
"value": "application/json"
},
{
"name": "Accept",
"value": "application/json"
},
{
"name": "User-Agent",
"value": "YourApp/1.0"
}
]
},
"sendBody": true,
"bodyParameters": {
"parameters": []
},
"options": {}
}
}
To use in n8n:
- Add an HTTP Request node
- Switch to JSON mode (Parameters → use RAW JSON)
- Paste the JSON above
- Update
YOUR_API_TOKENwith your actual GHL API key
Request Parameters
| Name | Location | Type | Required | Description |
|---|---|---|---|---|
eventId |
Path | string |
✅ | Event Id or Instance id. For recurring appointments send masterEventId to modify original series. |
Request Body Schema
- title (string) (e.g.
Test Event): Title - calendarId (string) (required) (e.g.
CVokAlI8fgw4WYWoCtQz): Either calendarId or assignedUserId can be set, not both. - assignedUserId (string) (e.g.
CVokAlI8fgw4WYWoCtQz): Either calendarId or assignedUserId can be set, not both. - locationId (string) (required) (e.g.
C2QujeCh8ZnC7al2InWR): Location Id - startTime (string) (e.g.
2021-06-23T03:30:00+05:30): Start Time - endTime (string) (e.g.
2021-06-23T04:30:00+05:30): End Time
Response Codes
| Code | Description | Schema |
|---|---|---|
201 |
Successful response | - id (string) (required) (e.g. 0TkCdp9PfvLeWKYRRvIz): Id- locationId (string) (required) (e.g. C2QujeCh8ZnC7al2InWR): Location Id... |
400 |
Bad Request | Standard error response for bad requests (400). Contains message, statusCode fields. |
401 |
Unauthorized | Standard error response for unauthorized requests (401). Contains message, statusCode fields. |
⚠️ Special Notes & Quirks
⚠️ User-Agent Required: All GHL API requests require a
User-AgentHTTP header. Requests without it may be rejected with a 403 error.
DELETE /calendars/events/{eventId}
Summary: Delete Event
Delete event by ID
Version Header: 2021-04-15
Operation ID: delete-event
Tags: Calendar Events
cURL
curl -X DELETE 'https://rest.gohighlevel.com/v1/calendars/events/VALUE' \
-H 'Authorization: Bearer YOUR_API_TOKEN' \
-H 'Version: 2021-04-15' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'User-Agent: YourApp/1.0'
Python (http.client)
import http.client
import json
conn = http.client.HTTPSConnection('rest.gohighlevel.com')
headers = {
'Authorization': 'Bearer YOUR_API_TOKEN',
'Version': '2021-04-15',
'Content-Type': 'application/json',
'Accept': 'application/json',
'User-Agent': 'YourApp/1.0',
}
conn.request('DELETE', '/v1/calendars/events/VALUE', headers=headers)
response = conn.getresponse()
data = json.loads(response.read().decode())
print(json.dumps(data, indent=2))
conn.close()
n8n HTTP Node
{
"name": "GHL - DELETE VALUE",
"type": "n8n-nodes-base.httpRequest",
"parameters": {
"method": "DELETE",
"url": "https://rest.gohighlevel.com/v1/calendars/events/VALUE",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer YOUR_API_TOKEN"
},
{
"name": "Version",
"value": "2021-04-15"
},
{
"name": "Content-Type",
"value": "application/json"
},
{
"name": "Accept",
"value": "application/json"
},
{
"name": "User-Agent",
"value": "YourApp/1.0"
}
]
},
"sendBody": false,
"bodyParameters": {
"parameters": []
},
"options": {}
}
}
To use in n8n:
- Add an HTTP Request node
- Switch to JSON mode (Parameters → use RAW JSON)
- Paste the JSON above
- Update
YOUR_API_TOKENwith your actual GHL API key
Request Parameters
| Name | Location | Type | Required | Description |
|---|---|---|---|---|
eventId |
Path | string |
✅ | Event Id or Instance id. For recurring appointments send masterEventId to modify original series. |
Response Codes
| Code | Description | Schema |
|---|---|---|
201 |
Successful response | - succeeded (boolean) (e.g. True) |
400 |
Bad Request | Standard error response for bad requests (400). Contains message, statusCode fields. |
401 |
Unauthorized | Standard error response for unauthorized requests (401). Contains message, statusCode fields. |
⚠️ Special Notes & Quirks
⚠️ User-Agent Required: All GHL API requests require a
User-AgentHTTP header. Requests without it may be rejected with a 403 error.
GET /calendars/groups
Summary: Get Groups
Get all calendar groups in a location.
Version Header: 2021-04-15
Operation ID: get-groups
Tags: Calendar Groups
cURL
curl -X GET 'https://rest.gohighlevel.com/v1/calendars/groups?locationId=ve9EPM428h8vShlRW1KT' \
-H 'Authorization: Bearer YOUR_API_TOKEN' \
-H 'Version: 2021-04-15' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'User-Agent: YourApp/1.0'
Python (http.client)
import http.client
import json
conn = http.client.HTTPSConnection('rest.gohighlevel.com')
headers = {
'Authorization': 'Bearer YOUR_API_TOKEN',
'Version': '2021-04-15',
'Content-Type': 'application/json',
'Accept': 'application/json',
'User-Agent': 'YourApp/1.0',
}
conn.request('GET', '/v1/calendars/groups?locationId=ve9EPM428h8vShlRW1KT', headers=headers)
response = conn.getresponse()
data = json.loads(response.read().decode())
print(json.dumps(data, indent=2))
conn.close()
n8n HTTP Node
{
"name": "GHL - GET groups",
"type": "n8n-nodes-base.httpRequest",
"parameters": {
"method": "GET",
"url": "https://rest.gohighlevel.com/v1/calendars/groups",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer YOUR_API_TOKEN"
},
{
"name": "Version",
"value": "2021-04-15"
},
{
"name": "Content-Type",
"value": "application/json"
},
{
"name": "Accept",
"value": "application/json"
},
{
"name": "User-Agent",
"value": "YourApp/1.0"
}
]
},
"sendBody": false,
"bodyParameters": {
"parameters": []
},
"options": {},
"sendQuery": true,
"queryParameters": {
"parameters": [
{
"name": "locationId",
"value": "ve9EPM428h8vShlRW1KT"
}
]
}
}
}
To use in n8n:
- Add an HTTP Request node
- Switch to JSON mode (Parameters → use RAW JSON)
- Paste the JSON above
- Update
YOUR_API_TOKENwith your actual GHL API key
Request Parameters
| Name | Location | Type | Required | Description |
|---|---|---|---|---|
locationId |
Query | string |
✅ | Location Id [example: ve9EPM428h8vShlRW1KT] |
Response Codes
| Code | Description | Schema |
|---|---|---|
200 |
Successful response | - groups (array of GroupDTO) |
400 |
Bad Request | Standard error response for bad requests (400). Contains message, statusCode fields. |
401 |
Unauthorized | Standard error response for unauthorized requests (401). Contains message, statusCode fields. |
⚠️ Special Notes & Quirks
⚠️ User-Agent Required: All GHL API requests require a
User-AgentHTTP header. Requests without it may be rejected with a 403 error.
📌 Slug Validation: Use the
POST /calendars/groups/validate-slugendpoint before creating a group to ensure the slug is unique.
POST /calendars/groups
Summary: Create Calendar Group
Create Calendar Group
Version Header: 2021-04-15
Operation ID: create-calendar-group
Tags: Calendar Groups
cURL
curl -X POST 'https://rest.gohighlevel.com/v1/calendars/groups' \
-H 'Authorization: Bearer YOUR_API_TOKEN' \
-H 'Version: 2021-04-15' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'User-Agent: YourApp/1.0' \
-d '{}' # See request body schema below
Python (http.client)
import http.client
import json
conn = http.client.HTTPSConnection('rest.gohighlevel.com')
headers = {
'Authorization': 'Bearer YOUR_API_TOKEN',
'Version': '2021-04-15',
'Content-Type': 'application/json',
'Accept': 'application/json',
'User-Agent': 'YourApp/1.0',
}
payload = json.dumps({})
conn.request('POST', '/v1/calendars/groups', body=payload, headers=headers)
response = conn.getresponse()
data = json.loads(response.read().decode())
print(json.dumps(data, indent=2))
conn.close()
n8n HTTP Node
{
"name": "GHL - POST groups",
"type": "n8n-nodes-base.httpRequest",
"parameters": {
"method": "POST",
"url": "https://rest.gohighlevel.com/v1/calendars/groups",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer YOUR_API_TOKEN"
},
{
"name": "Version",
"value": "2021-04-15"
},
{
"name": "Content-Type",
"value": "application/json"
},
{
"name": "Accept",
"value": "application/json"
},
{
"name": "User-Agent",
"value": "YourApp/1.0"
}
]
},
"sendBody": true,
"bodyParameters": {
"parameters": []
},
"options": {}
}
}
To use in n8n:
- Add an HTTP Request node
- Switch to JSON mode (Parameters → use RAW JSON)
- Paste the JSON above
- Update
YOUR_API_TOKENwith your actual GHL API key
Request Body Schema
- locationId (string) (required) (e.g.
ocQHyuzHvysMo5N5VsXc) - name (string) (required) (e.g.
group a) - description (string) (required) (e.g.
group description) - slug (string) (required) (e.g.
15-mins) - isActive (boolean) (e.g.
True)
Response Codes
| Code | Description | Schema |
|---|---|---|
201 |
Successful response | - group (GroupDTO) |
400 |
Bad Request | Standard error response for bad requests (400). Contains message, statusCode fields. |
401 |
Unauthorized | Standard error response for unauthorized requests (401). Contains message, statusCode fields. |
⚠️ Special Notes & Quirks
⚠️ User-Agent Required: All GHL API requests require a
User-AgentHTTP header. Requests without it may be rejected with a 403 error.
📌 Slug Validation: Use the
POST /calendars/groups/validate-slugendpoint before creating a group to ensure the slug is unique.
POST /calendars/groups/validate-slug
Summary: Validate group slug
Validate if group slug is available or not.
Version Header: 2021-04-15
Operation ID: validate-groups-slug
Tags: Calendar Groups
cURL
curl -X POST 'https://rest.gohighlevel.com/v1/calendars/groups/validate-slug' \
-H 'Authorization: Bearer YOUR_API_TOKEN' \
-H 'Version: 2021-04-15' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'User-Agent: YourApp/1.0' \
-d '{}' # See request body schema below
Python (http.client)
import http.client
import json
conn = http.client.HTTPSConnection('rest.gohighlevel.com')
headers = {
'Authorization': 'Bearer YOUR_API_TOKEN',
'Version': '2021-04-15',
'Content-Type': 'application/json',
'Accept': 'application/json',
'User-Agent': 'YourApp/1.0',
}
payload = json.dumps({})
conn.request('POST', '/v1/calendars/groups/validate-slug', body=payload, headers=headers)
response = conn.getresponse()
data = json.loads(response.read().decode())
print(json.dumps(data, indent=2))
conn.close()
n8n HTTP Node
{
"name": "GHL - POST validate-slug",
"type": "n8n-nodes-base.httpRequest",
"parameters": {
"method": "POST",
"url": "https://rest.gohighlevel.com/v1/calendars/groups/validate-slug",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer YOUR_API_TOKEN"
},
{
"name": "Version",
"value": "2021-04-15"
},
{
"name": "Content-Type",
"value": "application/json"
},
{
"name": "Accept",
"value": "application/json"
},
{
"name": "User-Agent",
"value": "YourApp/1.0"
}
]
},
"sendBody": true,
"bodyParameters": {
"parameters": []
},
"options": {}
}
}
To use in n8n:
- Add an HTTP Request node
- Switch to JSON mode (Parameters → use RAW JSON)
- Paste the JSON above
- Update
YOUR_API_TOKENwith your actual GHL API key
Request Body Schema
- locationId (string) (required) (e.g.
ve9EPM428h8vShlRW1KT): Location Id - slug (string) (required) (e.g.
calendar-1): Slug
Response Codes
| Code | Description | Schema |
|---|---|---|
200 |
Successful response | - available (boolean) (required) |
400 |
Bad Request | Standard error response for bad requests (400). Contains message, statusCode fields. |
401 |
Unauthorized | Standard error response for unauthorized requests (401). Contains message, statusCode fields. |
⚠️ Special Notes & Quirks
⚠️ User-Agent Required: All GHL API requests require a
User-AgentHTTP header. Requests without it may be rejected with a 403 error.
📌 Slug Validation: Use the
POST /calendars/groups/validate-slugendpoint before creating a group to ensure the slug is unique.
DELETE /calendars/groups/{groupId}
Summary: Delete Group
Delete Group
Version Header: 2021-04-15
Operation ID: delete-group
Tags: Calendar Groups
cURL
curl -X DELETE 'https://rest.gohighlevel.com/v1/calendars/groups/ocQHyuzHvysMo5N5VsXc' \
-H 'Authorization: Bearer YOUR_API_TOKEN' \
-H 'Version: 2021-04-15' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'User-Agent: YourApp/1.0'
Python (http.client)
import http.client
import json
conn = http.client.HTTPSConnection('rest.gohighlevel.com')
headers = {
'Authorization': 'Bearer YOUR_API_TOKEN',
'Version': '2021-04-15',
'Content-Type': 'application/json',
'Accept': 'application/json',
'User-Agent': 'YourApp/1.0',
}
conn.request('DELETE', '/v1/calendars/groups/ocQHyuzHvysMo5N5VsXc', headers=headers)
response = conn.getresponse()
data = json.loads(response.read().decode())
print(json.dumps(data, indent=2))
conn.close()
n8n HTTP Node
{
"name": "GHL - DELETE ocQHyuzHvysMo5N5VsXc",
"type": "n8n-nodes-base.httpRequest",
"parameters": {
"method": "DELETE",
"url": "https://rest.gohighlevel.com/v1/calendars/groups/ocQHyuzHvysMo5N5VsXc",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer YOUR_API_TOKEN"
},
{
"name": "Version",
"value": "2021-04-15"
},
{
"name": "Content-Type",
"value": "application/json"
},
{
"name": "Accept",
"value": "application/json"
},
{
"name": "User-Agent",
"value": "YourApp/1.0"
}
]
},
"sendBody": false,
"bodyParameters": {
"parameters": []
},
"options": {}
}
}
To use in n8n:
- Add an HTTP Request node
- Switch to JSON mode (Parameters → use RAW JSON)
- Paste the JSON above
- Update
YOUR_API_TOKENwith your actual GHL API key
Request Parameters
| Name | Location | Type | Required | Description |
|---|---|---|---|---|
groupId |
Path | string |
✅ | Group Id [example: ocQHyuzHvysMo5N5VsXc] |
Response Codes
| Code | Description | Schema |
|---|---|---|
200 |
Successful response | - success (boolean) (e.g. true): Success |
400 |
Bad Request | Standard error response for bad requests (400). Contains message, statusCode fields. |
401 |
Unauthorized | Standard error response for unauthorized requests (401). Contains message, statusCode fields. |
⚠️ Special Notes & Quirks
⚠️ User-Agent Required: All GHL API requests require a
User-AgentHTTP header. Requests without it may be rejected with a 403 error.
📌 Slug Validation: Use the
POST /calendars/groups/validate-slugendpoint before creating a group to ensure the slug is unique.
PUT /calendars/groups/{groupId}
Summary: Update Group
Update Group by group ID
Version Header: 2021-04-15
Operation ID: edit-group
Tags: Calendar Groups
cURL
curl -X PUT 'https://rest.gohighlevel.com/v1/calendars/groups/ocQHyuzHvysMo5N5VsXc' \
-H 'Authorization: Bearer YOUR_API_TOKEN' \
-H 'Version: 2021-04-15' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'User-Agent: YourApp/1.0' \
-d '{}' # See request body schema below
Python (http.client)
import http.client
import json
conn = http.client.HTTPSConnection('rest.gohighlevel.com')
headers = {
'Authorization': 'Bearer YOUR_API_TOKEN',
'Version': '2021-04-15',
'Content-Type': 'application/json',
'Accept': 'application/json',
'User-Agent': 'YourApp/1.0',
}
payload = json.dumps({})
conn.request('PUT', '/v1/calendars/groups/ocQHyuzHvysMo5N5VsXc', body=payload, headers=headers)
response = conn.getresponse()
data = json.loads(response.read().decode())
print(json.dumps(data, indent=2))
conn.close()
n8n HTTP Node
{
"name": "GHL - PUT ocQHyuzHvysMo5N5VsXc",
"type": "n8n-nodes-base.httpRequest",
"parameters": {
"method": "PUT",
"url": "https://rest.gohighlevel.com/v1/calendars/groups/ocQHyuzHvysMo5N5VsXc",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer YOUR_API_TOKEN"
},
{
"name": "Version",
"value": "2021-04-15"
},
{
"name": "Content-Type",
"value": "application/json"
},
{
"name": "Accept",
"value": "application/json"
},
{
"name": "User-Agent",
"value": "YourApp/1.0"
}
]
},
"sendBody": true,
"bodyParameters": {
"parameters": []
},
"options": {}
}
}
To use in n8n:
- Add an HTTP Request node
- Switch to JSON mode (Parameters → use RAW JSON)
- Paste the JSON above
- Update
YOUR_API_TOKENwith your actual GHL API key
Request Parameters
| Name | Location | Type | Required | Description |
|---|---|---|---|---|
groupId |
Path | string |
✅ | Group Id [example: ocQHyuzHvysMo5N5VsXc] |
Request Body Schema
- name (string) (required) (e.g.
group a) - description (string) (required) (e.g.
group description) - slug (string) (required) (e.g.
15-mins)
Response Codes
| Code | Description | Schema |
|---|---|---|
200 |
Successful response | - group (GroupDTO) |
400 |
Bad Request | Standard error response for bad requests (400). Contains message, statusCode fields. |
401 |
Unauthorized | Standard error response for unauthorized requests (401). Contains message, statusCode fields. |
⚠️ Special Notes & Quirks
⚠️ User-Agent Required: All GHL API requests require a
User-AgentHTTP header. Requests without it may be rejected with a 403 error.
📌 Slug Validation: Use the
POST /calendars/groups/validate-slugendpoint before creating a group to ensure the slug is unique.
PUT /calendars/groups/{groupId}/status
Summary: Disable Group
Disable Group
Version Header: 2021-04-15
Operation ID: disable-group
Tags: Calendar Groups
cURL
curl -X PUT 'https://rest.gohighlevel.com/v1/calendars/groups/ocQHyuzHvysMo5N5VsXc/status' \
-H 'Authorization: Bearer YOUR_API_TOKEN' \
-H 'Version: 2021-04-15' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'User-Agent: YourApp/1.0' \
-d '{}' # See request body schema below
Python (http.client)
import http.client
import json
conn = http.client.HTTPSConnection('rest.gohighlevel.com')
headers = {
'Authorization': 'Bearer YOUR_API_TOKEN',
'Version': '2021-04-15',
'Content-Type': 'application/json',
'Accept': 'application/json',
'User-Agent': 'YourApp/1.0',
}
payload = json.dumps({})
conn.request('PUT', '/v1/calendars/groups/ocQHyuzHvysMo5N5VsXc/status', body=payload, headers=headers)
response = conn.getresponse()
data = json.loads(response.read().decode())
print(json.dumps(data, indent=2))
conn.close()
n8n HTTP Node
{
"name": "GHL - PUT status",
"type": "n8n-nodes-base.httpRequest",
"parameters": {
"method": "PUT",
"url": "https://rest.gohighlevel.com/v1/calendars/groups/ocQHyuzHvysMo5N5VsXc/status",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer YOUR_API_TOKEN"
},
{
"name": "Version",
"value": "2021-04-15"
},
{
"name": "Content-Type",
"value": "application/json"
},
{
"name": "Accept",
"value": "application/json"
},
{
"name": "User-Agent",
"value": "YourApp/1.0"
}
]
},
"sendBody": true,
"bodyParameters": {
"parameters": []
},
"options": {}
}
}
To use in n8n:
- Add an HTTP Request node
- Switch to JSON mode (Parameters → use RAW JSON)
- Paste the JSON above
- Update
YOUR_API_TOKENwith your actual GHL API key
Request Parameters
| Name | Location | Type | Required | Description |
|---|---|---|---|---|
groupId |
Path | string |
✅ | Group Id [example: ocQHyuzHvysMo5N5VsXc] |
Request Body Schema
- isActive (boolean) (required) (e.g.
True): Is Active?
Response Codes
| Code | Description | Schema |
|---|---|---|
200 |
Successful response | - success (boolean) (e.g. true): Success |
400 |
Bad Request | Standard error response for bad requests (400). Contains message, statusCode fields. |
401 |
Unauthorized | Standard error response for unauthorized requests (401). Contains message, statusCode fields. |
⚠️ Special Notes & Quirks
⚠️ User-Agent Required: All GHL API requests require a
User-AgentHTTP header. Requests without it may be rejected with a 403 error.
📌 Slug Validation: Use the
POST /calendars/groups/validate-slugendpoint before creating a group to ensure the slug is unique.
GET /calendars/resources/{resourceType}
Summary: List Calendar Resources
List calendar resources by resource type and location ID
Version Header: 2021-04-15
Operation ID: fetch-calendar-resources
Tags: Calendar Resources: Rooms & Equipments
cURL
curl -X GET 'https://rest.gohighlevel.com/v1/calendars/resources/VALUE?locationId=VALUE&limit=VALUE&skip=VALUE' \
-H 'Authorization: Bearer YOUR_API_TOKEN' \
-H 'Version: 2021-04-15' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'User-Agent: YourApp/1.0'
Python (http.client)
import http.client
import json
conn = http.client.HTTPSConnection('rest.gohighlevel.com')
headers = {
'Authorization': 'Bearer YOUR_API_TOKEN',
'Version': '2021-04-15',
'Content-Type': 'application/json',
'Accept': 'application/json',
'User-Agent': 'YourApp/1.0',
}
conn.request('GET', '/v1/calendars/resources/VALUE?locationId=VALUE&limit=VALUE&skip=VALUE', headers=headers)
response = conn.getresponse()
data = json.loads(response.read().decode())
print(json.dumps(data, indent=2))
conn.close()
n8n HTTP Node
{
"name": "GHL - GET VALUE",
"type": "n8n-nodes-base.httpRequest",
"parameters": {
"method": "GET",
"url": "https://rest.gohighlevel.com/v1/calendars/resources/VALUE",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer YOUR_API_TOKEN"
},
{
"name": "Version",
"value": "2021-04-15"
},
{
"name": "Content-Type",
"value": "application/json"
},
{
"name": "Accept",
"value": "application/json"
},
{
"name": "User-Agent",
"value": "YourApp/1.0"
}
]
},
"sendBody": false,
"bodyParameters": {
"parameters": []
},
"options": {},
"sendQuery": true,
"queryParameters": {
"parameters": [
{
"name": "locationId",
"value": "VALUE"
},
{
"name": "limit",
"value": "VALUE"
},
{
"name": "skip",
"value": "VALUE"
}
]
}
}
}
To use in n8n:
- Add an HTTP Request node
- Switch to JSON mode (Parameters → use RAW JSON)
- Paste the JSON above
- Update
YOUR_API_TOKENwith your actual GHL API key
Request Parameters
| Name | Location | Type | Required | Description |
|---|---|---|---|---|
resourceType |
Path | string |
✅ | Calendar Resource Type (values: equipments, rooms) |
locationId |
Query | string |
✅ | |
limit |
Query | number |
✅ | |
skip |
Query | number |
✅ |
Response Codes
| Code | Description | Schema |
|---|---|---|
200 |
Calendar resources listed | array of: - locationId (string) (required): Location ID of the resource - name (string) (required) (e.g. yoga room): Name of the reso... |
400 |
Bad Request | Standard error response for bad requests (400). Contains message, statusCode fields. |
401 |
Unauthorized | Standard error response for unauthorized requests (401). Contains message, statusCode fields. |
⚠️ Special Notes & Quirks
⚠️ User-Agent Required: All GHL API requests require a
User-AgentHTTP header. Requests without it may be rejected with a 403 error.
POST /calendars/resources/{resourceType}
Summary: Create Calendar Resource
Create calendar resource by resource type
Version Header: 2021-04-15
Operation ID: create-calendar-resource
Tags: Calendar Resources: Rooms & Equipments
cURL
curl -X POST 'https://rest.gohighlevel.com/v1/calendars/resources/VALUE' \
-H 'Authorization: Bearer YOUR_API_TOKEN' \
-H 'Version: 2021-04-15' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'User-Agent: YourApp/1.0' \
-d '{}' # See request body schema below
Python (http.client)
import http.client
import json
conn = http.client.HTTPSConnection('rest.gohighlevel.com')
headers = {
'Authorization': 'Bearer YOUR_API_TOKEN',
'Version': '2021-04-15',
'Content-Type': 'application/json',
'Accept': 'application/json',
'User-Agent': 'YourApp/1.0',
}
payload = json.dumps({})
conn.request('POST', '/v1/calendars/resources/VALUE', body=payload, headers=headers)
response = conn.getresponse()
data = json.loads(response.read().decode())
print(json.dumps(data, indent=2))
conn.close()
n8n HTTP Node
{
"name": "GHL - POST VALUE",
"type": "n8n-nodes-base.httpRequest",
"parameters": {
"method": "POST",
"url": "https://rest.gohighlevel.com/v1/calendars/resources/VALUE",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer YOUR_API_TOKEN"
},
{
"name": "Version",
"value": "2021-04-15"
},
{
"name": "Content-Type",
"value": "application/json"
},
{
"name": "Accept",
"value": "application/json"
},
{
"name": "User-Agent",
"value": "YourApp/1.0"
}
]
},
"sendBody": true,
"bodyParameters": {
"parameters": []
},
"options": {}
}
}
To use in n8n:
- Add an HTTP Request node
- Switch to JSON mode (Parameters → use RAW JSON)
- Paste the JSON above
- Update
YOUR_API_TOKENwith your actual GHL API key
Request Parameters
| Name | Location | Type | Required | Description |
|---|---|---|---|---|
resourceType |
Path | string |
✅ | Calendar Resource Type (values: equipments, rooms) |
Request Body Schema
-
locationId (string) (required)
-
name (string) (required)
-
description (string) (required)
-
quantity (number) (required): Quantity of the equipment.
-
outOfService (number) (required): Quantity of the out of service equipment.
-
capacity (number) (required): Capacity of the room.
-
calendarIds (array) (required): Service calendar IDs to be mapped with the resource.
One equipment can only be mapped with one service calendar.
One room can be mapped with multiple service calendars.
Response Codes
| Code | Description | Schema |
|---|---|---|
201 |
Calendar resource created | - locationId (string) (required): Location ID of the resource - name (string) (required) (e.g. yoga room): Name of the resource- *... |
400 |
Bad Request | Standard error response for bad requests (400). Contains message, statusCode fields. |
401 |
Unauthorized | Standard error response for unauthorized requests (401). Contains message, statusCode fields. |
⚠️ Special Notes & Quirks
⚠️ User-Agent Required: All GHL API requests require a
User-AgentHTTP header. Requests without it may be rejected with a 403 error.
DELETE /calendars/resources/{resourceType}/{id}
Summary: Delete Calendar Resource
Delete calendar resource by ID
Version Header: 2021-04-15
Operation ID: delete-calendar-resource
Tags: Calendar Resources: Rooms & Equipments
cURL
curl -X DELETE 'https://rest.gohighlevel.com/v1/calendars/resources/VALUE/VALUE' \
-H 'Authorization: Bearer YOUR_API_TOKEN' \
-H 'Version: 2021-04-15' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'User-Agent: YourApp/1.0'
Python (http.client)
import http.client
import json
conn = http.client.HTTPSConnection('rest.gohighlevel.com')
headers = {
'Authorization': 'Bearer YOUR_API_TOKEN',
'Version': '2021-04-15',
'Content-Type': 'application/json',
'Accept': 'application/json',
'User-Agent': 'YourApp/1.0',
}
conn.request('DELETE', '/v1/calendars/resources/VALUE/VALUE', headers=headers)
response = conn.getresponse()
data = json.loads(response.read().decode())
print(json.dumps(data, indent=2))
conn.close()
n8n HTTP Node
{
"name": "GHL - DELETE VALUE",
"type": "n8n-nodes-base.httpRequest",
"parameters": {
"method": "DELETE",
"url": "https://rest.gohighlevel.com/v1/calendars/resources/VALUE/VALUE",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer YOUR_API_TOKEN"
},
{
"name": "Version",
"value": "2021-04-15"
},
{
"name": "Content-Type",
"value": "application/json"
},
{
"name": "Accept",
"value": "application/json"
},
{
"name": "User-Agent",
"value": "YourApp/1.0"
}
]
},
"sendBody": false,
"bodyParameters": {
"parameters": []
},
"options": {}
}
}
To use in n8n:
- Add an HTTP Request node
- Switch to JSON mode (Parameters → use RAW JSON)
- Paste the JSON above
- Update
YOUR_API_TOKENwith your actual GHL API key
Request Parameters
| Name | Location | Type | Required | Description |
|---|---|---|---|---|
resourceType |
Path | string |
✅ | Calendar Resource Type (values: equipments, rooms) |
id |
Path | string |
✅ | Calendar Resource ID |
Response Codes
| Code | Description | Schema |
|---|---|---|
200 |
Calendar resource deleted | - success (boolean) (e.g. true): Success |
400 |
Bad Request | Standard error response for bad requests (400). Contains message, statusCode fields. |
401 |
Unauthorized | Standard error response for unauthorized requests (401). Contains message, statusCode fields. |
⚠️ Special Notes & Quirks
⚠️ User-Agent Required: All GHL API requests require a
User-AgentHTTP header. Requests without it may be rejected with a 403 error.
GET /calendars/resources/{resourceType}/{id}
Summary: Get Calendar Resource
Get calendar resource by ID
Version Header: 2021-04-15
Operation ID: get-calendar-resource
Tags: Calendar Resources: Rooms & Equipments
cURL
curl -X GET 'https://rest.gohighlevel.com/v1/calendars/resources/VALUE/VALUE' \
-H 'Authorization: Bearer YOUR_API_TOKEN' \
-H 'Version: 2021-04-15' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'User-Agent: YourApp/1.0'
Python (http.client)
import http.client
import json
conn = http.client.HTTPSConnection('rest.gohighlevel.com')
headers = {
'Authorization': 'Bearer YOUR_API_TOKEN',
'Version': '2021-04-15',
'Content-Type': 'application/json',
'Accept': 'application/json',
'User-Agent': 'YourApp/1.0',
}
conn.request('GET', '/v1/calendars/resources/VALUE/VALUE', headers=headers)
response = conn.getresponse()
data = json.loads(response.read().decode())
print(json.dumps(data, indent=2))
conn.close()
n8n HTTP Node
{
"name": "GHL - GET VALUE",
"type": "n8n-nodes-base.httpRequest",
"parameters": {
"method": "GET",
"url": "https://rest.gohighlevel.com/v1/calendars/resources/VALUE/VALUE",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer YOUR_API_TOKEN"
},
{
"name": "Version",
"value": "2021-04-15"
},
{
"name": "Content-Type",
"value": "application/json"
},
{
"name": "Accept",
"value": "application/json"
},
{
"name": "User-Agent",
"value": "YourApp/1.0"
}
]
},
"sendBody": false,
"bodyParameters": {
"parameters": []
},
"options": {}
}
}
To use in n8n:
- Add an HTTP Request node
- Switch to JSON mode (Parameters → use RAW JSON)
- Paste the JSON above
- Update
YOUR_API_TOKENwith your actual GHL API key
Request Parameters
| Name | Location | Type | Required | Description |
|---|---|---|---|---|
resourceType |
Path | string |
✅ | Calendar Resource Type (values: equipments, rooms) |
id |
Path | string |
✅ | Calendar Resource ID |
Response Codes
| Code | Description | Schema |
|---|---|---|
200 |
Calendar resource fetched | - locationId (string) (required): Location ID of the resource - name (string) (required) (e.g. yoga room): Name of the resource- *... |
400 |
Bad Request | Standard error response for bad requests (400). Contains message, statusCode fields. |
401 |
Unauthorized | Standard error response for unauthorized requests (401). Contains message, statusCode fields. |
⚠️ Special Notes & Quirks
⚠️ User-Agent Required: All GHL API requests require a
User-AgentHTTP header. Requests without it may be rejected with a 403 error.
PUT /calendars/resources/{resourceType}/{id}
Summary: Update Calendar Resource
Update calendar resource by ID
Version Header: 2021-04-15
Operation ID: update-calendar-resource
Tags: Calendar Resources: Rooms & Equipments
cURL
curl -X PUT 'https://rest.gohighlevel.com/v1/calendars/resources/VALUE/VALUE' \
-H 'Authorization: Bearer YOUR_API_TOKEN' \
-H 'Version: 2021-04-15' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'User-Agent: YourApp/1.0' \
-d '{}' # See request body schema below
Python (http.client)
import http.client
import json
conn = http.client.HTTPSConnection('rest.gohighlevel.com')
headers = {
'Authorization': 'Bearer YOUR_API_TOKEN',
'Version': '2021-04-15',
'Content-Type': 'application/json',
'Accept': 'application/json',
'User-Agent': 'YourApp/1.0',
}
payload = json.dumps({})
conn.request('PUT', '/v1/calendars/resources/VALUE/VALUE', body=payload, headers=headers)
response = conn.getresponse()
data = json.loads(response.read().decode())
print(json.dumps(data, indent=2))
conn.close()
n8n HTTP Node
{
"name": "GHL - PUT VALUE",
"type": "n8n-nodes-base.httpRequest",
"parameters": {
"method": "PUT",
"url": "https://rest.gohighlevel.com/v1/calendars/resources/VALUE/VALUE",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer YOUR_API_TOKEN"
},
{
"name": "Version",
"value": "2021-04-15"
},
{
"name": "Content-Type",
"value": "application/json"
},
{
"name": "Accept",
"value": "application/json"
},
{
"name": "User-Agent",
"value": "YourApp/1.0"
}
]
},
"sendBody": true,
"bodyParameters": {
"parameters": []
},
"options": {}
}
}
To use in n8n:
- Add an HTTP Request node
- Switch to JSON mode (Parameters → use RAW JSON)
- Paste the JSON above
- Update
YOUR_API_TOKENwith your actual GHL API key
Request Parameters
| Name | Location | Type | Required | Description |
|---|---|---|---|---|
resourceType |
Path | string |
✅ | Calendar Resource Type (values: equipments, rooms) |
id |
Path | string |
✅ | Calendar Resource ID |
Request Body Schema
-
locationId (string)
-
name (string)
-
description (string)
-
quantity (number): Quantity of the equipment.
-
outOfService (number): Quantity of the out of service equipment.
-
capacity (number): Capacity of the room.
-
calendarIds (array): Service calendar IDs to be mapped with the resource.
One equipment can only be mapped with one service calendar.
One room can be mapped with multiple service calendars.
- isActive (boolean)
Response Codes
| Code | Description | Schema |
|---|---|---|
200 |
Calendar resource updated | - locationId (string) (required): Location ID of the resource - name (string) (required) (e.g. yoga room): Name of the resource- *... |
400 |
Bad Request | Standard error response for bad requests (400). Contains message, statusCode fields. |
401 |
Unauthorized | Standard error response for unauthorized requests (401). Contains message, statusCode fields. |
⚠️ Special Notes & Quirks
⚠️ User-Agent Required: All GHL API requests require a
User-AgentHTTP header. Requests without it may be rejected with a 403 error.
POST /calendars/schedules
Summary: Create user availability schedule
Create new schedule with specified rules, timezone, location, user and calendar associations.
Version Header: 2021-04-15
Operation ID: createSchedule
Tags: Availability
cURL
curl -X POST 'https://rest.gohighlevel.com/v1/calendars/schedules' \
-H 'Authorization: Bearer YOUR_API_TOKEN' \
-H 'Version: 2021-04-15' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'User-Agent: YourApp/1.0' \
-d '{}' # See request body schema below
Python (http.client)
import http.client
import json
conn = http.client.HTTPSConnection('rest.gohighlevel.com')
headers = {
'Authorization': 'Bearer YOUR_API_TOKEN',
'Version': '2021-04-15',
'Content-Type': 'application/json',
'Accept': 'application/json',
'User-Agent': 'YourApp/1.0',
}
payload = json.dumps({})
conn.request('POST', '/v1/calendars/schedules', body=payload, headers=headers)
response = conn.getresponse()
data = json.loads(response.read().decode())
print(json.dumps(data, indent=2))
conn.close()
n8n HTTP Node
{
"name": "GHL - POST schedules",
"type": "n8n-nodes-base.httpRequest",
"parameters": {
"method": "POST",
"url": "https://rest.gohighlevel.com/v1/calendars/schedules",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer YOUR_API_TOKEN"
},
{
"name": "Version",
"value": "2021-04-15"
},
{
"name": "Content-Type",
"value": "application/json"
},
{
"name": "Accept",
"value": "application/json"
},
{
"name": "User-Agent",
"value": "YourApp/1.0"
}
]
},
"sendBody": true,
"bodyParameters": {
"parameters": []
},
"options": {}
}
}
To use in n8n:
- Add an HTTP Request node
- Switch to JSON mode (Parameters → use RAW JSON)
- Paste the JSON above
- Update
YOUR_API_TOKENwith your actual GHL API key
Request Body Schema
- rules (array of ScheduleRuleDTO) (e.g.
[{'type': 'wday', 'day': 'monday', 'intervals': [{'from': '09:00', 'to': '17:00'}]}]): Schedule rules defining when the schedule is active - timezone (string) (required) (e.g.
America/New_York): Timezone for the schedule (IANA timezone identifier) - locationId (string) (required) (e.g.
IkqiJlXJ7o9h61tCHHod): Location ID where this schedule applies - name (string) (required) (e.g.
Business Hours Schedule): Human-readable name for the schedule - userId (string) (required) (e.g.
IkqiJlXJ7o9h61tCHHod): User ID associated with the schedule - calendarIds (array) (e.g.
['WvVX9LpvlBO6K506xLbp', 'XyZ8MnQrStUvWxYzAbCdEf']): Calendar IDs associated with the schedule
Response Codes
| Code | Description | Schema |
|---|---|---|
201 |
Schedule created successfully | - schedule (string) (required): Schedule |
400 |
Invalid request parameters | Standard error response for bad requests (400). Contains message, statusCode fields. |
401 |
User not authenticated | Standard error response for unauthorized requests (401). Contains message, statusCode fields. |
422 |
Validation errors in schedule rules or conflicting data | Standard error response for unprocessable entity (422). Contains message, statusCode, errors array fields. |
⚠️ Special Notes & Quirks
⚠️ User-Agent Required: All GHL API requests require a
User-AgentHTTP header. Requests without it may be rejected with a 403 error.
GET /calendars/schedules/search
Summary: List user availability schedule
Retrieve user availability schedules based on various filters including location, calendar, and user. Supports pagination.
Version Header: 2021-04-15
Operation ID: getAllSchedules
Tags: Availability
cURL
curl -X GET 'https://rest.gohighlevel.com/v1/calendars/schedules/search?locationId=IkqiJlXJ7o9h61tCHHod&userId=IkqiJlXJ7o9h61tCHHod&calendarId=WvVX9LpvlBO6K506xLbp&skip=VALUE&limit=50' \
-H 'Authorization: Bearer YOUR_API_TOKEN' \
-H 'Version: 2021-04-15' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'User-Agent: YourApp/1.0'
Python (http.client)
import http.client
import json
conn = http.client.HTTPSConnection('rest.gohighlevel.com')
headers = {
'Authorization': 'Bearer YOUR_API_TOKEN',
'Version': '2021-04-15',
'Content-Type': 'application/json',
'Accept': 'application/json',
'User-Agent': 'YourApp/1.0',
}
conn.request('GET', '/v1/calendars/schedules/search?locationId=IkqiJlXJ7o9h61tCHHod&userId=IkqiJlXJ7o9h61tCHHod&calendarId=WvVX9LpvlBO6K506xLbp&skip=VALUE&limit=50', headers=headers)
response = conn.getresponse()
data = json.loads(response.read().decode())
print(json.dumps(data, indent=2))
conn.close()
n8n HTTP Node
{
"name": "GHL - GET search",
"type": "n8n-nodes-base.httpRequest",
"parameters": {
"method": "GET",
"url": "https://rest.gohighlevel.com/v1/calendars/schedules/search",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer YOUR_API_TOKEN"
},
{
"name": "Version",
"value": "2021-04-15"
},
{
"name": "Content-Type",
"value": "application/json"
},
{
"name": "Accept",
"value": "application/json"
},
{
"name": "User-Agent",
"value": "YourApp/1.0"
}
]
},
"sendBody": false,
"bodyParameters": {
"parameters": []
},
"options": {},
"sendQuery": true,
"queryParameters": {
"parameters": [
{
"name": "locationId",
"value": "IkqiJlXJ7o9h61tCHHod"
},
{
"name": "userId",
"value": "IkqiJlXJ7o9h61tCHHod"
},
{
"name": "calendarId",
"value": "WvVX9LpvlBO6K506xLbp"
},
{
"name": "skip",
"value": "VALUE"
},
{
"name": "limit",
"value": 50
}
]
}
}
}
To use in n8n:
- Add an HTTP Request node
- Switch to JSON mode (Parameters → use RAW JSON)
- Paste the JSON above
- Update
YOUR_API_TOKENwith your actual GHL API key
Request Parameters
| Name | Location | Type | Required | Description |
|---|---|---|---|---|
locationId |
Query | string |
✅ | Location ID to filter schedules by [example: IkqiJlXJ7o9h61tCHHod] |
userId |
Query | string |
✅ | User ID to filter schedules by specific user [example: IkqiJlXJ7o9h61tCHHod] |
calendarId |
Query | string |
— | Calendar ID for filtering schedules by specific calendar [example: WvVX9LpvlBO6K506xLbp] |
skip |
Query | number |
— | Number of items to skip for pagination |
limit |
Query | number |
— | Maximum number of items to return (max 500) [example: 50] |
Response Codes
| Code | Description | Schema |
|---|---|---|
200 |
Schedules retrieved successfully | - schedules (array of ScheduleObjectResponseDTO) (required): Array of schedules |
400 |
Invalid request parameters | Standard error response for bad requests (400). Contains message, statusCode fields. |
401 |
User not authenticated | Standard error response for unauthorized requests (401). Contains message, statusCode fields. |
⚠️ Special Notes & Quirks
⚠️ User-Agent Required: All GHL API requests require a
User-AgentHTTP header. Requests without it may be rejected with a 403 error.
DELETE /calendars/schedules/{id}
Summary: Delete user availability schedule
Permanently remove a schedule and all its associated rules. This action cannot be undone.
Version Header: 2021-04-15
Operation ID: deleteSchedule
Tags: Availability
cURL
curl -X DELETE 'https://rest.gohighlevel.com/v1/calendars/schedules/sch123def456ghi789' \
-H 'Authorization: Bearer YOUR_API_TOKEN' \
-H 'Version: 2021-04-15' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'User-Agent: YourApp/1.0'
Python (http.client)
import http.client
import json
conn = http.client.HTTPSConnection('rest.gohighlevel.com')
headers = {
'Authorization': 'Bearer YOUR_API_TOKEN',
'Version': '2021-04-15',
'Content-Type': 'application/json',
'Accept': 'application/json',
'User-Agent': 'YourApp/1.0',
}
conn.request('DELETE', '/v1/calendars/schedules/sch123def456ghi789', headers=headers)
response = conn.getresponse()
data = json.loads(response.read().decode())
print(json.dumps(data, indent=2))
conn.close()
n8n HTTP Node
{
"name": "GHL - DELETE sch123def456ghi789",
"type": "n8n-nodes-base.httpRequest",
"parameters": {
"method": "DELETE",
"url": "https://rest.gohighlevel.com/v1/calendars/schedules/sch123def456ghi789",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer YOUR_API_TOKEN"
},
{
"name": "Version",
"value": "2021-04-15"
},
{
"name": "Content-Type",
"value": "application/json"
},
{
"name": "Accept",
"value": "application/json"
},
{
"name": "User-Agent",
"value": "YourApp/1.0"
}
]
},
"sendBody": false,
"bodyParameters": {
"parameters": []
},
"options": {}
}
}
To use in n8n:
- Add an HTTP Request node
- Switch to JSON mode (Parameters → use RAW JSON)
- Paste the JSON above
- Update
YOUR_API_TOKENwith your actual GHL API key
Request Parameters
| Name | Location | Type | Required | Description |
|---|---|---|---|---|
id |
Path | string |
✅ | Unique identifier of the schedule to delete [example: sch123def456ghi789] |
Response Codes
| Code | Description | Schema |
|---|---|---|
200 |
Schedule deleted successfully | - success (boolean) (e.g. True): Whether the deletion was successful |
400 |
Invalid request parameters | Standard error response for bad requests (400). Contains message, statusCode fields. |
401 |
User not authenticated | Standard error response for unauthorized requests (401). Contains message, statusCode fields. |
404 |
Schedule with the specified ID was not found | — |
⚠️ Special Notes & Quirks
⚠️ User-Agent Required: All GHL API requests require a
User-AgentHTTP header. Requests without it may be rejected with a 403 error.
GET /calendars/schedules/{id}
Summary: Get user availability schedule
Retrieve a specific schedule by its unique identifier. Returns detailed information including rules, timezone, and associated calendars/users.
Version Header: 2021-04-15
Operation ID: getScheduleById
Tags: Availability
cURL
curl -X GET 'https://rest.gohighlevel.com/v1/calendars/schedules/IkqiJlXJ7o9h61tCHHod' \
-H 'Authorization: Bearer YOUR_API_TOKEN' \
-H 'Version: 2021-04-15' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'User-Agent: YourApp/1.0'
Python (http.client)
import http.client
import json
conn = http.client.HTTPSConnection('rest.gohighlevel.com')
headers = {
'Authorization': 'Bearer YOUR_API_TOKEN',
'Version': '2021-04-15',
'Content-Type': 'application/json',
'Accept': 'application/json',
'User-Agent': 'YourApp/1.0',
}
conn.request('GET', '/v1/calendars/schedules/IkqiJlXJ7o9h61tCHHod', headers=headers)
response = conn.getresponse()
data = json.loads(response.read().decode())
print(json.dumps(data, indent=2))
conn.close()
n8n HTTP Node
{
"name": "GHL - GET IkqiJlXJ7o9h61tCHHod",
"type": "n8n-nodes-base.httpRequest",
"parameters": {
"method": "GET",
"url": "https://rest.gohighlevel.com/v1/calendars/schedules/IkqiJlXJ7o9h61tCHHod",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer YOUR_API_TOKEN"
},
{
"name": "Version",
"value": "2021-04-15"
},
{
"name": "Content-Type",
"value": "application/json"
},
{
"name": "Accept",
"value": "application/json"
},
{
"name": "User-Agent",
"value": "YourApp/1.0"
}
]
},
"sendBody": false,
"bodyParameters": {
"parameters": []
},
"options": {}
}
}
To use in n8n:
- Add an HTTP Request node
- Switch to JSON mode (Parameters → use RAW JSON)
- Paste the JSON above
- Update
YOUR_API_TOKENwith your actual GHL API key
Request Parameters
| Name | Location | Type | Required | Description |
|---|---|---|---|---|
id |
Path | string |
✅ | Unique identifier of the schedule [example: IkqiJlXJ7o9h61tCHHod] |
Response Codes
| Code | Description | Schema |
|---|---|---|
200 |
Schedule found and retrieved successfully | - schedule (string) (required): Schedule |
400 |
Invalid request parameters | Standard error response for bad requests (400). Contains message, statusCode fields. |
401 |
User not authenticated | Standard error response for unauthorized requests (401). Contains message, statusCode fields. |
404 |
Schedule with the specified ID was not found | — |
⚠️ Special Notes & Quirks
⚠️ User-Agent Required: All GHL API requests require a
User-AgentHTTP header. Requests without it may be rejected with a 403 error.
PUT /calendars/schedules/{id}
Summary: Update user availability schedule
Modify an existing schedule by updating its rules, timezone, and name All fields are optional - only provided fields will be updated.
Version Header: 2021-04-15
Operation ID: updateSchedule
Tags: Availability
cURL
curl -X PUT 'https://rest.gohighlevel.com/v1/calendars/schedules/sch123def456ghi789' \
-H 'Authorization: Bearer YOUR_API_TOKEN' \
-H 'Version: 2021-04-15' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'User-Agent: YourApp/1.0' \
-d '{}' # See request body schema below
Python (http.client)
import http.client
import json
conn = http.client.HTTPSConnection('rest.gohighlevel.com')
headers = {
'Authorization': 'Bearer YOUR_API_TOKEN',
'Version': '2021-04-15',
'Content-Type': 'application/json',
'Accept': 'application/json',
'User-Agent': 'YourApp/1.0',
}
payload = json.dumps({})
conn.request('PUT', '/v1/calendars/schedules/sch123def456ghi789', body=payload, headers=headers)
response = conn.getresponse()
data = json.loads(response.read().decode())
print(json.dumps(data, indent=2))
conn.close()
n8n HTTP Node
{
"name": "GHL - PUT sch123def456ghi789",
"type": "n8n-nodes-base.httpRequest",
"parameters": {
"method": "PUT",
"url": "https://rest.gohighlevel.com/v1/calendars/schedules/sch123def456ghi789",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer YOUR_API_TOKEN"
},
{
"name": "Version",
"value": "2021-04-15"
},
{
"name": "Content-Type",
"value": "application/json"
},
{
"name": "Accept",
"value": "application/json"
},
{
"name": "User-Agent",
"value": "YourApp/1.0"
}
]
},
"sendBody": true,
"bodyParameters": {
"parameters": []
},
"options": {}
}
}
To use in n8n:
- Add an HTTP Request node
- Switch to JSON mode (Parameters → use RAW JSON)
- Paste the JSON above
- Update
YOUR_API_TOKENwith your actual GHL API key
Request Parameters
| Name | Location | Type | Required | Description |
|---|---|---|---|---|
id |
Path | string |
✅ | Unique identifier of the schedule to update [example: sch123def456ghi789] |
Request Body Schema
- name (string) (e.g.
Updated Business Hours): Human-readable name for the schedule - rules (array of ScheduleRuleDTO) (e.g.
[{'type': 'wday', 'day': 'monday', 'intervals': [{'from': '08:00', 'to': '18:00'}]}]): Updated schedule rules defining when the schedule is active - timezone (string) (e.g.
America/Los_Angeles): Updated timezone for the schedule (IANA timezone identifier)
Response Codes
| Code | Description | Schema |
|---|---|---|
200 |
Schedule updated successfully | - schedule (string) (required): Schedule |
400 |
Invalid request parameters | Standard error response for bad requests (400). Contains message, statusCode fields. |
401 |
User not authenticated | Standard error response for unauthorized requests (401). Contains message, statusCode fields. |
404 |
Schedule with the specified ID was not found | — |
422 |
Validation errors in schedule rules or conflicting data | Standard error response for unprocessable entity (422). Contains message, statusCode, errors array fields. |
⚠️ Special Notes & Quirks
⚠️ User-Agent Required: All GHL API requests require a
User-AgentHTTP header. Requests without it may be rejected with a 403 error.
DELETE /calendars/schedules/{id}/associations/{calendarId}
Summary: Remove user availability schedule from a calendar
Removes the association between a team calendar and the given schedule by removing the calendarId from the schedule
Version Header: 2021-04-15
Operation ID: remove-calendar-from-schedule
Tags: Availability
cURL
curl -X DELETE 'https://rest.gohighlevel.com/v1/calendars/schedules/IkqiJlXJ7o9h61tCHHod/associations/WvVX9LpvlBO6K506xLbp' \
-H 'Authorization: Bearer YOUR_API_TOKEN' \
-H 'Version: 2021-04-15' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'User-Agent: YourApp/1.0'
Python (http.client)
import http.client
import json
conn = http.client.HTTPSConnection('rest.gohighlevel.com')
headers = {
'Authorization': 'Bearer YOUR_API_TOKEN',
'Version': '2021-04-15',
'Content-Type': 'application/json',
'Accept': 'application/json',
'User-Agent': 'YourApp/1.0',
}
conn.request('DELETE', '/v1/calendars/schedules/IkqiJlXJ7o9h61tCHHod/associations/WvVX9LpvlBO6K506xLbp', headers=headers)
response = conn.getresponse()
data = json.loads(response.read().decode())
print(json.dumps(data, indent=2))
conn.close()
n8n HTTP Node
{
"name": "GHL - DELETE WvVX9LpvlBO6K506xLbp",
"type": "n8n-nodes-base.httpRequest",
"parameters": {
"method": "DELETE",
"url": "https://rest.gohighlevel.com/v1/calendars/schedules/IkqiJlXJ7o9h61tCHHod/associations/WvVX9LpvlBO6K506xLbp",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer YOUR_API_TOKEN"
},
{
"name": "Version",
"value": "2021-04-15"
},
{
"name": "Content-Type",
"value": "application/json"
},
{
"name": "Accept",
"value": "application/json"
},
{
"name": "User-Agent",
"value": "YourApp/1.0"
}
]
},
"sendBody": false,
"bodyParameters": {
"parameters": []
},
"options": {}
}
}
To use in n8n:
- Add an HTTP Request node
- Switch to JSON mode (Parameters → use RAW JSON)
- Paste the JSON above
- Update
YOUR_API_TOKENwith your actual GHL API key
Request Parameters
| Name | Location | Type | Required | Description |
|---|---|---|---|---|
id |
Path | string |
✅ | Unique identifier of the schedule [example: IkqiJlXJ7o9h61tCHHod] |
calendarId |
Path | string |
✅ | Unique identifier of the calendar to remove from the schedule [example: WvVX9LpvlBO6K506xLbp] |
Response Codes
| Code | Description | Schema |
|---|---|---|
200 |
Calendar successfully removed from schedule | - success (boolean) (e.g. True) |
400 |
Schedule and calendar must belong to the same location | Standard error response for bad requests (400). Contains message, statusCode fields. |
401 |
User not authenticated | Standard error response for unauthorized requests (401). Contains message, statusCode fields. |
404 |
Schedule or calendar not found | Standard error response for bad requests (400). Contains message, statusCode fields. |
⚠️ Special Notes & Quirks
⚠️ User-Agent Required: All GHL API requests require a
User-AgentHTTP header. Requests without it may be rejected with a 403 error.
PUT /calendars/schedules/{id}/associations/{calendarId}
Summary: Apply user availability schedule to a calendar
Associates a calendar with the given schedule by adding the calendarId to a schedule
Version Header: 2021-04-15
Operation ID: add-calendar-to-schedule
Tags: Availability
cURL
curl -X PUT 'https://rest.gohighlevel.com/v1/calendars/schedules/IkqiJlXJ7o9h61tCHHod/associations/WvVX9LpvlBO6K506xLbp' \
-H 'Authorization: Bearer YOUR_API_TOKEN' \
-H 'Version: 2021-04-15' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'User-Agent: YourApp/1.0'
Python (http.client)
import http.client
import json
conn = http.client.HTTPSConnection('rest.gohighlevel.com')
headers = {
'Authorization': 'Bearer YOUR_API_TOKEN',
'Version': '2021-04-15',
'Content-Type': 'application/json',
'Accept': 'application/json',
'User-Agent': 'YourApp/1.0',
}
conn.request('PUT', '/v1/calendars/schedules/IkqiJlXJ7o9h61tCHHod/associations/WvVX9LpvlBO6K506xLbp', headers=headers)
response = conn.getresponse()
data = json.loads(response.read().decode())
print(json.dumps(data, indent=2))
conn.close()
n8n HTTP Node
{
"name": "GHL - PUT WvVX9LpvlBO6K506xLbp",
"type": "n8n-nodes-base.httpRequest",
"parameters": {
"method": "PUT",
"url": "https://rest.gohighlevel.com/v1/calendars/schedules/IkqiJlXJ7o9h61tCHHod/associations/WvVX9LpvlBO6K506xLbp",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer YOUR_API_TOKEN"
},
{
"name": "Version",
"value": "2021-04-15"
},
{
"name": "Content-Type",
"value": "application/json"
},
{
"name": "Accept",
"value": "application/json"
},
{
"name": "User-Agent",
"value": "YourApp/1.0"
}
]
},
"sendBody": true,
"bodyParameters": {
"parameters": []
},
"options": {}
}
}
To use in n8n:
- Add an HTTP Request node
- Switch to JSON mode (Parameters → use RAW JSON)
- Paste the JSON above
- Update
YOUR_API_TOKENwith your actual GHL API key
Request Parameters
| Name | Location | Type | Required | Description |
|---|---|---|---|---|
id |
Path | string |
✅ | Unique identifier of the schedule [example: IkqiJlXJ7o9h61tCHHod] |
calendarId |
Path | string |
✅ | Unique identifier of the team calendar to add to the schedule [example: WvVX9LpvlBO6K506xLbp] |
Response Codes
| Code | Description | Schema |
|---|---|---|
200 |
Calendar successfully added to schedule | - success (boolean) (e.g. True) |
400 |
Schedule and calendar must belong to the same location | Standard error response for bad requests (400). Contains message, statusCode fields. |
401 |
User not authenticated | Standard error response for unauthorized requests (401). Contains message, statusCode fields. |
404 |
Schedule or calendar not found | Standard error response for bad requests (400). Contains message, statusCode fields. |
⚠️ Special Notes & Quirks
⚠️ User-Agent Required: All GHL API requests require a
User-AgentHTTP header. Requests without it may be rejected with a 403 error.
DELETE /calendars/{calendarId}
Summary: Delete Calendar
Delete calendar by ID
Version Header: 2021-04-15
Operation ID: delete-calendar
Tags: Calendars
cURL
curl -X DELETE 'https://rest.gohighlevel.com/v1/calendars/ocQHyuzHvysMo5N5VsXc' \
-H 'Authorization: Bearer YOUR_API_TOKEN' \
-H 'Version: 2021-04-15' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'User-Agent: YourApp/1.0'
Python (http.client)
import http.client
import json
conn = http.client.HTTPSConnection('rest.gohighlevel.com')
headers = {
'Authorization': 'Bearer YOUR_API_TOKEN',
'Version': '2021-04-15',
'Content-Type': 'application/json',
'Accept': 'application/json',
'User-Agent': 'YourApp/1.0',
}
conn.request('DELETE', '/v1/calendars/ocQHyuzHvysMo5N5VsXc', headers=headers)
response = conn.getresponse()
data = json.loads(response.read().decode())
print(json.dumps(data, indent=2))
conn.close()
n8n HTTP Node
{
"name": "GHL - DELETE ocQHyuzHvysMo5N5VsXc",
"type": "n8n-nodes-base.httpRequest",
"parameters": {
"method": "DELETE",
"url": "https://rest.gohighlevel.com/v1/calendars/ocQHyuzHvysMo5N5VsXc",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer YOUR_API_TOKEN"
},
{
"name": "Version",
"value": "2021-04-15"
},
{
"name": "Content-Type",
"value": "application/json"
},
{
"name": "Accept",
"value": "application/json"
},
{
"name": "User-Agent",
"value": "YourApp/1.0"
}
]
},
"sendBody": false,
"bodyParameters": {
"parameters": []
},
"options": {}
}
}
To use in n8n:
- Add an HTTP Request node
- Switch to JSON mode (Parameters → use RAW JSON)
- Paste the JSON above
- Update
YOUR_API_TOKENwith your actual GHL API key
Request Parameters
| Name | Location | Type | Required | Description |
|---|---|---|---|---|
calendarId |
Path | string |
✅ | Calendar Id [example: ocQHyuzHvysMo5N5VsXc] |
Response Codes
| Code | Description | Schema |
|---|---|---|
200 |
Successful response | - success (boolean) (required) (e.g. true): Success |
400 |
Bad Request | Standard error response for bad requests (400). Contains message, statusCode fields. |
401 |
Unauthorized | Standard error response for unauthorized requests (401). Contains message, statusCode fields. |
⚠️ Special Notes & Quirks
⚠️ User-Agent Required: All GHL API requests require a
User-AgentHTTP header. Requests without it may be rejected with a 403 error.
GET /calendars/{calendarId}
Summary: Get Calendar
Get calendar by ID
Version Header: 2021-04-15
Operation ID: get-calendar
Tags: Calendars
cURL
curl -X GET 'https://rest.gohighlevel.com/v1/calendars/ocQHyuzHvysMo5N5VsXc' \
-H 'Authorization: Bearer YOUR_API_TOKEN' \
-H 'Version: 2021-04-15' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'User-Agent: YourApp/1.0'
Python (http.client)
import http.client
import json
conn = http.client.HTTPSConnection('rest.gohighlevel.com')
headers = {
'Authorization': 'Bearer YOUR_API_TOKEN',
'Version': '2021-04-15',
'Content-Type': 'application/json',
'Accept': 'application/json',
'User-Agent': 'YourApp/1.0',
}
conn.request('GET', '/v1/calendars/ocQHyuzHvysMo5N5VsXc', headers=headers)
response = conn.getresponse()
data = json.loads(response.read().decode())
print(json.dumps(data, indent=2))
conn.close()
n8n HTTP Node
{
"name": "GHL - GET ocQHyuzHvysMo5N5VsXc",
"type": "n8n-nodes-base.httpRequest",
"parameters": {
"method": "GET",
"url": "https://rest.gohighlevel.com/v1/calendars/ocQHyuzHvysMo5N5VsXc",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer YOUR_API_TOKEN"
},
{
"name": "Version",
"value": "2021-04-15"
},
{
"name": "Content-Type",
"value": "application/json"
},
{
"name": "Accept",
"value": "application/json"
},
{
"name": "User-Agent",
"value": "YourApp/1.0"
}
]
},
"sendBody": false,
"bodyParameters": {
"parameters": []
},
"options": {}
}
}
To use in n8n:
- Add an HTTP Request node
- Switch to JSON mode (Parameters → use RAW JSON)
- Paste the JSON above
- Update
YOUR_API_TOKENwith your actual GHL API key
Request Parameters
| Name | Location | Type | Required | Description |
|---|---|---|---|---|
calendarId |
Path | string |
✅ | Calendar Id [example: ocQHyuzHvysMo5N5VsXc] |
Response Codes
| Code | Description | Schema |
|---|---|---|
200 |
Successful response | - calendar (CalendarDTO) (required) |
400 |
Bad Request | Standard error response for bad requests (400). Contains message, statusCode fields. |
401 |
Unauthorized | Standard error response for unauthorized requests (401). Contains message, statusCode fields. |
⚠️ Special Notes & Quirks
⚠️ User-Agent Required: All GHL API requests require a
User-AgentHTTP header. Requests without it may be rejected with a 403 error.
PUT /calendars/{calendarId}
Summary: Update Calendar
Update calendar by ID.
Version Header: 2021-04-15
Operation ID: update-calendar
Tags: Calendars
cURL
curl -X PUT 'https://rest.gohighlevel.com/v1/calendars/ocQHyuzHvysMo5N5VsXc' \
-H 'Authorization: Bearer YOUR_API_TOKEN' \
-H 'Version: 2021-04-15' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'User-Agent: YourApp/1.0' \
-d '{}' # See request body schema below
Python (http.client)
import http.client
import json
conn = http.client.HTTPSConnection('rest.gohighlevel.com')
headers = {
'Authorization': 'Bearer YOUR_API_TOKEN',
'Version': '2021-04-15',
'Content-Type': 'application/json',
'Accept': 'application/json',
'User-Agent': 'YourApp/1.0',
}
payload = json.dumps({})
conn.request('PUT', '/v1/calendars/ocQHyuzHvysMo5N5VsXc', body=payload, headers=headers)
response = conn.getresponse()
data = json.loads(response.read().decode())
print(json.dumps(data, indent=2))
conn.close()
n8n HTTP Node
{
"name": "GHL - PUT ocQHyuzHvysMo5N5VsXc",
"type": "n8n-nodes-base.httpRequest",
"parameters": {
"method": "PUT",
"url": "https://rest.gohighlevel.com/v1/calendars/ocQHyuzHvysMo5N5VsXc",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer YOUR_API_TOKEN"
},
{
"name": "Version",
"value": "2021-04-15"
},
{
"name": "Content-Type",
"value": "application/json"
},
{
"name": "Accept",
"value": "application/json"
},
{
"name": "User-Agent",
"value": "YourApp/1.0"
}
]
},
"sendBody": true,
"bodyParameters": {
"parameters": []
},
"options": {}
}
}
To use in n8n:
- Add an HTTP Request node
- Switch to JSON mode (Parameters → use RAW JSON)
- Paste the JSON above
- Update
YOUR_API_TOKENwith your actual GHL API key
Request Parameters
| Name | Location | Type | Required | Description |
|---|---|---|---|---|
calendarId |
Path | string |
✅ | Calendar Id [example: ocQHyuzHvysMo5N5VsXc] |
Request Body Schema
- notifications (array of CalendarNotification): 🚨 Deprecated! Please use 'Calendar Notifications APIs' instead.
- groupId (string) (e.g.
BqTwX8QFwXzpegMve9EQ): Group Id - teamMembers (array of TeamMember): Team members are required for calendars of type: Round Robin, Collective, Class, Service. Personal calendar must have exactly one team member.
- eventType (string)
- name (string) (e.g.
test calendar) - description (string) (e.g.
this is used for testing) - slug (string) (e.g.
test1) - widgetSlug (string) (e.g.
test1) - widgetType (string) (e.g.
classic): Calendar widget type. Choose "default" for "neo" and "classic" for "classic" layout. - eventTitle (string)
- eventColor (string)
- locationConfigurations (array of LocationConfiguration): Meeting location configuration for event calendar
- meetingLocation (string): 🚨 Deprecated! Use
locationConfigurations.locationorteamMembers[].locationConfigurations.locationinstead. - slotDuration (number): This controls the duration of the meeting
- slotDurationUnit (string): Unit for slot duration.
- preBufferUnit (string): Unit for pre-buffer.
- slotInterval (number): Slot interval reflects the amount of time the between booking slots that will be shown in the calendar.
- slotIntervalUnit (string): Unit for slot interval.
- slotBuffer (number): Slot-Buffer is additional time that can be added after an appointment, allowing for extra time to wrap up
- preBuffer (number): Pre-Buffer is additional time that can be added before an appointment, allowing for extra time to get ready
- appoinmentPerSlot (number)
- appoinmentPerDay (number): Number of appointments that can be booked for a given day
- allowBookingAfter (number): Minimum scheduling notice for events
- allowBookingAfterUnit (string) (e.g.
days): Unit for minimum scheduling notice - allowBookingFor (number): Minimum number of days/weeks/months for which to allow booking events
- allowBookingForUnit (string) (e.g.
days): Unit for controlling the duration for which booking would be allowed for - openHours (array of OpenHour)
- enableRecurring (boolean): Enable recurring appointments for the calendars. Please note that only one member should be added in the calendar to enable this
- recurring (Recurring)
- formId (string)
- stickyContact (boolean)
- isLivePaymentMode (boolean)
- autoConfirm (boolean)
- shouldSendAlertEmailsToAssignedMember (boolean)
- alertEmail (string)
- googleInvitationEmails (boolean)
- allowReschedule (boolean)
- allowCancellation (boolean)
- shouldAssignContactToTeamMember (boolean)
- shouldSkipAssigningContactForExisting (boolean)
- notes (string)
- pixelId (string)
- formSubmitType (string)
- formSubmitRedirectURL (string)
- formSubmitThanksMessage (string)
- availabilityType (number): Determines which availability type to consider:
- 1: Only custom availabilities will be used.
- 0: Only open hours will be used.
- null: Both the custom availabilities and open hours will be considered.
- availabilities (array of UpdateAvailability): This is only to set the custom availability. For standard availability, use the openHours property
- guestType (string)
- consentLabel (string)
- calendarCoverImage (string)
- lookBusyConfig (string): Look Busy Configuration
- isActive (boolean)
Response Codes
| Code | Description | Schema |
|---|---|---|
200 |
Successful response | - calendar (CalendarDTO) (required) |
400 |
Bad Request | Standard error response for bad requests (400). Contains message, statusCode fields. |
401 |
Unauthorized | Standard error response for unauthorized requests (401). Contains message, statusCode fields. |
⚠️ Special Notes & Quirks
⚠️ User-Agent Required: All GHL API requests require a
User-AgentHTTP header. Requests without it may be rejected with a 403 error.
GET /calendars/{calendarId}/free-slots
Summary: Get Free Slots
Get free slots for a calendar between a date range. Optionally a consumer can also request free slots in a particular timezone and also for a particular user.
Version Header: 2021-04-15
Operation ID: get-slots
Tags: Calendars
cURL
curl -X GET 'https://rest.gohighlevel.com/v1/calendars/ocQHyuzHvysMo5N5VsXc/free-slots?startDate=1548898600000&endDate=1601490599999&timezone=America/Chihuahua&userId=082goXVW3lIExEQPOnd3&userIds=VALUE' \
-H 'Authorization: Bearer YOUR_API_TOKEN' \
-H 'Version: 2021-04-15' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'User-Agent: YourApp/1.0'
Python (http.client)
import http.client
import json
conn = http.client.HTTPSConnection('rest.gohighlevel.com')
headers = {
'Authorization': 'Bearer YOUR_API_TOKEN',
'Version': '2021-04-15',
'Content-Type': 'application/json',
'Accept': 'application/json',
'User-Agent': 'YourApp/1.0',
}
conn.request('GET', '/v1/calendars/ocQHyuzHvysMo5N5VsXc/free-slots?startDate=1548898600000&endDate=1601490599999&timezone=America/Chihuahua&userId=082goXVW3lIExEQPOnd3&userIds=VALUE', headers=headers)
response = conn.getresponse()
data = json.loads(response.read().decode())
print(json.dumps(data, indent=2))
conn.close()
n8n HTTP Node
{
"name": "GHL - GET free-slots",
"type": "n8n-nodes-base.httpRequest",
"parameters": {
"method": "GET",
"url": "https://rest.gohighlevel.com/v1/calendars/ocQHyuzHvysMo5N5VsXc/free-slots",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer YOUR_API_TOKEN"
},
{
"name": "Version",
"value": "2021-04-15"
},
{
"name": "Content-Type",
"value": "application/json"
},
{
"name": "Accept",
"value": "application/json"
},
{
"name": "User-Agent",
"value": "YourApp/1.0"
}
]
},
"sendBody": false,
"bodyParameters": {
"parameters": []
},
"options": {},
"sendQuery": true,
"queryParameters": {
"parameters": [
{
"name": "startDate",
"value": 1548898600000
},
{
"name": "endDate",
"value": 1601490599999
},
{
"name": "timezone",
"value": "America/Chihuahua"
},
{
"name": "userId",
"value": "082goXVW3lIExEQPOnd3"
},
{
"name": "userIds",
"value": "VALUE"
}
]
}
}
}
To use in n8n:
- Add an HTTP Request node
- Switch to JSON mode (Parameters → use RAW JSON)
- Paste the JSON above
- Update
YOUR_API_TOKENwith your actual GHL API key
Request Parameters
| Name | Location | Type | Required | Description |
|---|---|---|---|---|
calendarId |
Path | string |
✅ | Calendar Id [example: ocQHyuzHvysMo5N5VsXc] |
startDate |
Query | number |
✅ | Start Date (⚠️ Important: Date range cannot be more than 31 days) [example: 1548898600000] |
endDate |
Query | number |
✅ | End Date (⚠️ Important: Date range cannot be more than 31 days) [example: 1601490599999] |
timezone |
Query | string |
— | The timezone in which the free slots are returned [example: America/Chihuahua] |
userId |
Query | string |
— | The user for whom the free slots are returned [example: 082goXVW3lIExEQPOnd3] |
userIds |
Query | array |
— | The users for whom the free slots are returned |
Response Codes
| Code | Description | Schema |
|---|---|---|
200 |
Availability map keyed by date (YYYY-MM-DD) | object — no documented properties |
400 |
Bad Request | Standard error response for bad requests (400). Contains message, statusCode fields. |
401 |
Unauthorized | Standard error response for unauthorized requests (401). Contains message, statusCode fields. |
⚠️ Special Notes & Quirks
⚠️ User-Agent Required: All GHL API requests require a
User-AgentHTTP header. Requests without it may be rejected with a 403 error.
GET /calendars/{calendarId}/notifications
Summary: Get notifications
Get calendar notifications based on query
Version Header: 2021-04-15
Operation ID: get-event-notification
Tags: Calendar Notifications
cURL
curl -X GET 'https://rest.gohighlevel.com/v1/calendars/VALUE/notifications?isActive=VALUE&deleted=VALUE&limit=VALUE&skip=VALUE' \
-H 'Authorization: Bearer YOUR_API_TOKEN' \
-H 'Version: 2021-04-15' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'User-Agent: YourApp/1.0'
Python (http.client)
import http.client
import json
conn = http.client.HTTPSConnection('rest.gohighlevel.com')
headers = {
'Authorization': 'Bearer YOUR_API_TOKEN',
'Version': '2021-04-15',
'Content-Type': 'application/json',
'Accept': 'application/json',
'User-Agent': 'YourApp/1.0',
}
conn.request('GET', '/v1/calendars/VALUE/notifications?isActive=VALUE&deleted=VALUE&limit=VALUE&skip=VALUE', headers=headers)
response = conn.getresponse()
data = json.loads(response.read().decode())
print(json.dumps(data, indent=2))
conn.close()
n8n HTTP Node
{
"name": "GHL - GET notifications",
"type": "n8n-nodes-base.httpRequest",
"parameters": {
"method": "GET",
"url": "https://rest.gohighlevel.com/v1/calendars/VALUE/notifications",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer YOUR_API_TOKEN"
},
{
"name": "Version",
"value": "2021-04-15"
},
{
"name": "Content-Type",
"value": "application/json"
},
{
"name": "Accept",
"value": "application/json"
},
{
"name": "User-Agent",
"value": "YourApp/1.0"
}
]
},
"sendBody": false,
"bodyParameters": {
"parameters": []
},
"options": {},
"sendQuery": true,
"queryParameters": {
"parameters": [
{
"name": "isActive",
"value": "VALUE"
},
{
"name": "deleted",
"value": "VALUE"
},
{
"name": "limit",
"value": "VALUE"
},
{
"name": "skip",
"value": "VALUE"
}
]
}
}
}
To use in n8n:
- Add an HTTP Request node
- Switch to JSON mode (Parameters → use RAW JSON)
- Paste the JSON above
- Update
YOUR_API_TOKENwith your actual GHL API key
Request Parameters
| Name | Location | Type | Required | Description |
|---|---|---|---|---|
calendarId |
Path | string |
✅ | |
isActive |
Query | boolean |
— | |
deleted |
Query | boolean |
— | |
limit |
Query | number |
— | Number of records to return |
skip |
Query | number |
— | Number of records to skip |
Response Codes
| Code | Description | Schema |
|---|---|---|
200 |
Successful response | array of: - _id (string): Notification ID - receiverType (string) (e.g. contact)- additionalEmailIds (array) (e.g. `['example1... |
400 |
Bad Request | Standard error response for bad requests (400). Contains message, statusCode fields. |
401 |
Unauthorized | Standard error response for unauthorized requests (401). Contains message, statusCode fields. |
⚠️ Special Notes & Quirks
⚠️ User-Agent Required: All GHL API requests require a
User-AgentHTTP header. Requests without it may be rejected with a 403 error.
POST /calendars/{calendarId}/notifications
Summary: Create notification
Create Calendar notifications, either one or multiple. All notification settings must be for single calendar only
Version Header: 2021-04-15
Operation ID: create-event-notification
Tags: Calendar Notifications
cURL
curl -X POST 'https://rest.gohighlevel.com/v1/calendars/VALUE/notifications' \
-H 'Authorization: Bearer YOUR_API_TOKEN' \
-H 'Version: 2021-04-15' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'User-Agent: YourApp/1.0' \
-d '{}' # See request body schema below
Python (http.client)
import http.client
import json
conn = http.client.HTTPSConnection('rest.gohighlevel.com')
headers = {
'Authorization': 'Bearer YOUR_API_TOKEN',
'Version': '2021-04-15',
'Content-Type': 'application/json',
'Accept': 'application/json',
'User-Agent': 'YourApp/1.0',
}
payload = json.dumps({})
conn.request('POST', '/v1/calendars/VALUE/notifications', body=payload, headers=headers)
response = conn.getresponse()
data = json.loads(response.read().decode())
print(json.dumps(data, indent=2))
conn.close()
n8n HTTP Node
{
"name": "GHL - POST notifications",
"type": "n8n-nodes-base.httpRequest",
"parameters": {
"method": "POST",
"url": "https://rest.gohighlevel.com/v1/calendars/VALUE/notifications",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer YOUR_API_TOKEN"
},
{
"name": "Version",
"value": "2021-04-15"
},
{
"name": "Content-Type",
"value": "application/json"
},
{
"name": "Accept",
"value": "application/json"
},
{
"name": "User-Agent",
"value": "YourApp/1.0"
}
]
},
"sendBody": true,
"bodyParameters": {
"parameters": []
},
"options": {}
}
}
To use in n8n:
- Add an HTTP Request node
- Switch to JSON mode (Parameters → use RAW JSON)
- Paste the JSON above
- Update
YOUR_API_TOKENwith your actual GHL API key
Request Parameters
| Name | Location | Type | Required | Description |
|---|---|---|---|---|
calendarId |
Path | string |
✅ |
Request Body Schema
array of:
- receiverType (string) (required): notification recipient type
- channel (string) (required): Notification channel
- notificationType (string) (required): Notification type
- isActive (boolean): Is the notification active
- templateId (string): Template ID for email notification. Not necessary for in-App notification
- body (string): Body for email notification. Not necessary for in-App notification
- subject (string): Subject for email notification. Not necessary for in-App notification
- afterTime (array of SchedulesDTO) (e.g.
[{'timeOffset': 1, 'unit': 'hours'}]): Specifies the time after which the follow-up notification should be sent. This is not required for other notification types. - beforeTime (array of SchedulesDTO) (e.g.
[{'timeOffset': 1, 'unit': 'hours'}]): Specifies the time before which the reminder notification should be sent. This is not required for other notification types. - additionalEmailIds (array) (e.g.
['example1@email.com', 'example2@email.com']): Additional email addresses to receive notifications. - additionalPhoneNumbers (array) (e.g.
['+919876744444', '+919876744445']): Additional phone numbers to receive notifications. - selectedUsers (array) (e.g.
['userId1', 'userId2', 'sub_account_admin']): Selected users for in-App and business email notifications. Supports user IDs and special keyword "sub_account_admin" - fromAddress (string): from address for email notification
- fromName (string): from name for email/sms notification
- fromNumber (string): from number for sms notification
Response Codes
| Code | Description | Schema |
|---|---|---|
200 |
Successful response | array of: - _id (string): Notification ID - receiverType (string) (e.g. contact)- additionalEmailIds (array) (e.g. `['example1... |
400 |
Bad Request | Standard error response for bad requests (400). Contains message, statusCode fields. |
401 |
Unauthorized | Standard error response for unauthorized requests (401). Contains message, statusCode fields. |
⚠️ Special Notes & Quirks
⚠️ User-Agent Required: All GHL API requests require a
User-AgentHTTP header. Requests without it may be rejected with a 403 error.
DELETE /calendars/{calendarId}/notifications/{notificationId}
Summary: Delete Notification
Delete notification
Version Header: 2021-04-15
Operation ID: delete-event-notification
Tags: Calendar Notifications
cURL
curl -X DELETE 'https://rest.gohighlevel.com/v1/calendars/VALUE/notifications/VALUE' \
-H 'Authorization: Bearer YOUR_API_TOKEN' \
-H 'Version: 2021-04-15' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'User-Agent: YourApp/1.0'
Python (http.client)
import http.client
import json
conn = http.client.HTTPSConnection('rest.gohighlevel.com')
headers = {
'Authorization': 'Bearer YOUR_API_TOKEN',
'Version': '2021-04-15',
'Content-Type': 'application/json',
'Accept': 'application/json',
'User-Agent': 'YourApp/1.0',
}
conn.request('DELETE', '/v1/calendars/VALUE/notifications/VALUE', headers=headers)
response = conn.getresponse()
data = json.loads(response.read().decode())
print(json.dumps(data, indent=2))
conn.close()
n8n HTTP Node
{
"name": "GHL - DELETE VALUE",
"type": "n8n-nodes-base.httpRequest",
"parameters": {
"method": "DELETE",
"url": "https://rest.gohighlevel.com/v1/calendars/VALUE/notifications/VALUE",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer YOUR_API_TOKEN"
},
{
"name": "Version",
"value": "2021-04-15"
},
{
"name": "Content-Type",
"value": "application/json"
},
{
"name": "Accept",
"value": "application/json"
},
{
"name": "User-Agent",
"value": "YourApp/1.0"
}
]
},
"sendBody": false,
"bodyParameters": {
"parameters": []
},
"options": {}
}
}
To use in n8n:
- Add an HTTP Request node
- Switch to JSON mode (Parameters → use RAW JSON)
- Paste the JSON above
- Update
YOUR_API_TOKENwith your actual GHL API key
Request Parameters
| Name | Location | Type | Required | Description |
|---|---|---|---|---|
calendarId |
Path | string |
✅ | |
notificationId |
Path | string |
✅ |
Response Codes
| Code | Description | Schema |
|---|---|---|
200 |
Successful response | - message (string) (required): Result of delete/update operation |
400 |
Bad Request | Standard error response for bad requests (400). Contains message, statusCode fields. |
401 |
Unauthorized | Standard error response for unauthorized requests (401). Contains message, statusCode fields. |
⚠️ Special Notes & Quirks
⚠️ User-Agent Required: All GHL API requests require a
User-AgentHTTP header. Requests without it may be rejected with a 403 error.
GET /calendars/{calendarId}/notifications/{notificationId}
Summary: Get notification
Find Event notification by notificationId
Version Header: 2021-04-15
Operation ID: find-event-notification
Tags: Calendar Notifications
cURL
curl -X GET 'https://rest.gohighlevel.com/v1/calendars/VALUE/notifications/VALUE' \
-H 'Authorization: Bearer YOUR_API_TOKEN' \
-H 'Version: 2021-04-15' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'User-Agent: YourApp/1.0'
Python (http.client)
import http.client
import json
conn = http.client.HTTPSConnection('rest.gohighlevel.com')
headers = {
'Authorization': 'Bearer YOUR_API_TOKEN',
'Version': '2021-04-15',
'Content-Type': 'application/json',
'Accept': 'application/json',
'User-Agent': 'YourApp/1.0',
}
conn.request('GET', '/v1/calendars/VALUE/notifications/VALUE', headers=headers)
response = conn.getresponse()
data = json.loads(response.read().decode())
print(json.dumps(data, indent=2))
conn.close()
n8n HTTP Node
{
"name": "GHL - GET VALUE",
"type": "n8n-nodes-base.httpRequest",
"parameters": {
"method": "GET",
"url": "https://rest.gohighlevel.com/v1/calendars/VALUE/notifications/VALUE",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer YOUR_API_TOKEN"
},
{
"name": "Version",
"value": "2021-04-15"
},
{
"name": "Content-Type",
"value": "application/json"
},
{
"name": "Accept",
"value": "application/json"
},
{
"name": "User-Agent",
"value": "YourApp/1.0"
}
]
},
"sendBody": false,
"bodyParameters": {
"parameters": []
},
"options": {}
}
}
To use in n8n:
- Add an HTTP Request node
- Switch to JSON mode (Parameters → use RAW JSON)
- Paste the JSON above
- Update
YOUR_API_TOKENwith your actual GHL API key
Request Parameters
| Name | Location | Type | Required | Description |
|---|---|---|---|---|
calendarId |
Path | string |
✅ | |
notificationId |
Path | string |
✅ |
Response Codes
| Code | Description | Schema |
|---|---|---|
200 |
Successful response | - _id (string): Notification ID - receiverType (string) (e.g. contact)- additionalEmailIds (array) (e.g. `['example1@email.com... |
400 |
Bad Request | Standard error response for bad requests (400). Contains message, statusCode fields. |
401 |
Unauthorized | Standard error response for unauthorized requests (401). Contains message, statusCode fields. |
⚠️ Special Notes & Quirks
⚠️ User-Agent Required: All GHL API requests require a
User-AgentHTTP header. Requests without it may be rejected with a 403 error.
PUT /calendars/{calendarId}/notifications/{notificationId}
Summary: Update notification
Update Event notification by id
Version Header: 2021-04-15
Operation ID: update-event-notification
Tags: Calendar Notifications
cURL
curl -X PUT 'https://rest.gohighlevel.com/v1/calendars/VALUE/notifications/VALUE' \
-H 'Authorization: Bearer YOUR_API_TOKEN' \
-H 'Version: 2021-04-15' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'User-Agent: YourApp/1.0' \
-d '{}' # See request body schema below
Python (http.client)
import http.client
import json
conn = http.client.HTTPSConnection('rest.gohighlevel.com')
headers = {
'Authorization': 'Bearer YOUR_API_TOKEN',
'Version': '2021-04-15',
'Content-Type': 'application/json',
'Accept': 'application/json',
'User-Agent': 'YourApp/1.0',
}
payload = json.dumps({})
conn.request('PUT', '/v1/calendars/VALUE/notifications/VALUE', body=payload, headers=headers)
response = conn.getresponse()
data = json.loads(response.read().decode())
print(json.dumps(data, indent=2))
conn.close()
n8n HTTP Node
{
"name": "GHL - PUT VALUE",
"type": "n8n-nodes-base.httpRequest",
"parameters": {
"method": "PUT",
"url": "https://rest.gohighlevel.com/v1/calendars/VALUE/notifications/VALUE",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer YOUR_API_TOKEN"
},
{
"name": "Version",
"value": "2021-04-15"
},
{
"name": "Content-Type",
"value": "application/json"
},
{
"name": "Accept",
"value": "application/json"
},
{
"name": "User-Agent",
"value": "YourApp/1.0"
}
]
},
"sendBody": true,
"bodyParameters": {
"parameters": []
},
"options": {}
}
}
To use in n8n:
- Add an HTTP Request node
- Switch to JSON mode (Parameters → use RAW JSON)
- Paste the JSON above
- Update
YOUR_API_TOKENwith your actual GHL API key
Request Parameters
| Name | Location | Type | Required | Description |
|---|---|---|---|---|
calendarId |
Path | string |
✅ | |
notificationId |
Path | string |
✅ |
Request Body Schema
- receiverType (string): Notification recipient type
- additionalEmailIds (array) (e.g.
['example1@email.com', 'example2@email.com']): Additional email addresses to receive notifications. - additionalPhoneNumbers (array) (e.g.
['+919876744444', '+919876744445']): Additional phone numbers to receive notifications. - selectedUsers (array) (e.g.
['userId1', 'userId2', 'sub_account_admin']): Selected users for in-App and business email notifications. Supports user IDs and special keyword "sub_account_admin" - channel (string): Notification channel
- notificationType (string): Notification type
- isActive (boolean): Is the notification active
- deleted (boolean): Marks the notification as deleted (soft delete)
- templateId (string): Template ID for email notification
- body (string): Body for email notification. Not necessary for in-App notification
- subject (string): Subject for email notification. Not necessary for in-App notification
- afterTime (array of SchedulesDTO) (e.g.
[{'timeOffset': 1, 'unit': 'hours'}]): Specifies the time after which the follow-up notification should be sent. This is not required for other notification types. - beforeTime (array of SchedulesDTO) (e.g.
[{'timeOffset': 1, 'unit': 'hours'}]): Specifies the time before which the reminder notification should be sent. This is not required for other notification types. - fromAddress (string): From address for email notification
- fromNumber (string): from number for sms notification
- fromName (string): From name for email/sms notification
Response Codes
| Code | Description | Schema |
|---|---|---|
200 |
Successful response | - message (string) (required): Result of delete/update operation |
400 |
Bad Request | Standard error response for bad requests (400). Contains message, statusCode fields. |
401 |
Unauthorized | Standard error response for unauthorized requests (401). Contains message, statusCode fields. |
⚠️ Special Notes & Quirks
⚠️ User-Agent Required: All GHL API requests require a
User-AgentHTTP header. Requests without it may be rejected with a 403 error.
Documentation generated from GHL OpenAPI specifications. Verify against official docs for latest changes.