agents/skills/calcom-api/references/schedules.md
Detailed documentation for schedule management endpoints in the Cal.com API v2.
| 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 |
Schedules define when a user is available for bookings. Key concepts:
GET /v2/schedules
{
"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
}
]
}
POST /v2/schedules
{
"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
}
]
}
| 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 |
| 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 |
| 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 /v2/schedules/default
Returns the user's default schedule.
GET /v2/schedules/{scheduleId}
| Parameter | Type | Description |
|---|---|---|
| scheduleId | number | Schedule ID |
PATCH /v2/schedules/{scheduleId}
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 /v2/schedules/{scheduleId}
Note: You cannot delete your last schedule. At least one schedule must exist.
{
"name": "Business Hours",
"timeZone": "America/New_York",
"availability": [
{
"days": [1, 2, 3, 4, 5],
"startTime": "09:00",
"endTime": "17:00"
}
]
}
{
"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"
}
]
}
{
"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"
}
]
}
{
"name": "Weekend Support",
"timeZone": "America/New_York",
"availability": [
{
"days": [0, 6],
"startTime": "10:00",
"endTime": "14:00"
}
]
}
{
"dateOverrides": [
{
"date": "2024-12-25",
"startTime": null,
"endTime": null
},
{
"date": "2024-01-01",
"startTime": null,
"endTime": null
}
]
}
{
"dateOverrides": [
{
"date": "2024-12-24",
"startTime": "09:00",
"endTime": "12:00"
}
]
}
For organization-level schedule management:
GET /v2/organizations/{orgId}/schedules
GET /v2/organizations/{orgId}/users/{userId}/schedules
POST /v2/organizations/{orgId}/users/{userId}/schedules
GET /v2/organizations/{orgId}/teams/{teamId}/users/{userId}/schedules
The API returns working hours in two formats:
{
"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){
"availability": [
{
"days": [1, 2, 3, 4, 5],
"startTime": "1970-01-01T09:00:00.000Z",
"endTime": "1970-01-01T17:00:00.000Z"
}
]
}
When creating/updating, use HH:MM format:
{
"startTime": "09:00",
"endTime": "17:00"
}