Change a layer from a later moment
Changes a layer — its settings and its members — from a moment you
choose, so the turn under way is not cut short unless you ask for that.
Send the whole layer as it should be (the fields of
POST /api/v1/schedules/{id}/layers, name and rotation_type
required), user_ids with every member in rota order, and when the
change takes over:
effective: now— at once.effective: after_current_shift(the default) — when the current turn ends.effective: after_full_rotation— when the current pass through the list ends.effective: atwithat, an RFC 3339 instant that is not in the past.
The layer as it was runs until that moment, and a revised copy runs from
it: the response's layer is the copy, with active_from set and
replaces_layer_id pointing at the original. Unless restart is
true, the person who would hold the rota at that moment keeps it,
wherever they now sit in the list; with restart: true the new list
begins at its first member. Only the layer in effect now can be changed
this way; a change already waiting on it is replaced by the new one.
Anyone added to the rota must be a member of the organization
who can respond to alerts.
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
201
When the change takes over, and the layer that runs from then.
dataobject requiredeffective_atstring (date-time) requiredlayerScheduleLayer requiredShow ScheduleLayer properties
idstringschedule_idstringnamestringpriorityintegerLower numbers win. When several layers have someone on call, the layer with the smallestprioritydecides who is paged.rotation_typeRotationTyperotation_startstring (date-time)When the rota's first turn started.handoff_dayintegerFor acustomrotation, the days (or, withrotation_unithour, the hours) each turn lasts. Daily and weekly rotations ignore it.handoff_timestringHH:MMof the handover.rotation_unitstringWhathandoff_daycounts on acustomrotation,dayorhour; empty meansday.handoff_weekdayinteger | nullThe weekday aweeklyrotation hands over on, 0 (Sunday) to 6;nullis the weekdayrotation_startfalls on.restrict_to_weekdaysarray of integerrestrict_start_timestringHH:MMrestrict_end_timestringHH:MMrotationsarray of ScheduleRotationShow ScheduleRotation properties
idstringlayer_idstringuser_idstringpositioninteger0-based place in the rota.created_atstring (date-time)
active_fromstring (date-time)Set on a layer that replaces another from a later moment; it applies from then.active_untilstring (date-time)Set on a layer that a change replaces from a later moment; it applies until then.replaces_layer_idstringOn a changed copy, the layer it replaces.created_atstring (date-time)updated_atstring (date-time)
successboolean required
400
The body is not JSON (INVALID_BODY); a layer field is invalid as on create, user_ids names someone twice, effective is not one of the four values, at is missing or not RFC 3339 when effective is at, or at is in the past (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), or someone added in user_ids is not a member of the organization (NOT_A_MEMBER).
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); change the layer in effect instead.
errorobject requiredcodestring requiredMachine-readable code. Branch on this.messagestring requiredHuman-readable explanation.request_idstringThe request'sX-Request-ID. Quote it to support.
422
The person cannot respond to alerts: they do not hold oncall:alert:respond (CANNOT_RESPOND).
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.
503
Whether the person may be paged could not be checked right now; nothing was changed (MEMBER_CHECK_UNAVAILABLE). Retry shortly.
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' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer <TOKEN>' \
-d '{
"name": "Primary",
"priority": 1,
"user_ids": [
"0b8e6c1a-2f4d-4e9b-8a7c-3d5e6f708192",
"9a7b5c3d-1e2f-4a6b-8c0d-2e4f6a8b0c1d",
"3c5e7a9b-1d2f-4b6c-8e0a-4f6b8d0e2a3c"
],
"effective": "after_current_shift",
"handoff_time": "09:00",
"rotation_type": "weekly",
"handoff_weekday": 1
}'
