Atlas
  1. Atlas Actions
Atlas
  • Voice AI
    • Welcome to Atlas!
    • Account Setup
    • Create your first campaign
    • Knowledge
    • Edit Script
    • Advanced Script Options
    • Phone number integration
    • Twilio Integration
    • Call Forwarding
    • Calendar Integration
    • SMS Integration
    • Campaign Details
    • Add Contacts
    • Call Records
    • Account
    • Call Scheduling
    • Testing your outbound campaign
    • Clone Campaign
    • General Walkthrought
    • Calls Enrichment
      • Enriching Calls with External CRM and Data Sources
      • Go High Level - Call Enrichment
      • Pipedrive - Call Enrichment
      • Shopify - Call Enrichment
      • Monday - Call Enrichment
      • Hubspot - Call Enrichment
    • Atlas Actions
      • Atlas Actions triggering
      • HubSpot - Meetings Scheduler Integration
      • GoHighLevel - Calendar Integration
    • Campaigns
      • Create Campaign
      • Campaigns
    • Integrations
      • Zapier
      • Make
      • Keragon
      • Go High Level
        • Download Atlas App in GHL App Marketplace
        • Import the Atlas Snapshot
        • Triggers and Actions
        • Workflows
          • Workflow 01 - Lead form Submitted Website
          • Workflow 02 - CALL Lead from Website form
          • Workflow 03 - CALL Lead from Meta
          • Workflow 04 - Summary and Recording to Conversations
    • Phone Systems Integrations
      • Dialpad Integration
  • TV Ads
    • Atlas Pixel Tracker
  • API Reference
    • API Keys
    • Campaigns
      • Get all campaigns
      • Get campaign by ID
      • Delete campaign
      • Update campaign
      • Set campaign status
    • Statistics
      • Get all campaigns overview statistics
      • Get call records
      • Get campaign statistics
      • Get call record details
      • Delete call record
    • Calls
      • Get scheduled calls
      • Create scheduled call
    • Bookings
      • Get bookings for campaign
      • Get bookings for call
    • Knowledge Base
      • Get all knowledge base files
      • Delete knowledge file
      • Get knowledge files for campaign
      • Attach file to campaign
      • Detach file from campaign
      • Add file to collection
      • Remove file from collection
      • Get file linked campaigns
      • Upload knowledge file
      • Upload knowledge from URL
  • Schemas
    • CampaignBodyV2
    • CampaignRow
    • Voice
    • AgentRow
    • Statistics
    • CreateAgentRequest
    • UpdateAgentRequest
    • TotalStatistics
    • CallStatistics
    • SavedAgent
    • CallRecordBasic
    • Template
    • CallHistoryResponse
    • Error
    • CallHistoryEntry
    • CallMessageRole
    • CostBreakdownAnalysis
    • CostBreakdown
    • Analysis
    • Artifact
    • Cost
    • Monitor
    • CallRecordDetailed
    • Booking
    • BookingsResponse
    • ScheduledMessage
    • ScheduledCallsResponse
    • BlobFile
    • BlobFileResponse
    • KnowledgeBaseEntry
    • KnowledgeBaseResponse
  1. Atlas Actions

GoHighLevel - Calendar Integration

This guide explains how to set up and use Atlas Actions to integrate GoHighLevel functionality into your campaigns. Atlas Actions allow your AI assistant to interact with GoHighLevel's CRM, calendars, and appointments automatically.

📋 Table of Contents#

Overview
Prerequisites
Available Atlas Actions
Setup Process
Action Details
1. GHL Upsert Contact
2. GHL Calendar Free Slots
3. GHL Create Appointment
Adding Actions to Campaigns
Common Use Cases
Troubleshooting

Overview#

Atlas Actions are pre-built integrations that allow your AI assistant to perform specific tasks in external systems like GoHighLevel. These actions use templates that you configure once and then add to your campaigns.
Key Benefits:
No coding required
Secure credential management
Reusable across multiple campaigns
Easy to configure and maintain

Prerequisites#

Before setting up Atlas Actions for GoHighLevel, ensure you have:
1.
Active GoHighLevel Account
Access to Settings and API Keys
Sub-account (Location) access
2.
GoHighLevel API Access
Ability to create Private Integration Tokens (V2 API - Recommended)
Or API Keys (V1 API - Legacy)
3.
Required Information
Location ID
Calendar ID (for calendar-related actions)
API Key or Access Token

Available Atlas Actions#

