{
  "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"
  }
}

Step 1

Start by opening the event type you want to configure. 1 Web

Step 2

Proceed by clicking on the “Advaced” tab and click on button to add “New Webhook”. Screenshot2025 07 02123422 Pn

Step 3

You can create webhooks to subscribe to specific events on Lunacal. The Subscriber URL should point to your API endpoint that will receive HTTP requests from our platform. If you our new to webhooks you can use API from webhook.site to try these webhooks. Currently, there are three event triggers available:
  1. Booking Cancelled : Triggered when a booking is cancelled
  2. Booking Created : Triggered when a new booking is created by any user.
  3. Booking Rescheduled : Triggered when an existing booking is rescheduled for future.
Screenshot2025 06 27154743 Pn

Step 4

You can test your webhook using the Ping Test button. This will send sample data to your webhook endpoint to verify that it’s functioning properly. If everything is set up correctly, you will receive a 200 OK response with the following payload:
{ "ok": true, "status": 200, "message": "Webhook received" }
Screenshot2025 06 27172831 Pn

Response Format and Fields

{
  "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.

Example

Here is a simple example of a server that receives HTTP webhook requests.
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.