List who is away
using System.Net.Http.Headers;var client = new HttpClient();var request = new HttpRequestMessage{ Method = HttpMethod.Get, RequestUri = new Uri("https://api.roundrobinbot.eu/v1/rotations/example/availability"), Headers = { { "Authorization", "Bearer <token>" }, },};using (var response = await client.SendAsync(request)){ response.EnsureSuccessStatusCode(); var body = await response.Content.ReadAsStringAsync(); Console.WriteLine(body);}package main
import ( "fmt" "net/http" "io")
func main() {
url := "https://api.roundrobinbot.eu/v1/rotations/example/availability"
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(res) fmt.Println(string(body))
}OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder() .url("https://api.roundrobinbot.eu/v1/rotations/example/availability") .get() .addHeader("Authorization", "Bearer <token>") .build();
Response response = client.newCall(request).execute();import axios from 'axios';
const options = { method: 'GET', url: 'https://api.roundrobinbot.eu/v1/rotations/example/availability', headers: {Authorization: 'Bearer <token>'}};
try { const { data } = await axios.request(options); console.log(data);} catch (error) { console.error(error);}const url = 'https://api.roundrobinbot.eu/v1/rotations/example/availability';const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url https://api.roundrobinbot.eu/v1/rotations/example/availability \ --header 'Authorization: Bearer <token>'Every absence covering a member of this rotation between from and to, which are both required and no more than 90 days apart. Absences that cover every rotation in the workspace are included, because they cover this one. Repeating absences are expanded, so one that falls three times inside the window is three entries carrying the same id. No ETag: this is a collection, and no single version stands behind it.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”Query Parameters
Section titled “Query Parameters”Responses
Section titled “Responses”OK
The envelope every /v1 collection comes back in.
object
A period a member of a rotation cannot take a shift.
object
The absence’s id, which is what the delete takes.
The Slack user id of the person who is away.
When the absence starts, in UTC.
When the absence ends, in UTC.
Whatever was recorded about why, or null. Free text, and never used for anything but display.
What the absence covers: rotation for one rotation, allRotations for every rotation in the workspace.
The rotations it covers when appliesTo is rotation, and empty otherwise.
Whether this absence repeats. A repeating absence can only be set in the dashboard, so anything the public API created answers false.
Where the absence came from. Always internalAvailability: these are the absences Round Robin stores and this API can delete, spelled the same way as the source on skippedForAbsence, so an absence and the skip it caused read as one vocabulary. An out-of-office event mirrored from a connected calendar is not one of these and is not returned here.
Examplegenerated
{ "data": [ { "id": "example", "userId": "example", "from": "2026-04-15T12:00:00Z", "until": "2026-04-15T12:00:00Z", "reason": "example", "appliesTo": "example", "rotationIds": [ "example" ], "recurring": true, "source": "example" } ], "page": 1, "pageSize": 1, "totalItems": 1, "totalPages": 1}Bad Request
object
Examplegenerated
{ "type": "example", "title": "example", "status": 1, "detail": "example", "instance": "example"}Unauthorized
object
Examplegenerated
{ "type": "example", "title": "example", "status": 1, "detail": "example", "instance": "example"}Forbidden
object
Examplegenerated
{ "type": "example", "title": "example", "status": 1, "detail": "example", "instance": "example"}Not Found
object
Examplegenerated
{ "type": "example", "title": "example", "status": 1, "detail": "example", "instance": "example"}