Atlas provides three main GoHighLevel actions:
Action NamePurposeWhen to Use
GHL Upsert ContactCreate or update contacts in CRMBefore scheduling appointments, managing customer data
GHL Calendar Free SlotsRetrieve available time slotsWhen showing availability to customers
GHL Create AppointmentBook appointments in calendarAfter confirming time slot with customer

Setup Process#

Step 1: Obtain GoHighLevel Credentials#

Getting Your Location ID#

Your Location ID can be found in the URL when viewing your GoHighLevel dashboard.
Example URL:
https://crmpage.com/v2/location/eDv3Z93Fnte6jr7ytj/
In this URL, your Location ID is: eDv3Z93Fnte6jr7ytj
Steps:
1.
Log in to GoHighLevel
2.
Navigate to your sub-account/location
3.
Copy the Location ID from the browser URL
4.
Add Tool this ID - you'll need it when creating tools

Getting Your API Key (V2 API - Recommended)#

The V2 API uses Private Integration Tokens which provide better security and granular permissions.
Steps:
1.
Navigate to Private Integrations
In GoHighLevel, go to Settings > Private Integrations
2.
Create New Integration
Click Create new integration
3.
Configure Integration Details
Name: e.g., "Atlas Actions Integration"
Description: "Integration for Atlas AI assistant actions"
4.
Select Required Scopes
Depending on which actions you plan to use, select the appropriate scopes:
ActionRequired Scopes
GHL Upsert Contactcontacts.write
GHL Calendar Free Slotscalendars.readonly (or calendars.write)
GHL Create Appointmentcalendars/events.write
For all three actions, select:
✅ contacts.write - Create and update contacts
✅ calendars.readonly - View calendar availability
✅ calendars/events.write - Create appointments
5.
Copy Your Token
After creating the integration, copy the generated token
⚠️ IMPORTANT: This token provides access to your account data - keep it secure!
Add Tool the token in a secure location
image.png

Getting Your Calendar ID#

If you plan to use calendar-related actions, you'll need your Calendar ID.
Steps:
1.
In GoHighLevel, go to Calendars
2.
Click on the calendar you want to integrate
3.
The Calendar ID appears in the URL or calendar settings
Example URL:
https://crmpage.com/v2/location/eDv3Z93Fnte6jr7ytj/calendar/CVokAlI8fgw4WYWoCtQz
Calendar ID: CVokAlI8fgw4WYWoCtQz
image.png

Step 2: Create Actions from Templates#

image-1.png
Now that you have your credentials, you'll create actions from the provided templates.
Where to create actions:
Navigate to Global Actions section in Atlas
Look for the Use this Template option
For each action you need:

Creating GHL Upsert Contact Action#

1.
Select template: GHL Upsert Contact
2.
Configure the following fields:
FieldValueDescription
Tool Name"GHL Upsert Contact"A friendly name for your action
API Key[Your API Token]The token you created in Private Integrations
Location ID[Your Location ID]From your GHL URL
API Version2021-04-15Default version (pre-selected)
3.
Click Add Tool

Creating GHL Calendar Free Slots Action#

1.
Select template: GHL Calendar Free Slots
2.
Configure the following fields:
FieldValueDescription
Tool Name"GHL Calendar Availability"A friendly name for your action
API Key[Your API Token]The token you created in Private Integrations
Calendar ID[Your Calendar ID]From your calendar settings
API Version2021-04-15Default version (pre-selected)
3.
Click Add Tool

Creating GHL Create Appointment Action#

1.
Select template: GHL Create Appointment
2.
Configure the following fields:
FieldValueDescription
Tool Name"GHL Book Appointment"A friendly name for your action
API Key[Your API Token]The token you created in Private Integrations
Calendar ID[Your Calendar ID]From your calendar settings
Location ID[Your Location ID]From your GHL URL
API Version2021-04-15Default version (pre-selected)
3.
Click Add Tool

To use the GHL calendar you will need the three tools below, so you can just add this pressing the Use All Button
alt text

Action Details#

1. GHL Upsert Contact#

