DocsAppointmentsSend GoHighLevel Appointments to Lead Distro AI

Send GoHighLevel Appointments to Lead Distro AI

Book appointments on your GoHighLevel calendar and send each one into a Lead Distro AI appointments campaign with a workflow. Showed, no-show and cancel updates follow the same way.

Last updated:

Use this guide when your appointments are booked on a GoHighLevel calendar and you want Lead Distro AI to deliver each one to a destination and bill it. A GoHighLevel workflow sends every booking to the same address your sources use for leads. Lead Distro AI delivers it right away and marks it booked. Later, small workflows tell Lead Distro AI whether the person showed up, did not show, or canceled.

How it works

  • A person books on your GoHighLevel calendar.
  • A GoHighLevel workflow sends the appointment, with its time, to https://app.leaddistro.ai/api/v1/ingest.
  • Lead Distro AI picks a destination with your campaign's rules, delivers the appointment, and marks it Booked.
  • When the appointment shows, no-shows or is canceled in GoHighLevel, another workflow sends that status. Lead Distro AI updates the same appointment. Nothing new is created and nothing is charged twice.

Before you start

  • An appointments campaign in Lead Distro AI with at least one active destination. See Set Up an Appointments Campaign.
  • A source on that campaign for your GoHighLevel account. Its API key goes into the workflow.
  • Admin access to the GoHighLevel sub-account that owns the calendar.
  • The Custom Webhook workflow action in GoHighLevel. If you do not see it, check what your GoHighLevel plan includes.

Step 1: Copy the details from Lead Distro AI

  • Open the appointments campaign and stay on the Overview tab.
  • On the Set up how appointments come in row, click GoHighLevel. If that row is already done, open the source's API specs from the campaign's sources instead and pick the GoHighLevel template.
  • Copy the Endpoint, the x-api-key value from Headers, and the body from Example. The body already has GoHighLevel's merge fields filled in.

Step 2: Send new bookings

In GoHighLevel, build a workflow that runs each time an appointment is booked.

  • Open the Automation tab, then Workflows, and create a new workflow.
  • Click Add New Trigger and choose Appointment Status.
  • Set the Appointment Status filter to New. Add the In Calendar filter and pick the calendar these appointments are booked on.
  • Click + Add action, then Send Data, then Custom Webhook.
  • Set the method to POST and paste the Endpoint as the URL.
  • Leave authorization off. Under Headers, add a header named x-api-key with your source's API key as its value.
  • Send the body as JSON, paste the body you copied, then save and publish the workflow.

GoHighLevel renames menus from time to time. If a name here does not match your screen, look for the closest one.

Your copied body looks like this, with your own campaign ID, source ID and any extra fields your campaign asks for:

{
  "flo_campaign_id": "YOUR_CAMPAIGN_ID",
  "flo_supplier_id": "YOUR_SOURCE_ID",
  "first_name": "{{contact.first_name}}",
  "last_name": "{{contact.last_name}}",
  "phone": "{{contact.phone}}",
  "email": "{{contact.email}}",
  "appointment_time": "{{appointment.start_time}}",
  "appointment_timezone": "{{appointment.timezone}}",
  "booked_with": "{{appointment.user.name}}",
  "appointment_location": "{{appointment.meeting_location}}"
}

Pick only New on this workflow. If you also pick Confirmed, the same booking is sent twice. Lead Distro AI spots the repeat and keeps one appointment, but one trigger keeps your Logs page clean.

Step 3: Test it

  • Add "test_lead": true to the body and book a test appointment on the calendar.
  • In Lead Distro AI, open Leads. The test appointment shows up with its time, tagged test. Test appointments only go to destinations in Test Mode and cost nothing.
  • When it works, remove test_lead from the body.

The Logs page shows every post and the exact reply Lead Distro AI sent back, so a mistake in the body is quick to find.

Step 4: Send showed, no-show and cancels

GoHighLevel has no merge field for an appointment's status, so each status gets its own small workflow. All three use the same trigger, In Calendar filter and Custom Webhook as Step 2, with one extra line in the body.

Appointment Status filterAdd this line to the body
Showed"appointment_status": "showed"
No-show"appointment_status": "no_show"
Cancelled"appointment_status": "canceled"

Lead Distro AI finds the appointment this source sent before, by the person's phone or email, and updates it. It replies 200 with "updated": true. No new lead is made and the source is not charged again.

A destination paid per showed appointment is billed when the showed status arrives. A cancel reverses a charge made when the appointment was booked. See Per-Appointment Billing.

Times and timezones

GoHighLevel writes the start time like Wed, Nov 5, 2025 3:30 PM, with no timezone in it. That is why the body also sends appointment_timezone. Lead Distro AI reads the two together and stores the exact moment.

  • appointment_time also takes an exact time, such as 2026-10-21T15:30:00-05:00.
  • If no timezone is sent, Lead Distro AI uses the lead's own timezone field when your campaign has one, otherwise your account's timezone, and notes which on the appointment.
  • A time Lead Distro AI cannot read is saved as a Failed lead you can fix and resend. The workflow gets a 400 reply that says what to change.

What destinations receive

Every appointments campaign has the appointment fields built in. A destination's delivery can use {{appointment_time}}, {{appointment_timezone}}, {{booked_with}} and {{appointment_location}} without adding them on the Fields tab.

Frequently Asked Questions

Which API key does GoHighLevel use?
The API key of the source you created for your GoHighLevel account. Each source has its own key, and a status update only ever changes appointments that same source sent.
What if a person books, cancels, and books again?
The second booking is a new appointment. Lead Distro AI sees that the first one was canceled, so the new one is not treated as a duplicate and is delivered like any other.
What if an appointment moves to a new time?
If a booking is sent again with a different appointment_time while the appointment is still booked, Lead Distro AI moves the same appointment to the new time. Nothing new is created and nothing is billed again.
Why did I get a 404 reply?
A showed, no-show or cancel post found no earlier appointment from this source for that phone or email. Check that the Step 2 workflow sent the booking, and that every workflow sends the same phone or email.
Why did I get a 409 reply?
The appointment has not been delivered to a destination yet, or it was returned, so it cannot be marked showed or no-show. This usually means no destination could take it. Open the appointment on the Leads page to see why.
Can I also use Lead Distro AI's own calendar?
Yes. One appointments campaign can take appointments from GoHighLevel and from its own calendar page at the same time.

If you have any questions, send us an email at support@leaddistro.ai