List duty arrangements
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/duty-arrangements?from=2026-04-15T12%3A00%3A00Z&to=2026-04-15T12%3A00%3A00Z"), 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/duty-arrangements?from=2026-04-15T12%3A00%3A00Z&to=2026-04-15T12%3A00%3A00Z"
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/duty-arrangements?from=2026-04-15T12%3A00%3A00Z&to=2026-04-15T12%3A00%3A00Z") .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/duty-arrangements', params: {from: '2026-04-15T12:00:00Z', to: '2026-04-15T12:00:00Z'}, 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/duty-arrangements?from=2026-04-15T12%3A00%3A00Z&to=2026-04-15T12%3A00%3A00Z';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/duty-arrangements?from=2026-04-15T12%3A00%3A00Z&to=2026-04-15T12%3A00%3A00Z' \ --header 'Authorization: Bearer <token>'Requires read:oncall. Returns active arrangements overlapping a UTC range of at most 90 days. Cancelled arrangements are excluded. The response ETag identifies the rotation version for a later write. A range with missing bounds, a nonzero UTC offset or an end at or before its start returns 422 with invalidArrangementRange.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”The rotation identifier.
Query Parameters
Section titled “Query Parameters”The inclusive range start with UTC offset zero.
The exclusive range end with UTC offset zero, at most 90 days after from.
Responses
Section titled “Responses”OK
Active arrangements overlapping the requested range, with current cell capabilities.
object
Matching arrangements ordered by start and identifier. Cancelled arrangements are excluded.
An interval assignment. Its recorded terms remain distinct from actual served history.
object
The arrangement identifier.
The rotation identifier.
The rotation cell identifier.
The assigned person’s Slack user identifier.
The inclusive UTC start.
The exclusive UTC end.
The arrangement revision used when changing or ending it.
active or cancelled. An active record can describe an interval that has already ended.
directAssignment, acceptedCover or swapLeg. Direct-assignment writes change or end only directAssignment.
Original duty holders recorded before the first assignment, with completeness for this interval. Later edits retain that original record.
object
Distinct Slack user identifiers in the recorded portion of the arrangement interval.
Whether original duty is known throughout the interval. False includes assignments without an original record.
Original duty segments on detail reads. Null on list reads or when no original record is available.
object
The UTC time when the original duty was evaluated.
The inclusive UTC start of the returned interval.
The exclusive UTC end of the returned interval.
Whether every returned segment is resolved. An extension beyond the original recorded interval is unresolved.
Original holders by interval, including periods with no assignee and unresolved periods.
Effective duty during part of an assignment interval.
object
The inclusive UTC start.
The exclusive UTC end.
Slack user identifiers of the effective holders. An empty list means no assignee only when resolved is true.
Whether the holders or absence of duty are known for this interval.
The recorded full or remaining turn, or null when no verified selection was saved. Use the arrangement’s From and To for the affected interval.
object
fullTurn or remainingTurn.
The inclusive UTC start of the original turn, including any part already served.
The exclusive UTC end of the original turn.
Direct-assignment capability for each rotation cell.
Current direct-assignment capability for a rotation cell.
object
The rotation cell identifier.
Whether the caller can submit a direct assignment, subject to term and conflict validation.
A refusal code when assignment is unavailable; otherwise null.
Slack user identifiers of current lane members, excluding known deactivated users and bots. An unknown profile does not remove lane membership.
The requested inclusive UTC start.
The requested exclusive UTC end.
Whether the full matching arrangement list was returned.
Examplegenerated
{ "items": [ { "id": "example", "rotationId": "example", "cellId": "example", "userId": "example", "from": "2026-04-15T12:00:00Z", "to": "2026-04-15T12:00:00Z", "revision": 1, "state": "example", "kind": "example", "origin": { "userIds": [ "example" ], "complete": true }, "originalSnapshot": { "asOfUtc": "2026-04-15T12:00:00Z", "from": "2026-04-15T12:00:00Z", "to": "2026-04-15T12:00:00Z", "complete": true, "segments": [ { "from": "2026-04-15T12:00:00Z", "to": "2026-04-15T12:00:00Z", "userIds": [ "example" ], "resolved": true } ] }, "turnSelection": { "kind": "example", "from": "2026-04-15T12:00:00Z", "to": "2026-04-15T12:00:00Z" } } ], "capabilities": [ { "cellId": "example", "canAssign": true, "reason": "example", "eligibleUserIds": [ "example" ] } ], "from": "2026-04-15T12:00:00Z", "to": "2026-04-15T12:00:00Z", "complete": true}