Purpose: Create new contacts or update existing ones in your GoHighLevel CRM.
When to Use:
Before scheduling appointments (to get the Contact ID)
When collecting customer information
To update customer details
Required Scopes:
contacts.write
How It Works:
Matches existing contacts by email or phone (based on your duplicate settings)
Updates the contact if found
Creates a new contact if not found
Returns the Contact ID (required for booking appointments)
Key Parameters:
ParameterRequiredDescriptionExample
locationId✅ YesYour GHL Location ID (auto-filled from template)eDv3Z93Fnte6jr7ytj
email⚠️ One RequiredContact email addressjohn@example.com
phone⚠️ One RequiredPhone with country code+1 888-888-8888
firstNameNoFirst nameJohn
lastNameNoLast nameDoe
nameNoFull nameJohn Doe
address1NoStreet address123 Main St
cityNoCityNew York
stateNoState/ProvinceNY
postalCodeNoZIP/Postal code10001
countryNoCountry codeUS
timezoneNoIANA timezoneAmerica/New_York
tagsNoArray of tags["customer", "vip"]
customFieldsNoCustom field valuesSee docs for format
⚠️ Important Notes:
You must provide at least ONE of: email OR phone
The tags parameter overwrites all existing tags - use the Add/Remove Tag API for incremental updates
Custom fields require the field ID from GoHighLevel
Date of birth accepts multiple formats: YYYY/MM/DD, MM/DD/YYYY, YYYY-MM-DD, etc.
Response:
{
  "contact": {
    "id": "0007BWpSzSwfiuSl0tR2",
    "locationId": "eDv3Z93Fnte6jr7ytj",
    "email": "john@example.com",
    "phone": "+18888888888",
    ...
  },
  "new": false
}
The id field is the Contact ID you'll need for creating appointments.

2. GHL Calendar Free Slots#

Purpose: Retrieve available time slots from your GoHighLevel calendar.
When to Use:
Before showing appointment options to customers
To check calendar availability
When a customer asks "when are you available?"
Required Scopes:
calendars.readonly (or calendars.write)
How It Works:
Queries your calendar for available slots within a date range
Returns slots grouped by date
Respects your calendar's availability settings and existing bookings
Key Parameters:
ParameterRequiredDescriptionExample
startDate✅ YesStart of search window (Unix epoch milliseconds)1548898600000
endDate✅ YesEnd of search window (Unix epoch milliseconds)1549503400000
timezoneNoIANA timezone name for interpreting datesAmerica/New_York
⚠️ Important Notes:
startDate must be in the future
endDate should be within 7 days of startDate for best results
Times must be in Unix epoch milliseconds format
The AI assistant should handle time conversion automatically
Response:
{
  "2021-06-23": {
    "slots": [
      "09:00 AM - 09:30 AM",
      "10:00 AM - 10:30 AM",
      "02:00 PM - 02:30 PM"
    ]
  },
  "2021-06-24": {
    "slots": [
      "09:00 AM - 09:30 AM",
      "11:00 AM - 11:30 AM"
    ]
  }
}
Best Practices:
Always check availability before creating an appointment
Show the customer multiple slot options
Confirm the selected slot before booking

3. GHL Create Appointment#

Purpose: Create or book appointments in your GoHighLevel calendar.
When to Use:
After confirming a time slot with the customer
Only after obtaining the Contact ID from Upsert Contact
Only after checking slot availability
Required Scopes:
calendars/events.write
⚠️ CRITICAL WORKFLOW:
This action requires a specific workflow to prevent booking failures:
STEP 1: Call Upsert Contact to get the Contact ID
→ Customer provides their details
→ AI calls "GHL Upsert Contact"
→ Response contains contactId: "0007BWpSzSwfiuSl0tR2"
STEP 2: Call Get Calendar Free Slots to show availability
→ Customer asks "when are you available?"
→ AI calls "GHL Calendar Free Slots"
→ Shows available time slots to customer
STEP 3: Customer chooses a slot and confirms details
→ Customer: "I'll take the 2 PM slot on June 23rd"
→ AI confirms: date, time, duration
STEP 4: Call Create Appointment with Contact ID and confirmed slot
→ AI calls "GHL Create Appointment"
→ Uses contactId from Step 1
→ Uses confirmed time slot from Steps 2-3
→ Appointment is booked!
Key Parameters:
ParameterRequiredDescriptionExample
calendarId✅ YesYour GHL Calendar ID (auto-filled)CVokAlI8fgw4WYWoCtQz
locationId✅ YesYour GHL Location ID (auto-filled)eDv3Z93Fnte6jr7ytj
contactId✅ YesContact ID from Upsert Contact0007BWpSzSwfiuSl0tR2
startTime✅ YesAppointment start time (ISO 8601 with timezone)2021-06-23T14:00:00-04:00
endTimeNoAppointment end time (ISO 8601 with timezone)2021-06-23T14:30:00-04:00
titleNoAppointment titleConsultation Call
appointmentStatusNoStatus: new, confirmed, cancelled, showed, noshow, invalidconfirmed
descriptionNoAppointment descriptionInitial consultation
addressNoMeeting location/addressZoom
meetingLocationTypeNoType: custom, zoom, gmeet, phone, address, ms_teams, googlezoom
assignedUserIdNoUser ID to assign the appointment to0007BWpSzSwfiuSl0tR2
ignoreDateRangeNoSkip minimum scheduling noticefalse
toNotifyNoRun automations (true) or skip (false)true
ignoreFreeSlotValidationNoSkip slot availability check (dangerous!)false
⚠️ Important Notes:
Always get the contactId first from Upsert Contact
Always check slot availability with Get Calendar Free Slots
Times must be in ISO 8601 format with timezone: YYYY-MM-DDTHH:mm:ss±HH:MM
If address is provided, meetingLocationType defaults to custom
Setting ignoreFreeSlotValidation to true can cause double-bookings!
Response:
{
  "event": {
    "id": "ocQHyuzHvysMo5N5VsXc",
    "calendarId": "CVokAlI8fgw4WYWoCtQz",
    "locationId": "eDv3Z93Fnte6jr7ytj",
    "contactId": "0007BWpSzSwfiuSl0tR2",
    "startTime": "2021-06-23T14:00:00-04:00",
    "endTime": "2021-06-23T14:30:00-04:00",
    "title": "Consultation Call",
    "appointmentStatus": "confirmed",
    ...
  }
}

