{
"triggerEvent": "BOOKING_CREATED",
"createdAt": "2025-07-02T07:14:48.795Z",
"payload": {
"bookerUrl": "https://lunacal.ai",
"type": "quint",
"title": "quick chat between Ayush Gupta and Anupam.",
"description": "",
"additionalNotes": "",
"customInputs": {},
"startTime": "2025-07-16T23:30:00Z",
"endTime": "2025-07-17T00:00:00Z",
"organizer": {
"id": 584,
"name": "Ayush Gupta",
"email": "ayush4002gupta@gmail.com",
"username": "ayush-gupta-57m",
"timeZone": "Asia/Srednekolymsk",
"language": {
"locale": "en"
},
"timeFormat": "h:mma",
"utcOffset": 660
},
"responses": {
"name": {
"label": "your_name",
"value": "Anupam",
"isHidden": false
},
"email": {
"label": "email_address",
"value": "anupam@lunacal.onmicrosoft.com",
"isHidden": false
},
"location": {
"label": "location",
"isHidden": false
},
"Please-share-anything-that-will-help-prepare-for-our-meeting-": {
"label": "Please share anything that will help prepare for our meeting.",
"isHidden": true
},
"guests": {
"label": "Add Guests",
"value": [],
"isHidden": false
}
},
"userFieldsResponses": {
"Please-share-anything-that-will-help-prepare-for-our-meeting-": {
"label": "Please share anything that will help prepare for our meeting.",
"isHidden": true
},
"guests": {
"label": "Add Guests",
"value": [],
"isHidden": false
}
},
"attendees": [
{
"email": "anupam@lunacal.onmicrosoft.com",
"name": "Anupam",
"firstName": "",
"lastName": "",
"timeZone": "Asia/Tashkent",
"language": {
"locale": "en"
},
"utcOffset": 300
}
],
"location": "",
"destinationCalendar": null,
"hideCalendarNotes": false,
"requiresConfirmation": false,
"eventTypeId": 975,
"seatsShowAttendees": true,
"seatsPerTimeSlot": null,
"seatsShowAvailabilityCount": true,
"schedulingType": null,
"iCalUID": "r543Dk3BeyfTafREgkSU8v@Lunacal.ai",
"iCalSequence": 0,
"uid": "r543Dk3BeyfTafREgkSU8v",
"eventTitle": "quick chat",
"eventDescription": "",
"price": 0,
"currency": "usd",
"length": 30,
"bookingId": 3899,
"metadata": {},
"status": "ACCEPTED"
}
}
Webhooks can let your integrations take an action in response to events that occur on Lunacal.ai. This document will guide you through adding webhooks.
{
"triggerEvent": "BOOKING_CREATED",
"createdAt": "2025-07-02T07:14:48.795Z",
"payload": {
"bookerUrl": "https://lunacal.ai",
"type": "quint",
"title": "quick chat between Ayush Gupta and Anupam.",
"description": "",
"additionalNotes": "",
"customInputs": {},
"startTime": "2025-07-16T23:30:00Z",
"endTime": "2025-07-17T00:00:00Z",
"organizer": {
"id": 584,
"name": "Ayush Gupta",
"email": "ayush4002gupta@gmail.com",
"username": "ayush-gupta-57m",
"timeZone": "Asia/Srednekolymsk",
"language": {
"locale": "en"
},
"timeFormat": "h:mma",
"utcOffset": 660
},
"responses": {
"name": {
"label": "your_name",
"value": "Anupam",
"isHidden": false
},
"email": {
"label": "email_address",
"value": "anupam@lunacal.onmicrosoft.com",
"isHidden": false
},
"location": {
"label": "location",
"isHidden": false
},
"Please-share-anything-that-will-help-prepare-for-our-meeting-": {
"label": "Please share anything that will help prepare for our meeting.",
"isHidden": true
},
"guests": {
"label": "Add Guests",
"value": [],
"isHidden": false
}
},
"userFieldsResponses": {
"Please-share-anything-that-will-help-prepare-for-our-meeting-": {
"label": "Please share anything that will help prepare for our meeting.",
"isHidden": true
},
"guests": {
"label": "Add Guests",
"value": [],
"isHidden": false
}
},
"attendees": [
{
"email": "anupam@lunacal.onmicrosoft.com",
"name": "Anupam",
"firstName": "",
"lastName": "",
"timeZone": "Asia/Tashkent",
"language": {
"locale": "en"
},
"utcOffset": 300
}
],
"location": "",
"destinationCalendar": null,
"hideCalendarNotes": false,
"requiresConfirmation": false,
"eventTypeId": 975,
"seatsShowAttendees": true,
"seatsPerTimeSlot": null,
"seatsShowAvailabilityCount": true,
"schedulingType": null,
"iCalUID": "r543Dk3BeyfTafREgkSU8v@Lunacal.ai",
"iCalSequence": 0,
"uid": "r543Dk3BeyfTafREgkSU8v",
"eventTitle": "quick chat",
"eventDescription": "",
"price": 0,
"currency": "usd",
"length": 30,
"bookingId": 3899,
"metadata": {},
"status": "ACCEPTED"
}
}
200 OK
response with the following payload:
{ "ok": true, "status": 200, "message": "Webhook received" }
{
"triggerEvent": "BOOKING_CREATED",
"createdAt": "2025-07-02T07:14:48.795Z",
"payload": {
"bookerUrl": "https://lunacal.ai",
"type": "quint",
"title": "quick chat between Ayush Gupta and Anupam.",
"description": "",
"additionalNotes": "",
"customInputs": {},
"startTime": "2025-07-16T23:30:00Z",
"endTime": "2025-07-17T00:00:00Z",
"organizer": {
"id": 584,
"name": "Ayush Gupta",
"email": "ayush4002gupta@gmail.com",
"username": "ayush-gupta-57m",
"timeZone": "Asia/Srednekolymsk",
"language": {
"locale": "en"
},
"timeFormat": "h:mma",
"utcOffset": 660
},
"responses": {
"name": {
"label": "your_name",
"value": "Anupam",
"isHidden": false
},
"email": {
"label": "email_address",
"value": "anupam@lunacal.onmicrosoft.com",
"isHidden": false
},
"location": {
"label": "location",
"isHidden": false
},
"Please-share-anything-that-will-help-prepare-for-our-meeting-": {
"label": "Please share anything that will help prepare for our meeting.",
"isHidden": true
},
"guests": {
"label": "Add Guests",
"value": [],
"isHidden": false
}
},
"userFieldsResponses": {
"Please-share-anything-that-will-help-prepare-for-our-meeting-": {
"label": "Please share anything that will help prepare for our meeting.",
"isHidden": true
},
"guests": {
"label": "Add Guests",
"value": [],
"isHidden": false
}
},
"attendees": [
{
"email": "anupam@lunacal.onmicrosoft.com",
"name": "Anupam",
"firstName": "",
"lastName": "",
"timeZone": "Asia/Tashkent",
"language": {
"locale": "en"
},
"utcOffset": 300
}
],
"location": "",
"destinationCalendar": null,
"hideCalendarNotes": false,
"requiresConfirmation": false,
"eventTypeId": 975,
"seatsShowAttendees": true,
"seatsPerTimeSlot": null,
"seatsShowAvailabilityCount": true,
"schedulingType": null,
"iCalUID": "r543Dk3BeyfTafREgkSU8v@Lunacal.ai",
"iCalSequence": 0,
"uid": "r543Dk3BeyfTafREgkSU8v",
"eventTitle": "quick chat",
"eventDescription": "",
"price": 0,
"currency": "usd",
"length": 30,
"bookingId": 3899,
"metadata": {},
"status": "ACCEPTED"
}
}
you can use https://webhook.site/ to test these webhooks without having to write any code.
package main
import (
"fmt"
"io"
"net/http"
)
func webhookHandler(w http.ResponseWriter, r *http.Request) {
switch r.Method {
case http.MethodGet:
fmt.Println("Received GET request")
for k, v := range r.URL.Query() {
fmt.Printf("%s = %s\n", k, v)
}
case http.MethodPost:
body, _ := io.ReadAll(r.Body)
defer r.Body.Close()
fmt.Println("Received POST request")
fmt.Println("Body:", string(body))
default:
http.Error(w, "Method not allowed", http.StatusMethodNotAllowed)
return
}
w.WriteHeader(http.StatusOK)
}
func main() {
http.HandleFunc("/", webhookHandler)
fmt.Println("Listening on :8080")
http.ListenAndServe(":8080", nil)
}
please use a service like ngrok if you are testing locally.