Please note that the webhooks can be associated with user as well as individual event types, including team event types.
Creating a webhook subscription
To create a new webhook subscription, visit/settings/developer/webhooks and proceed to enter the following details:
- Subscriber URL: The listener URL where the payload will be sent to, when an event trigger is triggered.
-
Event triggers: You can decide which triggers specifically to listen to. Currently, we offer listening to
Booking Cancelled,Booking Created,Booking Rescheduled,Booking Rejected,Booking Requested,Booking Payment Initiated,Booking Paid,Meeting Started,Recording Ready,Form Submitted,Meeting EndedandInstant Meeting Created. - Secret: You can provide a secret key with this webhook and then verify it on the subscriber URL when receiving a payload to confirm if the payload is authentic or adulterated. You can leave it blank, if you don’t wish to secure the webhook with a secret key.
- Custom Payload: You have the option to customize the payload you receive when a subscribed event is triggered.
An example webhook payload
Verifying the authenticity of the received payload
- Simply add a new secret key to your webhook and save.
- Wait for the webhook to be triggered (event created, cancelled, rescheduled, or meeting ended)
-
Use the secret key to create an
hmac, and update that with the webhook payload received to create an SHA256. -
Compare the hash received in the header of the webhook
(X-Cal-Signature-256)with the one created using the secret key and the body of the payload. If they don’t match, the received payload was adulterated and cannot be trusted.
Adding a custom payload template
Customizable webhooks are a great way reduce the development effort and in many cases remove the need for a developer to build an additional integration service. An example of a custom payload template is provided here:{{type}} represents the event type slug and {{title}} represents the title of the event type. Note that the variables should be added with a double parenthesis as shown above. Here’s a breakdown of the payload that you would receive via an incoming webhook, with an exhaustive list of all the supported variables provided below:

