Skills highlevel
Connect your AI assistant to GoHighLevel CRM via the official API v2. Manage contacts, conversations, calendars, pipelines, invoices, payments, workflows, and 30+ endpoint groups through natural language. Includes interactive setup wizard and 100+ pre-built, safe API commands. Python 3.6+ stdlib only — zero external dependencies.
git clone https://github.com/openclaw/skills
T=$(mktemp -d) && git clone --depth=1 https://github.com/openclaw/skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/10xcoldleads/highlevel" ~/.claude/skills/openclaw-skills-highlevel && rm -rf "$T"
T=$(mktemp -d) && git clone --depth=1 https://github.com/openclaw/skills "$T" && mkdir -p ~/.openclaw/skills && cp -r "$T/skills/10xcoldleads/highlevel" ~/.openclaw/skills/openclaw-skills-highlevel && rm -rf "$T"
skills/10xcoldleads/highlevel/SKILL.mdGoHighLevel API Skill
Turn your AI assistant into a GoHighLevel command center. Search contacts, send messages, book appointments, manage pipelines, create invoices, schedule social posts — across all 39 GHL API v2 endpoint groups, using plain English.
Don't have GoHighLevel yet? Start with the free 5-Day AI Employee Challenge and build a fully automated system: 👉 Start the 5-Day AI Employee Challenge
Requirements
| Requirement | Details |
|---|---|
| Runtime | Python 3.6+ (uses only standard library: , , , , , ) |
| External packages | None — zero required |
| Environment variables | (Primary — your Private Integration bearer token) |
(your sub-account Location ID) | |
| Network access | HTTPS to only |
Base URL:
https://services.leadconnectorhq.com
Required Headers: Authorization: Bearer $HIGHLEVEL_TOKEN + Version: 2021-07-28
Rate Limits: 100 requests/10 seconds burst, 200K/day per location
Security Design
All API functions use pre-defined endpoint paths — there is no arbitrary HTTP request capability. Every user-supplied ID is validated against a strict alphanumeric regex (
^[a-zA-Z0-9_-]{1,128}$) before being included in any URL path, preventing path traversal and injection. The scripts use only Python's built-in urllib.request for all network calls. No shell commands, no external binaries, no file writes outside of stdout.
Setup — /highlevel-setup
/highlevel-setupIf the user says "set up highlevel", "connect my GHL", or
/highlevel-setup, run the setup wizard:
python3 scripts/setup-wizard.py
The wizard automatically: checks environment variables → guides Private Integration creation → tests the connection → pulls first 5 contacts as a quick win.
Manual Setup (if wizard can't run)
Step 1: Create a Private Integration (NOT the old API Keys method)
-
Log into app.gohighlevel.com
-
Switch to your Sub-Account (recommended for single-location use)
-
Click Settings (bottom-left gear icon)
-
Select Private Integrations in the left sidebar
- If not visible, enable it first: Settings → Labs → toggle Private Integrations ON
-
Click "Create new Integration"
-
Enter a name (e.g., "Claude AI Assistant") and description
-
Grant only the scopes you need (least-privilege recommended):
Use case Recommended scopes Contact management only
,contacts.readonlycontacts.writeContacts + messaging Above +
,conversations.readonly
,conversations.writeconversations/message.writeFull CRM (contacts, calendar, pipeline) Above +
,calendars.readonly
,calendars.write
,opportunities.readonlyopportunities.writeAdding workflows & invoices Above +
,workflows.readonly
,invoices.readonlyinvoices.writeRead-only reporting
,contacts.readonly
,opportunities.readonly
,calendars.readonly
,invoices.readonlylocations.readonlyYou can always add more scopes later in Settings → Private Integrations → Edit without regenerating the token.
-
Click Create → Copy the token IMMEDIATELY — it is shown only once and cannot be retrieved later
Agency vs Sub-Account Integrations
| Feature | Agency Integration | Sub-Account Integration |
|---|---|---|
| Created at | Agency Settings → Private Integrations | Sub-Account Settings → Private Integrations |
| Access scope | Agency + all sub-accounts (pass ) | Single location only |
| Available scopes | All scopes including , , , , | Sub-account scopes only |
| Best for | Multi-location management, SaaS configurator | Single client integrations (recommended default) |
Recommendation: Start with a Sub-Account integration and the minimum scopes you need. You can upgrade to Agency-level later if you need multi-location access.
Step 2: Get Your Location ID
- While in the sub-account, go to Settings → Business Info (or Business Profile)
- The Location ID is displayed in the General Information section
- Alternative: check the URL bar — it's the ID after
in/location/app.gohighlevel.com/v2/location/{LOCATION_ID}/...
Step 3: Set Environment Variables
export HIGHLEVEL_TOKEN="your-private-integration-token" export HIGHLEVEL_LOCATION_ID="your-location-id"
Step 4: Test Connection
Run
python3 scripts/ghl-api.py test_connection — should return location name and status.
After successful setup, pull 5 contacts as a quick win to confirm everything works.
Helper Script
scripts/ghl-api.py — Executable Python script (stdlib only) with built-in retry logic, pagination, input validation, and error handling.
Core Commands:
| Command | Description |
|---|---|
| Verify token + location ID work |
| Search by name, email, or phone |
| Get full contact details |
| Create new contact |
| Update contact fields |
| List pipeline opportunities |
| List recent conversations |
| Send SMS/email |
| List all calendars |
| Available booking slots |
| List all workflows |
| Enroll contact in workflow |
| List invoices |
| List products |
| List forms |
| List campaigns |
| Get location info |
| List location tags |
| List courses/memberships |
All functions are safe, pre-defined endpoints. No arbitrary request capability.
Complete API v2 Coverage (39 Endpoint Groups)
The skill provides safe, specific functions for all major GHL operations. Each function maps to a specific, allowed API endpoint with validated parameters.
| # | Group | Base Path | Key Operations | Scope Prefix |
|---|---|---|---|---|
| 1 | Contacts | | CRUD, search, upsert, tags, notes, tasks, bulk ops | |
| 2 | Conversations | | Search, messages (SMS/email/WhatsApp/FB/IG/chat), recordings | |
| 3 | Calendars | | CRUD, free slots, groups, resources, appointments | |
| 4 | Opportunities | | CRUD, search, pipelines, stages, status, followers | |
| 5 | Workflows | | List workflows, enroll/remove contacts | |
| 6 | Campaigns | | List campaigns (read-only) | |
| 7 | Invoices | | CRUD, send, void, record payment, Text2Pay, schedules, estimates | |
| 8 | Payments | | Orders, transactions, subscriptions, coupons, providers | |
| 9 | Products | | CRUD, prices, collections, reviews, store stats | |
| 10 | Locations | | Get/update location, custom fields, custom values, tags, templates | |
| Custom Fields CRUD: | ||||
— List | ||||
— Create | ||||
— Update | ||||
— Delete | ||||
| Custom Values CRUD: | ||||
— List | ||||
— Create | ||||
— Update | ||||
— Delete | ||||
| Tags CRUD: | ||||
— List | ||||
— Create | ||||
— Update | ||||
— Delete | ||||
| 11 | Users | | CRUD, filter by email/role | |
| 12 | Forms | | List forms, get submissions | |
| 13 | Surveys | | List surveys, get submissions | |
| 14 | Funnels | | List funnels, pages, redirects | |
| 15 | Social Planner | | Posts CRUD, accounts, CSV import, categories, stats | |
| 16 | Blogs | | Create/update posts, categories, authors | |
| 17 | | Templates CRUD, scheduled emails | | |
| 18 | Media | | Upload, list, delete files | |
| 19 | Trigger Links | | CRUD trigger links | |
| 20 | Businesses | | CRUD businesses | |
| 21 | Companies | | Get company details (Agency) | |
| 22 | Custom Objects | | Schema CRUD, record CRUD | |
| 23 | Associations | | CRUD associations and relations | |
| 24 | Proposals/Docs | | Documents, contracts, templates | |
| 25 | Snapshots | | List, status, share links (Agency) | |
| 26 | SaaS | | Subscription mgmt, plans, bulk ops (Agency $497) | |
| 27 | Courses | | Import courses/memberships | |
| 28 | Voice AI | | Call logs, agent CRUD, actions, goals | |
| 29 | Phone System | | Phone numbers, number pools | |
| 30 | Custom Menus | | CRUD custom menu links (Agency) | |
| 31 | OAuth | | Token exchange, installed locations | |
| 32 | Marketplace | | Installations, billing, charges | |
| 33 | Conversation AI | | AI chatbot configuration | — |
| 34 | Knowledge Base | | Knowledge base for AI features | — |
| 35 | AI Agent Studio | | Custom AI agent CRUD | — |
| 36 | Brand Boards | | Brand board management | — |
| 37 | Store | | E-commerce store management | — |
| 38 | LC Email | | Email infrastructure (ISV) | — |
| 39 | Custom Fields | | Custom field CRUD | |
Reference Docs (load on demand)
For detailed endpoint paths, parameters, and examples for each group:
— Contact CRUD, search, tags, notes, tasks, bulk operationsreferences/contacts.md
— Messaging across all channels, recordings, transcriptionsreferences/conversations.md
— Calendar CRUD, free slots, appointments, groups, resourcesreferences/calendars.md
— Pipeline management, stages, status updatesreferences/opportunities.md
— Invoices, payments, orders, subscriptions, productsreferences/invoices-payments.md
— Location settings, custom fields/values, users, tagsreferences/locations-users.md
— Social planner posts, accounts, OAuth connectionsreferences/social-media.md
— Forms, surveys, funnels, trigger linksreferences/forms-surveys-funnels.md
— Custom objects, associations, snapshots, SaaS, Voice AI, blogs, coursesreferences/advanced.md
— Common errors, rate limits, token rotation, debuggingreferences/troubleshooting.md
Important Notes
- Private Integrations are required — the old Settings → API Keys method is deprecated/EOL
- Token rotation: Tokens don't auto-expire but GHL recommends 90-day rotation. Unused tokens auto-expire after 90 days inactivity
- "Rotate and expire later" — new token generated, old token stays active for 7-day grace period
- "Rotate and expire now" — old token invalidated immediately (use for compromised credentials)
- You can edit scopes without regenerating the token
- OAuth tokens (marketplace apps only): Access tokens expire in 24 hours (86,399s); refresh tokens last up to 1 year
- Agency tokens can access sub-account data by passing
parameterlocationId - Rate limits are per-resource — each sub-account independently gets 100/10s burst + 200K/day. SaaS endpoints: 10 req/sec global
- All list endpoints default to 20 records, max 100 per page via
paramlimit - Use cursor pagination with
/startAfter
for large datasetsstartAfterId - Monitor rate limits via response headers:
,X-RateLimit-Limit-Daily
,X-RateLimit-Daily-Remaining
,X-RateLimit-Max
,X-RateLimit-RemainingX-RateLimit-Interval-Milliseconds - $497 Agency Pro plan required for: SaaS Configurator, Snapshots, full agency management APIs
Webhook Events
50+ webhook event types for real-time notifications. Key events:
ContactCreate, ContactDelete, ContactTagUpdate, InboundMessage, OutboundMessage, OpportunityCreate, OpportunityStageUpdate, OpportunityStatusUpdate, appointment events, payment events, form submission events. Webhooks continue firing even if access token expires. Config is per marketplace app.
Docs: https://marketplace.gohighlevel.com/docs/webhook/WebhookIntegrationGuide
Official SDKs & Developer Resources
- Node.js:
(npm) — supports@gohighlevel/api-client
config, auto 401 retryprivateIntegrationToken - Python:
(PyPI) — session storage, auto token refresh, webhook middlewaregohighlevel-api-client - PHP SDK also available
- All SDKs use
apiVersion: '2021-07-28' - OpenAPI Specs: https://github.com/GoHighLevel/highlevel-api-docs
- API Docs: https://marketplace.gohighlevel.com/docs/
- Developer Slack: https://developers.gohighlevel.com/join-dev-community
Built by Ty Shane
🌐 LaunchMyOpenClaw.com • 🌐 MyFBLeads.com ▶️ YouTube @10xcoldleads • 📘 Facebook • 💼 LinkedIn 📧 ty@10xcoldleads.com
No GoHighLevel account yet? → Start the free 5-Day AI Employee Challenge