Create Apex controller to receive webhook payload

To receive webhook events from Calendly you'll need to add the apex controller class and any relevant objects/fields to your Site’s Public Access Settings (see here).

CalendlyWebhookController.cls
@RestResource(urlMapping='/fe92da7d')
global class CalendlyWebhookController {
    @HttpPost
    global static void doPost() {
      String signingKey = 'YOUR_WEBHOOK_SIGNING_KEY';
    	String requestBody = RestContext.request.requestBody.toString();
	    String webhookSignature = RestContext.request.headers.get('Calendly-Webhook-Signature');

      CalendlyApi.VerifyWebhookResult result = CalendlyApi.verifyWebhookSignature(webhookSignature, signingKey, requestBody);
	
	    if (!result.isValid) {
	       RestContext.response.responseBody = Blob.valueOf(result.errorMessage);
         RestContext.response.statusCode = 403;
	    } else {
	       JSONParser parser = System.JSON.createParser(requestBody);
         CalendlyApi.WebhookPayload webhookPayload = (CalendlyApi.WebhookPayload) parser.readValueAs(CalendlyApi.WebhookPayload.class);
         System.debug(webhookPayload.event + ' event received!');
	    }
   }
}

Last updated

Was this helpful?