# High Level

> HighLevel through One

- Skill: `withoneai/high-level` (Agent Skill)
- Install (CLI): `npx skillmds@latest add withoneai/high-level`
- Raw SKILL.md: https://api.skillmd.com/api/skills/withoneai/high-level/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: withoneai (https://skillmd.com/u/withoneai)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/withoneai/high-level

---


# HighLevel through One

HighLevel is an all-in-one sales and marketing automation platform that helps agencies and businesses manage CRM, funnels, messaging, bookings, and campaigns from a single system, with extensible integrations via its marketplace.

One exposes HighLevel through four MCP tools. The table below carries real action ids from One's knowledge base, so for a common operation you can skip search and go straight to reading the action's parameters.

## How to run an action

1. Find the action in the table below, or call `search_one_platform_actions` with platform `high-level` if it is not listed.
2. Call `get_one_action_knowledge` with the action id. Do this every time, including for actions in this table. The table gives you the id, not the parameters.
3. Call `execute_one_action` with parameters copied from that knowledge.

Never guess a parameter name, a body field, or an enum value. The knowledge has the real schema, and a guessed field is either a 400 or a silent write of the wrong thing.

## Before you start

Call `list_one_integrations` once and confirm HighLevel is connected. If it is missing, the user has not connected it: say so and point them at https://app.withone.ai rather than reaching for raw HTTP.

Each connection carries an `access` field. If it reports `{"policy": "methods", "methods": ["GET"]}` the agent is read-only here, so plan a read-only answer instead of attempting a write that will be refused.

## Before a write

Creates, updates, deletes and sends land on a real HighLevel account and cannot be recalled. State the action and the specific target in one line before the first write in a task, and let the user stop you. Reads need no confirmation.

## Actions

### Contacts

| Action | Method | Path | Action id |
|---|---|---|---|
| Get a Contact | GET | `/contacts/{{contactId}}` | `conn_mod_def::GJ32M81x0Ck::Q5BePD-TT2iurnnJYjqQSA` |
| Get Contacts by Business ID | GET | `/contacts/business/{{businessId}}` | `conn_mod_def::GJ32NPD3d4k::TaLLw_NiRxWcQsQD5satSA` |
| Get Duplicate Contact (Search for Duplicates) | GET | `/contacts/search/duplicate` | `conn_mod_def::GJ32NYBDV9Y::JABucLBJRwSd9HLGXvHimQ` |
| List Contacts (Deprecated) | GET | `/contacts/` | `conn_mod_def::GJ32NGnVevc::7_cgGXfZQXKtGvdQNGv-VA` |
| Add a Contact to a Campaign | POST | `/contacts/{{contactId}}/campaigns/{{campaignId}}` | `conn_mod_def::GJ32K3F8Daw::chwSGTKqTjqK9PelXIVUgQ` |
| Add Followers to a Contact | POST | `/contacts/{{contactId}}/followers` | `conn_mod_def::GJ32LTD5iis::5pEBhx27QVyroGwf5H9MUQ` |
| Add Tags to a Contact | POST | `/contacts/{{contactId}}/tags` | `conn_mod_def::GJ32Lb0gHIo::bszvcB22S4yM1gh2LFjB5g` |
| Add/Remove Contacts From Business (Bulk) | POST | `/contacts/bulk/business` | `conn_mod_def::GJ32LjgDBYc::UZ9oKnHXTJSGS38v_yqJzA` |
| Create Contact | POST | `/contacts/` | `conn_mod_def::GJ32LrolxcI::_QyzIkbyRIqRieXizb_AdQ` |
| Delete a Contact | DELETE | `/contacts/{{contactId}}` | `conn_mod_def::GJ32MDavC6I::91InD8qXQzWvPAv9yypDOg` |
| Delete a Contact from a Workflow | DELETE | `/contacts/{{contactId}}/workflow/{{workflowId}}` | `conn_mod_def::GJ32ML8yu74::m7l9gqXgQvuhNTxvQcN_Hg` |
| Remove a Contact From Every Campaign | DELETE | `/contacts/{{contactId}}/campaigns/removeAll` | `conn_mod_def::GJ32N2_VP1o::8OaM5q9VTKuhnIyanhQEHg` |

7 more Contacts actions are available through search.

### Invoices

