Create Appointment

highlevel.create_appointment
ActionCRM & salesconnection required

Calls the HighLevel API with the connection's credentials.

Book an appointment for a contact on a calendar.

Connection

Required
Yes — the node will not save without one
Auth type
OAuth 2.0
Providers
HighLevel
Secret shape
{"client_id": "…", "client_secret": "…", "refresh_token": "…"} for a marketplace app, or {"access_token": "…"} for a Private Integration Token
Config it needs
location_id, user_type, base_url
Resolved by
config.connection_id, else node.connection_id

Configuration

17 fields, 3 required. A dotted path is a nested object and name[] an array of objects — the editor renders the same tree.

FieldTypeRequiredDefaultConstraintsExample
calendar_id
The calendar id, from highlevel.list_calendars.
stringYes———
contact_id
The contact the appointment is for.
stringYes———
start_time
Start of the appointment, ISO-8601 with an offset (e.g. 2026-09-30T09:30:00-05:00).
stringYes—iso8601 format—
end_time
End of the appointment, ISO-8601. HighLevel uses the calendar's slot length when this is blank.
stringNo—iso8601 format—
title
Appointment title.
stringNo———
description
Appointment description.
stringNo———
appointment_status
Status to book it with.
stringNo—one of "new", "confirmed", "cancelled", "showed", "noshow", "invalid"—
assigned_user_id
User the appointment is assigned to.
stringNo———
meeting_location_type
Where the meeting happens.
stringNo—one of "custom", "zoom", "gmeet", "phone", "address", "ms_teams", "google"—
meeting_location_id
The configured meeting location to use.
stringConditional—only with meeting_location_type—
address
Street address or meeting link, when the location type is custom or address.
stringNo———
rrule
An iCalendar RFC 5545 RRULE for a recurring appointment. HighLevel only applies it when ignore_free_slot_validation is on.
stringNo———
to_notify
Let HighLevel's automations run for this booking. Off means they do not.
booleanNo———
ignore_date_range
Ignore the calendar's minimum scheduling notice and date range.
booleanNo———
ignore_free_slot_validation
Book the time even when the calendar says it is not free.
booleanNo———
override_location_config
Use this node's meeting location instead of the calendar's.
booleanNo———
location_id
Sub-account (location) id to act on instead of the connection's own.
stringNo———

Output

One shape.

result

FieldTypeExample
id
The appointment (event) id.
string—
calendarId
The calendar it was booked on.
string—
locationId
The sub-account it belongs to.
string—
contactId
The contact it was booked for.
string—
startTime
Start of the appointment (ISO-8601).
string—
endTime
End of the appointment (ISO-8601).
string—
title
Appointment title.
string—
appointmentStatus
new, confirmed, cancelled, showed, noshow or invalid.
string—
assignedUserId
User the appointment is assigned to.
string—
address
Where it happens, or the meeting link.
string—
{
  "address": "",
  "appointmentStatus": "",
  "assignedUserId": "",
  "calendarId": "",
  "contactId": "",
  "endTime": "",
  "id": "",
  "locationId": "",
  "startTime": "",
  "title": ""
}

Notes

  • Scoped to the connection's location_id (the sub-account) unless the node overrides it.
  • HighLevel refuses a slot the calendar does not offer unless ignore_free_slot_validation is on.

See Create Appointment run in a workflow.

In a technical demo we add the HighLevel connection, drop the node on the canvas and let Workflow Health pre-flight it before the first real run.