Update a schedule
curl --request PATCH \
--url https://api.cal.com/v2/schedules/{scheduleId} \
--header 'Authorization: <authorization>' \
--header 'Content-Type: application/json' \
--header 'cal-api-version: <cal-api-version>' \
--data '
{
"name": "One-on-one coaching",
"timeZone": "Europe/Rome",
"availability": [
{
"days": [
"Monday",
"Tuesday"
],
"startTime": "09:00",
"endTime": "10:00"
}
],
"isDefault": true,
"overrides": [
{
"date": "2024-05-20",
"startTime": "12:00",
"endTime": "14:00"
}
]
}
'import requests
url = "https://api.cal.com/v2/schedules/{scheduleId}"
payload = {
"name": "One-on-one coaching",
"timeZone": "Europe/Rome",
"availability": [
{
"days": ["Monday", "Tuesday"],
"startTime": "09:00",
"endTime": "10:00"
}
],
"isDefault": True,
"overrides": [
{
"date": "2024-05-20",
"startTime": "12:00",
"endTime": "14:00"
}
]
}
headers = {
"Authorization": "<authorization>",
"cal-api-version": "<cal-api-version>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {
Authorization: '<authorization>',
'cal-api-version': '<cal-api-version>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
name: 'One-on-one coaching',
timeZone: 'Europe/Rome',
availability: [{days: ['Monday', 'Tuesday'], startTime: '09:00', endTime: '10:00'}],
isDefault: true,
overrides: [{date: '2024-05-20', startTime: '12:00', endTime: '14:00'}]
})
};
fetch('https://api.cal.com/v2/schedules/{scheduleId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.cal.com/v2/schedules/{scheduleId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'name' => 'One-on-one coaching',
'timeZone' => 'Europe/Rome',
'availability' => [
[
'days' => [
'Monday',
'Tuesday'
],
'startTime' => '09:00',
'endTime' => '10:00'
]
],
'isDefault' => true,
'overrides' => [
[
'date' => '2024-05-20',
'startTime' => '12:00',
'endTime' => '14:00'
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: <authorization>",
"Content-Type: application/json",
"cal-api-version: <cal-api-version>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.cal.com/v2/schedules/{scheduleId}"
payload := strings.NewReader("{\n \"name\": \"One-on-one coaching\",\n \"timeZone\": \"Europe/Rome\",\n \"availability\": [\n {\n \"days\": [\n \"Monday\",\n \"Tuesday\"\n ],\n \"startTime\": \"09:00\",\n \"endTime\": \"10:00\"\n }\n ],\n \"isDefault\": true,\n \"overrides\": [\n {\n \"date\": \"2024-05-20\",\n \"startTime\": \"12:00\",\n \"endTime\": \"14:00\"\n }\n ]\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("Authorization", "<authorization>")
req.Header.Add("cal-api-version", "<cal-api-version>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.patch("https://api.cal.com/v2/schedules/{scheduleId}")
.header("Authorization", "<authorization>")
.header("cal-api-version", "<cal-api-version>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"One-on-one coaching\",\n \"timeZone\": \"Europe/Rome\",\n \"availability\": [\n {\n \"days\": [\n \"Monday\",\n \"Tuesday\"\n ],\n \"startTime\": \"09:00\",\n \"endTime\": \"10:00\"\n }\n ],\n \"isDefault\": true,\n \"overrides\": [\n {\n \"date\": \"2024-05-20\",\n \"startTime\": \"12:00\",\n \"endTime\": \"14:00\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cal.com/v2/schedules/{scheduleId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = '<authorization>'
request["cal-api-version"] = '<cal-api-version>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"One-on-one coaching\",\n \"timeZone\": \"Europe/Rome\",\n \"availability\": [\n {\n \"days\": [\n \"Monday\",\n \"Tuesday\"\n ],\n \"startTime\": \"09:00\",\n \"endTime\": \"10:00\"\n }\n ],\n \"isDefault\": true,\n \"overrides\": [\n {\n \"date\": \"2024-05-20\",\n \"startTime\": \"12:00\",\n \"endTime\": \"14:00\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"status": "success",
"data": {
"id": 254,
"ownerId": 478,
"name": "Catch up hours",
"timeZone": "Europe/Rome",
"availability": [
{
"days": [
"Monday",
"Tuesday"
],
"startTime": "17:00",
"endTime": "19:00"
},
{
"days": [
"Wednesday",
"Thursday"
],
"startTime": "16:00",
"endTime": "20:00"
}
],
"isDefault": true,
"overrides": [
{
"date": "2024-05-20",
"startTime": "18:00",
"endTime": "21:00"
}
]
}
}Schedules
Update a schedule
Please make sure to pass in the cal-api-version header value as mentioned in the Headers section. Not passing the correct value will default to an older version of this endpoint.
If accessed using an OAuth access token, the SCHEDULE_WRITE scope is required.
PATCH
/
v2
/
schedules
/
{scheduleId}
Update a schedule
curl --request PATCH \
--url https://api.cal.com/v2/schedules/{scheduleId} \
--header 'Authorization: <authorization>' \
--header 'Content-Type: application/json' \
--header 'cal-api-version: <cal-api-version>' \
--data '
{
"name": "One-on-one coaching",
"timeZone": "Europe/Rome",
"availability": [
{
"days": [
"Monday",
"Tuesday"
],
"startTime": "09:00",
"endTime": "10:00"
}
],
"isDefault": true,
"overrides": [
{
"date": "2024-05-20",
"startTime": "12:00",
"endTime": "14:00"
}
]
}
'import requests
url = "https://api.cal.com/v2/schedules/{scheduleId}"
payload = {
"name": "One-on-one coaching",
"timeZone": "Europe/Rome",
"availability": [
{
"days": ["Monday", "Tuesday"],
"startTime": "09:00",
"endTime": "10:00"
}
],
"isDefault": True,
"overrides": [
{
"date": "2024-05-20",
"startTime": "12:00",
"endTime": "14:00"
}
]
}
headers = {
"Authorization": "<authorization>",
"cal-api-version": "<cal-api-version>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {
Authorization: '<authorization>',
'cal-api-version': '<cal-api-version>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
name: 'One-on-one coaching',
timeZone: 'Europe/Rome',
availability: [{days: ['Monday', 'Tuesday'], startTime: '09:00', endTime: '10:00'}],
isDefault: true,
overrides: [{date: '2024-05-20', startTime: '12:00', endTime: '14:00'}]
})
};
fetch('https://api.cal.com/v2/schedules/{scheduleId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.cal.com/v2/schedules/{scheduleId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'name' => 'One-on-one coaching',
'timeZone' => 'Europe/Rome',
'availability' => [
[
'days' => [
'Monday',
'Tuesday'
],
'startTime' => '09:00',
'endTime' => '10:00'
]
],
'isDefault' => true,
'overrides' => [
[
'date' => '2024-05-20',
'startTime' => '12:00',
'endTime' => '14:00'
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: <authorization>",
"Content-Type: application/json",
"cal-api-version: <cal-api-version>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.cal.com/v2/schedules/{scheduleId}"
payload := strings.NewReader("{\n \"name\": \"One-on-one coaching\",\n \"timeZone\": \"Europe/Rome\",\n \"availability\": [\n {\n \"days\": [\n \"Monday\",\n \"Tuesday\"\n ],\n \"startTime\": \"09:00\",\n \"endTime\": \"10:00\"\n }\n ],\n \"isDefault\": true,\n \"overrides\": [\n {\n \"date\": \"2024-05-20\",\n \"startTime\": \"12:00\",\n \"endTime\": \"14:00\"\n }\n ]\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("Authorization", "<authorization>")
req.Header.Add("cal-api-version", "<cal-api-version>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.patch("https://api.cal.com/v2/schedules/{scheduleId}")
.header("Authorization", "<authorization>")
.header("cal-api-version", "<cal-api-version>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"One-on-one coaching\",\n \"timeZone\": \"Europe/Rome\",\n \"availability\": [\n {\n \"days\": [\n \"Monday\",\n \"Tuesday\"\n ],\n \"startTime\": \"09:00\",\n \"endTime\": \"10:00\"\n }\n ],\n \"isDefault\": true,\n \"overrides\": [\n {\n \"date\": \"2024-05-20\",\n \"startTime\": \"12:00\",\n \"endTime\": \"14:00\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cal.com/v2/schedules/{scheduleId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = '<authorization>'
request["cal-api-version"] = '<cal-api-version>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"One-on-one coaching\",\n \"timeZone\": \"Europe/Rome\",\n \"availability\": [\n {\n \"days\": [\n \"Monday\",\n \"Tuesday\"\n ],\n \"startTime\": \"09:00\",\n \"endTime\": \"10:00\"\n }\n ],\n \"isDefault\": true,\n \"overrides\": [\n {\n \"date\": \"2024-05-20\",\n \"startTime\": \"12:00\",\n \"endTime\": \"14:00\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"status": "success",
"data": {
"id": 254,
"ownerId": 478,
"name": "Catch up hours",
"timeZone": "Europe/Rome",
"availability": [
{
"days": [
"Monday",
"Tuesday"
],
"startTime": "17:00",
"endTime": "19:00"
},
{
"days": [
"Wednesday",
"Thursday"
],
"startTime": "16:00",
"endTime": "20:00"
}
],
"isDefault": true,
"overrides": [
{
"date": "2024-05-20",
"startTime": "18:00",
"endTime": "21:00"
}
]
}
}Headers
value must be Bearer <token> where <token> is api key prefixed with cal_, managed user access token, or OAuth access token
Must be set to 2024-06-11. If not set to this value, the endpoint will default to an older version.
Path Parameters
Body
application/json
Example:
"One-on-one coaching"
Example:
"Europe/Rome"
Show child attributes
Show child attributes
Example:
[
{
"days": ["Monday", "Tuesday"],
"startTime": "09:00",
"endTime": "10:00"
}
]Example:
true
Show child attributes
Show child attributes
Example:
[
{
"date": "2024-05-20",
"startTime": "12:00",
"endTime": "14:00"
}
]Was this page helpful?
⌘I