Skip to main content
Webhooks allow your application to receive real-time notifications when events occur in Cal.com. Instead of polling the API, webhooks push data to your server as events happen.

Overview

Cal.com webhooks deliver HTTP POST requests to your specified URL when events occur:
  • Real-time notifications for booking events
  • Automatic retries with exponential backoff
  • Signature verification for security
  • Custom payload templates for flexibility
  • Multiple webhook versions for backward compatibility

Webhook Types

Webhooks can be created at different scopes:

User Webhooks

Triggered for events related to a specific user

Event Type Webhooks

Triggered for bookings of a specific event type

Team Webhooks

Triggered for events within a team

Webhook Events

Cal.com supports webhooks for the following event triggers:

Core Booking Events

Meeting Events

Other Events

Creating Webhooks

Create a User Webhook

Endpoint: POST /v2/webhooks Request:
Response:

Create an Event Type Webhook

Endpoint: POST /v2/event-types/:eventTypeId/webhooks

Create a Team Webhook

Endpoint: POST /v2/teams/:teamId/event-types/:eventTypeId/webhooks

Managing Webhooks

List Webhooks

Response:

Get Webhook Details

Update Webhook

Request:

Delete Webhook

Webhook Payload

Standard Payload Structure

All webhooks follow this structure:

Booking Created Payload

Booking Cancelled Payload

Booking Rescheduled Payload

Meeting Started Payload

Webhook Signature Verification

Webhooks include a signature in the X-Cal-Signature-256 header for verification.

Verifying Webhook Signatures

Custom Payload Templates

You can customize webhook payloads using templates:
Available template variables:
  • {{type}} - Event type
  • {{title}} - Booking title
  • {{bookingId}} - Booking ID
  • {{startTime}} - Start time
  • {{endTime}} - End time
  • {{organizer.name}} - Organizer name
  • {{organizer.email}} - Organizer email
  • {{attendees.0.name}} - First attendee name
  • {{attendees.0.email}} - First attendee email

Webhook Delivery

Delivery Behavior

  • Timeout: 30 seconds per attempt
  • Retries: Up to 5 attempts with exponential backoff
  • Backoff: 1s, 2s, 4s, 8s, 16s
  • Success: Any 2xx status code
  • Failure: Non-2xx status code or timeout

Responding to Webhooks

Your endpoint should:
  • Respond with a 2xx status code within 30 seconds
  • Process webhooks asynchronously if needed
  • Return quickly to avoid timeouts

Webhook Versions

Webhooks support versioning for backward compatibility:

Version 2021-10-20 (Current)

The current webhook payload format. See payload examples above.

Specifying Webhook Version

Testing Webhooks

Using Webhook Testing Tools

  1. webhook.site - Get a temporary URL for testing
  2. ngrok - Expose your local server
  3. Postman - Mock webhook server

Testing with ngrok

Test Webhook Endpoint

Error Handling

Webhook Delivery Failures

If webhook delivery fails after all retries:
  • The webhook remains active
  • Future events will continue to trigger
  • Check webhook logs in Cal.com dashboard

Common Issues

  • Ensure your endpoint responds within 30 seconds
  • Process webhooks asynchronously
  • Return 200 status immediately
  • Use valid SSL certificates
  • Don’t use self-signed certificates
  • Ensure certificate is not expired
  • Verify webhook signature correctly
  • Use the secret provided when creating webhook
  • Check signature header name: X-Cal-Signature-256
  • Implement idempotency using booking ID
  • Track processed webhook IDs
  • Handle duplicate deliveries gracefully

Best Practices

Handle duplicate webhook deliveries:
Maintain webhook logs for debugging:
Track webhook delivery success rates:
  • Monitor response times
  • Alert on repeated failures
  • Track processing errors
  • Review webhook logs regularly
  • Always verify webhook signatures
  • Use HTTPS only
  • Validate payload structure
  • Rate limit webhook endpoints

Next Steps

Authentication

Secure your webhook endpoints

API Reference

Browse webhook endpoints

Rate Limits

Understand webhook rate limits

Examples

See webhook implementation examples