Back to home
HL ArchitectHL Architect

Setup Guide

Everything you need to go from purchase to your first HighLevel API call with Claude Code.

0

Set Up Your API Server

HighLevel's OAuth flow requires a real server endpoint for the callback URL. You can't use localhost in production. The fastest way to get a production server running is Next.js on Vercel — free tier, zero config, automatic deploys.

If you're only using a Private Integration Token (Part 2A), you can skip this step entirely. You only need a server for OAuth.

1 Create a Next.js project

Terminal
npx create-next-app@latest my-hl-integration --typescript --tailwind --app
cd my-hl-integration

2 Push to GitHub and deploy to Vercel

Create a repo on GitHub, push your code, then go to vercel.com and import the repo. Vercel detects Next.js automatically and deploys in about 60 seconds.

3 Add your custom API subdomain

In your Vercel project, go to Settings > Domains and add api.yourdomain.com. Vercel will give you a DNS record to add:

TypeNameValue
CNAMEapicname.vercel-dns.com

Add that CNAME record at your domain registrar (GoDaddy, Namecheap, Cloudflare, etc.) and wait a few minutes for DNS propagation.

Why a separate API subdomain? Your website lives at yourdomain.com. Your API server lives at api.yourdomain.com. This keeps them separate — your website can be hosted anywhere while your API server handles all the HighLevel integration logic on Vercel.
1

Activate Your License

After purchase, you'll receive a confirmation email and a GitHub repository invite for your tier(s).

1 Check your email

Look for a GitHub repo invite from randall-gross. If you provided your GitHub username at checkout, the invite is sent automatically. Check spam if you don't see it within a few minutes.

2 Accept the GitHub invite and clone

After purchase, you'll receive a GitHub repo invite. Accept the invite and clone all repos you have access to:

Terminal
# Clone the base skill (required)
git clone https://github.com/randall-gross/highlevel-claude-skills.git

# Clone your paid repo(s) — you'll have access after purchase
git clone https://github.com/randall-gross/highlevel-claude-skills-pro.git
git clone https://github.com/randall-gross/highlevel-claude-skills-enterprise.git

3 Merge references into the skill folder

Copy the additional domain references into the base skill folder. They plug right in — no configuration needed.