Adding Actions to Campaigns#

Once you've created your actions from templates, you can add them to your campaigns.

Steps to Add Actions to a Campaign:#

1.
Navigate to Campaigns
Go to your Campaigns section in Atlas
Select the campaign you want to configure
2.
Edit Campaign Settings
Click on the campaign name or Edit button
This opens the campaign configuration
3.
Open Custom Integrations
In the campaign editor, find the Integrations section
Or navigate to Edit > Integrations
alt text
4.
Add Your Actions
Click Tools Integration -> Manage Tools -> Custom Tools
Select from your created actions:
✅ GHL Upsert Contact
✅ GHL Calendar Availability (Free Slots)
✅ GHL Book Appointment
Click Add or Add Tool
image-3.png

Common Use Cases#

Use Case 1: Appointment Scheduling#

Scenario: Customer calls and wants to book an appointment.
Workflow:
1.
AI greets customer and asks for their details (name, email, phone)
2.
AI calls Upsert Contact with customer details
Response includes contactId
3.
AI calls Get Calendar Free Slots for next 7 days
Shows available time slots to customer
4.
Customer chooses a time slot
5.
AI confirms details (date, time, duration, type of meeting)
6.
AI calls Create Appointment with:
contactId from step 2
startTime from confirmed slot
Other details as discussed
7.
AI confirms booking with customer
Example Conversation:
AI: Hi! I can help you schedule an appointment. Can I get your name and email?
Customer: Sure, I'm John Doe, john@example.com
AI: Thanks John! Let me check my calendar... 
    [Calls Upsert Contact - gets contactId]
    [Calls Get Calendar Free Slots]
    I have availability on:
    - June 23rd at 9 AM, 10 AM, or 2 PM
    - June 24th at 9 AM or 11 AM
    Which works best for you?
Customer: I'll take June 23rd at 2 PM
AI: Perfect! I'll book you for June 23rd at 2:00 PM. This will be a 30-minute consultation. 
    [Calls Create Appointment]
    All set! You're confirmed for June 23rd at 2:00 PM. You'll receive a confirmation email shortly.

Use Case 2: Update Customer Information#

Scenario: Existing customer calls to update their contact information.
Workflow:
1.
AI identifies customer (by phone number or email)
2.
Customer provides updated information (new address, phone, etc.)
3.
AI calls Upsert Contact with updated details
Existing contact is matched and updated
4.
AI confirms update with customer
Example Conversation:
AI: Hi! How can I help you today?
Customer: I moved and need to update my address
AI: I can help with that. What's your email address?
Customer: john@example.com
AI: Got it. What's your new address?
Customer: 456 Oak Avenue, Los Angeles, CA 90001
AI: [Calls Upsert Contact with new address]
    Perfect! I've updated your address to 456 Oak Avenue, Los Angeles, CA 90001. 
    Is there anything else you'd like to update?

Use Case 3: Check Availability Only#

