> **Building with AI coding agents?** Install the authstack plugin with one command. This equips your agent with accurate Scalekit implementation patterns.
>
> **Recommended** (the `-y` flags skip prompts, so the command runs without an interactive terminal):
> ```bash
> npx -y @scalekit-inc/cli setup -y
> ```
>
> Global:
> ```bash
> npm install -g @scalekit-inc/cli
> scalekit setup -y
> ```
>
> Supports Claude Code, Cursor, GitHub Copilot, Codex + skills for other Agent Skills-compatible agents in `~/.agents/skills`.
> Skills: integrate-agentkit, implement-saaskit, add-mcp-oauth, implement-sso, implement-scim.
> [Full setup guide](https://docs.scalekit.com/dev-kit/build-with-ai/)

---

# Connect AI agents to HighLevel

The HighLevel connector lets your AI agent act in each user's HighLevel account. Each user signs in to HighLevel once, and Scalekit stores and refreshes their tokens, so your agent never handles credentials. It comes with 102 tools.

**Authentication:** OAuth 2.0
**Categories:** CRM & Sales, Marketing
**Tools:** 102: 64 read, 36 write, 2 destructive
**Users sign in with:** OAuth
**OAuth app:** Your own HighLevel app
**Built by:** Scalekit connector
**Try it:** [Playground in the Scalekit dashboard](https://app.scalekit.com/ws/signup?sk_intent=playground&provider=HIGHLEVEL)

## Setup

1. ### Install the SDK

   **Node.js**

   ```bash
   npm install @scalekit-sdk/node dotenv
   ```

   **Python**

   ```bash
   pip install scalekit-sdk-python python-dotenv
   ```

2. ### Set your credentials

   Add your Scalekit credentials to your `.env` file. Find values in **[app.scalekit.com](https://app.scalekit.com)** > **Developers** > **API Credentials**.

   ```sh title=".env"
   SCALEKIT_ENVIRONMENT_URL=<your-environment-url>
   SCALEKIT_CLIENT_ID=<your-client-id>
   SCALEKIT_CLIENT_SECRET=<your-client-secret>
   ```

3. ### Create the HighLevel connection

   In **AgentKit > Connections**, create a HighLevel connection and copy its redirect URI. The name you give it is the `connection_name` your code passes. See [Configure connections](/agentkit/connections/).

4. ### Register an OAuth app

   HighLevel connections use your own OAuth app. Register one with HighLevel and add the redirect URI you copied.

   Then enter the app's Client ID and Client Secret on the HighLevel connection.

5. ### Authorize a user and make your first call

   **Node.js** (`quickstart.mts`)

   ```typescript
   import { ScalekitClient } from '@scalekit-sdk/node'
   import 'dotenv/config'
   import { createInterface } from 'node:readline/promises'

   const scalekit = new ScalekitClient(
     process.env.SCALEKIT_ENVIRONMENT_URL,
     process.env.SCALEKIT_CLIENT_ID,
     process.env.SCALEKIT_CLIENT_SECRET,
   )
   const actions = scalekit.actions

   const connector = 'highlevel'
   const identifier = 'user_123'

   // Generate an authorization link for the user
   const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
   console.log('Authorize HighLevel:', link)
   const rl = createInterface({ input: process.stdin, output: process.stdout })
   await rl.question('Press Enter after authorizing...')
   rl.close()

   // Make your first call
   const result = await actions.executeTool({
     connector,
     identifier,
     toolName: 'highlevel_appointment_get',
     toolInput: { event_id: 'YOUR_EVENT_ID' },
   })
   console.log(result)
   ```

   ```bash
   npx tsx quickstart.mts
   ```

   **Python** (`quickstart.py`)

   ```python
   import os
   from scalekit import ScalekitClient
   from dotenv import load_dotenv
   load_dotenv()

   scalekit_client = ScalekitClient(
       env_url=os.getenv("SCALEKIT_ENVIRONMENT_URL"),
       client_id=os.getenv("SCALEKIT_CLIENT_ID"),
       client_secret=os.getenv("SCALEKIT_CLIENT_SECRET"),
   )
   actions = scalekit_client.actions

   connection_name = "highlevel"
   identifier = "user_123"

   # Generate an authorization link for the user
   link_response = actions.get_authorization_link(
       connection_name=connection_name,
       identifier=identifier,
   )
   print("Authorize HighLevel:", link_response.link)
   input("Press Enter after authorizing...")

   # Make your first call
   result = actions.execute_tool(
       tool_input={"event_id":"YOUR_EVENT_ID"},
       tool_name="highlevel_appointment_get",
       connection_name=connection_name,
       identifier=identifier,
   )
   print(result)
   ```

   ```bash
   python quickstart.py
   ```

   Each user signs in once. See [Authorize a user](/agentkit/tools/authorize/) for the full flow and statuses.

## Tools

Pass the exact name to `execute_tool`, with an input like each tool's example. To ask for a tool that's missing, use the [request form](https://scalekitsupport.portal.usepylon.com/forms/request-a-connector-tool).

**Node.js**

```typescript
const result = await actions.executeTool({
  toolName: 'highlevel_appointment_get',
  toolInput: {
    event_id: '<event_id>',
  },
  connector: 'highlevel',
  identifier: 'user_123',
})
```

**Python**

```python
result = actions.execute_tool(
    tool_name="highlevel_appointment_get",
    tool_input={
        "event_id": "<event_id>",
    },
    connection_name="highlevel",
    identifier="user_123",
)
```

`result.data` is the app's response as JSON, and `result.execution_id` (`executionId` in Node.js) is the ID of the call.

### `highlevel_appointment_get`

Get Appointment · Read-only

Get one appointment by ID. Returns the appointment's calendar, contact, title, status, start and end time, assignee and address. Use when you have the event ID. Use List Calendar Events to find appointments.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `event_id` (`string`, required): ID of the appointment (event). For a recurring appointment, pass an instance ID to change one occurrence or the master event ID to change the whole series. Get IDs with List Calendar Events or List Contact Appointments. Example: 0TkCdp9PfvLeWKYRRvIz.

Example input: `{"event_id":"<event_id>"}`

### `highlevel_appointment_notes_list`

List Appointment Notes · Read-only

List the notes on an appointment. Returns each note's ID, body, author and date. Use to read booking notes. Use List Contact Notes for notes on the contact itself.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `appointment_id` (`string`, required): ID of the appointment. Example: 0TkCdp9PfvLeWKYRRvIz.
- `limit` (`number`, required): Number of notes to return. Example: 10.
- `offset` (`number`, required): Number of notes to skip, for paging. Use 0 for the first page.

Example input: `{"appointment_id":"<appointment_id>","limit":10,"offset":0}`

### `highlevel_associations_list`

List Associations · Read-only

List the association types defined in a sub-account (how objects can be linked). Returns each association's ID, key, the two object keys it links and their labels. Use to get an association ID for Create Relation or List Record Relations.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `limit` (`number`, required): Maximum number of associations to return. Example: 100.
- `location_id` (`string`, required): ID of the HighLevel sub-account (formerly called a location) to work in. The connected account is installed on one sub-account; use that sub-account's ID, shown in the HighLevel URL after /location/. Example: ve9EPM428h8vShlRW1KT.
- `skip` (`number`, required): Number of associations to skip, for paging. Use 0 for the first page.

Example input: `{"limit":100,"location_id":"<location_id>","skip":0}`

### `highlevel_blocked_slots_list`

List Blocked Slots · Read-only

List blocked time slots on a calendar, group or user in a time range. Returns each block's ID, title, start and end time and owner. Use to see blocked-off time. Pass one of calendar_id, user_id or group_id. Use List Calendar Events for appointments.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `end_time` (`string`, required): End of the time range, as a Unix timestamp in milliseconds. Example: 1680978599999.
- `location_id` (`string`, required): ID of the HighLevel sub-account (formerly called a location) to work in. The connected account is installed on one sub-account; use that sub-account's ID, shown in the HighLevel URL after /location/. Example: ve9EPM428h8vShlRW1KT.
- `start_time` (`string`, required): Start of the time range, as a Unix timestamp in milliseconds. Example: 1680373800000.
- `calendar_id` (`string`, optional): Return blocks on this calendar. One of calendar_id, user_id or group_id is required. Example: BqTwX8QFwXzpegMve9EQ.
- `group_id` (`string`, optional): Return blocks on calendars in this group. One of calendar_id, user_id or group_id is required. Example: ocQHyuzHvysMo5N5VsXc.
- `user_id` (`string`, optional): Return blocks owned by this user ID. One of calendar_id, user_id or group_id is required. Example: CVokAlI8fgw4WYWoCtQz.

Example input: `{"end_time":"<end_time>","location_id":"<location_id>","start_time":"<start_time>"}`

### `highlevel_business_get`

Get Business · Read-only

Get one business (company record) by ID. Returns the business's name, contact details, address and description. Use when you have the ID. Use List Businesses to find IDs.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `business_id` (`string`, required): ID of the business (company record) in the sub-account. Get it with List Businesses. Example: 5DP4iH6HLkQsiKESj6rh.

Example input: `{"business_id":"<business_id>"}`

### `highlevel_businesses_list`

List Businesses · Read-only

List the businesses (company records) in a sub-account. Returns each business's ID, name, phone, email, website and address. Use to find a business ID. Use Get Business for one business.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `location_id` (`string`, required): ID of the HighLevel sub-account (formerly called a location) to work in. The connected account is installed on one sub-account; use that sub-account's ID, shown in the HighLevel URL after /location/. Example: ve9EPM428h8vShlRW1KT.
- `limit` (`string`, optional): Maximum number of businesses to return. Defaults to 100. Example: 100.
- `skip` (`string`, optional): Number of businesses to skip, for paging. Example: 0.

Example input: `{"location_id":"<location_id>"}`

### `highlevel_calendar_events_list`

List Calendar Events · Read-only

List appointments on a calendar, calendar group or user in a time range. Returns each event's ID, title, contact, status, start and end time and assignee. Use to see bookings in a window. Pass one of calendar_id, user_id or group_id. Use List Contact Appointments for one contact's bookings.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `end_time` (`string`, required): End of the time range, as a Unix timestamp in milliseconds. Example: 1680978599999.
- `location_id` (`string`, required): ID of the HighLevel sub-account (formerly called a location) to work in. The connected account is installed on one sub-account; use that sub-account's ID, shown in the HighLevel URL after /location/. Example: ve9EPM428h8vShlRW1KT.
- `start_time` (`string`, required): Start of the time range, as a Unix timestamp in milliseconds. Example: 1680373800000.
- `calendar_id` (`string`, optional): Return appointments on this calendar. One of calendar_id, user_id or group_id is required. Example: BqTwX8QFwXzpegMve9EQ.
- `group_id` (`string`, optional): Return appointments on calendars in this group. One of calendar_id, user_id or group_id is required. Example: ocQHyuzHvysMo5N5VsXc.
- `user_id` (`string`, optional): Return appointments owned by this user ID. One of calendar_id, user_id or group_id is required. Example: CVokAlI8fgw4WYWoCtQz.

Example input: `{"end_time":"<end_time>","location_id":"<location_id>","start_time":"<start_time>"}`

### `highlevel_calendar_free_slots_get`

Get Calendar Free Slots · Read-only

Get the open booking slots on a calendar between two dates. Returns available slot start times grouped by date. Use before Create Appointment to pick a free time. The range can be at most 31 days.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `calendar_id` (`string`, required): ID of the calendar. Get calendar IDs with List Calendars. Example: CVokAlI8fgw4WYWoCtQz.
- `end_date` (`number`, required): End of the range, as a Unix timestamp in milliseconds. The range can be at most 31 days. Example: 1738281600000.
- `start_date` (`number`, required): Start of the range, as a Unix timestamp in milliseconds. The range can be at most 31 days. Example: 1735689600000.
- `timezone` (`string`, optional): IANA time zone to return the slots in. Example: America/Chicago.
- `user_id` (`string`, optional): Only return slots for this team member's user ID. Example: 082goXVW3lIExEQPOnd3.
- `user_ids` (`array`, optional): Only return slots for these team members' user IDs. Example: ["082goXVW3lIExEQPOnd3"].

Example input: `{"calendar_id":"<calendar_id>","end_date":1738281600000,"start_date":1735689600000}`

### `highlevel_calendar_get`

Get Calendar · Read-only

Get one calendar by ID. Returns the calendar's name, type, team members, availability, slot settings and meeting location configurations. Use for one calendar's settings, such as meeting location IDs for booking. Use List Calendars to find calendar IDs.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `calendar_id` (`string`, required): ID of the calendar. Get calendar IDs with List Calendars. Example: CVokAlI8fgw4WYWoCtQz.

Example input: `{"calendar_id":"<calendar_id>"}`

### `highlevel_calendar_groups_list`

List Calendar Groups · Read-only

List the calendar groups in a sub-account. Returns each group's ID, name, slug and active state. Use to get a group ID for List Calendars or List Calendar Events.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `location_id` (`string`, required): ID of the HighLevel sub-account (formerly called a location) to work in. The connected account is installed on one sub-account; use that sub-account's ID, shown in the HighLevel URL after /location/. Example: ve9EPM428h8vShlRW1KT.

Example input: `{"location_id":"<location_id>"}`

### `highlevel_calendars_list`

List Calendars · Read-only

List the calendars in a sub-account. Returns each calendar's ID, name, type, team members, slot settings and meeting locations. Use to find calendar IDs before checking free slots or booking. Use Get Calendar for one calendar's full settings.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `location_id` (`string`, required): ID of the HighLevel sub-account (formerly called a location) to work in. The connected account is installed on one sub-account; use that sub-account's ID, shown in the HighLevel URL after /location/. Example: ve9EPM428h8vShlRW1KT.
- `group_id` (`string`, optional): Only return calendars in this calendar group. Example: BqTwX8QFwXzpegMve9EQ.
- `show_drafted` (`boolean`, optional): Set to false to leave out draft calendars. Defaults to true.

Example input: `{"location_id":"<location_id>"}`

### `highlevel_campaigns_list`

List Campaigns · Read-only

List the campaigns in a sub-account. Returns each campaign's ID, name and status. Use to find a campaign ID for Add Contact to Campaign.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `location_id` (`string`, required): ID of the HighLevel sub-account (formerly called a location) to work in. The connected account is installed on one sub-account; use that sub-account's ID, shown in the HighLevel URL after /location/. Example: ve9EPM428h8vShlRW1KT.
- `status` (`string`, optional): Only return campaigns with this status, such as draft or published. Example: published.

Example input: `{"location_id":"<location_id>"}`

### `highlevel_contact_appointments_list`

List Contact Appointments · Read-only

List all appointments booked for one contact. Returns each appointment's ID, calendar, start and end time, status and title. Use for one contact's bookings. Use List Calendar Events for all bookings on a calendar or user in a time range.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `contact_id` (`string`, required): ID of the contact. Find it with Find Duplicate Contact, List Contacts by Business, or in the contact's URL in HighLevel. Example: ocQHyuzHvysMo5N5VsXc.

Example input: `{"contact_id":"<contact_id>"}`

### `highlevel_contact_duplicate_get`

Find Duplicate Contact · Read-only

Find the existing contact that matches an email or phone number. Returns the matching contact, or an empty result when there is none. Use to look a contact up by email or phone before creating one. Use Get Contact when you already have the ID.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `location_id` (`string`, required): ID of the HighLevel sub-account (formerly called a location) to work in. The connected account is installed on one sub-account; use that sub-account's ID, shown in the HighLevel URL after /location/. Example: ve9EPM428h8vShlRW1KT.
- `email` (`string`, optional): Email address to match. Example: rosan@deos.com.
- `phone` (`string`, optional): Phone number to match, with country code. Example: +14231645160.

Example input: `{"location_id":"<location_id>"}`

### `highlevel_contact_get`

Get Contact · Read-only

Get one HighLevel contact by ID. Returns the contact's name, email, phone, address, tags, custom field values, DND settings, assigned user and dates. Use when you already have the contact ID. Use Find Duplicate Contact to look a contact up by email or phone.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `contact_id` (`string`, required): ID of the contact. Find it with Find Duplicate Contact, List Contacts by Business, or in the contact's URL in HighLevel. Example: ocQHyuzHvysMo5N5VsXc.

Example input: `{"contact_id":"<contact_id>"}`

### `highlevel_contact_note_get`

Get Contact Note · Read-only

Get one note on a contact by ID. Returns the note's body, author user ID and date added. Use when you have the note ID. Use List Contact Notes to find note IDs.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `contact_id` (`string`, required): ID of the contact. Find it with Find Duplicate Contact, List Contacts by Business, or in the contact's URL in HighLevel. Example: ocQHyuzHvysMo5N5VsXc.
- `note_id` (`string`, required): ID of the note. Get it with List Contact Notes. Example: ocQHyuzHvysMo5N5VsXc.

Example input: `{"contact_id":"<contact_id>","note_id":"<note_id>"}`

### `highlevel_contact_notes_list`

List Contact Notes · Read-only

List all notes on one contact. Returns each note's ID, body, author user ID and date added. Use to read a contact's notes. Use Get Contact Note for one note by ID.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `contact_id` (`string`, required): ID of the contact. Find it with Find Duplicate Contact, List Contacts by Business, or in the contact's URL in HighLevel. Example: ocQHyuzHvysMo5N5VsXc.

Example input: `{"contact_id":"<contact_id>"}`

### `highlevel_contact_task_get`

Get Contact Task · Read-only

Get one task on a contact by ID. Returns the task's title, body, due date, completion state and assignee. Use when you have both IDs. Use List Contact Tasks to find task IDs.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `contact_id` (`string`, required): ID of the contact. Find it with Find Duplicate Contact, List Contacts by Business, or in the contact's URL in HighLevel. Example: ocQHyuzHvysMo5N5VsXc.
- `task_id` (`string`, required): ID of the task. Get it with List Contact Tasks. Example: ocQHyuzHvysMo5N5VsXc.

Example input: `{"contact_id":"<contact_id>","task_id":"<task_id>"}`

### `highlevel_contact_tasks_list`

List Contact Tasks · Read-only

List all tasks on one contact. Returns each task's ID, title, body, due date, completion state and assignee. Use for one contact's tasks. Use Search Tasks to find tasks across the whole sub-account.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `contact_id` (`string`, required): ID of the contact. Find it with Find Duplicate Contact, List Contacts by Business, or in the contact's URL in HighLevel. Example: ocQHyuzHvysMo5N5VsXc.

Example input: `{"contact_id":"<contact_id>"}`

### `highlevel_contacts_by_business_list`

List Contacts by Business · Read-only

List the contacts linked to a business (company record). Returns a page of contacts with their IDs, names and emails. Use to see who works at a business. Use List Businesses to find the business ID first.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `business_id` (`string`, required): ID of the business (company record) in the sub-account. Get it with List Businesses. Example: 5DP4iH6HLkQsiKESj6rh.
- `location_id` (`string`, required): ID of the HighLevel sub-account (formerly called a location) to work in. The connected account is installed on one sub-account; use that sub-account's ID, shown in the HighLevel URL after /location/. Example: ve9EPM428h8vShlRW1KT.
- `limit` (`string`, optional): Maximum number of contacts to return. Defaults to 25. Example: 25.
- `query` (`string`, optional): Optional text to filter the contacts by name. Example: Rosan.
- `skip` (`string`, optional): Number of contacts to skip, for paging. Example: 0.

Example input: `{"business_id":"<business_id>","location_id":"<location_id>"}`

### `highlevel_conversation_get`

Get Conversation · Read-only

Get one conversation by ID. Returns the conversation's contact, channel type, unread count, starred state, assignee and last message details. Use when you have the conversation ID. Use List Conversation Messages for the messages in it.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `conversation_id` (`string`, required): ID of the conversation. Get it with Search Conversations. Example: tDtDnQdgm2LXpyiqYvZ6.

Example input: `{"conversation_id":"<conversation_id>"}`

### `highlevel_conversation_messages_list`

List Conversation Messages · Read-only

List the messages in a conversation, newest first. Returns messages with ID, type, direction, body, status, attachments and date, plus a cursor for the next page. Use to read a thread. Use Get Message for one message by ID.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `conversation_id` (`string`, required): ID of the conversation. Get it with Search Conversations. Example: tDtDnQdgm2LXpyiqYvZ6.
- `last_message_id` (`string`, optional): Paging cursor: the ID of the last message from the previous page. Example: tDtDnQdgm2LXpyiqYvZ6.
- `limit` (`number`, optional): Maximum number of records to return per page. Example: 20.
- `type` (`string`, optional): Only return these message types, comma-separated. Valid types include TYPE_CALL, TYPE_SMS, TYPE_EMAIL, TYPE_WHATSAPP, TYPE_FACEBOOK, TYPE_INSTAGRAM, TYPE_GMB, TYPE_LIVE_CHAT and the TYPE_ACTIVITY_* types. Example: TYPE_SMS,TYPE_CALL.

Example input: `{"conversation_id":"<conversation_id>"}`

### `highlevel_conversations_search`

Search Conversations · Read-only

Search conversations (message threads with contacts) in a sub-account. Returns a page of conversations with ID, contact, last message preview, type, unread count and assignee. Use to find threads by contact, assignee, status, message type or text. Use List Conversation Messages to read a thread's messages.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `location_id` (`string`, required): ID of the HighLevel sub-account (formerly called a location) to work in. The connected account is installed on one sub-account; use that sub-account's ID, shown in the HighLevel URL after /location/. Example: ve9EPM428h8vShlRW1KT.
- `assigned_to` (`string`, optional): ID of the HighLevel user this record is assigned to. Look it up with Search Users. Example: 082goXVW3lIExEQPOnd3.
- `contact_id` (`string`, optional): Only return conversations with this contact ID. Example: 9VEmS0si86GW6gXWU89b.
- `conversation_id` (`string`, optional): Only return the conversation with this ID. Example: ABCHkzuJQ8ZMd4Te84GK.
- `end_date` (`number`, optional): End date filter for dateAdded field (Unix timestamp in milliseconds). Example: 1672531199000.
- `followers` (`string`, optional): List of HighLevel user IDs to add as followers. Look users up with Search Users. Example: ["082goXVW3lIExEQPOnd3"].
- `last_message_action` (`string`, optional): Action of the last outbound message in the conversation as string. One of: automated, manual. Example: manual. One of: `automated`, `manual`.
- `last_message_direction` (`string`, optional): Direction of the last message in the conversation as string. One of: inbound, outbound. Example: inbound. One of: `inbound`, `outbound`.
- `last_message_type` (`string`, optional): Type of the last message in the conversation as a string. One of: TYPE_CALL, TYPE_SMS, TYPE_RCS, TYPE_EMAIL, TYPE_SMS_REVIEW_REQUEST, TYPE_WEBCHAT, TYPE_SMS_NO_SHOW_REQUEST, TYPE_CAMPAIGN_SMS, TYPE_CAMPAIGN_CALL, TYPE_CAMPAIGN_EMAIL, TYPE_CAMPAIGN_VOICEMAIL, TYPE_FACEBOOK, TYPE_CAMPAIGN_FACEBOOK, TYPE_CAMPAIGN_MANUAL_CALL, TYPE_CAMPAIGN_MANUAL_SMS, TYPE_GMB, TYPE_CAMPAIGN_GMB, TYPE_REVIEW, TYPE_INSTAGRAM, TYPE_WHATSAPP, TYPE_CUSTOM_SMS, TYPE_CUSTOM_EMAIL, TYPE_CUSTOM_PROVIDER_SMS, TYPE_CUSTOM_PROVIDER_EMAIL, TYPE_IVR_CALL, TYPE_ACTIVITY_CONTACT, TYPE_ACTIVITY_INVOICE, TYPE_ACTIVITY_PAYMENT, TYPE_ACTIVITY_OPPORTUNITY, TYPE_LIVE_CHAT, TYPE_LIVE_CHAT_INFO_MESSAGE, TYPE_ACTIVITY_APPOINTMENT, TYPE_FACEBOOK_COMMENT, TYPE_INSTAGRAM_COMMENT, TYPE_CUSTOM_CALL, TYPE_INTERNAL_COMMENT, TYPE_ACTIVITY_EMPLOYEE_ACTION_LOG, TYPE_TIKTOK, TYPE_TIKTOK_COMMENT, TYPE_ACTIVITY_WHATSAPP, TYPE_FORM_SUBMISSION, TYPE_SMS_REACTION. Example: TYPE_SMS. One of: `TYPE_CALL`, `TYPE_SMS`, `TYPE_RCS`, `TYPE_EMAIL`, `TYPE_SMS_REVIEW_REQUEST`, `TYPE_WEBCHAT`, `TYPE_SMS_NO_SHOW_REQUEST`, `TYPE_CAMPAIGN_SMS`, `TYPE_CAMPAIGN_CALL`, `TYPE_CAMPAIGN_EMAIL`, `TYPE_CAMPAIGN_VOICEMAIL`, `TYPE_FACEBOOK`, `TYPE_CAMPAIGN_FACEBOOK`, `TYPE_CAMPAIGN_MANUAL_CALL`, `TYPE_CAMPAIGN_MANUAL_SMS`, `TYPE_GMB`, `TYPE_CAMPAIGN_GMB`, `TYPE_REVIEW`, `TYPE_INSTAGRAM`, `TYPE_WHATSAPP`, `TYPE_CUSTOM_SMS`, `TYPE_CUSTOM_EMAIL`, `TYPE_CUSTOM_PROVIDER_SMS`, `TYPE_CUSTOM_PROVIDER_EMAIL`, `TYPE_IVR_CALL`, `TYPE_ACTIVITY_CONTACT`, `TYPE_ACTIVITY_INVOICE`, `TYPE_ACTIVITY_PAYMENT`, `TYPE_ACTIVITY_OPPORTUNITY`, `TYPE_LIVE_CHAT`, `TYPE_LIVE_CHAT_INFO_MESSAGE`, `TYPE_ACTIVITY_APPOINTMENT`, `TYPE_FACEBOOK_COMMENT`, `TYPE_INSTAGRAM_COMMENT`, `TYPE_CUSTOM_CALL`, `TYPE_INTERNAL_COMMENT`, `TYPE_ACTIVITY_EMPLOYEE_ACTION_LOG`, `TYPE_TIKTOK`, `TYPE_TIKTOK_COMMENT`, `TYPE_ACTIVITY_WHATSAPP`, `TYPE_FORM_SUBMISSION`, `TYPE_SMS_REACTION`.
- `limit` (`number`, optional): Number of conversations to return. Defaults to 20. Example: 20.
- `mentions` (`string`, optional): User Id of the mention. Multiple values are comma separated. Example: ABCHkzuJQ8ZMd4Te84GK,fGiae4CHkzoskh8thsik.
- `query` (`string`, optional): Free text to search conversations. Example: invoice.
- `score_profile` (`string`, optional): Id of score profile on which conversations should get filtered out, works with scoreProfileMin & scoreProfileMax. Example: ABCHkzuJQ8ZMd4Te84GK.
- `score_profile_max` (`number`, optional): Maximum score when filtering by score_profile. Example: 90.
- `score_profile_min` (`number`, optional): Minimum score when filtering by score_profile. Example: 10.
- `sort` (`string`, optional): Sort paramater - asc or desc. One of: asc, desc. Example: asc. One of: `asc`, `desc`.
- `sort_by` (`string`, optional): The sorting of the conversation to be filtered as - manual messages or all messages. One of: last_manual_message_date, last_message_date, score_profile, overdue_at, due_at. Example: last_message_date. One of: `last_manual_message_date`, `last_message_date`, `score_profile`, `overdue_at`, `due_at`.
- `sort_score_profile` (`string`, optional): Id of score profile on which sortBy.ScoreProfile should sort on. Example: ABCHkzuJQ8ZMd4Te84GK.
- `start_after_date` (`number`, optional): Paging cursor: the sort value of the last conversation on the previous page (a timestamp in milliseconds). Example: 1600854000000.
- `start_date` (`number`, optional): Start date filter for dateAdded field (Unix timestamp in milliseconds). Example: 1640995200000.
- `status` (`string`, optional): The status of the conversation to be filtered - all, read, unread, starred. One of: all, read, unread, starred, recents. Example: all. One of: `all`, `read`, `unread`, `starred`, `recents`.

Example input: `{"location_id":"<location_id>"}`

### `highlevel_custom_fields_by_object_list`

List Custom Fields by Object · Read-only

List the custom fields and folders of a custom object or of businesses. Returns each field's ID, name, key, data type and options, plus folders. Use for custom objects (key starting with custom_objects.) and business. Use List Custom Fields for contact and opportunity fields.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `location_id` (`string`, required): ID of the HighLevel sub-account (formerly called a location) to work in. The connected account is installed on one sub-account; use that sub-account's ID, shown in the HighLevel URL after /location/. Example: ve9EPM428h8vShlRW1KT.
- `object_key` (`string`, required): Key of the object: custom_objects.<name> for a custom object, or business. Find keys with List Objects. Example: custom_objects.pet.

Example input: `{"location_id":"<location_id>","object_key":"<object_key>"}`

### `highlevel_form_submissions_list`

List Form Submissions · Read-only

List form submissions in a sub-account. Returns each submission's ID, form ID, contact, submitted values and date, with paging info. Use to read leads captured by forms. Filter by form, contact or date range.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `location_id` (`string`, required): ID of the HighLevel sub-account (formerly called a location) to work in. The connected account is installed on one sub-account; use that sub-account's ID, shown in the HighLevel URL after /location/. Example: ve9EPM428h8vShlRW1KT.
- `end_at` (`string`, optional): End of the date range, in YYYY-MM-DD format. Example: 2025-01-31.
- `form_id` (`string`, optional): Only return submissions for this form ID. Get it with List Forms. Example: jjusM6EOngDExnbo2DbU.
- `limit` (`number`, optional): Number of submissions per page, up to 100. Defaults to 20. Example: 20.
- `page` (`number`, optional): Page number, starting at 1. Defaults to 1. Example: 1.
- `query` (`string`, optional): Filter by contact ID, name, email or phone. Example: john@deo.com.
- `start_at` (`string`, optional): Start of the date range, in YYYY-MM-DD format. Example: 2025-01-01.

Example input: `{"location_id":"<location_id>"}`

### `highlevel_forms_list`

List Forms · Read-only

List the forms in a sub-account. Returns each form's ID and name. Use to find a form ID for List Form Submissions.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `location_id` (`string`, required): ID of the HighLevel sub-account (formerly called a location) to work in. The connected account is installed on one sub-account; use that sub-account's ID, shown in the HighLevel URL after /location/. Example: ve9EPM428h8vShlRW1KT.
- `limit` (`number`, optional): Number of forms per page, up to 50. Defaults to 10. Example: 20.
- `skip` (`number`, optional): Number of forms to skip, for paging. Example: 0.
- `type` (`string`, optional): Only return items of this type, such as folder. Example: folder.

Example input: `{"location_id":"<location_id>"}`

### `highlevel_invoice_get`

Get Invoice · Read-only

Get one invoice by ID. Returns the invoice's line items, totals, amount due, contact, status, dates and payment details. Use when you have the invoice ID. Use List Invoices to find invoices.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `alt_id` (`string`, required): ID of the sub-account (location) that owns the records. The connected account is installed on one sub-account; use that sub-account's ID, shown in the HighLevel URL after /location/. Example: ve9EPM428h8vShlRW1KT.
- `invoice_id` (`string`, required): ID of the invoice. Get it with List Invoices. Example: 6578278e879ad2646715ba9c.
- `alt_type` (`string`, optional): Type of owner ID passed in alt_id. Only location (a sub-account) is supported with a sub-account token, so leave it at the default. One of: location. One of: `location`. Default: `location`.

Example input: `{"alt_id":"<alt_id>","invoice_id":"<invoice_id>"}`

### `highlevel_invoices_list`

List Invoices · Read-only

List invoices in a sub-account. Returns each invoice's ID, number, name, contact, total, amount due, status and dates, with a total count. Use to find invoices by status, contact, date or text. Use Get Invoice for one invoice.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `alt_id` (`string`, required): ID of the sub-account (location) that owns the records. The connected account is installed on one sub-account; use that sub-account's ID, shown in the HighLevel URL after /location/. Example: ve9EPM428h8vShlRW1KT.
- `limit` (`string`, required): Maximum number of invoices to return. Example: 10.
- `offset` (`string`, required): Number of invoices to skip, for paging. Use 0 for the first page.
- `alt_type` (`string`, optional): Type of owner ID passed in alt_id. Only location (a sub-account) is supported with a sub-account token, so leave it at the default. One of: location. One of: `location`. Default: `location`.
- `contact_id` (`string`, optional): ID of the contact. Find it with Find Duplicate Contact, List Contacts by Business, or in the contact's URL in HighLevel. Example: ocQHyuzHvysMo5N5VsXc.
- `end_at` (`string`, optional): End of the date range, in YYYY-MM-DD format. Example: 2025-01-31.
- `payment_mode` (`string`, optional): Payment mode to filter by: live or test. Example: live. One of: default, live, test. One of: `default`, `live`, `test`.
- `search` (`string`, optional): To search for an invoice by id / name / email / phoneNo. Example: Alex.
- `sort_field` (`string`, optional): The field on which sorting should be applied. One of: issueDate. Example: issueDate. One of: `issueDate`.
- `sort_order` (`string`, optional): The order of sort which should be applied for the sortField. One of: ascend, descend. Example: descend. One of: `ascend`, `descend`.
- `start_at` (`string`, optional): Start of the date range, in YYYY-MM-DD format. Example: 2025-01-01.
- `status` (`string`, optional): Only return invoices with this status, such as draft, sent, paid, void or partially_paid. Example: paid.

Example input: `{"alt_id":"<alt_id>","limit":"<limit>","offset":"<offset>"}`

### `highlevel_location_custom_field_get`

Get Custom Field · Read-only

Get one custom field by ID or field key. Returns the field's name, key, data type, model and options. Use for one field's details. Use List Custom Fields to see all fields.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `custom_field_id` (`string`, required): ID of the custom field, or its field key such as contact.first_name. Get it with List Custom Fields. Example: 6dvNaf7VhkQ9snc5vnjJ.
- `location_id` (`string`, required): ID of the HighLevel sub-account (formerly called a location) to work in. The connected account is installed on one sub-account; use that sub-account's ID, shown in the HighLevel URL after /location/. Example: ve9EPM428h8vShlRW1KT.

Example input: `{"custom_field_id":"<custom_field_id>","location_id":"<location_id>"}`

### `highlevel_location_custom_fields_list`

List Custom Fields · Read-only

List the custom fields defined for contacts or opportunities in a sub-account. Returns each field's ID, name, field key, data type, model and options. Use to get custom field IDs and keys before setting custom_fields on a contact or opportunity. Use List Custom Fields by Object for custom objects and businesses.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `location_id` (`string`, required): ID of the HighLevel sub-account (formerly called a location) to work in. The connected account is installed on one sub-account; use that sub-account's ID, shown in the HighLevel URL after /location/. Example: ve9EPM428h8vShlRW1KT.
- `model` (`string`, optional): Which records' custom fields to return: contact, opportunity or all. One of: contact, opportunity, all. One of: `contact`, `opportunity`, `all`.

Example input: `{"location_id":"<location_id>"}`

### `highlevel_location_custom_value_get`

Get Custom Value · Read-only

Get one custom value by ID. Returns the custom value's name, field key and value. Use when you have the ID. Use List Custom Values to find IDs.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `custom_value_id` (`string`, required): ID of the custom value. Get it with List Custom Values. Example: kOBjMVAJhFuUeYIojVet.
- `location_id` (`string`, required): ID of the HighLevel sub-account (formerly called a location) to work in. The connected account is installed on one sub-account; use that sub-account's ID, shown in the HighLevel URL after /location/. Example: ve9EPM428h8vShlRW1KT.

Example input: `{"custom_value_id":"<custom_value_id>","location_id":"<location_id>"}`

### `highlevel_location_custom_values_list`

List Custom Values · Read-only

List the custom values (sub-account-wide merge values) in a sub-account. Returns each custom value's ID, name, field key and value. Use to read reusable values such as a booking link used in templates. These differ from custom fields, which are per contact.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `location_id` (`string`, required): ID of the HighLevel sub-account (formerly called a location) to work in. The connected account is installed on one sub-account; use that sub-account's ID, shown in the HighLevel URL after /location/. Example: ve9EPM428h8vShlRW1KT.

Example input: `{"location_id":"<location_id>"}`

### `highlevel_location_get`

Get Sub-Account · Read-only

Get the details of a sub-account (formerly called a location). Returns the sub-account's name, address, phone, email, website, time zone, business settings and companyId. Use to read the connected sub-account's profile, or to get the companyId needed by Search Users.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `location_id` (`string`, required): ID of the HighLevel sub-account (formerly called a location) to work in. The connected account is installed on one sub-account; use that sub-account's ID, shown in the HighLevel URL after /location/. Example: ve9EPM428h8vShlRW1KT.

Example input: `{"location_id":"<location_id>"}`

### `highlevel_location_tag_get`

Get Tag · Read-only

Get one tag by ID. Returns the tag's ID and name. Use when you have the tag ID. Use List Tags to find tags.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `location_id` (`string`, required): ID of the HighLevel sub-account (formerly called a location) to work in. The connected account is installed on one sub-account; use that sub-account's ID, shown in the HighLevel URL after /location/. Example: ve9EPM428h8vShlRW1KT.
- `tag_id` (`string`, required): ID of the tag. Get it with List Tags. Example: flGwEuzsfJOia1i1ikRN.

Example input: `{"location_id":"<location_id>","tag_id":"<tag_id>"}`

### `highlevel_location_tags_list`

List Tags · Read-only

List all tags defined in a sub-account. Returns each tag's ID and name. Use to see available tags or get a tag ID. Use Add Contact Tags to tag a contact by name.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `location_id` (`string`, required): ID of the HighLevel sub-account (formerly called a location) to work in. The connected account is installed on one sub-account; use that sub-account's ID, shown in the HighLevel URL after /location/. Example: ve9EPM428h8vShlRW1KT.

Example input: `{"location_id":"<location_id>"}`

### `highlevel_location_tasks_search`

Search Tasks · Read-only

Search tasks across all contacts in a sub-account. Returns matching tasks with title, body, due date, completion, assignee and contact. Use to find tasks by assignee, contact, completion or text. Use List Contact Tasks for one contact's tasks.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `location_id` (`string`, required): ID of the HighLevel sub-account (formerly called a location) to work in. The connected account is installed on one sub-account; use that sub-account's ID, shown in the HighLevel URL after /location/. Example: ve9EPM428h8vShlRW1KT.
- `assigned_to` (`array`, optional): Only return tasks assigned to these user IDs. Example: ["0004Mtfsd11SBU1mBPgd"].
- `business_id` (`string`, optional): Only return tasks linked to this business ID. Example: 6348240b98722079e5417332.
- `completed` (`boolean`, optional): Set to true for completed tasks only, or false for open tasks only.
- `contact_ids` (`array`, optional): Only return tasks on these contact IDs. Example: ["dSMo5jnqkJyh8YeGXM7k"].
- `limit` (`number`, optional): Maximum number of tasks to return. Example: 10.
- `query` (`string`, optional): Text to search task titles. Example: proposal.
- `skip` (`number`, optional): Number of tasks to skip, for paging. Example: 0.

Example input: `{"location_id":"<location_id>"}`

### `highlevel_location_templates_list`

List Message Templates · Read-only

List the SMS, email and WhatsApp message templates in a sub-account. Returns each template's ID, name, type and content. Use to find a template ID for Send Message.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `location_id` (`string`, required): ID of the HighLevel sub-account (formerly called a location) to work in. The connected account is installed on one sub-account; use that sub-account's ID, shown in the HighLevel URL after /location/. Example: ve9EPM428h8vShlRW1KT.
- `origin_id` (`string`, required): ID of the origin the templates belong to; for a sub-account's own templates use the sub-account (location) ID. Example: ve9EPM428h8vShlRW1KT.
- `deleted` (`boolean`, optional): Set to true to include deleted templates.
- `limit` (`string`, optional): Maximum number of templates to return. Defaults to 25. Example: 25.
- `skip` (`string`, optional): Number of templates to skip, for paging. Example: 0.
- `type` (`string`, optional): Only return templates of this type. One of: sms, email, whatsapp. One of: `sms`, `email`, `whatsapp`.

Example input: `{"location_id":"<location_id>","origin_id":"<origin_id>"}`

### `highlevel_location_timezones_list`

List Timezones · Read-only

List the time zones HighLevel supports for a sub-account. Returns the list of time zone names. Use to pick a valid timezone value for contacts or availability.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `location_id` (`string`, required): ID of the HighLevel sub-account (formerly called a location) to work in. The connected account is installed on one sub-account; use that sub-account's ID, shown in the HighLevel URL after /location/. Example: ve9EPM428h8vShlRW1KT.

Example input: `{"location_id":"<location_id>"}`

### `highlevel_media_files_list`

List Media Files · Read-only

List files and folders in a sub-account's media library. Returns each item's ID, name, type, URL, size and parent folder. Use to find uploaded files and their public URLs, for example to attach to messages.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `alt_id` (`string`, required): ID of the sub-account (location) that owns the records. The connected account is installed on one sub-account; use that sub-account's ID, shown in the HighLevel URL after /location/. Example: ve9EPM428h8vShlRW1KT.
- `sort_by` (`string`, required): Field to sort by, such as createdAt or name. Example: createdAt.
- `sort_order` (`string`, required): Sort direction: asc or desc. Example: desc.
- `type` (`string`, required): What to list: file or folder. Example: file.
- `alt_type` (`string`, optional): Type of owner ID passed in alt_id. Only location (a sub-account) is supported with a sub-account token, so leave it at the default. One of: location. One of: `location`. Default: `location`.
- `fetch_all` (`string`, optional): Set to true to list all files and folders at every level.
- `limit` (`string`, optional): Number of items to return. Example: 10.
- `offset` (`string`, optional): Number of items to skip, for paging. Example: 0.
- `parent_id` (`string`, optional): Only list items inside this folder ID. Example: 65f1c2d3e4a5b6c7d8e9f012.
- `query` (`string`, optional): Text to search file names. Example: invoice.

Example input: `{"alt_id":"<alt_id>","sort_by":"<sort_by>","sort_order":"<sort_order>","type":"<type>"}`

### `highlevel_message_get`

Get Message · Read-only

Get one message by ID. Returns the message's type, direction, body, status, attachments, contact and conversation IDs and date. Use when you have the message ID. Use List Conversation Messages to read a whole thread.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `message_id` (`string`, required): ID of the message. Get it with List Conversation Messages. Example: ve9EPM428h8vShlRW1KT.

Example input: `{"message_id":"<message_id>"}`

### `highlevel_object_record_get`

Get Object Record · Read-only

Get one custom object or business record by ID. Returns the record's property values, owners and dates. Use when you have the record ID. Use Search Object Records to find records.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `record_id` (`string`, required): ID of the record. Get it with Search Object Records. Example: 632c34b4c9b7da3358ac9891.
- `schema_key` (`string`, required): Key of the object: custom_objects.<name>, or business. Example: custom_objects.pet.

Example input: `{"record_id":"<record_id>","schema_key":"<schema_key>"}`

### `highlevel_object_records_search`

Search Object Records · Read-only

Search the records of a custom object or of businesses. Returns matching records with their IDs and property values, plus paging info. Use to find custom object records by their searchable properties. Use Get Object Record for one record by ID.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `location_id` (`string`, required): ID of the HighLevel sub-account (formerly called a location) to work in. The connected account is installed on one sub-account; use that sub-account's ID, shown in the HighLevel URL after /location/. Example: ve9EPM428h8vShlRW1KT.
- `page` (`number`, required): Page number, starting at 1. Example: 1.
- `page_limit` (`number`, required): Number of records per page. Example: 10.
- `query` (`string`, required): Text matched against the object's searchable properties (set on the object in HighLevel). Example: Buddy.
- `schema_key` (`string`, required): Key of the object to search: custom_objects.<name>, or business. Find keys with List Objects. Example: custom_objects.pet.
- `search_after` (`array`, required): Paging cursor from the previous page's last record. Pass [] for the first page. Example: [].

Example input: `{"location_id":"<location_id>","page":1,"page_limit":10,"query":"<query>","schema_key":"<schema_key>","search_after":[]}`

### `highlevel_object_schema_get`

Get Object Schema · Read-only

Get the schema of a standard or custom object. Returns the object's key, labels, searchable properties and, when requested, all of its fields. Use to learn an object's fields before searching its records.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `key` (`string`, required): Key of the object: custom_objects.<name> for a custom object, or a standard key such as contact, opportunity or business. Find keys with List Objects. Example: custom_objects.pet.
- `location_id` (`string`, required): ID of the HighLevel sub-account (formerly called a location) to work in. The connected account is installed on one sub-account; use that sub-account's ID, shown in the HighLevel URL after /location/. Example: ve9EPM428h8vShlRW1KT.
- `fetch_properties` (`string`, optional): Set to true to include all of the object's standard and custom fields.

Example input: `{"key":"<key>","location_id":"<location_id>"}`

### `highlevel_objects_list`

List Objects · Read-only

List the objects in a sub-account, both standard (contact, opportunity, business) and custom. Returns each object's key, labels and type. Use to find custom object keys for Get Object Schema and Search Object Records.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `location_id` (`string`, required): ID of the HighLevel sub-account (formerly called a location) to work in. The connected account is installed on one sub-account; use that sub-account's ID, shown in the HighLevel URL after /location/. Example: ve9EPM428h8vShlRW1KT.

Example input: `{"location_id":"<location_id>"}`

### `highlevel_opportunities_search`

Search Opportunities · Read-only

Search opportunities (deals) in a sub-account with filters. Returns a page of opportunities with name, status, value, pipeline, stage, contact and assignee, plus paging metadata. Use to find or list deals by pipeline, stage, status, contact, assignee or text. Use Get Opportunity when you already have the ID.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `location_id` (`string`, required): ID of the HighLevel sub-account (formerly called a location) to work in. The connected account is installed on one sub-account; use that sub-account's ID, shown in the HighLevel URL after /location/. Example: ve9EPM428h8vShlRW1KT.
- `assigned_to` (`string`, optional): Only return opportunities assigned to this user ID. Example: 082goXVW3lIExEQPOnd3.
- `campaign_id` (`string`, optional): Only return opportunities from this campaign ID. Example: Y2I9XM7aO1hncuSOlc9L.
- `contact_id` (`string`, optional): Only return opportunities for this contact. Example: WFwVrSSjZ2CNHbZThQX2.
- `country` (`string`, optional): Only return opportunities whose contact is in this country, as a two-letter code. Example: US.
- `end_date` (`string`, optional): Only return opportunities created on or before this date, in mm-dd-yyyy format. Example: 12-31-2025.
- `get_calendar_events` (`boolean`, optional): Set to true to include the contact's calendar events with each opportunity.
- `get_notes` (`boolean`, optional): Set to true to include the contact's notes with each opportunity.
- `get_tasks` (`boolean`, optional): Set to true to include the contact's tasks with each opportunity.
- `limit` (`number`, optional): Number of opportunities per page, up to 100. Defaults to 20. Example: 20.
- `opportunity_id` (`string`, optional): Only return the opportunity with this ID. Example: 123akv4LFn6C9frZoy3e.
- `order` (`string`, optional): Sort order of the results, such as added_asc or added_desc. Example: added_desc.
- `page` (`number`, optional): Page number to return, starting at 1. Defaults to 1. Example: 1.
- `pipeline_id` (`string`, optional): Only return opportunities in this pipeline. Get IDs with List Pipelines. Example: bCkKGpDsyPP4peuKowkG.
- `pipeline_stage_id` (`string`, optional): Only return opportunities in this pipeline stage. Example: 7915dedc-8f18-44d5-8bc3-77c04e994a10.
- `query` (`string`, optional): Free-text search across opportunity name and contact details. Example: john@deo.com.
- `start_after` (`string`, optional): Paging cursor: the startAfter value from the previous page's meta, a timestamp in milliseconds. Pass it with start_after_id to get the next page. Example: 1628008053263.
- `start_after_id` (`string`, optional): Paging cursor: the startAfterId value from the previous page's meta. Pass it with start_after to get the next page. Example: UIaE1WjAwWKdlyD7osQI.
- `start_date` (`string`, optional): Only return opportunities created on or after this date, in mm-dd-yyyy format. Example: 01-01-2025.
- `status` (`string`, optional): Only return opportunities with this status. One of: open, won, lost, abandoned, all. One of: `open`, `won`, `lost`, `abandoned`, `all`.

Example input: `{"location_id":"<location_id>"}`

### `highlevel_opportunity_get`

Get Opportunity · Read-only

Get one opportunity (deal) by ID. Returns the opportunity's name, status, value, pipeline, stage, contact, assignee, custom fields and dates. Use when you have the opportunity ID. Use Search Opportunities to find opportunities.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `opportunity_id` (`string`, required): ID of the opportunity. Get it with Search Opportunities. Example: yWQobCRIhRguQtD2llvk.

Example input: `{"opportunity_id":"<opportunity_id>"}`

### `highlevel_opportunity_lost_reasons_list`

List Opportunity Lost Reasons · Read-only

List the lost reasons configured in a sub-account. Returns each lost reason's ID and name. Use to get a lost reason ID before marking an opportunity lost with Update Opportunity Status.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `location_id` (`string`, required): ID of the HighLevel sub-account (formerly called a location) to work in. The connected account is installed on one sub-account; use that sub-account's ID, shown in the HighLevel URL after /location/. Example: ve9EPM428h8vShlRW1KT.
- `deleted` (`boolean`, optional): Set to true to include deleted lost reasons.
- `get_count` (`boolean`, optional): Set to true to include the total count in the response.
- `limit` (`number`, optional): Maximum number of lost reasons to return. Defaults to 100. Example: 100.
- `name` (`string`, optional): Only return lost reasons with this name. Example: Too expensive.
- `query` (`string`, optional): Text to search lost reason names. Example: price.
- `skip` (`number`, optional): Number of lost reasons to skip, for paging. Example: 0.

Example input: `{"location_id":"<location_id>"}`

### `highlevel_order_get`

Get Order · Read-only

Get one order by ID. Returns the order's items, amounts, contact, status, payment status, fulfillment and source. Use when you have the order ID. Use List Orders to find orders.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `alt_id` (`string`, required): ID of the sub-account (location) that owns the records. The connected account is installed on one sub-account; use that sub-account's ID, shown in the HighLevel URL after /location/. Example: ve9EPM428h8vShlRW1KT.
- `order_id` (`string`, required): ID of the order. Get it with List Orders. Example: 653f5e0cde5a1314e62a837c.
- `location_id` (`string`, optional): Sub-account (location) ID. Usually the same as alt_id. Example: 3SwdhCu3svxI8AKsPJt6.

Example input: `{"alt_id":"<alt_id>","order_id":"<order_id>"}`

### `highlevel_orders_list`

List Orders · Read-only

List orders in a sub-account. Returns each order's ID, contact, amount, currency, status, payment status and date, with a total count. Use to find orders by status, contact, date or text. Use Get Order for one order.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `alt_id` (`string`, required): ID of the sub-account (location) that owns the records. The connected account is installed on one sub-account; use that sub-account's ID, shown in the HighLevel URL after /location/. Example: ve9EPM428h8vShlRW1KT.
- `contact_id` (`string`, optional): ID of the contact. Find it with Find Duplicate Contact, List Contacts by Business, or in the contact's URL in HighLevel. Example: ocQHyuzHvysMo5N5VsXc.
- `end_at` (`string`, optional): End of the date range, in YYYY-MM-DD format. Example: 2025-01-31.
- `funnel_product_ids` (`string`, optional): Funnel product ids separated by comma. Example: 61dd0c7dc077f712a5f787ff,61d6afc9d39ac5e35965c017.
- `limit` (`number`, optional): Maximum number of records to return in one page. Example: 20.
- `location_id` (`string`, optional): Sub-account (location) ID. Usually the same as alt_id. Example: 3SwdhCu3svxI8AKsPJt6.
- `offset` (`number`, optional): Number of records to skip before the page starts, for paging. Example: 0.
- `payment_mode` (`string`, optional): Payment mode to filter by: live or test. Example: live.
- `payment_status` (`string`, optional): Payment Status of the Order. One of: paid, unpaid, refunded, partially_paid. Example: unpaid. One of: `paid`, `unpaid`, `refunded`, `partially_paid`.
- `search` (`string`, optional): The name of the order for searching. Example: Awesome order.
- `source_id` (`string`, optional): Source id. Example: 61dd0c7dc077f712a5f787ff.
- `start_at` (`string`, optional): Start of the date range, in YYYY-MM-DD format. Example: 2025-01-01.
- `status` (`string`, optional): Order status. Example: completed.

Example input: `{"alt_id":"<alt_id>"}`

### `highlevel_pipelines_list`

List Pipelines · Read-only

List the opportunity pipelines in a sub-account. Returns each pipeline's ID and name with its ordered stages (stage ID and name). Use to get pipeline and stage IDs before creating, moving or searching opportunities.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `location_id` (`string`, required): ID of the HighLevel sub-account (formerly called a location) to work in. The connected account is installed on one sub-account; use that sub-account's ID, shown in the HighLevel URL after /location/. Example: ve9EPM428h8vShlRW1KT.

Example input: `{"location_id":"<location_id>"}`

### `highlevel_product_get`

Get Product · Read-only

Get one product by ID or slug. Returns the product's name, description, type, images, variants and settings. Use when you have the product ID. Use List Product Prices for its prices.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `location_id` (`string`, required): ID of the HighLevel sub-account (formerly called a location) to work in. The connected account is installed on one sub-account; use that sub-account's ID, shown in the HighLevel URL after /location/. Example: ve9EPM428h8vShlRW1KT.
- `product_id` (`string`, required): ID or slug of the product. Get it with List Products. Example: 6578278e879ad2646715ba9c.
- `send_wishlist_status` (`boolean`, optional): Set to true to include whether the product is on wishlists.

Example input: `{"location_id":"<location_id>","product_id":"<product_id>"}`

### `highlevel_product_prices_list`

List Product Prices · Read-only

List the prices of a product. Returns each price's ID, name, amount, currency, type (one-time or recurring) and recurrence. Use to see what a product costs. Use Get Product for the product itself.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `location_id` (`string`, required): ID of the HighLevel sub-account (formerly called a location) to work in. The connected account is installed on one sub-account; use that sub-account's ID, shown in the HighLevel URL after /location/. Example: ve9EPM428h8vShlRW1KT.
- `product_id` (`string`, required): ID of the product. Example: 6578278e879ad2646715ba9c.
- `ids` (`string`, optional): Only return these price IDs, comma-separated. Example: 6241712be68f7a98102ba272,632027d51f7876cd3020213d.
- `limit` (`number`, optional): Maximum number of records to return in one page. Example: 20.
- `offset` (`number`, optional): Number of records to skip before the page starts, for paging. Example: 0.

Example input: `{"location_id":"<location_id>","product_id":"<product_id>"}`

### `highlevel_products_list`

List Products · Read-only

List the products in a sub-account. Returns each product's ID, name, description, type, images and settings, with a total count. Use to find products by name or collection. Use Get Product for one product and List Product Prices for its prices.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `location_id` (`string`, required): ID of the HighLevel sub-account (formerly called a location) to work in. The connected account is installed on one sub-account; use that sub-account's ID, shown in the HighLevel URL after /location/. Example: ve9EPM428h8vShlRW1KT.
- `available_in_store` (`boolean`, optional): Set to true for products available in the online store.
- `collection_ids` (`string`, optional): Only return products in these collection IDs, comma-separated. Example: 65d71377c326ea78e1c47df5.
- `collection_slug` (`string`, optional): Only return products in the collection with this slug. Example: summer-sale.
- `expand` (`array`, optional): Related data to include with each product: tax, stripe or paypal. Example: ["tax"].
- `included_in_store` (`boolean`, optional): Set to true for products included in the store, or false for products that are not.
- `limit` (`number`, optional): Maximum number of records to return in one page. Example: 20.
- `offset` (`number`, optional): Number of records to skip before the page starts, for paging. Example: 0.
- `product_ids` (`array`, optional): Only return these product IDs. Example: ["6578278e879ad2646715ba9c"].
- `search` (`string`, optional): Text to search product names. Example: Awesome product.
- `sort_order` (`string`, optional): Sort order by date. One of: asc, desc. One of: `asc`, `desc`.
- `store_id` (`string`, optional): Only return products for this store ID. Example: 3SwdhCu3svxI8AKsPJt6.

Example input: `{"location_id":"<location_id>"}`

### `highlevel_record_relations_list`

List Record Relations · Read-only

List the records linked to a record through associations. Returns each relation's ID, association ID and the two linked record IDs. Use to see what a contact or custom object record is linked to. Use Create Relation to add a link.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `limit` (`number`, required): Maximum number of relations to return. Example: 100.
- `location_id` (`string`, required): ID of the HighLevel sub-account (formerly called a location) to work in. The connected account is installed on one sub-account; use that sub-account's ID, shown in the HighLevel URL after /location/. Example: ve9EPM428h8vShlRW1KT.
- `record_id` (`string`, required): ID of the record (contact, opportunity or custom object record). Example: 632c34b4c9b7da3358ac9891.
- `skip` (`number`, required): Number of relations to skip, for paging. Use 0 for the first page.
- `association_ids` (`array`, optional): Only return relations for these association IDs. Example: ["ve9EPM428h8vShlRW1KT"].

Example input: `{"limit":100,"location_id":"<location_id>","record_id":"<record_id>","skip":0}`

### `highlevel_subscription_get`

Get Subscription · Read-only

Get one payment subscription by ID. Returns the subscription's amount, currency, status, interval, contact and provider details. Use when you have the subscription ID. Use List Subscriptions to find subscriptions.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `alt_id` (`string`, required): ID of the sub-account (location) that owns the records. The connected account is installed on one sub-account; use that sub-account's ID, shown in the HighLevel URL after /location/. Example: ve9EPM428h8vShlRW1KT.
- `subscription_id` (`string`, required): ID of the subscription. Get it with List Subscriptions. Example: 6322e9c9e39fc14ab3ed7042.
- `alt_type` (`string`, optional): Type of owner ID passed in alt_id. Only location (a sub-account) is supported with a sub-account token, so leave it at the default. One of: location. One of: `location`. Default: `location`.

Example input: `{"alt_id":"<alt_id>","subscription_id":"<subscription_id>"}`

### `highlevel_subscriptions_list`

List Subscriptions · Read-only

List payment subscriptions in a sub-account. Returns each subscription's ID, contact, amount, currency, status, interval and dates, with a total count. Use to review recurring payments. Use Get Subscription for one subscription.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `alt_id` (`string`, required): ID of the sub-account (location) that owns the records. The connected account is installed on one sub-account; use that sub-account's ID, shown in the HighLevel URL after /location/. Example: ve9EPM428h8vShlRW1KT.
- `alt_type` (`string`, optional): Type of owner ID passed in alt_id. Only location (a sub-account) is supported with a sub-account token, so leave it at the default. One of: location. One of: `location`. Default: `location`.
- `contact_id` (`string`, optional): ID of the contact. Find it with Find Duplicate Contact, List Contacts by Business, or in the contact's URL in HighLevel. Example: ocQHyuzHvysMo5N5VsXc.
- `end_at` (`string`, optional): End of the date range, in YYYY-MM-DD format. Example: 2025-01-31.
- `entity_id` (`string`, optional): Entity id for filtering of subscriptions. Example: 61dd0fe9c077f73e67f78803.
- `entity_source_type` (`string`, optional): Source of the subscriptions. Example: funnel.
- `get_payments_collected_count` (`boolean`, optional): Set to true to include how many payments each subscription has collected.
- `limit` (`number`, optional): Maximum number of records to return in one page. Example: 20.
- `offset` (`number`, optional): Number of records to skip before the page starts, for paging. Example: 0.
- `payment_mode` (`string`, optional): Payment mode to filter by: live or test. Example: live.
- `search` (`string`, optional): The name of the subscription for searching. Example: Awesome subscription.
- `start_at` (`string`, optional): Start of the date range, in YYYY-MM-DD format. Example: 2025-01-01.
- `subscription_id` (`string`, optional): Only return the subscription with this ID. Example: 64bf78af39118e4011926cba.

Example input: `{"alt_id":"<alt_id>"}`

### `highlevel_survey_submissions_list`

List Survey Submissions · Read-only

List survey submissions in a sub-account. Returns each submission's ID, survey ID, contact, answers and date, with paging info. Use to read survey responses. Filter by survey, contact or date range.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `location_id` (`string`, required): ID of the HighLevel sub-account (formerly called a location) to work in. The connected account is installed on one sub-account; use that sub-account's ID, shown in the HighLevel URL after /location/. Example: ve9EPM428h8vShlRW1KT.
- `end_at` (`string`, optional): End of the date range, in YYYY-MM-DD format. Example: 2025-01-31.
- `limit` (`number`, optional): Number of submissions per page, up to 100. Defaults to 20. Example: 20.
- `page` (`number`, optional): Page number, starting at 1. Defaults to 1. Example: 1.
- `query` (`string`, optional): Filter by contact ID, name, email or phone. Example: john@deo.com.
- `start_at` (`string`, optional): Start of the date range, in YYYY-MM-DD format. Example: 2025-01-01.
- `survey_id` (`string`, optional): Only return submissions for this survey ID. Get it with List Surveys. Example: jjusM6EOngDExnbo2DbU.

Example input: `{"location_id":"<location_id>"}`

### `highlevel_surveys_list`

List Surveys · Read-only

List the surveys in a sub-account. Returns each survey's ID and name. Use to find a survey ID for List Survey Submissions.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `location_id` (`string`, required): ID of the HighLevel sub-account (formerly called a location) to work in. The connected account is installed on one sub-account; use that sub-account's ID, shown in the HighLevel URL after /location/. Example: ve9EPM428h8vShlRW1KT.
- `limit` (`number`, optional): Number of surveys per page, up to 50. Defaults to 10. Example: 20.
- `skip` (`number`, optional): Number of surveys to skip, for paging. Example: 0.
- `type` (`string`, optional): Only return items of this type, such as folder. Example: folder.

Example input: `{"location_id":"<location_id>"}`

### `highlevel_transaction_get`

Get Transaction · Read-only

Get one payment transaction by ID. Returns the transaction's amount, currency, status, contact, source and payment provider details. Use when you have the transaction ID. Use List Transactions to find transactions.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `alt_id` (`string`, required): ID of the sub-account (location) that owns the records. The connected account is installed on one sub-account; use that sub-account's ID, shown in the HighLevel URL after /location/. Example: ve9EPM428h8vShlRW1KT.
- `transaction_id` (`string`, required): ID of the transaction. Get it with List Transactions. Example: 61dd0feac077f72010f78804.
- `alt_type` (`string`, optional): Type of owner ID passed in alt_id. Only location (a sub-account) is supported with a sub-account token, so leave it at the default. Default: `location`.
- `location_id` (`string`, optional): Sub-account (location) ID. Usually the same as alt_id. Example: 3SwdhCu3svxI8AKsPJt6.

Example input: `{"alt_id":"<alt_id>","transaction_id":"<transaction_id>"}`

### `highlevel_transactions_list`

List Transactions · Read-only

List payment transactions in a sub-account. Returns each transaction's ID, contact, amount, currency, status, source and date, with a total count. Use to review payments by contact, subscription, source or date. Use Get Transaction for one transaction.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `alt_id` (`string`, required): ID of the sub-account (location) that owns the records. The connected account is installed on one sub-account; use that sub-account's ID, shown in the HighLevel URL after /location/. Example: ve9EPM428h8vShlRW1KT.
- `alt_type` (`string`, optional): Type of owner ID passed in alt_id. Only location (a sub-account) is supported with a sub-account token, so leave it at the default. Default: `location`.
- `contact_id` (`string`, optional): ID of the contact. Find it with Find Duplicate Contact, List Contacts by Business, or in the contact's URL in HighLevel. Example: ocQHyuzHvysMo5N5VsXc.
- `end_at` (`string`, optional): End of the date range, in YYYY-MM-DD format. Example: 2025-01-31.
- `entity_id` (`string`, optional): Entity id for filtering of transactions. Example: 61dd0fe9c077f73e67f78803.
- `entity_source_sub_type` (`string`, optional): Source sub-type of the transactions. Example: two_step_order_form.
- `entity_source_type` (`string`, optional): Source of the transactions. Example: funnel.
- `limit` (`number`, optional): Maximum number of records to return in one page. Example: 20.
- `location_id` (`string`, optional): Sub-account (location) ID. Usually the same as alt_id. Example: 3SwdhCu3svxI8AKsPJt6.
- `offset` (`number`, optional): Number of records to skip before the page starts, for paging. Example: 0.
- `payment_mode` (`string`, optional): Payment mode to filter by: live or test. Example: live.
- `search` (`string`, optional): The name of the transaction for searching. Example: Awesome transaction.
- `start_at` (`string`, optional): Start of the date range, in YYYY-MM-DD format. Example: 2025-01-01.
- `subscription_id` (`string`, optional): ID of the subscription. Get it with List Subscriptions. Example: 6322e9c9e39fc14ab3ed7042.

Example input: `{"alt_id":"<alt_id>"}`

### `highlevel_trigger_links_list`

List Trigger Links · Read-only

List the trigger links in a sub-account. Returns each link's ID, name, redirect URL and field key. Use to find trackable links to put in messages.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `location_id` (`string`, required): ID of the HighLevel sub-account (formerly called a location) to work in. The connected account is installed on one sub-account; use that sub-account's ID, shown in the HighLevel URL after /location/. Example: ve9EPM428h8vShlRW1KT.

Example input: `{"location_id":"<location_id>"}`

### `highlevel_user_get`

Get User · Read-only

Get one HighLevel user (team member) by ID. Returns the user's name, email, phone, role, permissions and sub-account access. Use when you have the user ID. Use Search Users to find users.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `user_id` (`string`, required): ID of a HighLevel user (team member). Look it up with Search Users. Example: 082goXVW3lIExEQPOnd3.

Example input: `{"user_id":"<user_id>"}`

### `highlevel_users_search`

Search Users · Read-only

Search the users (team members) of a HighLevel company or sub-account. Returns each user's ID, name, email, phone, role and permissions, with a total count. Use to find user IDs for assigning contacts, opportunities, tasks and appointments. Use Get User for one user by ID.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `company_id` (`string`, required): ID of the HighLevel company (agency) that owns the sub-account. Get it from the companyId field of Get Sub-Account. Example: 5DP41231LkQsiKESj6rh.
- `enabled_two_way_sync` (`boolean`, optional): Set to true to only return users with two-way calendar sync turned on.
- `ids` (`string`, optional): Only return these user IDs, comma-separated. Example: 5DP4iH6HLkQsiKESj6rh,5DP4iH6HLkQsiKESj34h.
- `limit` (`string`, optional): Maximum number of users to return. Defaults to 25. Example: 25.
- `location_id` (`string`, optional): Only return users with access to this sub-account. The connected account is installed on one sub-account; use that sub-account's ID, shown in the HighLevel URL after /location/. Example: ve9EPM428h8vShlRW1KT.
- `query` (`string`, optional): Text matched against the user's full name, email or phone. Example: John.
- `role` (`string`, optional): Only return users with this role, such as admin or user. Example: admin.
- `skip` (`string`, optional): Number of users to skip, for paging. Example: 0.
- `sort` (`string`, optional): Field to sort by, such as dateAdded. Defaults to first and last name. Example: dateAdded.
- `sort_direction` (`string`, optional): Sort direction: asc or desc. Example: asc.
- `type` (`string`, optional): Only return users of this type, such as agency or account. Example: account.

Example input: `{"company_id":"<company_id>"}`

### `highlevel_workflows_list`

List Workflows · Read-only

List the automation workflows in a sub-account. Returns each workflow's ID, name, status and dates. Use to find a workflow ID for Add Contact to Workflow.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `location_id` (`string`, required): ID of the HighLevel sub-account (formerly called a location) to work in. The connected account is installed on one sub-account; use that sub-account's ID, shown in the HighLevel URL after /location/. Example: ve9EPM428h8vShlRW1KT.

Example input: `{"location_id":"<location_id>"}`

### `highlevel_appointment_create`

Create Appointment · Write

Book an appointment for a contact on a calendar. Returns the created appointment with its ID. Use after Get Calendar Free Slots to book a time. Use Update Appointment to reschedule or change status.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `calendar_id` (`string`, required): ID of the calendar to book on. Get it with List Calendars. Example: CVokAlI8fgw4WYWoCtQz.
- `contact_id` (`string`, required): ID of the contact the appointment is for. Example: 0007BWpSzSwfiuSl0tR2.
- `location_id` (`string`, required): ID of the HighLevel sub-account (formerly called a location) to work in. The connected account is installed on one sub-account; use that sub-account's ID, shown in the HighLevel URL after /location/. Example: ve9EPM428h8vShlRW1KT.
- `start_time` (`string`, required): Start of the appointment in ISO 8601 format with offset. Example: 2025-06-23T03:30:00+05:30.
- `address` (`string`, optional): Free-text meeting address or location shown on the appointment, such as a street address or a meeting link. When set, meeting_location_type defaults to custom. Example: Zoom.
- `appointment_status` (`string`, optional): Status of the appointment. One of: new, confirmed, cancelled, showed, noshow, invalid. One of: `new`, `confirmed`, `cancelled`, `showed`, `noshow`, `invalid`.
- `assigned_user_id` (`string`, optional): ID of the HighLevel user the appointment is assigned to. Look it up with Search Users. Example: 0007BWpSzSwfiuSl0tR2.
- `description` (`string`, optional): Description or agenda for the appointment. Example: Booking a call to discuss the project.
- `end_time` (`string`, optional): End of the appointment in ISO 8601 format with offset. When left empty, the calendar's slot duration is used. Example: 2025-06-23T04:30:00+05:30.
- `ignore_date_range` (`boolean`, optional): Set to true to ignore the calendar's minimum scheduling notice and bookable date range.
- `ignore_free_slot_validation` (`boolean`, optional): Set to true to book even when the time is not a free slot on the calendar (this also skips the date range check).
- `meeting_location_id` (`string`, optional): ID of a meeting location configured on the calendar, taken from the calendar's locationConfigurations (see Get Calendar). Example: custom_0.
- `meeting_location_type` (`string`, optional): Kind of meeting location. One of: custom, zoom, gmeet, phone, address, ms_teams, google. One of: `custom`, `zoom`, `gmeet`, `phone`, `address`, `ms_teams`, `google`.
- `override_location_config` (`boolean`, optional): Set to true when you pass only meeting_location_type, or false when you pass only meeting_location_id, so HighLevel knows whether to override the calendar's location configuration.
- `rrule` (`string`, optional): Recurrence rule in iCalendar RFC 5545 RRULE format for a recurring appointment. DTSTART is not needed; occurrences are counted from start_time. Example: RRULE:FREQ=WEEKLY;COUNT=4.
- `title` (`string`, optional): Title of the appointment shown on the calendar. Example: Discovery call.
- `to_notify` (`boolean`, optional): Set to false to stop workflows and automations from running for this booking.

Example input: `{"calendar_id":"<calendar_id>","contact_id":"<contact_id>","location_id":"<location_id>","start_time":"<start_time>"}`

### `highlevel_appointment_note_create`

Create Appointment Note · Write

Add a note to an appointment. Returns the created note with its ID. Use to record context on a booking. Use Create Contact Note for notes on the contact.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `appointment_id` (`string`, required): ID of the appointment. Example: 0TkCdp9PfvLeWKYRRvIz.
- `body` (`string`, required): Text of the note. Example: Customer asked to bring the signed contract.
- `user_id` (`string`, optional): ID of the user to show as the note's author. Example: GCs5KuzPqTls7vWclkEV.

Example input: `{"appointment_id":"<appointment_id>","body":"<body>"}`

### `highlevel_appointment_note_update`

Update Appointment Note · Write

Update a note on an appointment. Returns the updated note. Use to change a booking note's text. Use List Appointment Notes to find note IDs.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `appointment_id` (`string`, required): ID of the appointment. Example: 0TkCdp9PfvLeWKYRRvIz.
- `body` (`string`, required): New text of the note. Example: Contract received.
- `note_id` (`string`, required): ID of the note. Get it with List Appointment Notes. Example: ocQHyuzHvysMo5N5VsXc.
- `user_id` (`string`, optional): ID of the user to show as the note's author. Example: GCs5KuzPqTls7vWclkEV.

Example input: `{"appointment_id":"<appointment_id>","body":"<body>","note_id":"<note_id>"}`

### `highlevel_appointment_update`

Update Appointment · Write

Update or reschedule an appointment. Returns the updated appointment. Use to change time, status (such as confirmed, cancelled or showed), assignee or details. Use Create Appointment for a new booking.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `event_id` (`string`, required): ID of the appointment (event). For a recurring appointment, pass an instance ID to change one occurrence or the master event ID to change the whole series. Get IDs with List Calendar Events or List Contact Appointments. Example: 0TkCdp9PfvLeWKYRRvIz.
- `address` (`string`, optional): Free-text meeting address or location shown on the appointment, such as a street address or a meeting link. When set, meeting_location_type defaults to custom. Example: Zoom.
- `appointment_status` (`string`, optional): Status of the appointment. One of: new, confirmed, cancelled, showed, noshow, invalid. One of: `new`, `confirmed`, `cancelled`, `showed`, `noshow`, `invalid`.
- `assigned_user_id` (`string`, optional): ID of the HighLevel user the appointment is assigned to. Look it up with Search Users. Example: 0007BWpSzSwfiuSl0tR2.
- `calendar_id` (`string`, optional): ID of the calendar to move the appointment to. Example: CVokAlI8fgw4WYWoCtQz.
- `description` (`string`, optional): Description or agenda for the appointment. Example: Booking a call to discuss the project.
- `end_time` (`string`, optional): New end of the appointment in ISO 8601 format with offset. Example: 2025-06-23T04:30:00+05:30.
- `ignore_date_range` (`boolean`, optional): Set to true to ignore the calendar's minimum scheduling notice and bookable date range.
- `ignore_free_slot_validation` (`boolean`, optional): Set to true to book even when the time is not a free slot on the calendar (this also skips the date range check).
- `meeting_location_id` (`string`, optional): ID of a meeting location configured on the calendar, taken from the calendar's locationConfigurations (see Get Calendar). Example: custom_0.
- `meeting_location_type` (`string`, optional): Kind of meeting location. One of: custom, zoom, gmeet, phone, address, ms_teams, google. One of: `custom`, `zoom`, `gmeet`, `phone`, `address`, `ms_teams`, `google`.
- `override_location_config` (`boolean`, optional): Set to true when you pass only meeting_location_type, or false when you pass only meeting_location_id, so HighLevel knows whether to override the calendar's location configuration.
- `rrule` (`string`, optional): Recurrence rule in iCalendar RFC 5545 RRULE format for a recurring appointment. DTSTART is not needed; occurrences are counted from start_time. Example: RRULE:FREQ=WEEKLY;COUNT=4.
- `start_time` (`string`, optional): New start of the appointment in ISO 8601 format with offset. Example: 2025-06-23T03:30:00+05:30.
- `title` (`string`, optional): Title of the appointment shown on the calendar. Example: Discovery call.
- `to_notify` (`boolean`, optional): Set to false to stop workflows and automations from running for this booking.

Example input: `{"event_id":"<event_id>"}`

### `highlevel_block_slot_create`

Create Block Slot · Write

Block off time on a calendar or for a user so it cannot be booked. Returns the created block slot with its ID. Use for time off or busy periods. Use Create Appointment to book a contact.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `calendar_id` (`string`, required): ID of the calendar to block time on. Set this or assigned_user_id, not both. Example: CVokAlI8fgw4WYWoCtQz.
- `location_id` (`string`, required): ID of the HighLevel sub-account (formerly called a location) to work in. The connected account is installed on one sub-account; use that sub-account's ID, shown in the HighLevel URL after /location/. Example: ve9EPM428h8vShlRW1KT.
- `assigned_user_id` (`string`, optional): ID of the user to block time for. Set this or calendar_id, not both. Example: CVokAlI8fgw4WYWoCtQz.
- `end_time` (`string`, optional): End date and time in ISO 8601 format with offset. Example: 2025-06-23T04:30:00+05:30.
- `start_time` (`string`, optional): Start date and time in ISO 8601 format with offset. Example: 2025-06-23T03:30:00+05:30.
- `title` (`string`, optional): Label shown on the blocked time. Example: Team offsite.

Example input: `{"calendar_id":"<calendar_id>","location_id":"<location_id>"}`

### `highlevel_block_slot_update`

Update Block Slot · Write

Change an existing block slot's time, title or owner. Returns the updated block slot. Use to move or relabel blocked time. Use List Blocked Slots to find block IDs.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `calendar_id` (`string`, required): ID of the calendar the block is on. Set this or assigned_user_id, not both. Example: CVokAlI8fgw4WYWoCtQz.
- `event_id` (`string`, required): ID of the block slot. Get it with List Blocked Slots. Example: 0TkCdp9PfvLeWKYRRvIz.
- `location_id` (`string`, required): ID of the HighLevel sub-account (formerly called a location) to work in. The connected account is installed on one sub-account; use that sub-account's ID, shown in the HighLevel URL after /location/. Example: ve9EPM428h8vShlRW1KT.
- `assigned_user_id` (`string`, optional): ID of the user the block is for. Set this or calendar_id, not both. Example: CVokAlI8fgw4WYWoCtQz.
- `end_time` (`string`, optional): End date and time in ISO 8601 format with offset. Example: 2025-06-23T04:30:00+05:30.
- `start_time` (`string`, optional): Start date and time in ISO 8601 format with offset. Example: 2025-06-23T03:30:00+05:30.
- `title` (`string`, optional): Label shown on the blocked time. Example: Team offsite.

Example input: `{"calendar_id":"<calendar_id>","event_id":"<event_id>","location_id":"<location_id>"}`

### `highlevel_business_create`

Create Business · Write

Create a business (company record) in a sub-account. Returns the created business with its ID. Use to add a company. Use Update Business to change one.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `location_id` (`string`, required): ID of the HighLevel sub-account (formerly called a location) to work in. The connected account is installed on one sub-account; use that sub-account's ID, shown in the HighLevel URL after /location/. Example: ve9EPM428h8vShlRW1KT.
- `name` (`string`, required): Name of the business. Example: Microsoft.
- `address` (`string`, optional): Street address of the business. Example: 1 Market St.
- `city` (`string`, optional): City of the business. Example: New York.
- `country` (`string`, optional): Country of the business, as a two-letter code. Example: US.
- `description` (`string`, optional): Short description of the business. Example: Enterprise software customer.
- `email` (`string`, optional): Email address of the business. Example: info@example.com.
- `phone` (`string`, optional): Phone number of the business with country code. Example: +18832327657.
- `postal_code` (`string`, optional): Postal or ZIP code. Example: 35061.
- `state` (`string`, optional): State or region of the business. Example: New York.
- `website` (`string`, optional): Website of the business. Example: www.example.com.

Example input: `{"location_id":"<location_id>","name":"<name>"}`

### `highlevel_business_update`

Update Business · Write

Update a business (company record). Returns the updated business. Use to change a company's details. Only the fields you pass are changed.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `business_id` (`string`, required): ID of the business (company record) in the sub-account. Get it with List Businesses. Example: 5DP4iH6HLkQsiKESj6rh.
- `address` (`string`, optional): Street address of the business. Example: 1 Market St.
- `city` (`string`, optional): City of the business. Example: New York.
- `country` (`string`, optional): Country of the business, as a two-letter code. Example: US.
- `description` (`string`, optional): Short description of the business. Example: Enterprise software customer.
- `email` (`string`, optional): Email address of the business. Example: info@example.com.
- `name` (`string`, optional): Name of the business. Example: Microsoft.
- `phone` (`string`, optional): Phone number of the business with country code. Example: +18832327657.
- `postal_code` (`string`, optional): Postal or ZIP code. Example: 35061.
- `state` (`string`, optional): State or region of the business. Example: New York.
- `website` (`string`, optional): Website of the business. Example: www.example.com.

Example input: `{"business_id":"<business_id>"}`

### `highlevel_contact_campaign_add`

Add Contact to Campaign · Write

Enroll a contact in a campaign. Returns a success flag. Use to start a campaign for a contact. Use List Campaigns to find campaign IDs; use Add Contact to Workflow for workflows.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `campaign_id` (`string`, required): ID of the campaign. Get it with List Campaigns. Example: Y2I9XM7aO1hncuSOlc9L.
- `contact_id` (`string`, required): ID of the contact. Find it with Find Duplicate Contact, List Contacts by Business, or in the contact's URL in HighLevel. Example: ocQHyuzHvysMo5N5VsXc.

Example input: `{"campaign_id":"<campaign_id>","contact_id":"<contact_id>"}`

### `highlevel_contact_create`

Create Contact · Write

Create a new contact in a HighLevel sub-account. Returns the created contact with its new ID. Use to add a person who is not in HighLevel yet. Use Upsert Contact to create or update by email or phone in one call, and Update Contact to change an existing contact.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `location_id` (`string`, required): ID of the HighLevel sub-account (formerly called a location) to work in. The connected account is installed on one sub-account; use that sub-account's ID, shown in the HighLevel URL after /location/. Example: ve9EPM428h8vShlRW1KT.
- `address1` (`string`, optional): Street address line. Example: 3535 1st St N.
- `assigned_to` (`string`, optional): ID of the HighLevel user this record is assigned to. Look it up with Search Users. Example: 082goXVW3lIExEQPOnd3.
- `city` (`string`, optional): City name. Example: Dolomite.
- `company_name` (`string`, optional): Name of the company the contact works for. Example: DGS VolMAX.
- `country` (`string`, optional): Two-letter ISO country code. Example: US.
- `custom_fields` (`array`, optional): Custom field values to set on the contact, as a list. Each entry names the field by its id (or by its key) and gives the value in field_value: text, number, an option label, or a list of option labels for multi-select fields. Find field IDs and keys with List Custom Fields. Example: [{"id": "6dvNaf7VhkQ9snc5vnjJ", "field_value": "My Text"}, {"key": "my_custom_field", "field_value": ["test", "test2"]}].
- `date_of_birth` (`string`, optional): Contact's date of birth. Accepted formats include YYYY-MM-DD, MM/DD/YYYY and YYYY/MM/DD. Example: 1990-09-25.
- `dnd` (`boolean`, optional): Set to true to turn on Do Not Disturb for every channel for this contact, or false to turn it off.
- `dnd_settings` (`object`, optional): Per-channel Do Not Disturb settings. Keys are channels (Call, Email, SMS, WhatsApp, GMB, FB); each value is an object whose status is active, inactive or permanent, with an optional message and code. Example: {"SMS": {"status": "active", "message": "Opted out by request"}, "Email": {"status": "inactive"}}.
- `email` (`string`, optional): Email address. Example: rosan@deos.com.
- `first_name` (`string`, optional): Contact's first name. Example: Rosan.
- `gender` (`string`, optional): Contact's gender as free text. Example: male.
- `inbound_dnd_settings` (`object`, optional): Inbound Do Not Disturb setting that blocks messages from the contact on all channels. Give an object under the key all whose status is active or inactive, with an optional message. Example: {"all": {"status": "active", "message": "Blocked"}}.
- `last_name` (`string`, optional): Contact's last name. Example: Deo.
- `name` (`string`, optional): Contact's full name, used when first and last name are not given separately. Example: Rosan Deo.
- `phone` (`string`, optional): Phone number, preferably in E.164 format with country code. Example: +18888888888.
- `postal_code` (`string`, optional): Postal or ZIP code. Example: 35061.
- `source` (`string`, optional): Where the contact came from, as free text shown in HighLevel. Example: public api.
- `state` (`string`, optional): State or region. Example: AL.
- `tags` (`array`, optional): List of tag names to put on the new contact. Example: ["vip", "newsletter"].
- `timezone` (`string`, optional): IANA time zone name. Example: America/Chicago.
- `website` (`string`, optional): Website URL. Example: https://www.example.com.

Example input: `{"location_id":"<location_id>"}`

### `highlevel_contact_followers_add`

Add Contact Followers · Write

Add users as followers of a contact. Returns the followers that were added and the full follower list. Use so team members get notified about a contact.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `contact_id` (`string`, required): ID of the contact. Find it with Find Duplicate Contact, List Contacts by Business, or in the contact's URL in HighLevel. Example: ocQHyuzHvysMo5N5VsXc.
- `followers` (`array`, required): List of HighLevel user IDs to add as followers. Look users up with Search Users. Example: ["082goXVW3lIExEQPOnd3"].

Example input: `{"contact_id":"<contact_id>","followers":["082goXVW3lIExEQPOnd3"]}`

### `highlevel_contact_note_create`

Create Contact Note · Write

Add a note to a contact. Returns the created note with its ID. Use to record context on a contact. Use Create Appointment Note for notes on a booking.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `body` (`string`, required): Text of the note. Example: Called the customer, they want a quote next week.
- `contact_id` (`string`, required): ID of the contact. Find it with Find Duplicate Contact, List Contacts by Business, or in the contact's URL in HighLevel. Example: ocQHyuzHvysMo5N5VsXc.
- `color` (`string`, optional): Note color as a hex code. Example: #FFAA00.
- `pinned` (`boolean`, optional): Set to true to pin the note at the top of the contact's notes.
- `title` (`string`, optional): Optional title of the note. Example: Follow-up summary.
- `user_id` (`string`, optional): ID of the HighLevel user to show as the note's author. Look it up with Search Users. Example: GCs5KuzPqTls7vWclkEV.

Example input: `{"body":"<body>","contact_id":"<contact_id>"}`

### `highlevel_contact_note_update`

Update Contact Note · Write

Update a note on a contact. Returns the updated note. Use to change a note's text, title, color or pinned state. Use Create Contact Note to add a new note.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `contact_id` (`string`, required): ID of the contact. Find it with Find Duplicate Contact, List Contacts by Business, or in the contact's URL in HighLevel. Example: ocQHyuzHvysMo5N5VsXc.
- `note_id` (`string`, required): ID of the note to update. Get it with List Contact Notes. Example: ocQHyuzHvysMo5N5VsXc.
- `body` (`string`, optional): New text of the note. Example: Quote sent on Monday.
- `color` (`string`, optional): Note color as a hex code. Example: #FFAA00.
- `pinned` (`boolean`, optional): Set to true to pin the note at the top of the contact's notes.
- `title` (`string`, optional): New title of the note. Example: Follow-up summary.
- `user_id` (`string`, optional): ID of the HighLevel user to show as the note's author. Example: GCs5KuzPqTls7vWclkEV.

Example input: `{"contact_id":"<contact_id>","note_id":"<note_id>"}`

### `highlevel_contact_tags_add`

Add Contact Tags · Write

Add tags to a contact without touching its other tags. Returns the contact's full tag list after the change. Use to tag a contact. Use Remove Contact Tags to take tags off.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `contact_id` (`string`, required): ID of the contact. Find it with Find Duplicate Contact, List Contacts by Business, or in the contact's URL in HighLevel. Example: ocQHyuzHvysMo5N5VsXc.
- `tags` (`array`, required): List of tag names to add. Tags that do not exist yet are created. Example: ["vip", "newsletter"].

Example input: `{"contact_id":"<contact_id>","tags":["vip","newsletter"]}`

### `highlevel_contact_task_complete`

Set Contact Task Completion · Write

Mark a contact's task as completed or reopen it. Returns the updated task. Use to close or reopen a task. Use Update Contact Task to change other task fields.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `completed` (`boolean`, required): Set to true to mark the task completed, or false to reopen it.
- `contact_id` (`string`, required): ID of the contact. Find it with Find Duplicate Contact, List Contacts by Business, or in the contact's URL in HighLevel. Example: ocQHyuzHvysMo5N5VsXc.
- `task_id` (`string`, required): ID of the task. Get it with List Contact Tasks. Example: ocQHyuzHvysMo5N5VsXc.

Example input: `{"completed":true,"contact_id":"<contact_id>","task_id":"<task_id>"}`

### `highlevel_contact_task_create`

Create Contact Task · Write

Create a task on a contact. Returns the created task with its ID. Use to add a to-do for a contact. Use Update Contact Task to change an existing task.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `completed` (`boolean`, required): Whether the task starts out completed. Usually false for a new task.
- `contact_id` (`string`, required): ID of the contact. Find it with Find Duplicate Contact, List Contacts by Business, or in the contact's URL in HighLevel. Example: ocQHyuzHvysMo5N5VsXc.
- `due_date` (`string`, required): Due date and time in ISO 8601 format. Example: 2025-10-25T11:00:00Z.
- `title` (`string`, required): Title of the task. Example: Send proposal.
- `assigned_to` (`string`, optional): ID of the HighLevel user this record is assigned to. Look it up with Search Users. Example: 082goXVW3lIExEQPOnd3.
- `body` (`string`, optional): Details of the task. Example: Email the pricing proposal before Friday.

Example input: `{"completed":true,"contact_id":"<contact_id>","due_date":"<due_date>","title":"<title>"}`

### `highlevel_contact_task_update`

Update Contact Task · Write

Update a task on a contact. Returns the updated task. Use to change a task's title, body, due date, assignee or completion. Use Set Contact Task Completion to change only the completed flag.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `contact_id` (`string`, required): ID of the contact. Find it with Find Duplicate Contact, List Contacts by Business, or in the contact's URL in HighLevel. Example: ocQHyuzHvysMo5N5VsXc.
- `task_id` (`string`, required): ID of the task to update. Get it with List Contact Tasks. Example: ocQHyuzHvysMo5N5VsXc.
- `assigned_to` (`string`, optional): ID of the HighLevel user this record is assigned to. Look it up with Search Users. Example: 082goXVW3lIExEQPOnd3.
- `body` (`string`, optional): New details of the task. Example: Email the pricing proposal before Friday.
- `completed` (`boolean`, optional): Whether the task is completed (true) or still open (false).
- `due_date` (`string`, optional): Due date and time in ISO 8601 format. Example: 2025-10-25T11:00:00Z.
- `title` (`string`, optional): New title of the task. Example: Send proposal.

Example input: `{"contact_id":"<contact_id>","task_id":"<task_id>"}`

### `highlevel_contact_update`

Update Contact · Write

Update fields on an existing HighLevel contact. Returns the updated contact. Use when you have the contact ID and want to change details. Only the fields you pass are changed; tags passed here replace all existing tags, so use Add Contact Tags or Remove Contact Tags for single tag changes.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `contact_id` (`string`, required): ID of the contact. Find it with Find Duplicate Contact, List Contacts by Business, or in the contact's URL in HighLevel. Example: ocQHyuzHvysMo5N5VsXc.
- `address1` (`string`, optional): Street address line. Example: 3535 1st St N.
- `assigned_to` (`string`, optional): ID of the HighLevel user this record is assigned to. Look it up with Search Users. Example: 082goXVW3lIExEQPOnd3.
- `city` (`string`, optional): City name. Example: Dolomite.
- `country` (`string`, optional): Two-letter ISO country code. Example: US.
- `custom_fields` (`array`, optional): Custom field values to set on the contact, as a list. Each entry names the field by its id (or by its key) and gives the value in field_value: text, number, an option label, or a list of option labels for multi-select fields. Find field IDs and keys with List Custom Fields. Example: [{"id": "6dvNaf7VhkQ9snc5vnjJ", "field_value": "My Text"}, {"key": "my_custom_field", "field_value": ["test", "test2"]}].
- `date_of_birth` (`string`, optional): Contact's date of birth. Accepted formats include YYYY-MM-DD, MM/DD/YYYY and YYYY/MM/DD. Example: 1990-09-25.
- `dnd` (`boolean`, optional): Set to true to turn on Do Not Disturb for every channel for this contact, or false to turn it off.
- `dnd_settings` (`object`, optional): Per-channel Do Not Disturb settings. Keys are channels (Call, Email, SMS, WhatsApp, GMB, FB); each value is an object whose status is active, inactive or permanent, with an optional message and code. Example: {"SMS": {"status": "active", "message": "Opted out by request"}, "Email": {"status": "inactive"}}.
- `email` (`string`, optional): Email address. Example: rosan@deos.com.
- `first_name` (`string`, optional): Contact's first name. Example: Rosan.
- `inbound_dnd_settings` (`object`, optional): Inbound Do Not Disturb setting that blocks messages from the contact on all channels. Give an object under the key all whose status is active or inactive, with an optional message. Example: {"all": {"status": "active", "message": "Blocked"}}.
- `last_name` (`string`, optional): Contact's last name. Example: Deo.
- `name` (`string`, optional): Contact's full name, used when first and last name are not given separately. Example: Rosan Deo.
- `phone` (`string`, optional): Phone number, preferably in E.164 format with country code. Example: +18888888888.
- `postal_code` (`string`, optional): Postal or ZIP code. Example: 35061.
- `source` (`string`, optional): Where the contact came from, as free text shown in HighLevel. Example: public api.
- `state` (`string`, optional): State or region. Example: AL.
- `tags` (`array`, optional): List of tag names to set on the contact. This replaces all of the contact's current tags; to add or remove single tags use Add Contact Tags or Remove Contact Tags. Example: ["vip", "newsletter"].
- `timezone` (`string`, optional): IANA time zone name. Example: America/Chicago.
- `website` (`string`, optional): Website URL. Example: https://www.example.com.

Example input: `{"contact_id":"<contact_id>"}`

### `highlevel_contact_upsert`

Upsert Contact · Write

Create a contact, or update the matching contact if one already exists. Returns the contact and whether it was newly created. Use when you have an email or phone but not a contact ID and want one call that never makes a duplicate. Matching follows the sub-account's Allow Duplicate Contact setting (email first, then phone).

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `location_id` (`string`, required): ID of the HighLevel sub-account (formerly called a location) to work in. The connected account is installed on one sub-account; use that sub-account's ID, shown in the HighLevel URL after /location/. Example: ve9EPM428h8vShlRW1KT.
- `address1` (`string`, optional): Street address line. Example: 3535 1st St N.
- `assigned_to` (`string`, optional): ID of the HighLevel user this record is assigned to. Look it up with Search Users. Example: 082goXVW3lIExEQPOnd3.
- `city` (`string`, optional): City name. Example: Dolomite.
- `company_name` (`string`, optional): Name of the company the contact works for. Example: DGS VolMAX.
- `country` (`string`, optional): Two-letter ISO country code. Example: US.
- `create_new_if_duplicate_allowed` (`boolean`, optional): Only matters when the sub-account allows duplicate contacts. Set to true to always create a new contact, or false (the default behavior) to update the existing match.
- `custom_fields` (`array`, optional): Custom field values to set on the contact, as a list. Each entry names the field by its id (or by its key) and gives the value in field_value: text, number, an option label, or a list of option labels for multi-select fields. Find field IDs and keys with List Custom Fields. Example: [{"id": "6dvNaf7VhkQ9snc5vnjJ", "field_value": "My Text"}, {"key": "my_custom_field", "field_value": ["test", "test2"]}].
- `date_of_birth` (`string`, optional): Contact's date of birth. Accepted formats include YYYY-MM-DD, MM/DD/YYYY and YYYY/MM/DD. Example: 1990-09-25.
- `dnd` (`boolean`, optional): Set to true to turn on Do Not Disturb for every channel for this contact, or false to turn it off.
- `dnd_settings` (`object`, optional): Per-channel Do Not Disturb settings. Keys are channels (Call, Email, SMS, WhatsApp, GMB, FB); each value is an object whose status is active, inactive or permanent, with an optional message and code. Example: {"SMS": {"status": "active", "message": "Opted out by request"}, "Email": {"status": "inactive"}}.
- `email` (`string`, optional): Email address. Example: rosan@deos.com.
- `first_name` (`string`, optional): Contact's first name. Example: Rosan.
- `gender` (`string`, optional): Contact's gender as free text. Example: male.
- `inbound_dnd_settings` (`object`, optional): Inbound Do Not Disturb setting that blocks messages from the contact on all channels. Give an object under the key all whose status is active or inactive, with an optional message. Example: {"all": {"status": "active", "message": "Blocked"}}.
- `last_name` (`string`, optional): Contact's last name. Example: Deo.
- `name` (`string`, optional): Contact's full name, used when first and last name are not given separately. Example: Rosan Deo.
- `phone` (`string`, optional): Phone number, preferably in E.164 format with country code. Example: +18888888888.
- `postal_code` (`string`, optional): Postal or ZIP code. Example: 35061.
- `source` (`string`, optional): Where the contact came from, as free text shown in HighLevel. Example: public api.
- `state` (`string`, optional): State or region. Example: AL.
- `tags` (`array`, optional): List of tag names to set on the contact. This replaces all of the contact's current tags; to add or remove single tags use Add Contact Tags or Remove Contact Tags. Example: ["vip", "newsletter"].
- `timezone` (`string`, optional): IANA time zone name. Example: America/Chicago.
- `website` (`string`, optional): Website URL. Example: https://www.example.com.

Example input: `{"location_id":"<location_id>"}`

### `highlevel_contact_workflow_add`

Add Contact to Workflow · Write

Enroll a contact in an automation workflow. Returns a success flag. Use to trigger a workflow for a contact. Use List Workflows to find workflow IDs; use Add Contact to Campaign for campaigns.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `contact_id` (`string`, required): ID of the contact. Find it with Find Duplicate Contact, List Contacts by Business, or in the contact's URL in HighLevel. Example: ocQHyuzHvysMo5N5VsXc.
- `workflow_id` (`string`, required): ID of the workflow. Get it with List Workflows. Example: 78559bb3-b920-461e-b010-7b2a2816d2a9.
- `event_start_time` (`string`, optional): Optional start time for the workflow's event, in ISO 8601 format with offset, for workflows that wait on an event date. Example: 2025-06-23T03:30:00+01:00.

Example input: `{"contact_id":"<contact_id>","workflow_id":"<workflow_id>"}`

### `highlevel_conversation_create`

Create Conversation · Write

Start a new conversation with a contact. Returns the created conversation with its ID. Use when a contact has no conversation yet. To send a message, Send Message works without creating a conversation first.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `contact_id` (`string`, required): ID of the contact. Find it with Find Duplicate Contact, List Contacts by Business, or in the contact's URL in HighLevel. Example: ocQHyuzHvysMo5N5VsXc.
- `location_id` (`string`, required): ID of the HighLevel sub-account (formerly called a location) to work in. The connected account is installed on one sub-account; use that sub-account's ID, shown in the HighLevel URL after /location/. Example: ve9EPM428h8vShlRW1KT.

Example input: `{"contact_id":"<contact_id>","location_id":"<location_id>"}`

### `highlevel_conversation_update`

Update Conversation · Write

Update a conversation's unread count or starred state. Returns the updated conversation. Use to mark a thread read (unread_count 0) or star it.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `conversation_id` (`string`, required): ID of the conversation. Get it with Search Conversations. Example: tDtDnQdgm2LXpyiqYvZ6.
- `location_id` (`string`, required): ID of the HighLevel sub-account (formerly called a location) to work in. The connected account is installed on one sub-account; use that sub-account's ID, shown in the HighLevel URL after /location/. Example: ve9EPM428h8vShlRW1KT.
- `feedback` (`object`, optional): Free-form feedback object to store on the conversation. Example: {"rating": 5}.
- `starred` (`boolean`, optional): Set to true to star the conversation, or false to unstar it.
- `unread_count` (`number`, optional): Number of unread messages to set on the conversation. Use 0 to mark it read. Example: 0.

Example input: `{"conversation_id":"<conversation_id>","location_id":"<location_id>"}`

### `highlevel_invoice_send`

Send Invoice · Write

Send an existing invoice to its contact by email, SMS, both, or mark it as sent manually. Returns the sent invoice. Use after an invoice exists in HighLevel. Use List Invoices to find the invoice ID.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `action` (`string`, required): How to deliver the invoice. One of: sms_and_email, send_manually, email, sms. One of: `sms_and_email`, `send_manually`, `email`, `sms`.
- `alt_id` (`string`, required): ID of the sub-account (location) that owns the records. The connected account is installed on one sub-account; use that sub-account's ID, shown in the HighLevel URL after /location/. Example: ve9EPM428h8vShlRW1KT.
- `invoice_id` (`string`, required): ID of the invoice. Get it with List Invoices. Example: 6578278e879ad2646715ba9c.
- `live_mode` (`boolean`, required): Set to true to send in live payment mode, or false for test mode.
- `user_id` (`string`, required): ID of the HighLevel user sending the invoice; it must be a user with access to this sub-account. Look it up with Search Users. Example: 6578278e879ad2646715ba9c.
- `alt_type` (`string`, optional): Type of owner ID passed in alt_id. Only location (a sub-account) is supported with a sub-account token, so leave it at the default. One of: location. One of: `location`. Default: `location`.
- `sent_from` (`object`, optional): Sender name and email to use for the email notification, given as fromName and fromEmail. Not used when action is send_manually. Example: {"fromName": "Alex", "fromEmail": "alex@example.com"}.

Example input: `{"action":"sms_and_email","alt_id":"<alt_id>","invoice_id":"<invoice_id>","live_mode":true,"user_id":"<user_id>"}`

### `highlevel_location_custom_value_create`

Create Custom Value · Write

Create a custom value (a sub-account-wide merge value). Returns the created custom value with its ID and field key. Use to add a reusable value for templates and workflows. Use Update Custom Value to change one.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `location_id` (`string`, required): ID of the HighLevel sub-account (formerly called a location) to work in. The connected account is installed on one sub-account; use that sub-account's ID, shown in the HighLevel URL after /location/. Example: ve9EPM428h8vShlRW1KT.
- `name` (`string`, required): Name of the custom value. Example: Booking Link.
- `value` (`string`, required): The value to store. Example: https://example.com/book.

Example input: `{"location_id":"<location_id>","name":"<name>","value":"<value>"}`

### `highlevel_location_custom_value_update`

Update Custom Value · Write

Update a custom value's name and value. Returns the updated custom value. Use to change a reusable value. Both name and value must be given.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `custom_value_id` (`string`, required): ID of the custom value. Get it with List Custom Values. Example: kOBjMVAJhFuUeYIojVet.
- `location_id` (`string`, required): ID of the HighLevel sub-account (formerly called a location) to work in. The connected account is installed on one sub-account; use that sub-account's ID, shown in the HighLevel URL after /location/. Example: ve9EPM428h8vShlRW1KT.
- `name` (`string`, required): Name of the custom value. Example: Booking Link.
- `value` (`string`, required): New value to store. Example: https://example.com/book-now.

Example input: `{"custom_value_id":"<custom_value_id>","location_id":"<location_id>","name":"<name>","value":"<value>"}`

### `highlevel_location_tag_create`

Create Tag · Write

Create a tag in a sub-account. Returns the created tag with its ID. Use to add a tag to the sub-account's list. Add Contact Tags also creates missing tags automatically.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `location_id` (`string`, required): ID of the HighLevel sub-account (formerly called a location) to work in. The connected account is installed on one sub-account; use that sub-account's ID, shown in the HighLevel URL after /location/. Example: ve9EPM428h8vShlRW1KT.
- `name` (`string`, required): Name of the tag. Example: vip.

Example input: `{"location_id":"<location_id>","name":"<name>"}`

### `highlevel_location_tag_update`

Update Tag · Write

Rename a tag in a sub-account. Returns the updated tag. Use to change a tag's name. Use List Tags to find tag IDs.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `location_id` (`string`, required): ID of the HighLevel sub-account (formerly called a location) to work in. The connected account is installed on one sub-account; use that sub-account's ID, shown in the HighLevel URL after /location/. Example: ve9EPM428h8vShlRW1KT.
- `name` (`string`, required): New name of the tag. Example: vip-customer.
- `tag_id` (`string`, required): ID of the tag. Get it with List Tags. Example: flGwEuzsfJOia1i1ikRN.

Example input: `{"location_id":"<location_id>","name":"<name>","tag_id":"<tag_id>"}`

### `highlevel_message_inbound_add`

Add Inbound Message · Write

Record a message the contact sent through an external channel provider. Returns the new message ID and conversation ID. Use for custom conversation providers that deliver inbound messages to HighLevel. Use Send Message to send outbound.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `contact_id` (`string`, required): ID of the contact. Find it with Find Duplicate Contact, List Contacts by Business, or in the contact's URL in HighLevel. Example: ocQHyuzHvysMo5N5VsXc.
- `conversation_id` (`string`, required): ID of the conversation. Get it with Search Conversations. Example: tDtDnQdgm2LXpyiqYvZ6.
- `conversation_provider_id` (`string`, required): ID of the conversation provider (your marketplace app's channel). Example: 61d6d1f9cdac7612faf80753.
- `type` (`string`, required): Channel of the inbound message. One of: SMS, RCS, Email, WhatsApp, GMB, IG, FB, Custom, WebChat, Live_Chat, Call, IVR_Call, Campaign_Call, Campaign_VoiceMail, TIKTOK, ALL_IN_ONE_CHAT, FORM_SUBMISSION. One of: `SMS`, `RCS`, `Email`, `WhatsApp`, `GMB`, `IG`, `FB`, `Custom`, `WebChat`, `Live_Chat`, `Call`, `IVR_Call`, `Campaign_Call`, `Campaign_VoiceMail`, `TIKTOK`, `ALL_IN_ONE_CHAT`, `FORM_SUBMISSION`.
- `alt_id` (`string`, optional): The external provider's own message ID. Example: 61d6d1f9cdac7612faf80753.
- `attachments` (`array`, optional): List of public URLs of attached files. Example: ["https://example.com/photo.jpg"].
- `call` (`object`, optional): Phone call details for call types: the receiver's number in to, the dialer's number in from, and status (pending, completed, answered, busy, no-answer, failed, canceled or voicemail). Example: {"to": "+15037081210", "from": "+15037081211", "status": "completed"}.
- `date` (`string`, optional): When the message was received, in ISO 8601 format. Example: 2025-06-23T03:30:00Z.
- `direction` (`string`, optional): Direction to record for the message. The API default is outbound, so set inbound for messages from the contact. One of: `outbound`, `inbound`.
- `email_bcc` (`array`, optional): List of email address to BCC. Example: ["john1@doe.com", "john2@doe.com"].
- `email_cc` (`array`, optional): List of email address to CC. Example: ["john1@doe.com", "john2@doe.com"].
- `email_from` (`string`, optional): Email address to send from. This field is associated with the contact record and cannot be dynamically changed. Example: sender@company.com.
- `email_message_id` (`string`, optional): ID of the email message this one replies to, to keep it in the same thread. Example: rnGyqh2F6uBrIjhkL1tI.
- `email_to` (`string`, optional): Recipient email address, which must match the contact record. Example: support@company.com.
- `html` (`string`, optional): HTML body, for email messages. Example: Can I reschedule?
.
- `message` (`string`, optional): Text of the inbound message. Example: Can I reschedule to Friday?
- `subject` (`string`, optional): Subject line, for email messages. Example: Reschedule request.

Example input: `{"contact_id":"<contact_id>","conversation_id":"<conversation_id>","conversation_provider_id":"<conversation_provider_id>","type":"SMS"}`

### `highlevel_message_outbound_call_add`

Log Outbound Call · Write

Record an outbound phone call made through an external calling provider. Returns the new message ID and conversation ID. Use for custom calling providers that log calls into a HighLevel conversation.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `conversation_id` (`string`, required): ID of the conversation. Get it with Search Conversations. Example: tDtDnQdgm2LXpyiqYvZ6.
- `conversation_provider_id` (`string`, required): ID of the conversation provider (your marketplace app's channel). Example: 61d6d1f9cdac7612faf80753.
- `type` (`string`, required): Message type. Only Call is allowed. One of: Call. One of: `Call`.
- `alt_id` (`string`, optional): The external provider's own call ID. Example: 61d6d1f9cdac7612faf80753.
- `attachments` (`array`, optional): List of public URLs, such as a call recording. Example: ["https://example.com/recording.mp3"].
- `call` (`object`, optional): Phone call details: the receiver's number in to, the dialer's number in from, and status (pending, completed, answered, busy, no-answer, failed, canceled or voicemail). Example: {"to": "+15037081210", "from": "+15037081211", "status": "completed"}.
- `date` (`string`, optional): When the call happened, in ISO 8601 format. Example: 2025-06-23T03:30:00Z.

Example input: `{"conversation_id":"<conversation_id>","conversation_provider_id":"<conversation_provider_id>","type":"Call"}`

### `highlevel_message_send`

Send Message · Write

Send a message to a contact over SMS, email, WhatsApp, Facebook, Instagram, live chat or a custom channel. Returns the new message ID and conversation ID. Use to send outbound messages; set scheduled_timestamp to send later. Use Add Inbound Message to record a message received outside HighLevel.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `contact_id` (`string`, required): ID of the contact receiving the message. Example: abc123def456.
- `status` (`string`, required): Message status, which the API requires on this call. One of: delivered, failed, pending, read. One of: `delivered`, `failed`, `pending`, `read`.
- `type` (`string`, required): Channel to send on. One of: SMS, RCS, Email, WhatsApp, IG, FB, Custom, Live_Chat, TIKTOK. One of: `SMS`, `RCS`, `Email`, `WhatsApp`, `IG`, `FB`, `Custom`, `Live_Chat`, `TIKTOK`.
- `appointment_id` (`string`, optional): ID of an appointment to link the message to. Example: 0TkCdp9PfvLeWKYRRvIz.
- `attachments` (`array`, optional): List of public URLs of files to attach. Example: ["https://example.com/file1.pdf"].
- `conversation_provider_id` (`string`, optional): ID of the conversation provider, for custom channels. Example: 61d6d1f9cdac7612faf80753.
- `custom_subtype_id` (`string`, optional): Custom subtype ID for email unsubscribe preferences. Email only. Example: 507f1f77bcf86cd799439011.
- `email_bcc` (`array`, optional): List of BCC email addresses. Example: ["bcc1@company.com"].
- `email_cc` (`array`, optional): List of CC email addresses. Example: ["cc1@company.com"].
- `email_from` (`string`, optional): Sender email address for email messages. Example: sender@company.com.
- `email_reply_mode` (`string`, optional): Whether an email reply goes to the sender only or to everyone on the thread. One of: reply, reply_all. One of: `reply`, `reply_all`.
- `email_to` (`string`, optional): Recipient email when it differs from the contact's primary email; it must be an email on the contact. Example: recipient@company.com.
- `forward` (`object`, optional): Email forwarding settings. Set isForwarded to true, choose whether to forward the whole thread, and give the IDs of the message being forwarded. Example: {"isForwarded": true, "forwardWholeThread": false, "messageId": "t22c6DQcTDf3MjRhwf77"}.
- `from_number` (`string`, optional): Phone number to send from, for SMS. Example: +14994992990.
- `html` (`string`, optional): HTML body, for email messages. Example: Hello Rosan
.
- `message` (`string`, optional): Text of the message, for SMS, WhatsApp, chat and other text channels. Example: Hi Rosan, your appointment is confirmed for tomorrow.
- `optimization_period` (`string`, optional): Window for AI send-time optimization, used with uses_native_scheduling_ai. One of: 24h, 48h, 72h. One of: `24h`, `48h`, `72h`.
- `reply_message_id` (`string`, optional): ID of the message being replied to. Example: msg123.
- `scheduled_timestamp` (`number`, optional): UTC Unix timestamp in seconds at which to send the message. Leave empty to send now. Example: 1769287863.
- `sub_type` (`string`, optional): Message subtype. The GitHub OpenAPI spec lists it as required while the docs site does not list it at all, so leave it empty unless the API asks for it. Example: Email.
- `subject` (`string`, optional): Subject line, for email messages. Example: Your appointment.
- `template_id` (`string`, optional): ID of a message template to use. Get IDs with List Message Templates. Example: template123.
- `thread_id` (`string`, optional): ID of the email thread, for email replies. Example: thread123.
- `to_number` (`string`, optional): Phone number to send to, when it differs from the contact's phone. Example: +14394992990.
- `uses_native_scheduling_ai` (`boolean`, optional): Set to true to let HighLevel's AI pick the best send time for a scheduled email.

Example input: `{"contact_id":"<contact_id>","status":"delivered","type":"SMS"}`

### `highlevel_opportunity_create`

Create Opportunity · Write

Create an opportunity (deal) for a contact in a pipeline. Returns the created opportunity with its ID. Use to open a new deal. Use List Pipelines first to get pipeline and stage IDs. Use Upsert Opportunity to create or update in one call.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `contact_id` (`string`, required): ID of the contact the opportunity belongs to. Example: mTkSCb1UBjb5tk4OvB69.
- `location_id` (`string`, required): ID of the HighLevel sub-account (formerly called a location) to work in. The connected account is installed on one sub-account; use that sub-account's ID, shown in the HighLevel URL after /location/. Example: ve9EPM428h8vShlRW1KT.
- `name` (`string`, required): Name of the opportunity. Example: Website redesign deal.
- `pipeline_id` (`string`, required): ID of the opportunity pipeline. Get pipeline IDs with List Pipelines. Example: VDm7RPYC2GLUvdpKmBfC.
- `status` (`string`, required): Status of the opportunity. One of: open, won, lost, abandoned, all. One of: `open`, `won`, `lost`, `abandoned`, `all`.
- `assigned_to` (`string`, optional): ID of the HighLevel user this record is assigned to. Look it up with Search Users. Example: 082goXVW3lIExEQPOnd3.
- `custom_fields` (`array`, optional): Custom field values to set on the opportunity, as a list. Each entry names the field by its id (or by its key) and gives the value in field_value: text, number, an option label, or a list of option labels for multi-select fields. Find field IDs and keys with List Custom Fields. Example: [{"id": "6dvNaf7VhkQ9snc5vnjJ", "field_value": "My Text"}, {"key": "my_custom_field", "field_value": ["test", "test2"]}].
- `monetary_value` (`number`, optional): Deal value of the opportunity in the sub-account's currency. Example: 220.
- `pipeline_stage_id` (`string`, optional): ID of the stage within the pipeline. List Pipelines returns each pipeline's stages. Example: 7915dedc-8f18-44d5-8bc3-77c04e994a10.

Example input: `{"contact_id":"<contact_id>","location_id":"<location_id>","name":"<name>","pipeline_id":"<pipeline_id>","status":"open"}`

### `highlevel_opportunity_followers_add`

Add Opportunity Followers · Write

Add users as followers of an opportunity. Returns the followers that were added and the full follower list. Use so team members get notified about a deal.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `followers` (`array`, required): List of HighLevel user IDs to add as followers. Look users up with Search Users. Example: ["082goXVW3lIExEQPOnd3"].
- `opportunity_id` (`string`, required): ID of the opportunity. Get it with Search Opportunities. Example: yWQobCRIhRguQtD2llvk.

Example input: `{"followers":["082goXVW3lIExEQPOnd3"],"opportunity_id":"<opportunity_id>"}`

### `highlevel_opportunity_status_update`

Update Opportunity Status · Write

Change only the status of an opportunity (open, won, lost or abandoned). Returns a success flag. Use to mark a deal won or lost. Pass a lost reason ID from List Opportunity Lost Reasons when marking it lost. Use Update Opportunity for other fields.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `opportunity_id` (`string`, required): ID of the opportunity. Get it with Search Opportunities. Example: yWQobCRIhRguQtD2llvk.
- `status` (`string`, required): New status of the opportunity. One of: open, won, lost, abandoned, all. One of: `open`, `won`, `lost`, `abandoned`, `all`.
- `lost_reason_id` (`string`, optional): ID of the lost reason, when the status is lost. Get IDs with List Opportunity Lost Reasons. Example: CLu7BaljjqrEjBGKTNNe.

Example input: `{"opportunity_id":"<opportunity_id>","status":"open"}`

### `highlevel_opportunity_update`

Update Opportunity · Write

Update an existing opportunity (deal). Returns the updated opportunity. Use to change name, value, stage, pipeline, status, assignee or custom fields. Use Update Opportunity Status to change only the status.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `opportunity_id` (`string`, required): ID of the opportunity. Get it with Search Opportunities. Example: yWQobCRIhRguQtD2llvk.
- `assigned_to` (`string`, optional): ID of the HighLevel user this record is assigned to. Look it up with Search Users. Example: 082goXVW3lIExEQPOnd3.
- `custom_fields` (`array`, optional): Custom field values to set on the opportunity, as a list. Each entry names the field by its id (or by its key) and gives the value in field_value: text, number, an option label, or a list of option labels for multi-select fields. Find field IDs and keys with List Custom Fields. Example: [{"id": "6dvNaf7VhkQ9snc5vnjJ", "field_value": "My Text"}, {"key": "my_custom_field", "field_value": ["test", "test2"]}].
- `monetary_value` (`number`, optional): Deal value of the opportunity in the sub-account's currency. Example: 220.
- `name` (`string`, optional): New name of the opportunity. Example: Website redesign deal.
- `pipeline_id` (`string`, optional): ID of the pipeline to move the opportunity to. Get IDs with List Pipelines. Example: bCkKGpDsyPP4peuKowkG.
- `pipeline_stage_id` (`string`, optional): ID of the stage within the pipeline. List Pipelines returns each pipeline's stages. Example: 7915dedc-8f18-44d5-8bc3-77c04e994a10.
- `status` (`string`, optional): Status of the opportunity. One of: open, won, lost, abandoned, all. One of: `open`, `won`, `lost`, `abandoned`, `all`.

Example input: `{"opportunity_id":"<opportunity_id>"}`

### `highlevel_opportunity_upsert`

Upsert Opportunity · Write

Create an opportunity, or update it when an opportunity ID is given or one already matches. Returns the opportunity and whether it was newly created. Use for a single create-or-update call that also manages followers. Use Create Opportunity or Update Opportunity for simple cases.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `followers` (`array`, required): List of user IDs to add to or remove from the opportunity's followers, depending on followers_action_type. Pass [] to leave followers unchanged. Example: ["082goXVW3lIExEQPOnd3"].
- `followers_action_type` (`string`, required): Whether the users in followers are added or removed. One of: add, remove. One of: `add`, `remove`.
- `is_remove_all_followers` (`boolean`, required): Set to true to remove every existing follower before applying followers, or false to keep them.
- `location_id` (`string`, required): ID of the HighLevel sub-account (formerly called a location) to work in. The connected account is installed on one sub-account; use that sub-account's ID, shown in the HighLevel URL after /location/. Example: ve9EPM428h8vShlRW1KT.
- `pipeline_id` (`string`, required): ID of the opportunity pipeline. Get pipeline IDs with List Pipelines. Example: VDm7RPYC2GLUvdpKmBfC.
- `assigned_to` (`string`, optional): ID of the HighLevel user this record is assigned to. Look it up with Search Users. Example: 082goXVW3lIExEQPOnd3.
- `lost_reason_id` (`string`, optional): ID of the lost reason, when the status is lost. Example: CLu7BaljjqrEjBGKTNNe.
- `monetary_value` (`number`, optional): Deal value of the opportunity. Example: 220.
- `name` (`string`, optional): Name of the opportunity. Example: Website redesign deal.
- `opportunity_id` (`string`, optional): ID of the opportunity to update. Leave empty to create or match. Example: yWQobCRIhRguQtD2llvk.
- `pipeline_stage_id` (`string`, optional): ID of the stage within the pipeline. List Pipelines returns each pipeline's stages. Example: 7915dedc-8f18-44d5-8bc3-77c04e994a10.
- `status` (`string`, optional): Status of the opportunity. One of: open, won, lost, abandoned, all. One of: `open`, `won`, `lost`, `abandoned`, `all`.

Example input: `{"followers":["082goXVW3lIExEQPOnd3"],"followers_action_type":"add","is_remove_all_followers":true,"location_id":"<location_id>","pipeline_id":"<pipeline_id>"}`

### `highlevel_relation_create`

Create Relation · Write

Link two records through an association, such as a contact and a custom object record. Returns the created relation with its ID. Use after List Associations to get the association ID. The first and second records must match the association's first and second objects.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `association_id` (`string`, required): ID of the association. Get it with List Associations. Example: ve9EPM428h8vShlRW1KT.
- `first_record_id` (`string`, required): ID of the record for the association's first object. For a contact-to-pet association created with contact first, this is the contact ID. Example: ocQHyuzHvysMo5N5VsXc.
- `location_id` (`string`, required): ID of the HighLevel sub-account (formerly called a location) to work in. The connected account is installed on one sub-account; use that sub-account's ID, shown in the HighLevel URL after /location/. Example: ve9EPM428h8vShlRW1KT.
- `second_record_id` (`string`, required): ID of the record for the association's second object. For a contact-to-pet association, this is the pet record ID. Example: 632c34b4c9b7da3358ac9891.

Example input: `{"association_id":"<association_id>","first_record_id":"<first_record_id>","location_id":"<location_id>","second_record_id":"<second_record_id>"}`

### `highlevel_contact_tags_remove`

Remove Contact Tags · Destructive

Remove tags from a contact. Returns the contact's remaining tags. Use to take specific tags off a contact. Use Add Contact Tags to add tags.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `contact_id` (`string`, required): ID of the contact. Find it with Find Duplicate Contact, List Contacts by Business, or in the contact's URL in HighLevel. Example: ocQHyuzHvysMo5N5VsXc.
- `tags` (`array`, required): List of tag names to remove from the contact. Example: ["newsletter"].

Example input: `{"contact_id":"<contact_id>","tags":["newsletter"]}`

### `highlevel_message_schedule_cancel`

Cancel Scheduled Message · Destructive

Cancel a message that was scheduled to send later. Returns a success status. Use to stop a scheduled SMS or message before it goes out.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `message_id` (`string`, required): ID of the scheduled message. Example: ve9EPM428h8vShlRW1KT.

Example input: `{"message_id":"<message_id>"}`

## Related

Other CRM & Sales connectors ([all 97](/agentkit/connectors/?category=crm-sales)):

- [Insightly](/agentkit/connectors/insightly/): Scalekit connector, API key, 108 tools
- [HubSpot](/agentkit/connectors/hubspot/): Scalekit connector, OAuth, 457 tools
- [Salesforce](/agentkit/connectors/salesforce/): Scalekit connector, OAuth, 74 tools


---

## More Scalekit documentation

| Resource | What it contains | When to use it |
|----------|-----------------|----------------|
| [/llms.txt](/llms.txt) | Structured index with routing hints per product area | Start here — find which documentation set covers your topic before loading full content |
| [/llms-full.txt](/llms-full.txt) | Complete documentation for all Scalekit products in one file | Use when you need exhaustive context across multiple products or when the topic spans several areas |
| [sitemap-0.xml](https://docs.scalekit.com/sitemap-0.xml) | Full URL list of every documentation page | Use to discover specific page URLs you can fetch for targeted, page-level answers |
