curl --request PATCH \
--url https://{organization}.rescueconsole.com/api/shifts/schedules/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"status": "active",
"ends_at": "2026-10-03T17:00:00Z"
}
'const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({status: 'active', ends_at: '2026-10-03T17:00:00Z'})
};
fetch('https://{organization}.rescueconsole.com/api/shifts/schedules/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://{organization}.rescueconsole.com/api/shifts/schedules/{id}"
payload = {
"status": "active",
"ends_at": "2026-10-03T17:00:00Z"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text){
"name": "<string>",
"starts_at": "<string>",
"status": "draft",
"all_day": true,
"id": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"shift_count": 123,
"description": "<string>",
"location_unit_id": "<string>",
"ends_at": "<string>",
"event_kind": "adoption",
"signup_form_config": {},
"metadata": {},
"custom_fields": {},
"tenant_id": "<string>"
}{
"error": "house_trained must be 1, 0 or null (not assessed)"
}{
"error": "house_trained must be 1, 0 or null (not assessed)"
}{
"error": "house_trained must be 1, 0 or null (not assessed)"
}{
"error": "house_trained must be 1, 0 or null (not assessed)"
}Change a schedule
Send only what changes. To switch between all-day and timed, send new starts_at (and ends_at) in the new shape in the same request. Needs write on Shifts.
A coordinator’s: needs write on Shifts AND read on People. A key without read on People is refused (403) with “Only a coordinator can do this: it needs permission to see People.”
curl --request PATCH \
--url https://{organization}.rescueconsole.com/api/shifts/schedules/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"status": "active",
"ends_at": "2026-10-03T17:00:00Z"
}
'const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({status: 'active', ends_at: '2026-10-03T17:00:00Z'})
};
fetch('https://{organization}.rescueconsole.com/api/shifts/schedules/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://{organization}.rescueconsole.com/api/shifts/schedules/{id}"
payload = {
"status": "active",
"ends_at": "2026-10-03T17:00:00Z"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text){
"name": "<string>",
"starts_at": "<string>",
"status": "draft",
"all_day": true,
"id": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"shift_count": 123,
"description": "<string>",
"location_unit_id": "<string>",
"ends_at": "<string>",
"event_kind": "adoption",
"signup_form_config": {},
"metadata": {},
"custom_fields": {},
"tenant_id": "<string>"
}{
"error": "house_trained must be 1, 0 or null (not assessed)"
}{
"error": "house_trained must be 1, 0 or null (not assessed)"
}{
"error": "house_trained must be 1, 0 or null (not assessed)"
}{
"error": "house_trained must be 1, 0 or null (not assessed)"
}Authorizations
An API key from Settings, API keys. It starts with rc_live_.
Path Parameters
The schedule's ID.
Body
One of your locations.
For an all-day schedule, a date (YYYY-MM-DD). Otherwise a date and time (2026-10-03T09:00:00Z).
The same shape as starts_at, and not before it. For an all-day schedule, the last day it runs.
A draft schedule is not shown on the calendar.
draft, scheduled, active, completed, cancelled Null or an empty string clears it.
adoption, fundraiser, clinic, transport, training, meeting, events, other, null Whether the schedule runs whole days rather than set hours.
An object kept with the schedule and returned as sent.
An object kept with the schedule and returned as sent.
Merged into the values already there: send only the fields that change, and a field as null to remove it.
Response
The schedule, as it now is.
For an all-day schedule, a date (YYYY-MM-DD). Otherwise a date and time (2026-10-03T09:00:00Z).
A draft schedule is not shown on the calendar.
draft, scheduled, active, completed, cancelled Whether the schedule runs whole days rather than set hours.
How many shifts the schedule has.
One of your locations.
The same shape as starts_at, and not before it. For an all-day schedule, the last day it runs.
What kind of occasion it is. Null means not said.
adoption, fundraiser, clinic, transport, training, meeting, events, other, null An object kept with the schedule and returned as sent.
An object kept with the schedule and returned as sent.
Your own schedule fields, by key. See Shift custom fields.
Your organization's ID.