| Action | Method | Path | Action id |
|---|---|---|---|
| Generate an Estimate Number for a Location | GET | `/invoices/estimate/number/generate` | `conn_mod_def::GJ32Xw4HcyE::6CJXer1HSfakeevT4jNewQ` |
| Generate an Invoice Number for a Location | GET | `/invoices/generate-invoice-number` | `conn_mod_def::GJ32X5BOEI0::FpyQ3FoSSmGbZWdUC8P-3g` |
| Get an Invoice | GET | `/invoices/{{invoiceId}}` | `conn_mod_def::GJ32YREW5HI::l3tMSCZIQ4WZRCoDbxy47A` |
| List Invoices | GET | `/invoices/` | `conn_mod_def::GJ32YuVpXnM::Z1Ata4M9SKqV1jPJ9AJQGA` |
| Cancel a Scheduled Invoice (by Schedule ID) | POST | `/invoices/schedule/{{scheduleId}}/cancel` | `conn_mod_def::GJ32V7WoaRM::h8m9RO5bTdWtpEKyck6eVQ` |
| Create an Invoice from an Estimate | POST | `/invoices/estimate/{{estimateId}}/invoice` | `conn_mod_def::GJ32Weoe2Y4::KSiXHzGASg-6uNefr_CDFg` |
| Create Invoice | POST | `/invoices/` | `conn_mod_def::GJ32WTxcozw::jL73dSvSTPW8dEk7-rH-Rw` |
| Create or Update a Text2Pay Invoice | POST | `/invoices/text2pay` | `conn_mod_def::GJ32WDwWYgM::Uy7jBs4xSwqqhL2t6itzgg` |
| Delete an Invoice | DELETE | `/invoices/{{invoiceId}}` | `conn_mod_def::GJ32XS2UYaY::H7MU7z6WSbKv6jplUvetbA` |
| Record a Manual Payment for an Invoice | POST | `/invoices/{{invoiceId}}/record-payment` | `conn_mod_def::GJ32Ze55xBY::97OtwPTwQLqlGCFYyL02qA` |
| Send an Invoice (by Invoice ID) | POST | `/invoices/{{invoiceId}}/send` | `conn_mod_def::GJ32Z3UaRns::2EuujccfSY-NFaAnxQwDBg` |
| Update an Invoice by ID | PUT | `/invoices/{{invoiceId}}` | `conn_mod_def::GJ32aZ_fQFY::NLWn1QdGTk2XqffEmnlhrQ` |

3 more Invoices actions are available through search.

### CustomFields

| Action | Method | Path | Action id |
|---|---|---|---|
| Get a Custom Field / Folder by ID | GET | `/custom-fields/{{id}}` | `conn_mod_def::GJ32SYSmilw::RY19XQVlQuOooxMuq8dzbA` |
| Get a Location’s Custom Field | GET | `/locations/{{locationId}}/customFields/{{id}}` | `conn_mod_def::GJ32eGP9L9Y::jbdpIDHrQc-0ZRhG0t6sqg` |
| Get Custom Fields for an Object (by Object Key) | GET | `/custom-fields/object-key/{{objectKey}}` | `conn_mod_def::GJ32ShTho9s::E_-2wJ1IR5mmLRZbGhicBg` |
| List a Location’s Custom Fields | GET | `/locations/{{locationId}}/customFields` | `conn_mod_def::GJ32ePi4ODU::hVm1sUWjQ3W9s9T-Mhpj4g` |
| Create a Location Custom Field | POST | `/locations/{{locationId}}/customFields` | `conn_mod_def::GJ32cXC0pQE::s5djtR-yQqecXiw9eorWJA` |
| Create Custom Field (Custom Objects / Company) | POST | `/custom-fields/` | `conn_mod_def::GJ32R5Bqko8::4DpZLlj_Q_KdnaECb-Nzzw` |
| Delete a Custom Field by ID | DELETE | `/custom-fields/{{id}}` | `conn_mod_def::GJ32SIF9-Gc::x6BvMpqlTh2IRTgBLn-ATQ` |
| Delete a Location’s Custom Field | DELETE | `/locations/{{locationId}}/customFields/{{id}}` | `conn_mod_def::GJ32dHPSxVI::YMmoZq0DQ425X-3oi57j6w` |
| Update a Custom Field by ID | PUT | `/custom-fields/{{id}}` | `conn_mod_def::GJ32So0d740::nF-obpVQTxmCDMOOJpje6w` |
| Update a Location’s Custom Field | PUT | `/locations/{{locationId}}/customFields/{{id}}` | `conn_mod_def::GJ32fmVWbu4::NYD-CsAFRr-qumAHao6gyw` |
| Upload Files to a Location’s Custom Fields | POST | `/locations/{{locationId}}/customFields/upload` | `conn_mod_def::GJ32gJlUmp4::HXhCE1JcQu27CKZSxCOYdQ` |

