Skip to main content
CNT
Step-by-Step Setup 5-10 minutes

Contact Notes Setup

Contacts & CRM Basic
Need more detail? Read the full guide for config deep-dives and best practices.

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 contacts scope configured
  • The contactId of 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:

  1. Create a note on a test contact with POST /contacts/{id}/notes and verify the 201 response
  2. List all notes with GET /contacts/{id}/notes and confirm your new note appears at the top
  3. Read the specific note with GET /contacts/{id}/notes/{noteId} using the returned ID
  4. Update the note body with PUT /contacts/{id}/notes/{noteId} and verify the change
  5. 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.

Stay sharp. New guides and playbooks as they drop.