Preview a cover request
using System.Net.Http.Headers;var client = new HttpClient();var request = new HttpRequestMessage{ Method = HttpMethod.Post, RequestUri = new Uri("https://api.roundrobinbot.eu/v1/rotations/example/cover-requests/preview"), Headers = { { "Authorization", "Bearer <token>" }, }, Content = new StringContent("{ \"operationId\": \"example\", \"cellId\": \"example\", \"from\": \"2026-04-15T12:00:00Z\", \"to\": \"2026-04-15T12:00:00Z\", \"recipientUserIds\": [ \"example\" ], \"reason\": \"example\" }") { Headers = { ContentType = new MediaTypeHeaderValue("application/json-patch+json") } }};using (var response = await client.SendAsync(request)){ response.EnsureSuccessStatusCode(); var body = await response.Content.ReadAsStringAsync(); Console.WriteLine(body);}package main
import ( "fmt" "strings" "net/http" "io")
func main() {
url := "https://api.roundrobinbot.eu/v1/rotations/example/cover-requests/preview"
payload := strings.NewReader("{ \"operationId\": \"example\", \"cellId\": \"example\", \"from\": \"2026-04-15T12:00:00Z\", \"to\": \"2026-04-15T12:00:00Z\", \"recipientUserIds\": [ \"example\" ], \"reason\": \"example\" }")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>") req.Header.Add("Content-Type", "application/json-patch+json")
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();
MediaType mediaType = MediaType.parse("application/json-patch+json");RequestBody body = RequestBody.create(mediaType, "{ \"operationId\": \"example\", \"cellId\": \"example\", \"from\": \"2026-04-15T12:00:00Z\", \"to\": \"2026-04-15T12:00:00Z\", \"recipientUserIds\": [ \"example\" ], \"reason\": \"example\" }");Request request = new Request.Builder() .url("https://api.roundrobinbot.eu/v1/rotations/example/cover-requests/preview") .post(body) .addHeader("Authorization", "Bearer <token>") .addHeader("Content-Type", "application/json-patch+json") .build();
Response response = client.newCall(request).execute();import axios from 'axios';
const options = { method: 'POST', url: 'https://api.roundrobinbot.eu/v1/rotations/example/cover-requests/preview', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json-patch+json'}, data: '{ "operationId": "example", "cellId": "example", "from": "2026-04-15T12:00:00Z", "to": "2026-04-15T12:00:00Z", "recipientUserIds": [ "example" ], "reason": "example" }'};
try { const { data } = await axios.request(options); console.log(data);} catch (error) { console.error(error);}const url = 'https://api.roundrobinbot.eu/v1/rotations/example/cover-requests/preview';const options = { method: 'POST', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json-patch+json'}, body: '{ "operationId": "example", "cellId": "example", "from": "2026-04-15T12:00:00Z", "to": "2026-04-15T12:00:00Z", "recipientUserIds": [ "example" ], "reason": "example" }'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://api.roundrobinbot.eu/v1/rotations/example/cover-requests/preview \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json-patch+json' \ --data '{ "operationId": "example", "cellId": "example", "from": "2026-04-15T12:00:00Z", "to": "2026-04-15T12:00:00Z", "recipientUserIds": [ "example" ], "reason": "example" }'Requires a Slack member access token. API keys are refused. Returns the proposed intervals and rotation ETag without changing duty or creating a request.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”Request Bodyrequired
Section titled “Request Bodyrequired”UTC interval and selected audience for a new cover request.
object
Caller-generated mutation identity, at most 128 characters. Reuse only for an identical retry.
Stable cell identifier from the rotation or personal duty read.
Inclusive requested start, with UTC offset zero.
Exclusive requested end, with UTC offset zero.
Between 1 and 100 distinct eligible Slack user identifiers, excluding the requester.
Optional explanation, at most 2000 characters. Use an empty string when omitted.
Examplegenerated
{ "operationId": "example", "cellId": "example", "from": "2026-04-15T12:00:00Z", "to": "2026-04-15T12:00:00Z", "recipientUserIds": [ "example" ], "reason": "example"}UTC interval and selected audience for a new cover request.
object
Caller-generated mutation identity, at most 128 characters. Reuse only for an identical retry.
Stable cell identifier from the rotation or personal duty read.
Inclusive requested start, with UTC offset zero.
Exclusive requested end, with UTC offset zero.
Between 1 and 100 distinct eligible Slack user identifiers, excluding the requester.
Optional explanation, at most 2000 characters. Use an empty string when omitted.
Examplegenerated
{ "operationId": "example", "cellId": "example", "from": "2026-04-15T12:00:00Z", "to": "2026-04-15T12:00:00Z", "recipientUserIds": [ "example" ], "reason": "example"}UTC interval and selected audience for a new cover request.
object
Caller-generated mutation identity, at most 128 characters. Reuse only for an identical retry.
Stable cell identifier from the rotation or personal duty read.
Inclusive requested start, with UTC offset zero.
Exclusive requested end, with UTC offset zero.
Between 1 and 100 distinct eligible Slack user identifiers, excluding the requester.
Optional explanation, at most 2000 characters. Use an empty string when omitted.
Examplegenerated
{ "operationId": "example", "cellId": "example", "from": "2026-04-15T12:00:00Z", "to": "2026-04-15T12:00:00Z", "recipientUserIds": [ "example" ], "reason": "example"}UTC interval and selected audience for a new cover request.
object
Caller-generated mutation identity, at most 128 characters. Reuse only for an identical retry.
Stable cell identifier from the rotation or personal duty read.
Inclusive requested start, with UTC offset zero.
Exclusive requested end, with UTC offset zero.
Between 1 and 100 distinct eligible Slack user identifiers, excluding the requester.
Optional explanation, at most 2000 characters. Use an empty string when omitted.
Examplegenerated
{ "operationId": "example", "cellId": "example", "from": "2026-04-15T12:00:00Z", "to": "2026-04-15T12:00:00Z", "recipientUserIds": [ "example" ], "reason": "example"}Responses
Section titled “Responses”OK
Conflict evaluation for the proposed terms. A preview does not change duty.
object
The later of the requested start and preview time. The actual write can begin later.
The requested exclusive UTC end.
Observed conflicts and source uncertainties.
A conflict or an uncertainty affecting the proposed assignment.
object
The acknowledgment identifier for this conflict and the previewed terms.
absence, sameCellArrangement or unknownAvailability.
The affected person’s Slack user identifier.
The inclusive UTC start of the conflict intersection with the requested interval.
The exclusive UTC end of the conflict intersection with the requested interval.
arrangement, manualAvailability, googleCalendar or slackStatus.
Whether explicit acknowledgment permits proceeding with this conflict. False means the conflict blocks the write.
Whether every observed conflict permits acknowledgment and has been acknowledged. The write rechecks current state.
The verified full or remaining turn for these terms, or null when the interval does not identify one. Copy this value into the write to record the selection.
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.
Examplegenerated
{ "effectiveFrom": "2026-04-15T12:00:00Z", "to": "2026-04-15T12:00:00Z", "conflicts": [ { "id": "example", "type": "example", "userId": "example", "from": "2026-04-15T12:00:00Z", "to": "2026-04-15T12:00:00Z", "source": "example", "canAcknowledge": true } ], "canCommit": true, "turnSelection": { "kind": "example", "from": "2026-04-15T12:00:00Z", "to": "2026-04-15T12:00:00Z" }}