Zapier webhook returns 400 bad request when changing appointment status in GoHighLevel

Need help with GoHighLevel API integration

I’m having trouble with a Zapier automation that should mark appointments as confirmed in my GoHighLevel account. Every time the webhook runs, I get a 400 bad request response and I can’t figure out what’s wrong.

My current configuration:

  • API URL: https://rest.gohighlevel.com/v1/appointments/{{booking_id}}/status
  • Request method: POST
  • Authorization header: Bearer {{access_token}}
  • Content type: application/json
  • Request body:
{
  "status": "confirmed"
}

I double checked that my bearer token works fine and the booking ID gets pulled correctly from the trigger step. The automation fails right at the webhook action.

Has anyone successfully updated appointment statuses through the GHL API via Zapier? Maybe I’m missing a required field or using the wrong endpoint format?

Would really appreciate any suggestions on how to fix this!

I ran into this exact same issue last month. The problem is likely that you’re using the v1 endpoint which has been deprecated. Try switching to the v2 API endpoint instead: https://services.leadconnectorhq.com/calendars/events/{{booking_id}} with a PUT request method rather than POST. Also make sure you’re including the locationId in your request body along with the status. The v2 API is much more strict about required fields compared to the old v1 endpoints. After I made these changes my Zapier automation started working perfectly.

Check your request headers more carefully - you might be missing the Version header that GHL requires. I had the same 400 error and it turned out I needed to add Version: 2021-07-28 to my headers. Also verify that your booking_id is actually the correct calendar event ID format. Sometimes Zapier passes through different ID formats depending on your trigger source. I’d recommend testing the exact same request in Postman first to isolate whether it’s a Zapier configuration issue or an API parameter problem. The error response body usually contains more specific details about what field is causing the validation failure.

make sure your api endpoint is correctly set up. also, try including extra params like location id in the body. i had similar issues before, sometimes the docs miss that stuff.