Preview a change to a layer
What POST /api/v1/schedules/{id}/layers/{layerID}/revise would do with
the same body, without storing anything: when the change would take
over, and the next six turns — the layer as it stands until then, the
changed layer after.
Permission (API-key scope): oncall:schedule:write.
Authorization
bearerAuth(oncall:schedule:write)apiKeyHeader(oncall:schedule:write)
Parameters
Path parameters
idstring requiredThe schedule's id.layerIDstring requiredThe layer's id. It must belong to the schedule in the path.
Request body required
A layer as it should be, and when that takes over. name and rotation_type are required. rotation_start is checked but not used; the changed layer starts at the moment the change takes over.
namestringpriorityintegerrotation_typeRotationTyperotation_unitstringWhathandoff_daycounts on acustomrotation;daywhen left out.rotation_startstring (date-time)handoff_dayintegerFor acustomrotation, the days (1–365) or hours (1–168) each turn lasts.handoff_weekdayintegerThe weekday aweeklyrotation hands over on, 0 (Sunday) to 6. Left out, it hands over on the weekdayrotation_startfalls on.handoff_timestringHH:MMon the schedule's clock.restrict_to_weekdaysarray of integerrestrict_start_timestringrestrict_end_timestringuser_idsarray of stringThe members in rota order, each once.effectivestringatstring (date-time)Witheffectiveat, the moment the change takes over; not in the past.restartbooleanBegin the new list at its first member instead of keeping the current holder.
Responses
200
When the change would take over, and the next six turns.
dataobject requiredeffective_atstring (date-time) requiredturnsarray of ScheduleTurn requiredShow ScheduleTurn properties
layer_idstringThe layer giving the turn (previewfor a layer that is not stored yet).user_idstringWho holds the turn; empty in a preview with no members.startstring (date-time)endstring (date-time)
successboolean required
400
The body is invalid as for the change itself (INVALID_BODY, VALIDATION_FAILED).
errorobject requiredcodestring requiredmessagestring requiredrequest_idstringThe request'sX-Request-ID. Quote it to support.detailsarray of object requiredfieldstringmessagestring
401
No API key was sent, or it is unknown, revoked or expired (UNAUTHORIZED).
errorobject requiredcodestring requiredMachine-readable code. Branch on this.messagestring requiredHuman-readable explanation.request_idstringThe request'sX-Request-ID. Quote it to support.
403
The key lacks the scope this endpoint needs (FORBIDDEN).
errorobject requiredcodestring requiredMachine-readable code. Branch on this.messagestring requiredHuman-readable explanation.request_idstringThe request'sX-Request-ID. Quote it to support.
404
No such schedule, or no such layer on it (NOT_FOUND).
errorobject requiredcodestring requiredMachine-readable code. Branch on this.messagestring requiredHuman-readable explanation.request_idstringThe request'sX-Request-ID. Quote it to support.
409
The layer has ended or has not started yet (LAYER_NOT_IN_EFFECT).
errorobject requiredcodestring requiredMachine-readable code. Branch on this.messagestring requiredHuman-readable explanation.request_idstringThe request'sX-Request-ID. Quote it to support.
429
Too many requests (RATE_LIMITED). Wait Retry-After seconds.
Retry-AfterintegerSeconds to wait.
errorobject requiredcodestring requiredMachine-readable code. Branch on this.messagestring requiredHuman-readable explanation.request_idstringThe request'sX-Request-ID. Quote it to support.
500
Something went wrong on EvoHub's side (INTERNAL_ERROR). Retry later.
errorobject requiredcodestring requiredMachine-readable code. Branch on this.messagestring requiredHuman-readable explanation.request_idstringThe request'sX-Request-ID. Quote it to support.
Example request
curl -X POST 'https://evohub.io/api/v1/schedules/5b1c7d2e-8f3a-4b9c-a0d1-e2f3a4b5c6d7/layers/7c3d9e1f-2a4b-4c6d-8e0f-1a2b3c4d5e6f/revise/preview' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer <TOKEN>' \
-d '{
"name": "Primary",
"user_ids": [
"0b8e6c1a-2f4d-4e9b-8a7c-3d5e6f708192",
"9a7b5c3d-1e2f-4a6b-8c0d-2e4f6a8b0c1d"
],
"effective": "after_full_rotation",
"handoff_time": "09:00",
"rotation_type": "weekly",
"handoff_weekday": 1
}'
