Skip to content
Scalekit Docs
Talk to an Engineer Dashboard

Connect AI agents to HighLevel

Scalekit connector
Open markdown

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.

Tools
102
What they doRead · write · destructive
64 · 36 · 264 read36 write2 destructive
Users sign in with
OAuth app
Your own HighLevel app

Setup

  1. Install the SDK

    Terminal window
    npm install @scalekit-sdk/node dotenv
  2. Set your credentials

    Add your Scalekit credentials to your .env file. Find values in app.scalekit.com > Developers > API Credentials.

    .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.

  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

    quickstart.mts
    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)
    Terminal window
    npx tsx quickstart.mts

    Each user signs in once. See Authorize a user for the full flow and statuses.

Tools

Pass the exact name to execute_tool
Try in PlaygroundRequest a tool
  • highlevel_appointment_getGet one appointment by ID.Read-only

    Get Appointment

    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.

    Inputs

    event_idstringrequired
    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.
  • highlevel_appointment_notes_listList the notes on an appointment.Read-only

    List Appointment Notes

    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.

    Inputs

    appointment_idstringrequired
    ID of the appointment. Example: 0TkCdp9PfvLeWKYRRvIz.
    limitnumberrequired
    Number of notes to return. Example: 10.
    offsetnumberrequired
    Number of notes to skip, for paging. Use 0 for the first page.
  • highlevel_associations_listList the association types defined in a sub-account (how objects can be linked).Read-only

    List Associations

    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.

    Inputs

    limitnumberrequired
    Maximum number of associations to return. Example: 100.
    location_idstringrequired
    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.
    skipnumberrequired
    Number of associations to skip, for paging. Use 0 for the first page.
  • highlevel_blocked_slots_listList blocked time slots on a calendar, group or user in a time range.Read-only

    List Blocked Slots

    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.

    Inputs

    end_timestringrequired
    End of the time range, as a Unix timestamp in milliseconds. Example: 1680978599999.
    location_idstringrequired
    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_timestringrequired
    Start of the time range, as a Unix timestamp in milliseconds. Example: 1680373800000.
    calendar_idstring
    Return blocks on this calendar. One of calendar_id, user_id or group_id is required. Example: BqTwX8QFwXzpegMve9EQ.
    group_idstring
    Return blocks on calendars in this group. One of calendar_id, user_id or group_id is required. Example: ocQHyuzHvysMo5N5VsXc.
    user_idstring
    Return blocks owned by this user ID. One of calendar_id, user_id or group_id is required. Example: CVokAlI8fgw4WYWoCtQz.
  • highlevel_business_getGet one business (company record) by ID.Read-only

    Get Business

    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.

    Inputs

    business_idstringrequired
    ID of the business (company record) in the sub-account. Get it with List Businesses. Example: 5DP4iH6HLkQsiKESj6rh.
  • highlevel_businesses_listList the businesses (company records) in a sub-account.Read-only

    List Businesses

    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.

    Inputs

    location_idstringrequired
    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.
    limitstring
    Maximum number of businesses to return. Defaults to 100. Example: 100.
    skipstring
    Number of businesses to skip, for paging. Example: 0.
  • highlevel_calendar_events_listList appointments on a calendar, calendar group or user in a time range.Read-only

    List Calendar Events

    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.

    Inputs

    end_timestringrequired
    End of the time range, as a Unix timestamp in milliseconds. Example: 1680978599999.
    location_idstringrequired
    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_timestringrequired
    Start of the time range, as a Unix timestamp in milliseconds. Example: 1680373800000.
    calendar_idstring
    Return appointments on this calendar. One of calendar_id, user_id or group_id is required. Example: BqTwX8QFwXzpegMve9EQ.
    group_idstring
    Return appointments on calendars in this group. One of calendar_id, user_id or group_id is required. Example: ocQHyuzHvysMo5N5VsXc.
    user_idstring
    Return appointments owned by this user ID. One of calendar_id, user_id or group_id is required. Example: CVokAlI8fgw4WYWoCtQz.
  • highlevel_calendar_free_slots_getGet the open booking slots on a calendar between two dates.Read-only

    Get Calendar Free Slots

    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.

    Inputs

    calendar_idstringrequired
    ID of the calendar. Get calendar IDs with List Calendars. Example: CVokAlI8fgw4WYWoCtQz.
    end_datenumberrequired
    End of the range, as a Unix timestamp in milliseconds. The range can be at most 31 days. Example: 1738281600000.
    start_datenumberrequired
    Start of the range, as a Unix timestamp in milliseconds. The range can be at most 31 days. Example: 1735689600000.
    timezonestring
    IANA time zone to return the slots in. Example: America/Chicago.
    user_idstring
    Only return slots for this team member's user ID. Example: 082goXVW3lIExEQPOnd3.
    user_idsarray
    Only return slots for these team members' user IDs. Example: ["082goXVW3lIExEQPOnd3"].