schedules
Detailed documentation for schedule management endpoints in the Cal.diy API v2.
$ npx -y skills add calcom/cal.com --agent claude-codeHow it fires
How this agent gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
Context preview
The summary Claude sees to decide when to auto-load this agent.
Detailed documentation for schedule management endpoints in the Cal.diy API v2.
Agent definition
schedules.mdSchedules API Reference
Detailed documentation for schedule management endpoints in the Cal.diy API v2.
Endpoints Overview
| Method | Endpoint | Description | |--------|----------|-------------| | GET | /v2/schedules | List all schedules | | POST | /v2/schedules | Create a schedule | | GET | /v2/schedules/default | Get default schedule | | GET | /v2/schedules/{scheduleId} | Get a schedule | | PATCH | /v2/schedules/{scheduleId} | Update a schedule | | DELETE | /v2/schedules/{scheduleId} | Delete a schedule |
Understanding Schedules
Schedules define when a user is available for bookings. Key concepts:
- **Working Hours**: Regular weekly availability (e.g., Mon-Fri 9am-5pm)
- **Date Overrides**: Exceptions to regular hours (e.g., holiday, special hours)
- **Timezone**: The timezone in which availability is defined
- **Default Schedule**: The primary schedule used when no specific schedule is assigned
List Schedules
GET /v2/schedules
Response
{
"status": "success",
"data": [
{
"id": 1,
"name": "Working Hours",
"isDefault": true,
"timeZone": "America/New_York",
"workingHours": [
{
"days": [1, 2, 3, 4, 5],
"startTime": 540,
"endTime": 1020
}
],
"availability": [
{
"id": 1,
"days": [1, 2, 3, 4, 5],
"startTime": "1970-01-01T09:00:00.000Z",
"endTime": "1970-01-01T17:00:00.000Z"
}
],
"dateOverrides": [],
"isManaged": false,
"readOnly": false,
"isLastSchedule": false
}
]
}Create a Schedule
POST /v2/schedules
Request Body
{
"name": "Working Hours",
"timeZone": "America/New_York",
"isDefault": true,
"availability": [
{
"days": [1, 2, 3, 4, 5],
"startTime": "09:00",
"endTime": "17:00"
}
],
"dateOverrides": [
{
"date": "2024-12-25",
"startTime": null,
"endTime": null
}
]
}Fields
| Field | Type | Required | Description | |-------|------|----------|-------------| | name | string | Yes | Schedule name | | timeZone | string | Yes | IANA timezone identifier | | isDefault | boolean | No | Set as default schedule | | availability | array | Yes | Weekly availability rules | | dateOverrides | array | No | Date-specific overrides |
Availability Object
| Field | Type | Description | |-------|------|-------------| | days | array | Days of week (0=Sunday, 1=Monday, ..., 6=Saturday) | | startTime | string | Start time in HH:MM format | | endTime | string | End time in HH:MM format |
Date Override Object
| Field | Type | Description | |-------|------|-------------| | date | string | Date in YYYY-MM-DD format | | startTime | string/null | Start time (null = unavailable) | | endTime | string/null | End time (null = unavailable) |
Get Default Schedule
GET /v2/schedules/default
Returns the user's default schedule.
Get a Schedule
GET /v2/schedules/{scheduleId}Path Parameters
| Parameter | Type | Description | |-----------|------|-------------| | scheduleId | number | Schedule ID |
Update a Schedule
PATCH /v2/schedules/{scheduleId}Request Body
Only include fields you want to update:
{
"name": "Updated Schedule Name",
"availability": [
{
"days": [1, 2, 3, 4, 5],
"startTime": "08:00",
"endTime": "18:00"
}
]
}Delete a Schedule
DELETE /v2/schedules/{scheduleId}Note: You cannot delete your last schedule. At least one schedule must exist.
Common Schedule Patterns
Standard Business Hours (Mon-Fri 9-5)
{
"name": "Business Hours",
"timeZone": "America/New_York",
"availability": [
{
"days": [1, 2, 3, 4, 5],
"startTime": "09:00",
"endTime": "17:00"
}
]
}Split Schedule (Morning and Afternoon)
{
"name": "Split Hours",
"timeZone": "America/New_York",
"availability": [
{
"days": [1, 2, 3, 4, 5],
"startTime": "09:00",
"endTime": "12:00"
},
{
"days": [1, 2, 3, 4, 5],
"startTime": "14:00",
"endTime": "18:00"
}
]
}Different Hours Per Day
{
"name": "Variable Hours",
"timeZone": "America/New_York",
"availability": [
{
"days": [1, 3, 5],
"startTime": "09:00",
"endTime": "17:00"
},
{
"days": [2, 4],
"startTime": "10:00",
"endTime": "19:00"
}
]
}Weekend Availability
{
"name": "Weekend Support",
"timeZone": "America/New_York",
"availability": [
{
"days": [0, 6],
"startTime": "10:00",
"endTime": "14:00"
}
]
}Holiday Override (Unavailable)
{
"dateOverrides": [
{
"date": "2024-12-25",
"startTime": null,
"endTime": null
},
{
"date": "2024-01-01",
"startTime": null,
"endTime": null
}
]
}Special Hours Override
{
"dateOverrides": [
{
"date": "2024-12-24",
"startTime": "09:00",
"endTime": "12:00"
}
]
}Organization/Team Schedules
For organization-level schedule management:
List Organization Schedules
GET /v2/organizations/{orgId}/schedulesList User Schedules in Organization
GET /v2/organizations/{orgId}/users/{userId}/schedulesCreate User Schedule in Organization
POST /v2/organizations/{orgId}/users/{userId}/schedulesTeam Member Schedules
GET /v2/organizations/{orgId}/teams/{teamId}/users/{userId}/schedulesWorking Hours Format
The API returns working hours in two formats:
Minutes from Midnight
{
"workingHours": [
{
"days": [1, 2, 3, 4, 5],
"startTime": 540,
"endTime": 1020
}
]
}- `540` = 9:00 AM (9 * 60 minutes)
- `1020` = 5:00 PM (17 * 60 minutes)
ISO T
Read more
Schedules API Reference
Detailed documentation for schedule management endpoints in the Cal.diy API v2.
Endpoints Overview
| Method | Endpoint | Description | |--------|----------|-------------| | GET | /v2/schedules | List all schedules | | POST | /v2/schedules | Create a schedule | | GET | /v2/schedules/default | Get default schedule | | GET | /v2/schedules/{scheduleId} | Get a schedule | | PATCH | /v2/schedules/{scheduleId} | Update a schedule | | DELETE | /v2/schedules/{scheduleId} | Delete a schedule |
Understanding Schedules
Schedules define when a user is available for bookings. Key concepts:
- **Working Hours**: Regular weekly availability (e.g., Mon-Fri 9am-5pm)
- **Date Overrides**: Exceptions to regular hours (e.g., holiday, special hours)
- **Timezone**: The timezone in which availability is defined
- **Default Schedule**: The primary schedule used when no specific schedule is assigned
List Schedules
GET /v2/schedules
Response
{
"status": "success",
"data": [
{
"id": 1,
"name": "Working Hours",
"isDefault": true,
"timeZone": "America/New_York",
"workingHours": [
{
"days": [1, 2, 3, 4, 5],
"startTime": 540,
"endTime": 1020
}
],
"availability": [
{
"id": 1,
"days": [1, 2, 3, 4, 5],
"startTime": "1970-01-01T09:00:00.000Z",
"endTime": "1970-01-01T17:00:00.000Z"
}
],
"dateOverrides": [],
"isManaged": false,
"readOnly": false,
"isLastSchedule": false
}
]
}Create a Schedule
POST /v2/schedules
Request Body
{
"name": "Working Hours",
"timeZone": "America/New_York",
"isDefault": true,
"availability": [
{
"days": [1, 2, 3, 4, 5],
"startTime": "09:00",
"endTime": "17:00"
}
],
"dateOverrides": [
{
"date": "2024-12-25",
"startTime": null,
"endTime": null
}
]
}Fields
| Field | Type | Required | Description | |-------|------|----------|-------------| | name | string | Yes | Schedule name | | timeZone | string | Yes | IANA timezone identifier | | isDefault | boolean | No | Set as default schedule | | availability | array | Yes | Weekly availability rules | | dateOverrides | array | No | Date-specific overrides |
Availability Object
| Field | Type | Description | |-------|------|-------------| | days | array | Days of week (0=Sunday, 1=Monday, ..., 6=Saturday) | | startTime | string | Start time in HH:MM format | | endTime | string | End time in HH:MM format |
Date Override Object
| Field | Type | Description | |-------|------|-------------| | date | string | Date in YYYY-MM-DD format | | startTime | string/null | Start time (null = unavailable) | | endTime | string/null | End time (null = unavailable) |
Get Default Schedule
GET /v2/schedules/default
Returns the user's default schedule.
Get a Schedule
GET /v2/schedules/{scheduleId}Path Parameters
| Parameter | Type | Description | |-----------|------|-------------| | scheduleId | number | Schedule ID |
Update a Schedule
PATCH /v2/schedules/{scheduleId}Request Body
Only include fields you want to update:
{
"name": "Updated Schedule Name",
"availability": [
{
"days": [1, 2, 3, 4, 5],
"startTime": "08:00",
"endTime": "18:00"
}
]
}Delete a Schedule
DELETE /v2/schedules/{scheduleId}Note: You cannot delete your last schedule. At least one schedule must exist.
Common Schedule Patterns
Standard Business Hours (Mon-Fri 9-5)
{
"name": "Business Hours",
"timeZone": "America/New_York",
"availability": [
{
"days": [1, 2, 3, 4, 5],
"startTime": "09:00",
"endTime": "17:00"
}
]
}Split Schedule (Morning and Afternoon)
{
"name": "Split Hours",
"timeZone": "America/New_York",
"availability": [
{
"days": [1, 2, 3, 4, 5],
"startTime": "09:00",
"endTime": "12:00"
},
{
"days": [1, 2, 3, 4, 5],
"startTime": "14:00",
"endTime": "18:00"
}
]
}Different Hours Per Day
{
"name": "Variable Hours",
"timeZone": "America/New_York",
"availability": [
{
"days": [1, 3, 5],
"startTime": "09:00",
"endTime": "17:00"
},
{
"days": [2, 4],
"startTime": "10:00",
"endTime": "19:00"
}
]
}Weekend Availability
{
"name": "Weekend Support",
"timeZone": "America/New_York",
"availability": [
{
"days": [0, 6],
"startTime": "10:00",
"endTime": "14:00"
}
]
}Holiday Override (Unavailable)
{
"dateOverrides": [
{
"date": "2024-12-25",
"startTime": null,
"endTime": null
},
{
"date": "2024-01-01",
"startTime": null,
"endTime": null
}
]
}Special Hours Override
{
"dateOverrides": [
{
"date": "2024-12-24",
"startTime": "09:00",
"endTime": "12:00"
}
]
}Organization/Team Schedules
For organization-level schedule management:
List Organization Schedules
GET /v2/organizations/{orgId}/schedulesList User Schedules in Organization
GET /v2/organizations/{orgId}/users/{userId}/schedulesCreate User Schedule in Organization
POST /v2/organizations/{orgId}/users/{userId}/schedulesTeam Member Schedules
GET /v2/organizations/{orgId}/teams/{teamId}/users/{userId}/schedulesWorking Hours Format
The API returns working hours in two formats:
Minutes from Midnight
{
"workingHours": [
{
"days": [1, 2, 3, 4, 5],
"startTime": 540,
"endTime": 1020
}
]
}- `540` = 9:00 AM (9 * 60 minutes)
- `1020` = 5:00 PM (17 * 60 minutes)
ISO T
Repo: calcom/cal.com
Other agents on caldiy.
- knowledge-base
This file contains domain knowledge about the Cal.diy product and codebase. For coding guidelines and rules, see [`rules/`](rules/).
Open agent - api-no-breaking-changes
**Impact: CRITICAL**
Open agent - api-thin-controllers
**Impact: HIGH**
Open agent - architecture-circular-dependencies
**Impact: CRITICAL**
Open agent - architecture-feature-boundaries
**Impact: CRITICAL**
Open agent - architecture-features-modules
The `packages/features` package should contain only framework-agnostic code: - Repositories (data access layer) - Services (business logic) - Core utilities and helpers - Types and interfaces
Open agent

