mirror of
https://github.com/hanzoai/calendar.git
synced 2026-10-30 14:46:43 +00:00
* refactor: consolidate agent config folders into agents directory - Move .claude/skills and .claude/rules content to agents/ - Remove duplicate .cursor/ and .goose/ folders - Create symlinks from .claude/ and .cursor/ to agents/ - Convert review.mdc to quality-review-checklist.md with proper frontmatter Co-Authored-By: Claude Haiku 4.5 <[email protected]> * feat: add Cal.com APIv2 skills to agents directory Move the Cal.com API v2 skills from PR #27445 into the consolidated agents/skills/ directory structure. This includes: - SKILL.md - Main skill file with API overview - references/authentication.md - Authentication methods - references/bookings.md - Bookings API reference - references/calendars.md - Calendars API reference - references/event-types.md - Event types API reference - references/schedules.md - Schedules API reference - references/slots-availability.md - Slots and availability API reference - references/webhooks.md - Webhooks API reference Co-Authored-By: [email protected] <[email protected]> * fix: update calcom-api skill to use Claude Code frontmatter format Remove non-standard frontmatter fields (license, metadata) and keep only the Claude Code supported fields (name, description) as per the Claude Code skills specification. Co-Authored-By: [email protected] <[email protected]> * refactor: restructure calcom-api SKILL.md as index file Convert SKILL.md from a comprehensive API doc (317 lines) to a concise index file (108 lines) that references the detailed documentation in the references/ folder. This follows the Claude Code skills pattern of keeping SKILL.md focused with supporting files for detailed content. The SKILL.md now: - Provides a quick start guide with essential examples - References all 7 detailed reference docs in a table - Lists common workflows and best practices - Points to external resources Co-Authored-By: [email protected] <[email protected]> * docs: preserve deleted content in reference files Move content that was removed from SKILL.md to appropriate reference files: - Add Error Handling and Pagination sections to authentication.md - Add Organization endpoints to event-types.md - Add Core Concepts section back to SKILL.md This ensures no useful API documentation is lost during the restructuring. Co-Authored-By: [email protected] <[email protected]> --------- Co-authored-by: Claude Haiku 4.5 <[email protected]> Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
7.1 KiB
7.1 KiB
Bookings API Reference
Detailed documentation for booking-related endpoints in the Cal.com API v2.
Endpoints Overview
| Method | Endpoint | Description |
|---|---|---|
| GET | /v2/bookings | List bookings |
| POST | /v2/bookings | Create a booking |
| GET | /v2/bookings/{bookingUid} | Get a booking |
| POST | /v2/bookings/{bookingUid}/cancel | Cancel a booking |
| POST | /v2/bookings/{bookingUid}/reschedule | Reschedule a booking |
| POST | /v2/bookings/{bookingUid}/confirm | Confirm a pending booking |
| POST | /v2/bookings/{bookingUid}/decline | Decline a booking |
| PATCH | /v2/bookings/{bookingUid}/location | Update booking location |
| POST | /v2/bookings/{bookingUid}/mark-absent | Mark attendee as no-show |
| POST | /v2/bookings/{bookingUid}/reassign | Reassign booking to another host |
| GET | /v2/bookings/{bookingUid}/references | Get booking references |
List Bookings
GET /v2/bookings
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| status | string | No | Filter by status: upcoming, recurring, past, cancelled, unconfirmed |
| attendeeEmail | string | No | Filter by attendee email |
| attendeeName | string | No | Filter by attendee name |
| eventTypeId | number | No | Filter by event type ID |
| eventTypeIds | string | No | Comma-separated event type IDs |
| teamsIds | string | No | Comma-separated team IDs |
| afterStart | string | No | Filter bookings starting after this ISO 8601 date |
| beforeEnd | string | No | Filter bookings ending before this ISO 8601 date |
| sortStart | string | No | Sort by start time: asc or desc |
| sortEnd | string | No | Sort by end time: asc or desc |
| sortCreated | string | No | Sort by creation time: asc or desc |
| take | number | No | Number of results (default: 10, max: 250) |
| skip | number | No | Pagination offset |
Response
{
"status": "success",
"data": [
{
"id": 12345,
"uid": "abc123def456",
"title": "30 Minute Meeting",
"description": "Discussion about project",
"start": "2024-01-15T10:00:00.000Z",
"end": "2024-01-15T10:30:00.000Z",
"status": "accepted",
"eventTypeId": 123,
"attendees": [
{
"name": "John Doe",
"email": "[email protected]",
"timeZone": "America/New_York"
}
],
"hosts": [
{
"id": 456,
"name": "Jane Smith",
"email": "[email protected]"
}
],
"location": "https://cal.com/video/abc123",
"meetingUrl": "https://cal.com/video/abc123",
"metadata": {},
"createdAt": "2024-01-10T08:00:00.000Z"
}
]
}
Create a Booking
POST /v2/bookings
Request Body
{
"start": "2024-01-15T10:00:00Z",
"eventTypeId": 123,
"attendee": {
"name": "John Doe",
"email": "[email protected]",
"timeZone": "America/New_York",
"language": "en"
},
"guests": ["[email protected]", "[email protected]"],
"meetingUrl": "https://cal.com/team/meeting",
"metadata": {
"customField": "value"
},
"bookingFieldsResponses": {
"notes": "Please prepare the quarterly report"
}
}
Required Fields
| Field | Type | Description |
|---|---|---|
| start | string | ISO 8601 booking start time |
| eventTypeId | number | ID of the event type to book |
| attendee.name | string | Attendee's full name |
| attendee.email | string | Attendee's email address |
| attendee.timeZone | string | Attendee's timezone (IANA format) |
Optional Fields
| Field | Type | Description |
|---|---|---|
| attendee.language | string | Attendee's preferred language |
| guests | array | Additional guest email addresses |
| meetingUrl | string | Custom meeting URL |
| metadata | object | Custom metadata |
| bookingFieldsResponses | object | Responses to custom booking fields |
Response
{
"status": "success",
"data": {
"id": 12345,
"uid": "abc123def456",
"title": "30 Minute Meeting",
"start": "2024-01-15T10:00:00.000Z",
"end": "2024-01-15T10:30:00.000Z",
"status": "accepted",
"eventTypeId": 123,
"attendees": [...],
"hosts": [...],
"location": "https://cal.com/video/abc123"
}
}
Get a Booking
GET /v2/bookings/{bookingUid}
Path Parameters
| Parameter | Type | Description |
|---|---|---|
| bookingUid | string | Unique booking identifier |
Response
Returns the full booking object with all details.
Cancel a Booking
POST /v2/bookings/{bookingUid}/cancel
Request Body
{
"cancellationReason": "Schedule conflict"
}
Fields
| Field | Type | Required | Description |
|---|---|---|---|
| cancellationReason | string | No | Reason for cancellation |
Reschedule a Booking
POST /v2/bookings/{bookingUid}/reschedule
Request Body
{
"start": "2024-01-16T14:00:00Z",
"reschedulingReason": "Conflict with another meeting"
}
Fields
| Field | Type | Required | Description |
|---|---|---|---|
| start | string | Yes | New booking start time (ISO 8601) |
| reschedulingReason | string | No | Reason for rescheduling |
Confirm a Booking
For event types that require confirmation:
POST /v2/bookings/{bookingUid}/confirm
Decline a Booking
POST /v2/bookings/{bookingUid}/decline
Request Body
{
"reason": "Not available at this time"
}
Update Booking Location
PATCH /v2/bookings/{bookingUid}/location
Request Body
{
"location": "https://zoom.us/j/123456789"
}
Mark Attendee as No-Show
POST /v2/bookings/{bookingUid}/mark-absent
Request Body
{
"attendeeEmail": "[email protected]",
"noShow": true
}
Reassign Booking
Reassign a booking to a different host:
POST /v2/bookings/{bookingUid}/reassign
Or to a specific user:
POST /v2/bookings/{bookingUid}/reassign/{userId}
Get Booking References
Get external references (calendar events, video meetings) for a booking:
GET /v2/bookings/{bookingUid}/references
Response
{
"status": "success",
"data": [
{
"type": "google_calendar",
"uid": "calendar-event-id",
"meetingUrl": "https://meet.google.com/abc-defg-hij"
}
]
}
Booking Statuses
| Status | Description |
|---|---|
| accepted | Booking is confirmed |
| pending | Awaiting confirmation |
| cancelled | Booking was cancelled |
| rejected | Booking was declined |
Common Use Cases
Book a Meeting
- Get available slots:
GET /v2/slots?eventTypeId=123&startTime=...&endTime=... - Create booking:
POST /v2/bookingswith selected slot - Store the booking UID for future operations
Reschedule Flow
- Get new available slots:
GET /v2/slots?eventTypeId=123&startTime=...&endTime=... - Reschedule:
POST /v2/bookings/{uid}/reschedulewith new start time
Cancel with Notification
- Cancel:
POST /v2/bookings/{uid}/cancelwith reason - Attendees automatically receive cancellation emails