Contact Notes Setup
Log call summaries, meeting notes, and internal context on contact records through the API. This quick-start walks you through creating, reading, updating, and deleting notes programmatically.
Prerequisites
Before working with Contact Notes, confirm you have:
- A GoHighLevel sub-account with at least one existing contact
- A Private Integration Token with the
contactsscope configured - The
contactIdof the contact you want to add notes to - A REST client such as Postman, Insomnia, or
curl
Set Up Authentication
Contact Notes use the same authentication as all contact endpoints. You need a Private Integration Token (PIT) with the contacts scope.
If you already have a PIT from a previous setup, reuse it here. Notes are covered under the same contacts scope.
If you need a new token, navigate to Settings > Integrations > Private Integrations in your sub-account. Create a new integration, enable the contacts scope, save, and copy the token.
Set your Authorization header to Bearer {your-pit-token} for all requests. Your base URL is https://services.leadconnectorhq.com.
Make Your First Call
The most common operation is creating a note on a contact. Send a POST request to /contacts/{contactId}/notes:
POST /contacts/{contactId}/notes
Authorization: Bearer {your-pit-token}
Content-Type: application/json
{
"body": "Spoke with Jane about the Q2 renewal. She wants to upgrade to the pro plan. Follow up by March 15."
}
The body parameter is the note content and is required. Notes support plain text. Keep them concise but include enough detail for any team member to understand the context.
To list all notes on a contact, use GET /contacts/{contactId}/notes. Notes return in reverse chronological order, with the most recent note first.
Handle the Response
A successful note creation returns a 201 status with the full note object:
{
"note": {
"id": "note-abc123",
"body": "Spoke with Jane about the Q2 renewal. She wants to upgrade to the pro plan. Follow up by March 15.",
"contactId": "contact-xyz789",
"dateAdded": "2026-03-07T12:00:00Z"
}
}
Save the note.id value. You need it to retrieve a specific note with GET /contacts/{contactId}/notes/{noteId}, update it with PUT /contacts/{contactId}/notes/{noteId}, or delete it with DELETE /contacts/{contactId}/notes/{noteId}.
Common errors: 400 means the body field is missing or empty. 404 means the contactId or noteId does not exist. 401 means your token is invalid or lacks the contacts scope.
Test Your Setup
Run through this checklist to confirm note management is working:
- Create a note on a test contact with
POST /contacts/{id}/notesand verify the201response - List all notes with
GET /contacts/{id}/notesand confirm your new note appears at the top - Read the specific note with
GET /contacts/{id}/notes/{noteId}using the returned ID - Update the note body with
PUT /contacts/{id}/notes/{noteId}and verify the change - Delete the note with
DELETE /contacts/{id}/notes/{noteId}and confirm it no longer appears in the list
Open the contact record in the GoHighLevel UI to verify notes created via API appear in the Notes section. Notes added through the API are identical to notes created in the UI, so your team can view and edit them normally.
Next Steps
Read the full Contact Notes Guide for patterns like automated call logging and CRM enrichment workflows. Pair notes with Contact Tasks to log context and assign follow-up actions in a single workflow, or use Contact CRUD to pull contact details before writing notes with full context.