### Opportunities

| Action | Method | Path | Action id |
|---|---|---|---|
| Get an Opportunity | GET | `/opportunities/{{id}}` | `conn_mod_def::GJ32kIwIhPg::4husGHAiQcyySABFzeB7TA` |
| Search Opportunities (by Location) | GET | `/opportunities/search` | `conn_mod_def::GJ32kpIUOnI::wnkEggEKQluDQ2AAMp6wiw` |
| Add Followers to an Opportunity | POST | `/opportunities/{{id}}/followers` | `conn_mod_def::GJ32jyKUCAk::5Fkm1tu6T--ojyU-vbEPhg` |
| Create an Opportunity | POST | `/opportunities/` | `conn_mod_def::GJ32j59epO0::0ZPWdCEzTZWN3FMnuiOz_Q` |
| Delete an Opportunity | DELETE | `/opportunities/{{id}}` | `conn_mod_def::GJ32kBNBUT0::9hUMsqN3QTOO1Mo6IdTiPA` |
| Remove Followers from an Opportunity | DELETE | `/opportunities/{{id}}/followers` | `conn_mod_def::GJ32kZXBe9Q::gm13tLF_TDm0o-NIZdIJeQ` |
| Update an Opportunity | PUT | `/opportunities/{{id}}` | `conn_mod_def::GJ32kxpaW44::qmWmy0jCThSNeeu_2cF5RA` |
| Update an Opportunity’s Status | PUT | `/opportunities/{{id}}/status` | `conn_mod_def::GJ32k6rceIA::hoZzOAYESZu9qjFM5exYkQ` |
| Upsert an Opportunity | POST | `/opportunities/upsert` | `conn_mod_def::GJ32lDZwVWA::K4GS4Of-SSOi4je7D89kNw` |

### Products

| Action | Method | Path | Action id |
|---|---|---|---|
| Get Product by ID | GET | `/products/{{productId}}` | `conn_mod_def::GJ32rQiWmfY::4NSpMZ-yQcmsyy-2MV7_lw` |
| List Products | GET | `/products/` | `conn_mod_def::GJ32ruwY0O4::n4dSuEysQ4GM45-xw7XkLA` |
| Bulk Edit Products and Prices | POST | `/products/bulk-update/edit` | `conn_mod_def::GJ32pKCmTAU::YpQA_nxST7-RghYi99AgSw` |
| Bulk Update Products | POST | `/products/bulk-update` | `conn_mod_def::GJ32pTGeWWw::w8CJ7fr9QISvMw8G-ii7Tg` |
| Create Product | POST | `/products/` | `conn_mod_def::GJ32pmDBkbc::nzHOsokPQRCpKLvucoCfJg` |
| Delete Product by ID | DELETE | `/products/{{productId}}` | `conn_mod_def::GJ32p-UDiZE::9YCVeoFbSW6kGvNZnCq3xA` |
| Update a Product by ID | PUT | `/products/{{productId}}` | `conn_mod_def::GJ32sHOtVEo::JDMsU2AnTeuoUZ-xDguryg` |
| Update a Store’s Product Display Priorities | POST | `/products/store/{{storeId}}/priority` | `conn_mod_def::GJ32sZFtB7Q::N2gjDTq4QY6blYWzq8dd8g` |
| Update a Store’s Product Inclusion Status | POST | `/products/store/{{storeId}}` | `conn_mod_def::GJ32pBstYeY::WnYrVmhLQsivr0k7T5i72A` |

### Locations