Scenario: Customer wants to know when you're available before committing.
Workflow:
1.
Customer asks about availability
2.
AI calls Get Calendar Free Slots
3.
AI presents options to customer
4.
Customer decides (may book later or end conversation)
Example Conversation:
Customer: When are you available next week?
AI: Let me check my calendar...
    [Calls Get Calendar Free Slots for next 7 days]
    I have several openings next week:
    - Monday at 9 AM, 10 AM, 2 PM
    - Tuesday at 9 AM, 11 AM
    - Wednesday at 1 PM, 3 PM
    Would you like to book one of these times?
Customer: Let me check my schedule and call back
AI: No problem! Feel free to reach out whenever you're ready to book.

Troubleshooting#

Common Issues and Solutions#

Issue: "API Key Invalid" Error#

Symptoms: Actions fail with authentication error
Solutions:
1.
Verify you copied the complete API token from GoHighLevel
2.
Check that you selected the correct scopes when creating the token
3.
Make sure the token hasn't been deleted or regenerated in GoHighLevel
4.
Re-create the action with a new API token

Issue: "Location ID Not Found"#

Symptoms: Contact creation fails
Solutions:
1.
Double-check your Location ID from the GoHighLevel URL
2.
Ensure you're using the Sub-Account (Location) ID, not the Agency ID
3.
Verify your API token has access to this location
4.
Make sure the location is active in GoHighLevel

Issue: "Calendar ID Invalid"#

Symptoms: Cannot retrieve slots or create appointments
Solutions:
1.
Verify the Calendar ID is correct from your calendar settings
2.
Check that the calendar is active and published
3.
Ensure your API token has calendar permissions
4.
Confirm the calendar belongs to the correct location

Issue: "Contact ID Required" Error#

Symptoms: Create Appointment fails
Solutions:
1.
You must call Upsert Contact first to get the Contact ID
2.
Make sure you're using the id field from the Upsert Contact response
3.
Don't try to create appointments without a valid Contact ID
4.
Follow the proper workflow: Upsert Contact → Get Slots → Create Appointment

Issue: "Time Slot Not Available"#

Symptoms: Appointment creation fails with slot conflict
Solutions:
1.
Always call Get Calendar Free Slots before creating appointments
2.
Don't assume a slot is available without checking
3.
Make sure you're using an exact slot time from the Free Slots response
4.
Check that the calendar hasn't been booked by someone else
5.
Avoid using ignoreFreeSlotValidation: true unless absolutely necessary

Issue: "Invalid Date Format"#

Symptoms: Appointment creation fails with date parsing error
Solutions:
1.
Ensure startTime is in ISO 8601 format: YYYY-MM-DDTHH:mm:ss±HH:MM
2.
Include timezone information: -04:00 or +05:30
3.
Don't use Unix epoch for Create Appointment (only for Get Free Slots)
4.
Example valid format: 2021-06-23T14:00:00-04:00

Issue: Missing Scopes#

Symptoms: "Insufficient permissions" or "Scope not granted" errors
Solutions:
Verify you have the required scopes for each action:
ActionRequired Scopes
Upsert Contactcontacts.write
Get Calendar Free Slotscalendars.readonly or calendars.write
Create Appointmentcalendars/events.write
To fix:
1.
Go to GoHighLevel Settings > Private Integrations
2.
Edit your integration
3.
Add the missing scopes
4.
Copy the updated token
5.
Update your action configuration with the new token

Issue: Actions Not Available in Campaign#

Symptoms: Can't see or use actions in campaign
Solutions:
1.
Verify actions were created and Add Toold successfully
2.
Check that actions are enabled/active
3.
Make sure you added the actions to the specific campaign
4.
Refresh the campaign editor page
5.
Verify you're in the correct campaign

Getting Help#

If you continue to experience issues:
1.
Check GoHighLevel Status: Verify the GoHighLevel API is operational
2.
Review API Logs: Check for detailed error messages in action logs
3.
Contact Support: Reach out with:
Action name
Error message
Steps to reproduce
Screenshots if available

Additional Resources#

GoHighLevel API Documentation
GoHighLevel Support Portal
Atlas Actions Documentation

Appendix: Quick Reference#

Required Credentials Summary#

CredentialWhere to FindUsed For
API TokenSettings > Private IntegrationsAll actions (authentication)
Location IDURL when viewing locationUpsert Contact, Create Appointment
Calendar IDCalendars page URL or settingsGet Free Slots, Create Appointment

Scopes Quick Reference#

✅ contacts.write           → Upsert Contact
✅ calendars.readonly       → Get Calendar Free Slots
✅ calendars/events.write   → Create Appointment
Modified at 2026-02-03 18:02:59
Previous
HubSpot - Meetings Scheduler Integration
Next
Create Campaign
Built with