Preview availability impact
POST
/v1/teams/{teamId}/availability/impact-preview
using System.Net.Http.Headers;var client = new HttpClient();var request = new HttpRequestMessage{ Method = HttpMethod.Post, RequestUri = new Uri("https://api.roundrobinbot.eu/v1/teams/example/availability/impact-preview"), Headers = { { "Authorization", "Bearer <token>" }, }, Content = new StringContent("{ \"proposal\": { \"startTime\": \"2026-04-15T12:00:00Z\", \"endTime\": \"2026-04-15T12:00:00Z\", \"timeZone\": \"example\", \"reason\": \"example\", \"rotationScope\": 1, \"rotationIds\": [ \"example\" ], \"recurrenceRule\": { \"type\": 1, \"interval\": 1, \"daysOfWeek\": [ 1 ], \"dayOfMonth\": 1, \"weekOfMonth\": 1, \"nthWeekdayDayOfWeek\": \"example\", \"endType\": 1, \"maxOccurrences\": 1, \"endDateUtc\": \"2026-04-15T12:00:00Z\" }, \"isActive\": true }, \"previewFrom\": \"2026-04-15T12:00:00Z\", \"previewTo\": \"2026-04-15T12:00:00Z\", \"afterRotationId\": \"example\", \"rotationLimit\": 1, \"replacedSettingId\": \"example\", \"expectedPreviewRevision\": \"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/teams/example/availability/impact-preview"
payload := strings.NewReader("{ \"proposal\": { \"startTime\": \"2026-04-15T12:00:00Z\", \"endTime\": \"2026-04-15T12:00:00Z\", \"timeZone\": \"example\", \"reason\": \"example\", \"rotationScope\": 1, \"rotationIds\": [ \"example\" ], \"recurrenceRule\": { \"type\": 1, \"interval\": 1, \"daysOfWeek\": [ 1 ], \"dayOfMonth\": 1, \"weekOfMonth\": 1, \"nthWeekdayDayOfWeek\": \"example\", \"endType\": 1, \"maxOccurrences\": 1, \"endDateUtc\": \"2026-04-15T12:00:00Z\" }, \"isActive\": true }, \"previewFrom\": \"2026-04-15T12:00:00Z\", \"previewTo\": \"2026-04-15T12:00:00Z\", \"afterRotationId\": \"example\", \"rotationLimit\": 1, \"replacedSettingId\": \"example\", \"expectedPreviewRevision\": \"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, "{ \"proposal\": { \"startTime\": \"2026-04-15T12:00:00Z\", \"endTime\": \"2026-04-15T12:00:00Z\", \"timeZone\": \"example\", \"reason\": \"example\", \"rotationScope\": 1, \"rotationIds\": [ \"example\" ], \"recurrenceRule\": { \"type\": 1, \"interval\": 1, \"daysOfWeek\": [ 1 ], \"dayOfMonth\": 1, \"weekOfMonth\": 1, \"nthWeekdayDayOfWeek\": \"example\", \"endType\": 1, \"maxOccurrences\": 1, \"endDateUtc\": \"2026-04-15T12:00:00Z\" }, \"isActive\": true }, \"previewFrom\": \"2026-04-15T12:00:00Z\", \"previewTo\": \"2026-04-15T12:00:00Z\", \"afterRotationId\": \"example\", \"rotationLimit\": 1, \"replacedSettingId\": \"example\", \"expectedPreviewRevision\": \"example\" }");Request request = new Request.Builder() .url("https://api.roundrobinbot.eu/v1/teams/example/availability/impact-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/teams/example/availability/impact-preview', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json-patch+json'}, data: '{ "proposal": { "startTime": "2026-04-15T12:00:00Z", "endTime": "2026-04-15T12:00:00Z", "timeZone": "example", "reason": "example", "rotationScope": 1, "rotationIds": [ "example" ], "recurrenceRule": { "type": 1, "interval": 1, "daysOfWeek": [ 1 ], "dayOfMonth": 1, "weekOfMonth": 1, "nthWeekdayDayOfWeek": "example", "endType": 1, "maxOccurrences": 1, "endDateUtc": "2026-04-15T12:00:00Z" }, "isActive": true }, "previewFrom": "2026-04-15T12:00:00Z", "previewTo": "2026-04-15T12:00:00Z", "afterRotationId": "example", "rotationLimit": 1, "replacedSettingId": "example", "expectedPreviewRevision": "example" }'};
try { const { data } = await axios.request(options); console.log(data);} catch (error) { console.error(error);}const url = 'https://api.roundrobinbot.eu/v1/teams/example/availability/impact-preview';const options = { method: 'POST', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json-patch+json'}, body: '{ "proposal": { "startTime": "2026-04-15T12:00:00Z", "endTime": "2026-04-15T12:00:00Z", "timeZone": "example", "reason": "example", "rotationScope": 1, "rotationIds": [ "example" ], "recurrenceRule": { "type": 1, "interval": 1, "daysOfWeek": [ 1 ], "dayOfMonth": 1, "weekOfMonth": 1, "nthWeekdayDayOfWeek": "example", "endType": 1, "maxOccurrences": 1, "endDateUtc": "2026-04-15T12:00:00Z" }, "isActive": true }, "previewFrom": "2026-04-15T12:00:00Z", "previewTo": "2026-04-15T12:00:00Z", "afterRotationId": "example", "rotationLimit": 1, "replacedSettingId": "example", "expectedPreviewRevision": "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/teams/example/availability/impact-preview \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json-patch+json' \ --data '{ "proposal": { "startTime": "2026-04-15T12:00:00Z", "endTime": "2026-04-15T12:00:00Z", "timeZone": "example", "reason": "example", "rotationScope": 1, "rotationIds": [ "example" ], "recurrenceRule": { "type": 1, "interval": 1, "daysOfWeek": [ 1 ], "dayOfMonth": 1, "weekOfMonth": 1, "nthWeekdayDayOfWeek": "example", "endType": 1, "maxOccurrences": 1, "endDateUtc": "2026-04-15T12:00:00Z" }, "isActive": true }, "previewFrom": "2026-04-15T12:00:00Z", "previewTo": "2026-04-15T12:00:00Z", "afterRotationId": "example", "rotationLimit": 1, "replacedSettingId": "example", "expectedPreviewRevision": "example" }'Requires a Slack member access token for this workspace. API keys cannot perform this preview. Compares current duty with the proposed availability without saving it or changing duty. Supply UTC preview dates spanning at most 31 days, ending after the current time and within six months. Set rotationLimit from 1 through 5. Continue with nextAfterRotationId as afterRotationId. The response complete describes paging. Check each rotation’s complete, source states and limitations separately. Pass expectedPreviewRevision to compare with a reviewed preview; false matchesExpectedRevision means it changed. Invalid ranges return 422 with invalidImpactRange; invalid proposals return 422 with invalidAvailabilityTerms.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”teamId
required
string
Request Bodyrequired
Section titled “Request Bodyrequired”object
proposal
object
startTime
string format: date-time
endTime
string format: date-time
timeZone
string
reason
null | string
rotationScope
integer | string format: int32
rotationIds
Array<string>
recurrenceRule
One of:
null
object
type
integer | string format: int32
interval
integer | string format: int32
daysOfWeek
Array<integer>
dayOfMonth
null | integer | string format: int32
weekOfMonth
null | integer | string format: int32
endType
integer | string format: int32
maxOccurrences
null | integer | string format: int32
endDateUtc
null | string format: date-time
isActive
boolean
previewFrom
string format: date-time
previewTo
string format: date-time
afterRotationId
null | string
rotationLimit
integer | string format: int32
replacedSettingId
null | string
expectedPreviewRevision
null | string
Examplegenerated
{ "proposal": { "startTime": "2026-04-15T12:00:00Z", "endTime": "2026-04-15T12:00:00Z", "timeZone": "example", "reason": "example", "rotationScope": 1, "rotationIds": [ "example" ], "recurrenceRule": { "type": 1, "interval": 1, "daysOfWeek": [ 1 ], "dayOfMonth": 1, "weekOfMonth": 1, "nthWeekdayDayOfWeek": "example", "endType": 1, "maxOccurrences": 1, "endDateUtc": "2026-04-15T12:00:00Z" }, "isActive": true }, "previewFrom": "2026-04-15T12:00:00Z", "previewTo": "2026-04-15T12:00:00Z", "afterRotationId": "example", "rotationLimit": 1, "replacedSettingId": "example", "expectedPreviewRevision": "example"}object
proposal
object
startTime
string format: date-time
endTime
string format: date-time
timeZone
string
reason
null | string
rotationScope
integer | string format: int32
rotationIds
Array<string>
recurrenceRule
One of:
null
object
type
integer | string format: int32
interval
integer | string format: int32
daysOfWeek
Array<integer>
dayOfMonth
null | integer | string format: int32
weekOfMonth
null | integer | string format: int32
endType
integer | string format: int32
maxOccurrences
null | integer | string format: int32
endDateUtc
null | string format: date-time
isActive
boolean
previewFrom
string format: date-time
previewTo
string format: date-time
afterRotationId
null | string
rotationLimit
integer | string format: int32
replacedSettingId
null | string
expectedPreviewRevision
null | string
Examplegenerated
{ "proposal": { "startTime": "2026-04-15T12:00:00Z", "endTime": "2026-04-15T12:00:00Z", "timeZone": "example", "reason": "example", "rotationScope": 1, "rotationIds": [ "example" ], "recurrenceRule": { "type": 1, "interval": 1, "daysOfWeek": [ 1 ], "dayOfMonth": 1, "weekOfMonth": 1, "nthWeekdayDayOfWeek": "example", "endType": 1, "maxOccurrences": 1, "endDateUtc": "2026-04-15T12:00:00Z" }, "isActive": true }, "previewFrom": "2026-04-15T12:00:00Z", "previewTo": "2026-04-15T12:00:00Z", "afterRotationId": "example", "rotationLimit": 1, "replacedSettingId": "example", "expectedPreviewRevision": "example"}object
proposal
object
startTime
string format: date-time
endTime
string format: date-time
timeZone
string
reason
null | string
rotationScope
integer | string format: int32
rotationIds
Array<string>
recurrenceRule
One of:
null
object
type
integer | string format: int32
interval
integer | string format: int32
daysOfWeek
Array<integer>
dayOfMonth
null | integer | string format: int32
weekOfMonth
null | integer | string format: int32
endType
integer | string format: int32
maxOccurrences
null | integer | string format: int32
endDateUtc
null | string format: date-time
isActive
boolean
previewFrom
string format: date-time
previewTo
string format: date-time
afterRotationId
null | string
rotationLimit
integer | string format: int32
replacedSettingId
null | string
expectedPreviewRevision
null | string
Examplegenerated
{ "proposal": { "startTime": "2026-04-15T12:00:00Z", "endTime": "2026-04-15T12:00:00Z", "timeZone": "example", "reason": "example", "rotationScope": 1, "rotationIds": [ "example" ], "recurrenceRule": { "type": 1, "interval": 1, "daysOfWeek": [ 1 ], "dayOfMonth": 1, "weekOfMonth": 1, "nthWeekdayDayOfWeek": "example", "endType": 1, "maxOccurrences": 1, "endDateUtc": "2026-04-15T12:00:00Z" }, "isActive": true }, "previewFrom": "2026-04-15T12:00:00Z", "previewTo": "2026-04-15T12:00:00Z", "afterRotationId": "example", "rotationLimit": 1, "replacedSettingId": "example", "expectedPreviewRevision": "example"}object
proposal
object
startTime
string format: date-time
endTime
string format: date-time
timeZone
string
reason
null | string
rotationScope
integer | string format: int32
rotationIds
Array<string>
recurrenceRule
One of:
null
object
type
integer | string format: int32
interval
integer | string format: int32
daysOfWeek
Array<integer>
dayOfMonth
null | integer | string format: int32
weekOfMonth
null | integer | string format: int32
endType
integer | string format: int32
maxOccurrences
null | integer | string format: int32
endDateUtc
null | string format: date-time
isActive
boolean
previewFrom
string format: date-time
previewTo
string format: date-time
afterRotationId
null | string
rotationLimit
integer | string format: int32
replacedSettingId
null | string
expectedPreviewRevision
null | string
Examplegenerated
{ "proposal": { "startTime": "2026-04-15T12:00:00Z", "endTime": "2026-04-15T12:00:00Z", "timeZone": "example", "reason": "example", "rotationScope": 1, "rotationIds": [ "example" ], "recurrenceRule": { "type": 1, "interval": 1, "daysOfWeek": [ 1 ], "dayOfMonth": 1, "weekOfMonth": 1, "nthWeekdayDayOfWeek": "example", "endType": 1, "maxOccurrences": 1, "endDateUtc": "2026-04-15T12:00:00Z" }, "isActive": true }, "previewFrom": "2026-04-15T12:00:00Z", "previewTo": "2026-04-15T12:00:00Z", "afterRotationId": "example", "rotationLimit": 1, "replacedSettingId": "example", "expectedPreviewRevision": "example"}Responses
Section titled “Responses”OK
Media typeapplication/json
object
asOfUtc
required
string format: date-time
effectiveFrom
required
string format: date-time
to
required
string format: date-time
previewRevision
required
string
matchesExpectedRevision
required
null | boolean
complete
required
boolean
nextAfterRotationId
required
null | string
rotations
required
Array<object>
object
rotationId
required
string
rotationName
required
string
rotationVersion
required
integer | string format: int64
sourceStatuses
required
Array<object>
object
source
required
string
state
required
string
complete
required
boolean
limitations
required
Array<string>
intervals
required
Array<object>
object
cellId
required
string
from
required
string format: date-time
to
required
string format: date-time
beforeUserIds
required
Array<string>
afterUserIds
required
Array<string>
kind
required
string
arrangementIds
required
Array<string>
arrangementKinds
required
Array<string>
laneName
null | string
windowName
null | string
Examplegenerated
{ "asOfUtc": "2026-04-15T12:00:00Z", "effectiveFrom": "2026-04-15T12:00:00Z", "to": "2026-04-15T12:00:00Z", "previewRevision": "example", "matchesExpectedRevision": true, "complete": true, "nextAfterRotationId": "example", "rotations": [ { "rotationId": "example", "rotationName": "example", "rotationVersion": 1, "sourceStatuses": [ { "source": "example", "state": "example" } ], "complete": true, "limitations": [ "example" ], "intervals": [ { "cellId": "example", "from": "2026-04-15T12:00:00Z", "to": "2026-04-15T12:00:00Z", "beforeUserIds": [ "example" ], "afterUserIds": [ "example" ], "kind": "example", "arrangementIds": [ "example" ], "arrangementKinds": [ "example" ], "laneName": "example", "windowName": "example" } ] } ]}