| Action | Method | Path | Action id |
|---|---|---|---|
| Get a Sub-Account (Location) by ID | GET | `/locations/{{locationId}}` | `conn_mod_def::GJ32ewjbqRw::7htUPgjxQ0Cuu33X40lMMw` |
| Get Locations by Stripe Customer or Subscription ID (Company Scoped) | GET | `/saas/locations` | `conn_mod_def::GJ32u8h2Tag::JpyEjxFFRiCgTaTq1sInGg` |
| List Locations by Stripe Customer or Subscription (Company Scoped) | GET | `/saas-api/public-api/locations` | `conn_mod_def::GJ32uzWtC80::2nlem28GSYKmcxIoB8AzFg` |
| Search Locations (Sub-Accounts) | GET | `/locations/search` | `conn_mod_def::GJ32fU5V6eU::iTNI6ctyT9uVL9BmJqxzRw` |
| Create a Sub-Account (Location) | POST | `/locations/` | `conn_mod_def::GJ32cvF_eSQ::T8kQT6e0QX6Ve9ni0yjM_A` |
| Delete a Sub-Account (Location) | DELETE | `/locations/{{locationId}}` | `conn_mod_def::GJ32djuk3Co::H50FlyqgQQ-Esel1IL25aw` |
| Pause a Location (Deprecated) | POST | `/saas-api/public-api/pause/{{locationId}}` | `conn_mod_def::GJ32vnyDMOQ::61-S4SuoQBeu9Sv8RXNu7Q` |
| Update a Sub-Account (Location) | PUT | `/locations/{{locationId}}` | `conn_mod_def::GJ32fLnlj0c::qB1-lqhJRfKOOQArOaPj7Q` |

### Associations

| Action | Method | Path | Action id |
|---|---|---|---|
| Get an Association by ID | GET | `/associations/{{associationId}}` | `conn_mod_def::GJ32DubHlUo::NL9A4hPMQvawPrYNWqjMeQ` |
| Get an Association by Object Key | GET | `/associations/objectKey/{{objectKey}}` | `conn_mod_def::GJ32D3CYMRA::8nnAKbkZTHGe3HEdJYyq_A` |
| Get an Association Key by Key Name | GET | `/associations/key/{{keyName}}` | `conn_mod_def::GJ32EA2QIR0::6aEei1YuReqN6og94amFHA` |
| List Associations for a Location (Sub-account) | GET | `/associations/` | `conn_mod_def::GJ32DciATio::1qc7tc7xRUGo4mXOHYrz2Q` |
| Create Association (Contacts ↔ Contacts / Contacts ↔ Custom Objects) | POST | `/associations/` | `conn_mod_def::GJ32C6pc0p4::ujGgBoHTRe6jAsP09D0-Fw` |
| Delete a User-Defined Association by ID | DELETE | `/associations/{{associationId}}` | `conn_mod_def::GJ32DLTBU0E::_fQdrDH1Rt2V0VGTh1O4IA` |
| Update an Association by ID | PUT | `/associations/{{associationId}}` | `conn_mod_def::GJ32EIvBNBY::y2M-okjZRbassMqvZDPYXA` |

### InvoiceTemplates

| Action | Method | Path | Action id |
|---|---|---|---|
| Get an Invoice Template | GET | `/invoices/template/{{templateId}}` | `conn_mod_def::GJ32YJJ0owg::PpY1PHTbRoGTzCRrRm94KQ` |
| List Invoice Templates | GET | `/invoices/template` | `conn_mod_def::GJ32ZE-F2R4::qQ4O0GnOQ-i3wZ57twjdFw` |
| Create an Invoice Template | POST | `/invoices/template` | `conn_mod_def::GJ32W5haBNc::Wq7NwRj-RzOO4-IQSS1CKg` |
| Delete an Invoice Template | DELETE | `/invoices/template/{{templateId}}` | `conn_mod_def::GJ32Xiyruns::YM0LLONlQ8WOI_7Z-6GATw` |
| Update an Invoice Template | PUT | `/invoices/template/{{templateId}}` | `conn_mod_def::GJ32bDZAXEg::vvLa9qFBSWGGEuWFEW0Ztw` |
| Update an Invoice Template’s Late Fees Configuration | PATCH | `/invoices/template/{{templateId}}/late-fees-configuration` | `conn_mod_def::GJ32bNEcqpg::L3Tt8rT7Tv-HCddDb7IqEQ` |
| Update an Invoice Template’s Payment Methods Configuration | PATCH | `/invoices/template/{{templateId}}/payment-methods-configuration` | `conn_mod_def::GJ32bWRerPw::8jQ9dAxzSiOs9H7pK3B1Ig` |

