curl --request PATCH \
--url https://api.eka.care/schedule/{scheduleId} \
--header 'Content-Type: application/json' \
--header 'auth: <auth>' \
--data '
{
"config": {
"overbooking_limit": 3
},
"timebounds": {
"daily": {
"2026-10-16": {
"booking_id": "bk_9f31c2",
"is_enabled": true,
"bounds": [
{
"s": 1000,
"e": 1300,
"conf_ids": [
"conf_abc123"
]
}
]
}
}
},
"deleteTimebounds": {
"block": [
"bk_5a01e7"
]
}
}
'import requests
url = "https://api.eka.care/schedule/{scheduleId}"
payload = {
"config": { "overbooking_limit": 3 },
"timebounds": { "daily": { "2026-10-16": {
"booking_id": "bk_9f31c2",
"is_enabled": True,
"bounds": [
{
"s": 1000,
"e": 1300,
"conf_ids": ["conf_abc123"]
}
]
} } },
"deleteTimebounds": { "block": ["bk_5a01e7"] }
}
headers = {
"auth": "<auth>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {auth: '<auth>', 'Content-Type': 'application/json'},
body: JSON.stringify({
config: {overbooking_limit: 3},
timebounds: {
daily: {
'2026-10-16': {
booking_id: 'bk_9f31c2',
is_enabled: true,
bounds: [{s: 1000, e: 1300, conf_ids: ['conf_abc123']}]
}
}
},
deleteTimebounds: {block: ['bk_5a01e7']}
})
};
fetch('https://api.eka.care/schedule/{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.eka.care/schedule/{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([
'config' => [
'overbooking_limit' => 3
],
'timebounds' => [
'daily' => [
'2026-10-16' => [
'booking_id' => 'bk_9f31c2',
'is_enabled' => true,
'bounds' => [
[
's' => 1000,
'e' => 1300,
'conf_ids' => [
'conf_abc123'
]
]
]
]
]
],
'deleteTimebounds' => [
'block' => [
'bk_5a01e7'
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"auth: <auth>"
],
]);
$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.eka.care/schedule/{scheduleId}"
payload := strings.NewReader("{\n \"config\": {\n \"overbooking_limit\": 3\n },\n \"timebounds\": {\n \"daily\": {\n \"2026-10-16\": {\n \"booking_id\": \"bk_9f31c2\",\n \"is_enabled\": true,\n \"bounds\": [\n {\n \"s\": 1000,\n \"e\": 1300,\n \"conf_ids\": [\n \"conf_abc123\"\n ]\n }\n ]\n }\n }\n },\n \"deleteTimebounds\": {\n \"block\": [\n \"bk_5a01e7\"\n ]\n }\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("auth", "<auth>")
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.eka.care/schedule/{scheduleId}")
.header("auth", "<auth>")
.header("Content-Type", "application/json")
.body("{\n \"config\": {\n \"overbooking_limit\": 3\n },\n \"timebounds\": {\n \"daily\": {\n \"2026-10-16\": {\n \"booking_id\": \"bk_9f31c2\",\n \"is_enabled\": true,\n \"bounds\": [\n {\n \"s\": 1000,\n \"e\": 1300,\n \"conf_ids\": [\n \"conf_abc123\"\n ]\n }\n ]\n }\n }\n },\n \"deleteTimebounds\": {\n \"block\": [\n \"bk_5a01e7\"\n ]\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.eka.care/schedule/{scheduleId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["auth"] = '<auth>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"config\": {\n \"overbooking_limit\": 3\n },\n \"timebounds\": {\n \"daily\": {\n \"2026-10-16\": {\n \"booking_id\": \"bk_9f31c2\",\n \"is_enabled\": true,\n \"bounds\": [\n {\n \"s\": 1000,\n \"e\": 1300,\n \"conf_ids\": [\n \"conf_abc123\"\n ]\n }\n ]\n }\n }\n },\n \"deleteTimebounds\": {\n \"block\": [\n \"bk_5a01e7\"\n ]\n }\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"schedule_id": "<string>",
"business_id": "<string>",
"name": "<string>",
"archive": true,
"config": {
"overbooking_limit": 123,
"block_over_existing_bookings": true,
"schedule_slot_config_enabled": true,
"slot_durations": [
123
]
},
"timebounds": {},
"deleted": {},
"assignment": {
"products": [
"<string>"
],
"error": "<string>"
},
"confs_created": [
"<string>"
],
"failed_tasks": [
"<string>"
]
}
}{
"success": false,
"error": "<string>"
}{
"success": false,
"error": "Unauthorised"
}{
"success": false,
"error": "schedule not found"
}{
"success": false,
"error": "<string>"
}Update Schedule
Overview
Edits an existing schedule’s config, name, archive state, and/or its timebounds, in one call. Ownership is checked against the caller’s business — a schedule belonging to another business returns 401, and an unknown scheduleId returns 404.
Archiving a schedule cannot be combined with timebound additions/deletions or a product assignment in the same request (409). Mutating an already-archived schedule also returns 409. The same booking_id cannot appear in both timebounds and deleteTimebounds (400).
curl --request PATCH \
--url https://api.eka.care/schedule/{scheduleId} \
--header 'Content-Type: application/json' \
--header 'auth: <auth>' \
--data '
{
"config": {
"overbooking_limit": 3
},
"timebounds": {
"daily": {
"2026-10-16": {
"booking_id": "bk_9f31c2",
"is_enabled": true,
"bounds": [
{
"s": 1000,
"e": 1300,
"conf_ids": [
"conf_abc123"
]
}
]
}
}
},
"deleteTimebounds": {
"block": [
"bk_5a01e7"
]
}
}
'import requests
url = "https://api.eka.care/schedule/{scheduleId}"
payload = {
"config": { "overbooking_limit": 3 },
"timebounds": { "daily": { "2026-10-16": {
"booking_id": "bk_9f31c2",
"is_enabled": True,
"bounds": [
{
"s": 1000,
"e": 1300,
"conf_ids": ["conf_abc123"]
}
]
} } },
"deleteTimebounds": { "block": ["bk_5a01e7"] }
}
headers = {
"auth": "<auth>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {auth: '<auth>', 'Content-Type': 'application/json'},
body: JSON.stringify({
config: {overbooking_limit: 3},
timebounds: {
daily: {
'2026-10-16': {
booking_id: 'bk_9f31c2',
is_enabled: true,
bounds: [{s: 1000, e: 1300, conf_ids: ['conf_abc123']}]
}
}
},
deleteTimebounds: {block: ['bk_5a01e7']}
})
};
fetch('https://api.eka.care/schedule/{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.eka.care/schedule/{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([
'config' => [
'overbooking_limit' => 3
],
'timebounds' => [
'daily' => [
'2026-10-16' => [
'booking_id' => 'bk_9f31c2',
'is_enabled' => true,
'bounds' => [
[
's' => 1000,
'e' => 1300,
'conf_ids' => [
'conf_abc123'
]
]
]
]
]
],
'deleteTimebounds' => [
'block' => [
'bk_5a01e7'
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"auth: <auth>"
],
]);
$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.eka.care/schedule/{scheduleId}"
payload := strings.NewReader("{\n \"config\": {\n \"overbooking_limit\": 3\n },\n \"timebounds\": {\n \"daily\": {\n \"2026-10-16\": {\n \"booking_id\": \"bk_9f31c2\",\n \"is_enabled\": true,\n \"bounds\": [\n {\n \"s\": 1000,\n \"e\": 1300,\n \"conf_ids\": [\n \"conf_abc123\"\n ]\n }\n ]\n }\n }\n },\n \"deleteTimebounds\": {\n \"block\": [\n \"bk_5a01e7\"\n ]\n }\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("auth", "<auth>")
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.eka.care/schedule/{scheduleId}")
.header("auth", "<auth>")
.header("Content-Type", "application/json")
.body("{\n \"config\": {\n \"overbooking_limit\": 3\n },\n \"timebounds\": {\n \"daily\": {\n \"2026-10-16\": {\n \"booking_id\": \"bk_9f31c2\",\n \"is_enabled\": true,\n \"bounds\": [\n {\n \"s\": 1000,\n \"e\": 1300,\n \"conf_ids\": [\n \"conf_abc123\"\n ]\n }\n ]\n }\n }\n },\n \"deleteTimebounds\": {\n \"block\": [\n \"bk_5a01e7\"\n ]\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.eka.care/schedule/{scheduleId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["auth"] = '<auth>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"config\": {\n \"overbooking_limit\": 3\n },\n \"timebounds\": {\n \"daily\": {\n \"2026-10-16\": {\n \"booking_id\": \"bk_9f31c2\",\n \"is_enabled\": true,\n \"bounds\": [\n {\n \"s\": 1000,\n \"e\": 1300,\n \"conf_ids\": [\n \"conf_abc123\"\n ]\n }\n ]\n }\n }\n },\n \"deleteTimebounds\": {\n \"block\": [\n \"bk_5a01e7\"\n ]\n }\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"schedule_id": "<string>",
"business_id": "<string>",
"name": "<string>",
"archive": true,
"config": {
"overbooking_limit": 123,
"block_over_existing_bookings": true,
"schedule_slot_config_enabled": true,
"slot_durations": [
123
]
},
"timebounds": {},
"deleted": {},
"assignment": {
"products": [
"<string>"
],
"error": "<string>"
},
"confs_created": [
"<string>"
],
"failed_tasks": [
"<string>"
]
}
}{
"success": false,
"error": "<string>"
}{
"success": false,
"error": "Unauthorised"
}{
"success": false,
"error": "schedule not found"
}{
"success": false,
"error": "<string>"
}Headers
"auth"
Path Parameters
Id of the schedule to update.
Body
At least one field must be provided.
New schedule name. If provided, must be non-empty.
Archive/unarchive the schedule. Cannot be combined with timebounds, deleteTimebounds, or a productMap assignment.
Show child attributes
Show child attributes
Rows to create or update. Same shape as on POST /schedule, except daily/repeat-weekly/repeat-daily/block entries may include a booking_id to update that existing row in place instead of creating a new one.
Show child attributes
Show child attributes
booking_ids to delete, keyed by rule type. A booking_id used here cannot also appear in timebounds in the same request.
Show child attributes
Show child attributes
Assigns/unassigns this schedule to products. Keys are product-emr or product-widget, values are true/false. Requires entity_id and location_id to also be present in the request.
Show child attributes
Show child attributes
Was this page helpful?

