Webhooks let you receive HTTP POST requests when events happen in meetergo. Use them to sync bookings with your CRM, trigger workflows, or update your application in real-time.
How Webhooks Work
When an event occurs (booking created, cancelled, rescheduled, form submitted), meetergo sends an HTTP POST request to your configured endpoint with event details.
Available Events
Event Trigger booking_createdNew appointment is booked booking_cancelledAppointment is cancelled (or attendee removed from group booking) booking_rescheduledAppointment time is changed new_employeeNew user is added to your company form_submissionRouting form or funnel is submitted
Quick Setup
Create a webhook endpoint on your server that accepts POST requests
Register the endpoint via the API or dashboard
Handle incoming events and return a 200 response
Example Endpoint (Node.js/Express)
const express = require ( 'express' );
const app = express ();
app . use ( express . json ());
app . post ( '/webhooks/meetergo' , ( req , res ) => {
const payload = req . body ;
console . log ( 'Received event:' , payload . webhookType );
// Process the event based on webhookType
switch ( payload . webhookType ) {
case 'booking_created' :
handleNewBooking ( payload );
break ;
case 'booking_cancelled' :
handleCancellation ( payload );
break ;
case 'booking_rescheduled' :
handleReschedule ( payload );
break ;
case 'form_submission' :
handleFormSubmission ( payload );
break ;
}
// Always return 200 quickly
res . status ( 200 ). send ( 'OK' );
});
app . listen ( 3000 );
Example Endpoint (Python/Flask)
from flask import Flask, request
app = Flask( __name__ )
@app.route ( '/webhooks/meetergo' , methods = [ 'POST' ])
def handle_webhook ():
payload = request.json
print ( f "Received event: { payload[ 'webhookType' ] } " )
if payload[ 'webhookType' ] == 'booking_created' :
handle_new_booking(payload)
elif payload[ 'webhookType' ] == 'booking_cancelled' :
handle_cancellation(payload)
elif payload[ 'webhookType' ] == 'booking_rescheduled' :
handle_reschedule(payload)
elif payload[ 'webhookType' ] == 'form_submission' :
handle_form_submission(payload)
return 'OK' , 200
if __name__ == '__main__' :
app.run( port = 3000 )
Webhook Payload Structure
All webhook payloads include a webhookType field identifying the event, with the rest of the event-specific data at the top level:
{
"webhookType" : "booking_created" ,
"id" : "appt-uuid-12345" ,
"start" : "2024-01-15T09:00:00+01:00" ,
"end" : "2024-01-15T09:30:00+01:00" ,
// ... remaining event-specific fields
}
Limits
Limit Value Webhooks per company 6 Request timeout 30 seconds Payload size ~100KB
Best Practices
Return 200 quickly - Process webhooks asynchronously to avoid timeouts
Use HTTPS - Always use secure endpoints in production
Handle duplicates - Webhooks may be delivered more than once; use idempotent processing
Log everything - Keep webhook logs for debugging
Next Steps
Event Reference Detailed payload documentation for each event
Managing Webhooks Create, update, and delete webhooks via API