Appointment Notes Setup
Add, read, update, and delete notes on GoHighLevel appointments. Notes help your team track context, prep details, and follow-up actions for every scheduled meeting.
Prerequisites
Before you begin, confirm the following:
- A GoHighLevel sub-account with at least one booked appointment
- A Private Integration Token (PIT) with the calendars scope enabled
- Your
locationIdfrom Settings > Business Info - A valid
appointmentId(create one using the Appointment CRUD endpoint if needed) - A REST client like Postman, Insomnia, or
curlinstalled
Set Up Authentication
Appointment note endpoints use the calendars scope.
- Go to Settings > Integrations > Private Integrations
- Select or create a PIT with calendars scope (read and write)
- Copy the token:
export GHL_TOKEN="your-private-integration-token"
export LOCATION_ID="your-location-id"
Required headers:
Authorization: Bearer $GHL_TOKEN
Content-Type: application/json
Version: 2021-07-28
Make Your First Call
List all notes on an appointment:
curl -X GET "https://services.leadconnectorhq.com/calendars/events/appointments/{appointmentId}/notes" \
-H "Authorization: Bearer $GHL_TOKEN" \
-H "Version: 2021-07-28"
Add a note to an appointment:
curl -X POST "https://services.leadconnectorhq.com/calendars/events/appointments/{appointmentId}/notes" \
-H "Authorization: Bearer $GHL_TOKEN" \
-H "Content-Type: application/json" \
-H "Version: 2021-07-28" \
-d '{
"body": "Client wants to discuss Q2 marketing budget. They mentioned a $50K range on the discovery call."
}'
The body field accepts plain text. Keep notes concise and actionable so team members can quickly scan before meetings.
Update a note:
curl -X PUT "https://services.leadconnectorhq.com/calendars/events/appointments/{appointmentId}/notes/{noteId}" \
-H "Authorization: Bearer $GHL_TOKEN" \
-H "Content-Type: application/json" \
-H "Version: 2021-07-28" \
-d '{
"body": "Client wants to discuss Q2 marketing budget. Budget range is $50K-$75K. Bring case study deck."
}'
Delete a note:
curl -X DELETE "https://services.leadconnectorhq.com/calendars/events/appointments/{appointmentId}/notes/{noteId}" \
-H "Authorization: Bearer $GHL_TOKEN" \
-H "Version: 2021-07-28"
Handle the Response
A successful GET returns a notes array. Each note object includes:
id— The note ID used for update and delete operationsbody— The note text contentuserId— The user who created the notecreatedAt— Timestamp of when the note was addedupdatedAt— Timestamp of the last edit
A POST returns the newly created note with its generated id. A PUT returns the updated note. A DELETE returns a success confirmation.
Notes are visible to all team members who can access the appointment. There is no per-note permission system, so any user with calendar access can read, edit, or delete notes.
Common errors:
- 401 — Token invalid or expired.
- 404 — Appointment ID or note ID not found. Verify IDs with a GET call first.
- 422 — Missing
bodyfield on create or update. The note text is required.
Test Your Setup
Run through these steps to validate notes work correctly:
- List notes on an existing appointment. The array may be empty initially.
- Create a test note with a descriptive body like “API test note, safe to delete”
- List notes again and confirm your new note appears with a valid
id - Update the note body and verify the change in a follow-up GET
- Open the appointment in the GHL Calendars dashboard and confirm the note is visible
- Delete the test note and verify it no longer appears in the list
If notes do not appear in the dashboard, refresh the appointment detail page. Notes update in real time via the API but the dashboard may require a page reload.
Next Steps
Read the full Appointment Notes guide for automation patterns like auto-adding CRM context to new bookings. Pair this with Appointment CRUD for full booking management, or use Calendar CRUD to configure the calendars where appointments live.