### Saas

| Action | Method | Path | Action id |
|---|---|---|---|
| Bulk Disable SaaS for a Company’s Locations | POST | `/saas/bulk-disable-saas/{{companyId}}` | `conn_mod_def::GJ32t1gPHN0::9nDPuVr2S-SRVhjPg9_-_g` |
| Bulk Disable SaaS for a Company’s Locations (Deprecated) | POST | `/saas-api/public-api/bulk-disable-saas/{{companyId}}` | `conn_mod_def::GJ32ttc-5fQ::ylFlY4V8QrOp2zWsIS0d7Q` |
| Bulk Enable SaaS for a Company | POST | `/saas/bulk-enable-saas/{{companyId}}` | `conn_mod_def::GJ32tjOWgw4::QNLh1KVVSFCtDDvkw4Y9Sg` |
| Bulk Enable SaaS for a Company (Deprecated) | POST | `/saas-api/public-api/bulk-enable-saas/{{companyId}}` | `conn_mod_def::GJ32tbQAZ94::JWN322k8SImUsBYjdZrp_A` |
| Enable SaaS for a Sub-Account (Location) | POST | `/saas-api/public-api/enable-saas/{{locationId}}` | `conn_mod_def::GJ32t969-6c::FYzinazjTaSDomJHRJ2xVg` |
| Enable SaaS for a Sub-Account (Location) | POST | `/saas/enable-saas/{{locationId}}` | `conn_mod_def::GJ32uG8JRXw::Dy-I6TQiQLS8mydD5WuYAQ` |
| Pause a Location (Sub-Account) | POST | `/saas/pause/{{locationId}}` | `conn_mod_def::GJ32vvva2UQ::9mAwWXUWTqipoKnMXb8oSw` |

### Users

| Action | Method | Path | Action id |
|---|---|---|---|
| Get a User | GET | `/users/{{userId}}` | `conn_mod_def::GJ327UUtl18::rEtrKTmlSFe9X0LWKpTshQ` |
| Get Users by Location | GET | `/users/` | `conn_mod_def::GJ327dgk3PY::oz4p75CVT1WjZ0Vm1hlHZw` |
| Search Users (in a Company) | GET | `/users/search` | `conn_mod_def::GJ327pEcV84::PiBoLzA5SYuF4inKidqABw` |
| Create User | POST | `/users/` | `conn_mod_def::GJ326mg89uQ::jgYhEaWsTrGuAgu9jp52Yw` |
| Delete a User | DELETE | `/users/{{userId}}` | `conn_mod_def::GJ326uN-p7k::5atR0hM7SKCxI8Mna8iQcQ` |
| Filter Users by Email (Company Scoped) | POST | `/users/search/filter-by-email` | `conn_mod_def::GJ3262xZe-Q::l8n5XGVmSTucYFuMzDE-uw` |
| Update a User | PUT | `/users/{{userId}}` | `conn_mod_def::GJ3270EAokA::FMqTZyUhRImhO6SBHZFcfg` |

### InvoiceSchedules

| Action | Method | Path | Action id |
|---|---|---|---|
| Get an Invoice Schedule | GET | `/invoices/schedule/{{scheduleId}}` | `conn_mod_def::GJ32YBuyJqs::03pQPJapQ8O5g3aUD2bybw` |

5 more InvoiceSchedules actions are available through search.

This lists 90 of 413 actions. For anything not here, call `search_one_platform_actions` with platform `high-level`. The full catalog is at https://www.withone.ai/knowledge/high-level.

## When a call fails

The error comes from HighLevel, not from One. A 400 or 422 means your parameters do not match the schema, so re-read the knowledge and fix the field. A 401 or 403 means the connection needs re-authorizing, which no retry will fix. A 404 means the id is not on this account. A 429 means slow down. Never retry a write more than once: the first attempt may have landed.

Full catalog: https://www.withone.ai/knowledge/high-level

Integration knowledge by One (withone.ai), licensed under [One-Knowledge-1.0](https://www.withone.ai/licenses/knowledge). Attribution must be preserved in derivative works.