Terminal
# Copy references from each repo you purchased
cp -r highlevel-claude-skills-pro/references/* \
  highlevel-claude-skills/skills/highlevel/references/

cp -r highlevel-claude-skills-enterprise/references/* \
  highlevel-claude-skills/skills/highlevel/references/

4 Install the skill

Copy the skill folder into your Claude Code skills directory:

Terminal
# macOS / Linux
cp -r highlevel-claude-skills/skills/highlevel ~/.claude/skills/

# Windows
xcopy highlevel-claude-skills\skills\highlevel %USERPROFILE%\.claude\skills\highlevel /E /I

5 Verify it works

Open Claude Code in any project and ask a HighLevel API question. Claude should automatically use the skill:

Claude Code
> "How do I create a contact in HighLevel?"

If Claude responds with the exact endpoint, method, parameters, and working code — you're all set.

2

Connect to HighLevel

The skill gives Claude the knowledge of every HL API endpoint. But to actually call the API, you need credentials. There are two approaches:

Recommended

Private Integration Token

Single sub-account, 5 min setup. Best for getting started quickly.

Advanced

OAuth Marketplace App

Multi-account access. Requires creating a private app. Jump to Part 2B

Option A: Private Integration Token

5 minutes. No server required.

  1. 1 Open HighLevel Settings

    Log in to your sub-account > Settings (gear icon) > Integrations > Private Integrations tab.

  2. 2 Create a Private Integration

    Click "+ Create Private Integration". Name it something descriptive like Claude Code API.

  3. 3 Select your scopes

    Choose the permissions your integration needs. Common scopes:

    contacts.readonly / contacts.write
    calendars.readonly / calendars/events.write
    opportunities.readonly / opportunities.write
    conversations.readonly / conversations.write
  4. 4 Copy your token

    The token is shown once. Copy it immediately. If you lose it, create a new integration.
  5. 5 Store your credentials

    .env.local
    GHL_PRIVATE_TOKEN=eyJhbGciOiJSUzI1NiIs...
    GHL_LOCATION_ID=ve9EPM428h8vShlRW1KT

    Your GHL_LOCATION_ID is in the URL bar when inside a sub-account:
    https://app.gohighlevel.com/v2/location/ve9EPM428h8vShlRW1KT/...

Private tokens expire every 90 days. Set a calendar reminder for day 80 to generate a new one.

Option B: OAuth 2.0 Marketplace App

For multi-account access. Requires a server (see Part 0).

  1. 1 Go to the HL Marketplace

    Go to marketplace.gohighlevel.com and sign in with your agency account. Click "+ Create App".

    HL Marketplace App Dashboard showing the Create App button
    The App Dashboard with the '+ Create App' button in the top right
  2. 2 Create a Private App

    Fill in your app name and select "Private" under App Type. This is the key step — Private apps work immediately with no marketplace review required.

    Create App modal with Private selected
    Select 'Private' — no approval process needed for internal use
    Private apps are limited to 5 external agencies. Since this is for your own agency, that limit doesn't matter.
  3. 3 Configure the Redirect URL

    Go to Advanced Settings > Auth. Enter your callback URL using the API subdomain you set up in Part 0:

    Auth page with redirect URL filled in
    Enter your redirect URL and click '+ Add' to save it
  4. 4 Select your scopes

    Scroll down to the Scopes section. Expand each category and check the scopes your integration needs. Each scope shows a description and whether it applies to Sub-Account or Agency level.

    Scopes section with Contacts expanded showing read/write checkboxes
    Expand each category and check the scopes you need
    Select ALL scopes you might ever need. Scopes are locked at install time. If you add scopes later, users must uninstall and reinstall the app.
  5. 5 Generate your Client Keys

    Go to MANAGE > Secrets. Click "+ Add" under Client Keys, name it Default, and click Add.

    Secrets page with empty Client Keys table
    Click '+ Add' to generate your Client ID and Client Secret

    A modal will display your Client ID and Client Secret. Copy both immediately.

    Modal showing generated Client ID and Client Secret
    Copy both values — the Client Secret is only shown once
    .env.local
    GHL_CLIENT_ID=your-client-id-here
    GHL_CLIENT_SECRET=your-client-secret-here
    GHL_REDIRECT_URI=https://api.yourdomain.com/api/auth/callback
  6. 6 Publish your app

    Go to MANAGE > Versions. Click the three-dot menu on your draft version and select "Publish".

    Versions page with three-dot menu showing Publish option
    Click the three-dot menu, then 'Publish'

    A confirmation dialog shows what's required. Make sure all items have green checkmarks before proceeding.

    Publish Confirmation dialog showing required information checklist
    Note: This screenshot shows a test account. Your app should have all items completed (green checks) before publishing.
  7. 7 Install on your sub-account

    Once published, go to your sub-account > Settings > Integrations > Marketplace. Find your private app, click "Install", select the location, and authorize the scopes.

Key Gotchas

GotchaSolution
Token endpoint returns errorsUse application/x-www-form-urlencoded, NOT JSON
Refresh token stopped workingRefresh tokens are single-use. Store the new one after every refresh.
Auth code expiredAuthorization codes expire in 10 minutes. Exchange immediately.
Need to add new scopesUsers must uninstall and reinstall the app. Plan scopes carefully.
API calls return empty/errorMissing the Version: 2021-07-28 header (required on every call)
3

Start Building

Open Claude Code in your project and try these:

>"How do I upsert a contact with a custom field?"
>"Show me how to book an appointment via the Calendars API"
>"What's the endpoint for searching opportunities by pipeline stage?"
>"Help me send an SMS through the Conversations API"

Claude reads the skill references, finds the exact endpoint, and gives you the right method, path, parameters, and working code — on the first try.

Troubleshooting

Claude doesn't use the skill
Make sure the skill folder is at ~/.claude/skills/highlevel/ and contains SKILL.md at the root. Restart Claude Code after installing.
Additional domains not loading
Verify you copied the references from your purchased repos into the base skill's references/ folder. Each purchase adds new domains that plug into the base skill.
"Version header missing" errors
Every HL API call needs the Version: 2021-07-28 header. The skill references include this in every example, but double-check your implementation.
Private Token expired
Private tokens last 90 days. Create a new one in Settings > Integrations > Private Integrations and update your .env.local.
OAuth refresh token stopped working
Refresh tokens are single-use. If a refresh failed midway, the old token is invalidated. The user needs to uninstall and reinstall the app.
Didn't receive GitHub invite
Check your spam folder. If you provided a GitHub username at checkout, the invite goes to that account. Contact support if it's been more than an hour.

Need help?

Stuck on setup or have questions about the HL API?

Contact Support