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
| Event | Description |
|---|---|
BOOKING_CREATED | New booking created |
BOOKING_RESCHEDULED | Booking time changed |
BOOKING_CANCELLED | Booking cancelled |
BOOKING_REJECTED | Booking request rejected |
BOOKING_REQUESTED | New booking requires approval |
BOOKING_PAID | Payment completed for booking |
BOOKING_PAYMENT_INITIATED | Payment process started |
BOOKING_NO_SHOW_UPDATED | No-show status updated |
Meeting Events
| Event | Description |
|---|---|
MEETING_STARTED | Video meeting started |
MEETING_ENDED | Video meeting ended |
INSTANT_MEETING | Instant meeting created |
RECORDING_READY | Meeting recording available |
RECORDING_TRANSCRIPTION_GENERATED | Transcription completed |
Other Events
| Event | Description |
|---|---|
OOO_CREATED | Out of office entry created |
FORM_SUBMITTED | Routing form submitted with booking |
FORM_SUBMITTED_NO_EVENT | Routing form submitted without booking |
ROUTING_FORM_FALLBACK_HIT | No routing rules matched |
AFTER_HOSTS_CAL_VIDEO_NO_SHOW | Host no-show detected |
AFTER_GUESTS_CAL_VIDEO_NO_SHOW | Guest no-show detected |
DELEGATION_CREDENTIAL_ERROR | Credential delegation error |
WRONG_ASSIGNMENT_REPORT | Assignment error reported |
Creating Webhooks
Create a User Webhook
Endpoint:POST /v2/webhooks
Request:
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
Get Webhook Details
Update Webhook
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 theX-Cal-Signature-256 header for verification.
Verifying Webhook Signatures
Custom Payload Templates
You can customize webhook payloads using templates:{{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
- webhook.site - Get a temporary URL for testing
- ngrok - Expose your local server
- 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
Timeout Errors
Timeout Errors
- Ensure your endpoint responds within 30 seconds
- Process webhooks asynchronously
- Return 200 status immediately
SSL Certificate Errors
SSL Certificate Errors
- Use valid SSL certificates
- Don’t use self-signed certificates
- Ensure certificate is not expired
Authentication Errors
Authentication Errors
- Verify webhook signature correctly
- Use the secret provided when creating webhook
- Check signature header name:
X-Cal-Signature-256
Duplicate Events
Duplicate Events
- Implement idempotency using booking ID
- Track processed webhook IDs
- Handle duplicate deliveries gracefully
Best Practices
Implement Idempotency
Implement Idempotency
Handle duplicate webhook deliveries:
Log All Webhooks
Log All Webhooks
Maintain webhook logs for debugging:
Monitor Webhook Health
Monitor Webhook Health
Track webhook delivery success rates:
- Monitor response times
- Alert on repeated failures
- Track processing errors
- Review webhook logs regularly
Secure Your Endpoint
Secure Your Endpoint
- 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