* feat: Cal.diy — community-driven MIT-licensed fork of Cal.com This squashed commit contains all Cal.diy changes applied on top of calcom/cal.com main: - Rebrand Cal.com to Cal.diy across the entire codebase - Remove Enterprise Edition (EE) features, license checks, and AGPL restrictions - Switch license from AGPL-3.0 to MIT - Remove docs/ directory (migrated to Nextra at cal.diy) - Remove dead code: org tests, EE tips, platform nav, premium username, SAML/SSO, etc. - Clean up .env.example for self-hosted Cal.diy - Update Docker image references to calcom/cal.diy - Update README, CONTRIBUTING.md, and issue templates for Cal.diy community fork - Add PR welcome bot for Cal.diy contributors - Fix API v2 breaking changes oasdiff ignore entries - Replace Blacksmith CI runners with default GitHub Actions 3893 files changed, 20789 insertions(+), 411020 deletions(-) Co-Authored-By: benny@cal.com <sldisek783@gmail.com> * refactor: remove org-specific /organizations/:orgId endpoints from API v2 atoms controllers (#1701) Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> * fix: revert Cal.diy Inc to Cal.com, Inc. in license files, copyright notices, and package metadata (#1702) Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> * rip out org related comments in api v2 --------- Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
4.8 KiB
name, description, env
| name | description | env | ||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| calcom-api | Interact with the Cal.diy API v2 to manage scheduling, bookings, event types, availability, and calendars. Use this skill when building integrations that need to create or manage bookings, check availability, configure event types, or sync calendars with Cal.diy's scheduling infrastructure. |
|
Cal.diy API v2
This skill provides guidance for AI agents to interact with the Cal.diy API v2, enabling scheduling automation, booking management, and calendar integrations.
Base URL
All API requests should be made to:
https://api.cal.com/v2
Required Credentials
| Environment Variable | Required | Description |
|---|---|---|
CAL_API_KEY |
Yes | Cal.diy API key (prefixed with cal_live_ or cal_test_). Used as Bearer token for all API requests. Generate from Settings > Developer > API Keys. |
CAL_CLIENT_ID |
No | OAuth client ID for platform integrations that manage users on behalf of others. Sent as x-cal-client-id header. |
CAL_SECRET_KEY |
No | OAuth client secret for platform integrations. Sent as x-cal-secret-key header. |
CAL_WEBHOOK_SECRET |
No | Secret for verifying webhook payload signatures via the X-Cal-Signature-256 header. |
Authentication
All API requests require authentication via Bearer token:
Authorization: Bearer cal_<your_api_key>
For detailed authentication methods including OAuth/Platform authentication, see references/authentication.md.
Core Concepts
Event Types define bookable meeting configurations (duration, location, availability rules). Each event type has a unique slug used in booking URLs.
Bookings are confirmed appointments created when someone books an event type. Each booking has a unique UID for identification.
Schedules define when a user is available for bookings. Users can have multiple schedules with different working hours.
Slots represent available time windows that can be booked based on event type configuration and user availability.
Reference Documentation
This skill includes detailed API reference documentation for each domain:
| Reference | Description |
|---|---|
references/authentication.md |
API key and OAuth authentication, rate limiting, security best practices |
references/bookings.md |
Create, list, cancel, reschedule bookings |
references/event-types.md |
Configure bookable meeting types |
references/schedules.md |
Manage user availability schedules |
references/slots-availability.md |
Query available time slots |
references/calendars.md |
Calendar connections and busy times |
references/webhooks.md |
Real-time event notifications |
Quick Start
1. Check Available Slots
Before creating a booking, check available time slots:
GET /v2/slots?startTime=2024-01-15T00:00:00Z&endTime=2024-01-22T00:00:00Z&eventTypeId=123
See references/slots-availability.md for full details.
2. Create a Booking
POST /v2/bookings
Content-Type: application/json
{
"start": "2024-01-15T10:00:00Z",
"eventTypeId": 123,
"attendee": {
"name": "John Doe",
"email": "john@example.com",
"timeZone": "America/New_York"
}
}
See references/bookings.md for all booking operations.
3. Set Up Webhooks
Receive real-time notifications for booking events:
POST /v2/webhooks
Content-Type: application/json
{
"subscriberUrl": "https://your-app.com/webhook",
"triggers": ["BOOKING_CREATED", "BOOKING_CANCELLED"]
}
See references/webhooks.md for available triggers and payload formats.
Common Workflows
Book a meeting: Check slots -> Create booking -> Store booking UID
Reschedule: Get new slots -> POST /v2/bookings/{uid}/reschedule
Cancel: POST /v2/bookings/{uid}/cancel with optional reason
Best Practices
- Always check slot availability before creating bookings
- Store booking UIDs for future operations (cancel, reschedule)
- Use ISO 8601 format for all timestamps
- Implement webhook handlers for real-time updates
- Handle rate limiting with exponential backoff