Menu
API reference
On-call
On-call schedules, rotations and overrides.
- GET Get who is on call
- GET List on-call schedules
- POST Create an on-call schedule
- GET Get an on-call schedule
- PUT Update an on-call schedule
- DELETE Delete an on-call schedule
- POST Add a rotation slot
- PATCH Reorder the rotation
- DELETE Remove a rotation slot
- POST Add an override
- DELETE Remove an override
Get who is on call
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| schedule_id | query | string | No |
Response 200 application/json
dataarray of string required
Errors
- 401 Unauthenticated
- 403 The key lacks the ability this endpoint requires (required_ability names it), or the action is not allowed for the team.
- 404 Not found
- 429 Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for Retry-After seconds.
Code samples
curl -X GET "https://api.uptizm.com/v1/on-call/current" \
-H "Authorization: Bearer $UPTIZM_API_KEY" \
-H "Accept: application/json"
const response = await fetch('https://api.uptizm.com/v1/on-call/current', {
method: 'GET',
headers: {
'Authorization': `Bearer ${process.env.UPTIZM_API_KEY}`,
'Accept': 'application/json',
},
});
const data = await response.json();
<?php
$curl = curl_init('https://api.uptizm.com/v1/on-call/current');
curl_setopt_array($curl, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer '.getenv('UPTIZM_API_KEY'),
'Accept: application/json',
],
]);
$response = curl_exec($curl);
import os
import requests
response = requests.get(
"https://api.uptizm.com/v1/on-call/current",
headers={
"Authorization": "Bearer " + os.environ["UPTIZM_API_KEY"],
"Accept": "application/json",
},
)
print(response.json())
Try it
ms
List on-call schedules
Response 200 application/json
dataarray of OnCallScheduleResource and object requiredidstring requiredteam_idstring requirednamestring requiredtimezonestring requiredrotationsarray of string requiredoverridesarray of string requiredcreated_atstring or null requiredupdated_atstring or null required
linksobject requiredfirststring or null requiredlaststring or null requiredprevstring or null requirednextstring or null required
metaobject requiredcurrent_pageinteger, min 1 requiredfrominteger or null, min 1 requiredlast_pageinteger, min 1 requiredlinksarray of object requiredGenerated paginator links.
urlstring or null requiredlabelstring requiredactiveboolean required
pathstring or null requiredBase path for paginator generated URLs.
per_pageinteger, min 0 requiredNumber of items shown per page.
tointeger or null, min 1 requiredNumber of the last item in the slice.
totalinteger, min 0 requiredTotal number of items being paginated.
Errors
- 401 Unauthenticated
- 403 The key lacks the ability this endpoint requires (required_ability names it), or the action is not allowed for the team.
- 429 Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for Retry-After seconds.
Code samples
curl -X GET "https://api.uptizm.com/v1/on-call/schedules" \
-H "Authorization: Bearer $UPTIZM_API_KEY" \
-H "Accept: application/json"
const response = await fetch('https://api.uptizm.com/v1/on-call/schedules', {
method: 'GET',
headers: {
'Authorization': `Bearer ${process.env.UPTIZM_API_KEY}`,
'Accept': 'application/json',
},
});
const data = await response.json();
<?php
$curl = curl_init('https://api.uptizm.com/v1/on-call/schedules');
curl_setopt_array($curl, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer '.getenv('UPTIZM_API_KEY'),
'Accept: application/json',
],
]);
$response = curl_exec($curl);
import os
import requests
response = requests.get(
"https://api.uptizm.com/v1/on-call/schedules",
headers={
"Authorization": "Bearer " + os.environ["UPTIZM_API_KEY"],
"Accept": "application/json",
},
)
print(response.json())
Try it
ms
Create an on-call schedule
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| Idempotency-Key | header | string | No | Any unique string per logical request. |
Request body application/json
namestring, max length 200 requiredtimezonestring or null, max length 64
Response 201 application/json
dataOnCallScheduleResource requiredidstring requiredteam_idstring requirednamestring requiredtimezonestring requiredrotationsarray of stringoverridesarray of stringcreated_atstring or null requiredupdated_atstring or null required
Errors
- 401 Unauthenticated
- 403 The key lacks the ability this endpoint requires (required_ability names it), or the action is not allowed for the team.
- 422 Validation error
- 429 Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for Retry-After seconds.
Code samples
curl -X POST "https://api.uptizm.com/v1/on-call/schedules" \
-H "Authorization: Bearer $UPTIZM_API_KEY" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{
"name": "string"
}'
const payload = {
"name": "string"
};
const response = await fetch('https://api.uptizm.com/v1/on-call/schedules', {
method: 'POST',
headers: {
'Authorization': `Bearer ${process.env.UPTIZM_API_KEY}`,
'Accept': 'application/json',
'Content-Type': 'application/json',
'Idempotency-Key': crypto.randomUUID(),
},
body: JSON.stringify(payload),
});
const data = await response.json();
<?php
$curl = curl_init('https://api.uptizm.com/v1/on-call/schedules');
$payload = <<<'JSON'
{
"name": "string"
}
JSON;
curl_setopt_array($curl, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer '.getenv('UPTIZM_API_KEY'),
'Accept: application/json',
'Content-Type: application/json',
'Idempotency-Key: '.uniqid('', true),
],
CURLOPT_POSTFIELDS => $payload,
]);
$response = curl_exec($curl);
import os
import uuid
import requests
response = requests.post(
"https://api.uptizm.com/v1/on-call/schedules",
headers={
"Authorization": "Bearer " + os.environ["UPTIZM_API_KEY"],
"Accept": "application/json",
"Content-Type": "application/json",
"Idempotency-Key": str(uuid.uuid4()),
},
data=r'''{
"name": "string"
}''',
)
print(response.json())
Try it
ms
Get an on-call schedule
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| schedule | path | string | Yes | The schedule ID |
Response 200 application/json
dataOnCallScheduleResource and object requiredidstring requiredteam_idstring requirednamestring requiredtimezonestring requiredrotationsarray of string requiredoverridesarray of string requiredcreated_atstring or null requiredupdated_atstring or null required
Errors
- 401 Unauthenticated
- 403 The key lacks the ability this endpoint requires (required_ability names it), or the action is not allowed for the team.
- 404 Not found
- 429 Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for Retry-After seconds.
Code samples
curl -X GET "https://api.uptizm.com/v1/on-call/schedules/SCHEDULE" \
-H "Authorization: Bearer $UPTIZM_API_KEY" \
-H "Accept: application/json"
const response = await fetch('https://api.uptizm.com/v1/on-call/schedules/SCHEDULE', {
method: 'GET',
headers: {
'Authorization': `Bearer ${process.env.UPTIZM_API_KEY}`,
'Accept': 'application/json',
},
});
const data = await response.json();
<?php
$curl = curl_init('https://api.uptizm.com/v1/on-call/schedules/SCHEDULE');
curl_setopt_array($curl, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer '.getenv('UPTIZM_API_KEY'),
'Accept: application/json',
],
]);
$response = curl_exec($curl);
import os
import requests
response = requests.get(
"https://api.uptizm.com/v1/on-call/schedules/SCHEDULE",
headers={
"Authorization": "Bearer " + os.environ["UPTIZM_API_KEY"],
"Accept": "application/json",
},
)
print(response.json())
Try it
ms
Update an on-call schedule
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| schedule | path | string | Yes | The schedule ID |
Request body application/json
namestring, max length 200timezonestring or null, max length 64
Response 200 application/json
dataOnCallScheduleResource requiredidstring requiredteam_idstring requirednamestring requiredtimezonestring requiredrotationsarray of stringoverridesarray of stringcreated_atstring or null requiredupdated_atstring or null required
Errors
- 401 Unauthenticated
- 403 The key lacks the ability this endpoint requires (required_ability names it), or the action is not allowed for the team.
- 404 Not found
- 422 Validation error
- 429 Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for Retry-After seconds.
Code samples
curl -X PUT "https://api.uptizm.com/v1/on-call/schedules/SCHEDULE" \
-H "Authorization: Bearer $UPTIZM_API_KEY" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{}'
const payload = {};
const response = await fetch('https://api.uptizm.com/v1/on-call/schedules/SCHEDULE', {
method: 'PUT',
headers: {
'Authorization': `Bearer ${process.env.UPTIZM_API_KEY}`,
'Accept': 'application/json',
'Content-Type': 'application/json',
},
body: JSON.stringify(payload),
});
const data = await response.json();
<?php
$curl = curl_init('https://api.uptizm.com/v1/on-call/schedules/SCHEDULE');
$payload = <<<'JSON'
{}
JSON;
curl_setopt_array($curl, [
CURLOPT_CUSTOMREQUEST => 'PUT',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer '.getenv('UPTIZM_API_KEY'),
'Accept: application/json',
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => $payload,
]);
$response = curl_exec($curl);
import os
import requests
response = requests.put(
"https://api.uptizm.com/v1/on-call/schedules/SCHEDULE",
headers={
"Authorization": "Bearer " + os.environ["UPTIZM_API_KEY"],
"Accept": "application/json",
"Content-Type": "application/json",
},
data=r'''{}''',
)
print(response.json())
Try it
ms
Delete an on-call schedule
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| schedule | path | string | Yes | The schedule ID |
Response 204
No body.
Errors
- 401 Unauthenticated
- 403 The key lacks the ability this endpoint requires (required_ability names it), or the action is not allowed for the team.
- 404 Not found
- 429 Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for Retry-After seconds.
Code samples
curl -X DELETE "https://api.uptizm.com/v1/on-call/schedules/SCHEDULE" \
-H "Authorization: Bearer $UPTIZM_API_KEY" \
-H "Accept: application/json"
const response = await fetch('https://api.uptizm.com/v1/on-call/schedules/SCHEDULE', {
method: 'DELETE',
headers: {
'Authorization': `Bearer ${process.env.UPTIZM_API_KEY}`,
'Accept': 'application/json',
},
});
console.log(response.status);
<?php
$curl = curl_init('https://api.uptizm.com/v1/on-call/schedules/SCHEDULE');
curl_setopt_array($curl, [
CURLOPT_CUSTOMREQUEST => 'DELETE',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer '.getenv('UPTIZM_API_KEY'),
'Accept: application/json',
],
]);
$response = curl_exec($curl);
import os
import requests
response = requests.delete(
"https://api.uptizm.com/v1/on-call/schedules/SCHEDULE",
headers={
"Authorization": "Bearer " + os.environ["UPTIZM_API_KEY"],
"Accept": "application/json",
},
)
print(response.status_code)
Try it
ms
Add a rotation slot
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| schedule | path | string | Yes | The schedule ID |
| Idempotency-Key | header | string | No | Any unique string per logical request. |
Request body application/json
user_idstring, uuid requiredpositioninteger, min 0 requiredshift_hoursinteger or null, min 1, max 8760
Response 201 application/json
dataOnCallScheduleResource and object requiredidstring requiredteam_idstring requirednamestring requiredtimezonestring requiredrotationsarray of string requiredoverridesarray of string requiredcreated_atstring or null requiredupdated_atstring or null required
Errors
- 401 Unauthenticated
- 403 The key lacks the ability this endpoint requires (required_ability names it), or the action is not allowed for the team.
- 404 Not found
- 422 Validation error
- 429 Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for Retry-After seconds.
Code samples
curl -X POST "https://api.uptizm.com/v1/on-call/schedules/SCHEDULE/rotations" \
-H "Authorization: Bearer $UPTIZM_API_KEY" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{
"user_id": "00000000-0000-4000-8000-000000000000",
"position": 0
}'
const payload = {
"user_id": "00000000-0000-4000-8000-000000000000",
"position": 0
};
const response = await fetch('https://api.uptizm.com/v1/on-call/schedules/SCHEDULE/rotations', {
method: 'POST',
headers: {
'Authorization': `Bearer ${process.env.UPTIZM_API_KEY}`,
'Accept': 'application/json',
'Content-Type': 'application/json',
'Idempotency-Key': crypto.randomUUID(),
},
body: JSON.stringify(payload),
});
const data = await response.json();
<?php
$curl = curl_init('https://api.uptizm.com/v1/on-call/schedules/SCHEDULE/rotations');
$payload = <<<'JSON'
{
"user_id": "00000000-0000-4000-8000-000000000000",
"position": 0
}
JSON;
curl_setopt_array($curl, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer '.getenv('UPTIZM_API_KEY'),
'Accept: application/json',
'Content-Type: application/json',
'Idempotency-Key: '.uniqid('', true),
],
CURLOPT_POSTFIELDS => $payload,
]);
$response = curl_exec($curl);
import os
import uuid
import requests
response = requests.post(
"https://api.uptizm.com/v1/on-call/schedules/SCHEDULE/rotations",
headers={
"Authorization": "Bearer " + os.environ["UPTIZM_API_KEY"],
"Accept": "application/json",
"Content-Type": "application/json",
"Idempotency-Key": str(uuid.uuid4()),
},
data=r'''{
"user_id": "00000000-0000-4000-8000-000000000000",
"position": 0
}''',
)
print(response.json())
Try it
ms
Reorder the rotation
position for the schedule's rotation slots.Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| schedule | path | string | Yes | The schedule ID |
Request body application/json
orderarray of object requiredidstring requiredpositioninteger, min 0 required
Response 204
No body.
Errors
- 401 Unauthenticated
- 403 The key lacks the ability this endpoint requires (required_ability names it), or the action is not allowed for the team.
- 404 Not found
- 422 Validation error
- 429 Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for Retry-After seconds.
Code samples
curl -X PATCH "https://api.uptizm.com/v1/on-call/schedules/SCHEDULE/rotations/reorder" \
-H "Authorization: Bearer $UPTIZM_API_KEY" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"order": [
{
"id": "string",
"position": 0
}
]
}'
const payload = {
"order": [
{
"id": "string",
"position": 0
}
]
};
const response = await fetch('https://api.uptizm.com/v1/on-call/schedules/SCHEDULE/rotations/reorder', {
method: 'PATCH',
headers: {
'Authorization': `Bearer ${process.env.UPTIZM_API_KEY}`,
'Accept': 'application/json',
'Content-Type': 'application/json',
},
body: JSON.stringify(payload),
});
console.log(response.status);
<?php
$curl = curl_init('https://api.uptizm.com/v1/on-call/schedules/SCHEDULE/rotations/reorder');
$payload = <<<'JSON'
{
"order": [
{
"id": "string",
"position": 0
}
]
}
JSON;
curl_setopt_array($curl, [
CURLOPT_CUSTOMREQUEST => 'PATCH',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer '.getenv('UPTIZM_API_KEY'),
'Accept: application/json',
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => $payload,
]);
$response = curl_exec($curl);
import os
import requests
response = requests.patch(
"https://api.uptizm.com/v1/on-call/schedules/SCHEDULE/rotations/reorder",
headers={
"Authorization": "Bearer " + os.environ["UPTIZM_API_KEY"],
"Accept": "application/json",
"Content-Type": "application/json",
},
data=r'''{
"order": [
{
"id": "string",
"position": 0
}
]
}''',
)
print(response.status_code)
Try it
ms
Remove a rotation slot
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| schedule | path | string | Yes | The schedule ID |
| rotation | path | string | Yes | The rotation ID |
Response 204
No body.
Errors
- 401 Unauthenticated
- 403 The key lacks the ability this endpoint requires (required_ability names it), or the action is not allowed for the team.
- 404 Not found
- 429 Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for Retry-After seconds.
Code samples
curl -X DELETE "https://api.uptizm.com/v1/on-call/schedules/SCHEDULE/rotations/ROTATION" \
-H "Authorization: Bearer $UPTIZM_API_KEY" \
-H "Accept: application/json"
const response = await fetch('https://api.uptizm.com/v1/on-call/schedules/SCHEDULE/rotations/ROTATION', {
method: 'DELETE',
headers: {
'Authorization': `Bearer ${process.env.UPTIZM_API_KEY}`,
'Accept': 'application/json',
},
});
console.log(response.status);
<?php
$curl = curl_init('https://api.uptizm.com/v1/on-call/schedules/SCHEDULE/rotations/ROTATION');
curl_setopt_array($curl, [
CURLOPT_CUSTOMREQUEST => 'DELETE',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer '.getenv('UPTIZM_API_KEY'),
'Accept: application/json',
],
]);
$response = curl_exec($curl);
import os
import requests
response = requests.delete(
"https://api.uptizm.com/v1/on-call/schedules/SCHEDULE/rotations/ROTATION",
headers={
"Authorization": "Bearer " + os.environ["UPTIZM_API_KEY"],
"Accept": "application/json",
},
)
print(response.status_code)
Try it
ms
Add an override
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| schedule | path | string | Yes | The schedule ID |
| Idempotency-Key | header | string | No | Any unique string per logical request. |
Request body application/json
user_idstring, uuid requiredstarts_atstring, date-time requiredends_atstring, date-time required
Response 201 application/json
dataOnCallScheduleResource and object requiredidstring requiredteam_idstring requirednamestring requiredtimezonestring requiredrotationsarray of string requiredoverridesarray of string requiredcreated_atstring or null requiredupdated_atstring or null required
Errors
- 401 Unauthenticated
- 403 The key lacks the ability this endpoint requires (required_ability names it), or the action is not allowed for the team.
- 404 Not found
- 422 Validation error
- 429 Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for Retry-After seconds.
Code samples
curl -X POST "https://api.uptizm.com/v1/on-call/schedules/SCHEDULE/overrides" \
-H "Authorization: Bearer $UPTIZM_API_KEY" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{
"user_id": "00000000-0000-4000-8000-000000000000",
"starts_at": "2026-01-01T00:00:00Z",
"ends_at": "2026-01-01T00:00:00Z"
}'
const payload = {
"user_id": "00000000-0000-4000-8000-000000000000",
"starts_at": "2026-01-01T00:00:00Z",
"ends_at": "2026-01-01T00:00:00Z"
};
const response = await fetch('https://api.uptizm.com/v1/on-call/schedules/SCHEDULE/overrides', {
method: 'POST',
headers: {
'Authorization': `Bearer ${process.env.UPTIZM_API_KEY}`,
'Accept': 'application/json',
'Content-Type': 'application/json',
'Idempotency-Key': crypto.randomUUID(),
},
body: JSON.stringify(payload),
});
const data = await response.json();
<?php
$curl = curl_init('https://api.uptizm.com/v1/on-call/schedules/SCHEDULE/overrides');
$payload = <<<'JSON'
{
"user_id": "00000000-0000-4000-8000-000000000000",
"starts_at": "2026-01-01T00:00:00Z",
"ends_at": "2026-01-01T00:00:00Z"
}
JSON;
curl_setopt_array($curl, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer '.getenv('UPTIZM_API_KEY'),
'Accept: application/json',
'Content-Type: application/json',
'Idempotency-Key: '.uniqid('', true),
],
CURLOPT_POSTFIELDS => $payload,
]);
$response = curl_exec($curl);
import os
import uuid
import requests
response = requests.post(
"https://api.uptizm.com/v1/on-call/schedules/SCHEDULE/overrides",
headers={
"Authorization": "Bearer " + os.environ["UPTIZM_API_KEY"],
"Accept": "application/json",
"Content-Type": "application/json",
"Idempotency-Key": str(uuid.uuid4()),
},
data=r'''{
"user_id": "00000000-0000-4000-8000-000000000000",
"starts_at": "2026-01-01T00:00:00Z",
"ends_at": "2026-01-01T00:00:00Z"
}''',
)
print(response.json())
Try it
ms
Remove an override
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| schedule | path | string | Yes | The schedule ID |
| override | path | string | Yes | The override ID |
Response 204
No body.
Errors
- 401 Unauthenticated
- 403 The key lacks the ability this endpoint requires (required_ability names it), or the action is not allowed for the team.
- 404 Not found
- 429 Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for Retry-After seconds.
Code samples
curl -X DELETE "https://api.uptizm.com/v1/on-call/schedules/SCHEDULE/overrides/OVERRIDE" \
-H "Authorization: Bearer $UPTIZM_API_KEY" \
-H "Accept: application/json"
const response = await fetch('https://api.uptizm.com/v1/on-call/schedules/SCHEDULE/overrides/OVERRIDE', {
method: 'DELETE',
headers: {
'Authorization': `Bearer ${process.env.UPTIZM_API_KEY}`,
'Accept': 'application/json',
},
});
console.log(response.status);
<?php
$curl = curl_init('https://api.uptizm.com/v1/on-call/schedules/SCHEDULE/overrides/OVERRIDE');
curl_setopt_array($curl, [
CURLOPT_CUSTOMREQUEST => 'DELETE',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer '.getenv('UPTIZM_API_KEY'),
'Accept: application/json',
],
]);
$response = curl_exec($curl);
import os
import requests
response = requests.delete(
"https://api.uptizm.com/v1/on-call/schedules/SCHEDULE/overrides/OVERRIDE",
headers={
"Authorization": "Bearer " + os.environ["UPTIZM_API_KEY"],
"Accept": "application/json",
},
)
print(response.status_code)
Try it
ms