curl --request GET \
--url https://www.sentivel.com/api/v1/schedules/{id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://www.sentivel.com/api/v1/schedules/{id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://www.sentivel.com/api/v1/schedules/{id}', 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://www.sentivel.com/api/v1/schedules/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://www.sentivel.com/api/v1/schedules/{id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://www.sentivel.com/api/v1/schedules/{id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.sentivel.com/api/v1/schedules/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"timeZone": "<string>",
"onCall": {
"userId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>"
},
"nextHandoffAt": "2023-11-07T05:31:56Z",
"participants": [
{
"userId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>"
}
],
"upcomingShifts": [
{
"userId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"startsAt": "2023-11-07T05:31:56Z",
"endsAt": "2023-11-07T05:31:56Z",
"source": "override"
}
]
}
}{
"error": {
"code": "unauthorized",
"message": "<string>",
"details": {}
}
}{
"error": {
"code": "unauthorized",
"message": "<string>",
"details": {}
}
}Get an on-call schedule
One schedule’s config (timezone, participants) plus who is on call right now, the next handoff, and the next few upcoming shifts (rotation handoffs, overrides, and any uncovered gaps).
curl --request GET \
--url https://www.sentivel.com/api/v1/schedules/{id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://www.sentivel.com/api/v1/schedules/{id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://www.sentivel.com/api/v1/schedules/{id}', 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://www.sentivel.com/api/v1/schedules/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://www.sentivel.com/api/v1/schedules/{id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://www.sentivel.com/api/v1/schedules/{id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.sentivel.com/api/v1/schedules/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"timeZone": "<string>",
"onCall": {
"userId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>"
},
"nextHandoffAt": "2023-11-07T05:31:56Z",
"participants": [
{
"userId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>"
}
],
"upcomingShifts": [
{
"userId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"startsAt": "2023-11-07T05:31:56Z",
"endsAt": "2023-11-07T05:31:56Z",
"source": "override"
}
]
}
}{
"error": {
"code": "unauthorized",
"message": "<string>",
"details": {}
}
}{
"error": {
"code": "unauthorized",
"message": "<string>",
"details": {}
}
}Authorizations
Sent as Authorization: Bearer <token>. Three kinds are accepted: an ORG token (sv_…), bound to one workspace with a fixed role; a PERSONAL token (svu_…), which acts as you with your own live role in whichever workspace it is pointed at; and an OAUTH access token (mcp_at_…) from a connected app, limited to the workspaces you granted it. A personal or OAuth token names its workspace with the X-Sentivel-Workspace header (a slug or an id). Without it an OAuth token falls back to the connection's primary workspace, while a personal token in more than one workspace is rejected 400 invalid_request with the choices in error.details.workspaces. Membership is re-read every request, so leaving a workspace or revoking the grant takes effect at once.
Path Parameters
Response
The schedule.
Show child attributes
Show child attributes