Learn how to define the shifts that employees can be assigned to cover demand.
Shifts specify the different kinds of working hour assignments that employees may receive. In any solution produced by the solver, employees will only receive working hours by being assigned to any of the possible Shifts. This page will give some pointers on how to define Shifts in your payload.
Shift schema
object
Show properties
string
required
Unique identifier for the shift.
array of string
List of labels assigned to this shift. Labels can be used in constraints to group shifts.
boolean
If set to true, the shift will not be assigned by the solver. Read only shifts will not be used in new assignments by the solver, their use is limited to preassigned shifts. Read only shifts can still be used to cover demand. Default: false.
boolean
Only relevant for preassigned shifts. If set to false, assignments of this shift will not contribute towards demand coverage. Shifts that cannot cover demand will not be used in new assignments by the solver, their use is limited to preassigned shifts. Default: true.
object
List of days in the schedule. Days can be defined as an array of dates (in CALENDAR payloads), as an array of day indices (in RECURRING payloads), or as an array of weekdays (allowed in all payloads).
Show availableDays – properties
array of date (date)
List of dates in the schedule. Only allowed in CALENDAR payloads.
array of dayIndex
List of day indices in the schedule. Only allowed in RECURRING payloads.
array of dayOfWeek
List of days of the week. Will apply to all days in the schedule that match any of the specified weekdays.
array of object
required
List of intervals that this shift consists of. The maximum duration of a shift is 72 hours.
Show intervals – item structure
string (time)
required
TIME ISO 8601 format hh:mm. Equivalent to the 24h format of a single day. Use 00:00 to represent midnight.
string (time)
required
TIME ISO 8601 format hh:mm. Equivalent to the 24h format of a single day. Use 00:00 to represent midnight.
integer
required
Indicates which day this interval belongs to, relative to the day that the shift belongs to. -1 indicates the interval starts on the previous day, 0 on the same day, and 1 on the next day.
object
Show workload – properties
number
Factor by which the hours of this interval will be multiplied to calculate the total FTE hours of an employee. Default: 1.
string
Category of work carried out during the interval. Only relevant if using TIME_DEMAND.
integer
Minutes of break in this interval. The solver does not plan the break at any specific time, but the break minutes are subtracted from the total FTE for the shift. Default: 0.
string
Task id of the task that must be worked on during this interval. The task needs to be defined in the configuration part of the payload.
object
List of shifts that are connected to this shift on the previous day. If defined, this shift will always be preceded by one of the connected shifts the previous day.
Show connectedShiftsPreviousDay – properties
array of shiftId
List of ids of shifts that are connected to this shift.
array of string
List of ids of shift templates that are connected to this shift.
boolean
Whether the connected shift can be a day off. Default: false.
object
List of shifts that are connected to this shift on the next day. If defined, this shift will always be followed by one of the connected shifts the next day.
Show connectedShiftsNextDay – properties
array of shiftId
List of ids of shifts that are connected to this shift.
array of string
List of ids of shift templates that are connected to this shift.
boolean
Whether the connected shift can be a day off. Default: false.
array of object
List of requirements on the attributes that an employee needs to be eligible to work this Shift. If an employee does not meet all of the requirements, the employee can not work this Shift.
Show attributeRequirements – item structure
string
The category of the attribute.
array of string
The targeted values for this requirement.
string (enum: NONE | ANY | ALL)
Default: “ALL”.
By default, shifts may be used (assigned to employees) an unlimited amount of
times in schedules produced by the solver. If you would like to specify
exactly how many times the assignments of certain shifts is needed, see
ShiftDemand.
Intervals
At its core, a shift is built up out of one or more intervals. Whenever a shift is assigned to an employee, that employee will work all of the intervals in the shift. Intervals must have a start- and end time that both fall within the same day, and the intervals of one shift must all fall within a maximum span of 72 hours (across no more than 3 distinct days). To specify that an interval is to take place a day before or a day after the day on which the shift is planned, the dayIndicator property can be used. The different intervals of a shift may not overlap one another.
Consider a 6-hour Shift that starts on 20:00 and lasts until 02:00. This can be covered using Shift Intervals in one of two ways:
The Shift contains an interval from 20:00-00:00 with dayIndicator -1, and an interval from 00:00-02:00 with dayIndicator 0. When planning any instances of this Shift, it will be considered to belong to the second day.
The Shift contains an interval from 20:00-00:00 with dayIndicator 0, and an interval from 00:00-02:00 with dayIndicator 1. When planning any instances of this Shift, it will be considered to belong to the first day.
.
Breaks
It is possible to specify the amount of breakMinutes any interval contains. The break is not considered to happen at any specific time, this is only used to correctly determine the employee’s FTE. A shift interval of 8 hours with a 1-hour break is considered to count for 7 worked hours.
Day assignments
In the schedules created by the solver, Shifts are assigned to employees on days within the planning period. Shift assignments are always considered to belong to one specific day, even if the Shift contains working hours on the previous or next day. It is possible to specify specific days in the planning period on which a Shift may be assigned to employees. By default, the entire planning period is allowed. Alternatively, it is possible to specify which weekdays are available for a Shift.
Consider the following example for a two-week planning period. shift-1 shifts may only be assigned on Mondays, Tuesdays, and Wednesdays, while shift-2 shifts may only be planned on the first three or the last three days of the period.
If there are certain shift assignments for employees that are already fixed, it is recommended to include these in the request. This way, the solver can take into account which hours an employee is already working and ensure the produced schedule is feasible given the already existing assignments.However, it can occur that this means you have to send in a Shift definition that you do not want to be used by the solver to make new assignments - only to explain what kind of shift the employee is working in the already fixed assignment. For this purpose, it is possible to mark a Shift as isReadOnly. The solver will then not use it to make new assignments.
An employee cannot be preassigned to multiple locked shifts on the same day,
or to overlapping locked shifts.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Automatic Rostering","colors":{"primary":"#16A34A","light":"#07C983","dark":"#15803D"},"logo":{"light":"https://mintcdn.com/automaticrostering/geYJCg2PEZLfgAwl/logo/light.png?fit=max\u0026auto=format\u0026n=geYJCg2PEZLfgAwl\u0026q=85\u0026s=184cc1b5d04c48601ba425b95cf1d878","dark":"https://mintcdn.com/automaticrostering/geYJCg2PEZLfgAwl/logo/light.png?fit=max\u0026auto=format\u0026n=geYJCg2PEZLfgAwl\u0026q=85\u0026s=184cc1b5d04c48601ba425b95cf1d878"},"favicon":"https://mintcdn.com/automaticrostering/tszNXFD11BtKFzPx/favicon.png?fit=max\u0026auto=format\u0026n=tszNXFD11BtKFzPx\u0026q=85\u0026s=c07f8a95ebdc438d2979dd06d3d989ed","api":{"examples":{"languages":[]}},"navbar":{"links":[{"href":"mailto:stian.vale@visma.com","label":"Contact"}]},"footer":{},"contextual":{"options":["copy","chatgpt"],"display":"header"},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"automaticrostering","hasAudioNarration":false,"actualSubdomain":"automaticrostering","customDomains":["docs.automaticrostering.visma.net"],"gitSource":{"type":"github","owner":"automatic-rostering","repo":"product","deployBranch":"main","contentDirectory":"docs","isPrivate":true,"mountPath":"","label":""},"entitlements":{},"buildId":"6aedc35cb7010cc612509184","clientVersion":"0.0.4143","searchFilterCounts":[{"language":"default","tag":"Guides","count":41},{"language":"default","tag":"Entities","count":24},{"language":"default","tag":"API reference","count":10},{"language":"default","tag":"Constraints","count":9},{"language":"default","tag":"Rules","count":9},{"language":"default","tag":"Roster","count":8},{"language":"default","tag":"Getting started","count":7},{"language":"default","tag":"Concepts","count":3},{"language":"default","tag":"Status updates","count":3},{"language":"default","tag":"Other","count":2}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"v1/entities/shifts","slug":"/v1/entities/shifts","pageMetadata":{"title":"Shifts","description":"Learn how to define the shifts that employees can be assigned to cover demand.","icon":"clock","href":"/v1/entities/shifts"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Learn how to define the shifts that employees can be assigned to cover demand.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={code:`code`,li:`li`,p:`p`,pre:`pre`,span:`span`,ul:`ul`,..._provideComponents(),...props.components},{Card,CodeBlock,Expandable,Heading,Info,ResponseField,Tip,Warning}=_components;if(!Card)_missingMdxReference(`Card`,true);if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Expandable)_missingMdxReference(`Expandable`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Info)_missingMdxReference(`Info`,true);if(!ResponseField)_missingMdxReference(`ResponseField`,true);if(!Tip)_missingMdxReference(`Tip`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`Shifts specify the different kinds of working hour assignments that employees may receive. In any solution produced by the solver, employees will only receive working hours by being assigned to any of the possible Shifts. This page will give some pointers on how to define Shifts in your payload.`}),`\n`,_jsx(Card,{title:`Shift schema`,children:_jsx(ResponseField,{name:`shift`,type:`object`,id:`param-shift`,children:_jsxs(Expandable,{title:`properties`,children:[_jsx(ResponseField,{name:`id`,type:`string`,required:true,id:`param-id`,children:_jsx(_components.p,{children:`Unique identifier for the shift.`})}),_jsx(ResponseField,{name:`labels`,type:`array of string`,id:`param-labels`,children:_jsx(_components.p,{children:`List of labels assigned to this shift. Labels can be used in constraints to group shifts.`})}),_jsx(ResponseField,{name:`isReadOnly`,type:`boolean`,id:`param-is-read-only`,children:_jsx(_components.p,{children:`If set to true, the shift will not be assigned by the solver. Read only shifts will not be used in new assignments by the solver, their use is limited to preassigned shifts. Read only shifts can still be used to cover demand. Default: false.`})}),_jsx(ResponseField,{name:`canCoverDemand`,type:`boolean`,id:`param-can-cover-demand`,children:_jsx(_components.p,{children:`Only relevant for preassigned shifts. If set to false, assignments of this shift will not contribute towards demand coverage. Shifts that cannot cover demand will not be used in new assignments by the solver, their use is limited to preassigned shifts. Default: true.`})}),_jsx(ResponseField,{name:`availableDays`,type:`object`,id:`param-available-days`,children:_jsx(_components.p,{children:`List of days in the schedule. Days can be defined as an array of dates (in CALENDAR payloads), as an array of day indices (in RECURRING payloads), or as an array of weekdays (allowed in all payloads).`})}),_jsxs(Expandable,{title:`availableDays – properties`,children:[_jsx(ResponseField,{name:`dates`,type:`array of date (date)`,id:`param-dates`,children:_jsx(_components.p,{children:`List of dates in the schedule. Only allowed in CALENDAR payloads.`})}),_jsx(ResponseField,{name:`dayIndices`,type:`array of dayIndex`,id:`param-day-indices`,children:_jsx(_components.p,{children:`List of day indices in the schedule. Only allowed in RECURRING payloads.`})}),_jsx(ResponseField,{name:`daysOfWeek`,type:`array of dayOfWeek`,id:`param-days-of-week`,children:_jsx(_components.p,{children:`List of days of the week. Will apply to all days in the schedule that match any of the specified weekdays.`})})]}),_jsx(ResponseField,{name:`intervals`,type:`array of object`,required:true,id:`param-intervals`,children:_jsx(_components.p,{children:`List of intervals that this shift consists of. The maximum duration of a shift is 72 hours.`})}),_jsxs(Expandable,{title:`intervals – item structure`,children:[_jsx(ResponseField,{name:`startTime`,type:`string (time)`,required:true,id:`param-start-time`,children:_jsx(_components.p,{children:`TIME ISO 8601 format hh:mm. Equivalent to the 24h format of a single day. Use 00:00 to represent midnight.`})}),_jsx(ResponseField,{name:`endTime`,type:`string (time)`,required:true,id:`param-end-time`,children:_jsx(_components.p,{children:`TIME ISO 8601 format hh:mm. Equivalent to the 24h format of a single day. Use 00:00 to represent midnight.`})}),_jsx(ResponseField,{name:`dayIndicator`,type:`integer`,required:true,id:`param-day-indicator`,children:_jsx(_components.p,{children:`Indicates which day this interval belongs to, relative to the day that the shift belongs to. -1 indicates the interval starts on the previous day, 0 on the same day, and 1 on the next day.`})}),_jsx(ResponseField,{name:`workload`,type:`object`,id:`param-workload`}),_jsxs(Expandable,{title:`workload – properties`,children:[_jsx(ResponseField,{name:`factor`,type:`number`,id:`param-factor`,children:_jsx(_components.p,{children:`Factor by which the hours of this interval will be multiplied to calculate the total FTE hours of an employee. Default: 1.`})}),_jsx(ResponseField,{name:`category`,type:`string`,id:`param-category`,children:_jsx(_components.p,{children:`Category of work carried out during the interval. Only relevant if using TIME_DEMAND.`})})]}),_jsx(ResponseField,{name:`breakMinutes`,type:`integer`,id:`param-break-minutes`,children:_jsx(_components.p,{children:`Minutes of break in this interval. The solver does not plan the break at any specific time, but the break minutes are subtracted from the total FTE for the shift. Default: 0.`})}),_jsx(ResponseField,{name:`taskId`,type:`string`,id:`param-task-id`,children:_jsx(_components.p,{children:`Task id of the task that must be worked on during this interval. The task needs to be defined in the configuration part of the payload.`})})]}),_jsx(ResponseField,{name:`connectedShiftsPreviousDay`,type:`object`,id:`param-connected-shifts-previous-day`,children:_jsx(_components.p,{children:`List of shifts that are connected to this shift on the previous day. If defined, this shift will always be preceded by one of the connected shifts the previous day.`})}),_jsxs(Expandable,{title:`connectedShiftsPreviousDay – properties`,children:[_jsx(ResponseField,{name:`shiftIds`,type:`array of shiftId`,id:`param-shift-ids`,children:_jsx(_components.p,{children:`List of ids of shifts that are connected to this shift.`})}),_jsx(ResponseField,{name:`shiftTemplateIds`,type:`array of string`,id:`param-shift-template-ids`,children:_jsx(_components.p,{children:`List of ids of shift templates that are connected to this shift.`})}),_jsx(ResponseField,{name:`dayOff`,type:`boolean`,id:`param-day-off`,children:_jsx(_components.p,{children:`Whether the connected shift can be a day off. Default: false.`})})]}),_jsx(ResponseField,{name:`connectedShiftsNextDay`,type:`object`,id:`param-connected-shifts-next-day`,children:_jsx(_components.p,{children:`List of shifts that are connected to this shift on the next day. If defined, this shift will always be followed by one of the connected shifts the next day.`})}),_jsxs(Expandable,{title:`connectedShiftsNextDay – properties`,children:[_jsx(ResponseField,{name:`shiftIds`,type:`array of shiftId`,id:`param-shift-ids-1`,children:_jsx(_components.p,{children:`List of ids of shifts that are connected to this shift.`})}),_jsx(ResponseField,{name:`shiftTemplateIds`,type:`array of string`,id:`param-shift-template-ids-1`,children:_jsx(_components.p,{children:`List of ids of shift templates that are connected to this shift.`})}),_jsx(ResponseField,{name:`dayOff`,type:`boolean`,id:`param-day-off-1`,children:_jsx(_components.p,{children:`Whether the connected shift can be a day off. Default: false.`})})]}),_jsx(ResponseField,{name:`attributeRequirements`,type:`array of object`,id:`param-attribute-requirements`,children:_jsx(_components.p,{children:`List of requirements on the attributes that an employee needs to be eligible to work this Shift. If an employee does not meet all of the requirements, the employee can not work this Shift.`})}),_jsxs(Expandable,{title:`attributeRequirements – item structure`,children:[_jsx(ResponseField,{name:`category`,type:`string`,id:`param-category-1`,children:_jsx(_components.p,{children:`The category of the attribute.`})}),_jsx(ResponseField,{name:`values`,type:`array of string`,id:`param-values`,children:_jsx(_components.p,{children:`The targeted values for this requirement.`})}),_jsx(ResponseField,{name:`matchType`,type:`string (enum: NONE | ANY | ALL)`,id:`param-match-type`,children:_jsx(_components.p,{children:`Default: “ALL”.`})})]})]})})}),`\n`,_jsx(Info,{children:_jsx(_components.p,{children:`By default, shifts may be used (assigned to employees) an unlimited amount of\ntimes in schedules produced by the solver. If you would like to specify\nexactly how many times the assignments of certain shifts is needed, see\nShiftDemand.`})}),`\n`,_jsx(Heading,{level:`2`,id:`intervals`,children:`Intervals`}),`\n`,_jsxs(_components.p,{children:[`At its core, a shift is built up out of one or more `,_jsx(_components.code,{children:`intervals`}),`. Whenever a shift is assigned to an `,_jsx(_components.code,{children:`employee`}),`, that employee will work all of the intervals in the shift. Intervals must have a start- and end time that both fall within the same day, and the intervals of one shift must all fall within a maximum span of 72 hours (across no more than 3 distinct days). To specify that an interval is to take place a day before or a day after the day on which the shift is planned, the `,_jsx(_components.code,{children:`dayIndicator`}),` property can be used. The different intervals of a shift may not overlap one another.`]}),`\n`,_jsxs(Tip,{children:[_jsx(_components.p,{children:`Consider a 6-hour Shift that starts on 20:00 and lasts until 02:00. This can be covered using Shift Intervals in one of two ways:`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`The Shift contains an interval from 20:00-00:00 with `,_jsx(_components.code,{children:`dayIndicator`}),` -1, and an interval from 00:00-02:00 with `,_jsx(_components.code,{children:`dayIndicator`}),` 0. When planning any instances of this Shift, it will be considered to belong to the second day.`]}),`\n`,_jsxs(_components.li,{children:[`The Shift contains an interval from 20:00-00:00 with `,_jsx(_components.code,{children:`dayIndicator`}),` 0, and an interval from 00:00-02:00 with `,_jsx(_components.code,{children:`dayIndicator`}),` 1. When planning any instances of this Shift, it will be considered to belong to the first day.`]}),`\n`]}),_jsx(_components.p,{children:`.`})]}),`\n`,_jsx(Heading,{level:`3`,id:`breaks`,children:`Breaks`}),`\n`,_jsxs(_components.p,{children:[`It is possible to specify the amount of `,_jsx(_components.code,{children:`breakMinutes`}),` any interval contains. The break is not considered to happen at any specific time, this is only used to correctly determine the employee’s FTE. A shift interval of 8 hours with a 1-hour break is considered to count for 7 worked hours.`]}),`\n`,_jsx(Heading,{level:`2`,id:`day-assignments`,children:`Day assignments`}),`\n`,_jsx(_components.p,{children:`In the schedules created by the solver, Shifts are assigned to employees on days within the planning period. Shift assignments are always considered to belong to one specific day, even if the Shift contains working hours on the previous or next day. It is possible to specify specific days in the planning period on which a Shift may be assigned to employees. By default, the entire planning period is allowed. Alternatively, it is possible to specify which weekdays are available for a Shift.`}),`\n`,_jsxs(Tip,{children:[_jsxs(_components.p,{children:[`Consider the following example for a two-week planning period. `,_jsx(_components.code,{children:`shift-1`}),` shifts may only be assigned on Mondays, Tuesdays, and Wednesdays, while `,_jsx(_components.code,{children:`shift-2`}),` shifts may only be planned on the first three or the last three days of the period.`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`16`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`16`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`[`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"shift-1\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"intervals\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`}),_jsx(_components.span,{style:{color:`#82071E`,\"--shiki-light-font-style\":`italic`,\"--shiki-dark\":`#F44747`,\"--shiki-dark-font-style\":`inherit`},children:`...`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`],`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"availableDays\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"daysOfWeek\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"MON\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"TUE\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"WED\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`]`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"shift-2\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"intervals\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`}),_jsx(_components.span,{style:{color:`#82071E`,\"--shiki-light-font-style\":`italic`,\"--shiki-dark\":`#F44747`,\"--shiki-dark-font-style\":`inherit`},children:`...`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`],`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"availableDays\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"dayIndices\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`0`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`1`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`2`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`11`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`12`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`13`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`]`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`]`})}),`\n`]})})})]}),`\n`,_jsx(Heading,{level:`2`,id:`preassigned-shifts`,children:`Preassigned shifts`}),`\n`,_jsx(_components.p,{children:`If there are certain shift assignments for employees that are already fixed, it is recommended to include these in the request. This way, the solver can take into account which hours an employee is already working and ensure the produced schedule is feasible given the already existing assignments.`}),`\n`,_jsxs(_components.p,{children:[`However, it can occur that this means you have to send in a Shift definition that you do not want to be used by the solver to make new assignments - only to explain what kind of shift the employee is working in the already fixed assignment. For this purpose, it is possible to mark a Shift as `,_jsx(_components.code,{children:`isReadOnly`}),`. The solver will then not use it to make new assignments.`]}),`\n`,_jsx(Warning,{children:_jsx(_components.p,{children:`An employee cannot be preassigned to multiple locked shifts on the same day,\nor to overlapping locked shifts.`})})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Shifts","description":"Learn how to define the shifts that employees can be assigned to cover demand.","icon":"clock","href":"/v1/entities/shifts"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Intervals","slug":"intervals","depth":2,"children":[{"title":"Breaks","slug":"breaks","depth":3,"children":[]}]},{"title":"Day assignments","slug":"day-assignments","depth":2,"children":[]},{"title":"Preassigned shifts","slug":"preassigned-shifts","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":["/_mintlify/custom/automaticrostering/cf28444263d74e9f/v1/api-reference/scripts/schema-to-mintlify.js","/_mintlify/custom/automaticrostering/c99586a9043111f0/v1/api-reference/scripts/strip-deprecated.js","/_mintlify/custom/automaticrostering/91008760a362276f/v1/api-reference/update-api.js","/_mintlify/custom/automaticrostering/2d0dc99d5a8b6ce9/v2/update-api.js"],"subdomain":"automaticrostering","siteName":"Automatic Rostering","title":"Shifts - Automatic Rostering","navMaps":{"firstHrefInVersion":{"2.0.0":{"href":"/v2/entities/shifts","matchLevel":1},"1.0.0":{"href":"/v1/entities/shifts","matchLevel":0}},"firstHrefInLanguage":{}},"lastModified":"2026-04-23T11:50:03.126Z","originalFileLocation":"v1/entities/shifts.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Learn how to define the shifts that employees can be assigned to cover demand.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Automatic Rostering\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/automaticrostering/nNovoS61Lhz_FEoi/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/automaticrostering/nNovoS61Lhz_FEoi/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/automaticrostering/nNovoS61Lhz_FEoi/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/automaticrostering/nNovoS61Lhz_FEoi/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/automaticrostering/nNovoS61Lhz_FEoi/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/automaticrostering/nNovoS61Lhz_FEoi/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/automaticrostering/nNovoS61Lhz_FEoi/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/automaticrostering/nNovoS61Lhz_FEoi/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/automaticrostering/nNovoS61Lhz_FEoi/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Shifts - Automatic Rostering\">\u003cmeta data-mint-head property=\"og:description\" content=\"Learn how to define the shifts that employees can be assigned to cover demand.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Automatic Rostering\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.automaticrostering.visma.net/v1/entities/shifts\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://automaticrostering.mintlify.site/_mintlify/api/og/v2?division=Entities\u0026amp;title=Shifts\u0026amp;description=Learn+how+to+define+the+shifts+that+employees+can+be+assigned+to+cover+demand.\u0026amp;theme=82f9a5919eb5b34df74de5d7\u0026amp;signature=6a49c40b219f577d604b3f53820a0a06f9e9062c7173a73de65694564d11e4f8\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Shifts - Automatic Rostering\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Learn how to define the shifts that employees can be assigned to cover demand.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://automaticrostering.mintlify.site/_mintlify/api/og/v2?division=Entities\u0026amp;title=Shifts\u0026amp;description=Learn+how+to+define+the+shifts+that+employees+can+be+assigned+to+cover+demand.\u0026amp;theme=82f9a5919eb5b34df74de5d7\u0026amp;signature=6a49c40b219f577d604b3f53820a0a06f9e9062c7173a73de65694564d11e4f8\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/automaticrostering/nNovoS61Lhz_FEoi/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Automatic Rostering\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#16A34A\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.automaticrostering.visma.net/v1/entities/shifts\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/v1/entities/shifts.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.automaticrostering.visma.net/#organization\",\"name\":\"Automatic Rostering\",\"url\":\"https://docs.automaticrostering.visma.net\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/automaticrostering/geYJCg2PEZLfgAwl/logo/light.png?fit=max\u0026auto=format\u0026n=geYJCg2PEZLfgAwl\u0026q=85\u0026s=184cc1b5d04c48601ba425b95cf1d878\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.automaticrostering.visma.net#website\",\"name\":\"Automatic Rostering\",\"url\":\"https://docs.automaticrostering.visma.net\",\"publisher\":{\"@id\":\"https://docs.automaticrostering.visma.net/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.automaticrostering.visma.net/v1/entities/shifts#webpage\",\"url\":\"https://docs.automaticrostering.visma.net/v1/entities/shifts\",\"name\":\"Shifts\",\"description\":\"Learn how to define the shifts that employees can be assigned to cover demand.\",\"dateModified\":\"2026-04-23T11:50:03.126Z\",\"isPartOf\":{\"@id\":\"https://docs.automaticrostering.visma.net#website\"},\"breadcrumb\":{\"@id\":\"https://docs.automaticrostering.visma.net/v1/entities/shifts#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.automaticrostering.visma.net/v1/entities/shifts#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Entities\",\"item\":\"https://docs.automaticrostering.visma.net/v1/entities/employees\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Shifts\",\"item\":\"https://docs.automaticrostering.visma.net/v1/entities/shifts\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.automaticrostering.visma.net/v1/entities/shifts#article\",\"headline\":\"Shifts\",\"name\":\"Shifts\",\"description\":\"Learn how to define the shifts that employees can be assigned to cover demand.\",\"url\":\"https://docs.automaticrostering.visma.net/v1/entities/shifts\",\"mainEntityOfPage\":{\"@id\":\"https://docs.automaticrostering.visma.net/v1/entities/shifts#webpage\"},\"dateModified\":\"2026-04-23T11:50:03.126Z\",\"publisher\":{\"@id\":\"https://docs.automaticrostering.visma.net/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.automaticrostering.visma.net#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Automatic Rostering\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"Automatic Rostering\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/v1/entities/shifts.md","siteName":"Automatic Rostering","nav":{"global":null,"versions":[{"version":"2.0.0","default":true,"tag":"Latest","pages":[{"title":"2.0.0","href":"/v2/entities/shifts"}]},{"version":"1.0.0","tabs":[{"tab":"Guides","groups":[{"group":"Getting started","pages":[{"title":"Introduction","icon":"hand-wave","href":"/v1"},{"title":"Authentication","icon":"key","href":"/v1/getting-started/authentication"},{"title":"Quickstart","icon":"circle-play","href":"/v1/getting-started/quickstart"}]},{"group":"Concepts","pages":[{"title":"Periods","icon":"calendar-week","href":"/v1/concepts/periods"}]},{"group":"Entities","pages":[{"title":"Employees","description":"Learn how to define the employees that will be used in the roster.","icon":"users","href":"/v1/entities/employees"},{"title":"Shifts","icon":"clock","href":"/v1/entities/shifts"},{"title":"Demands","description":"Learn how to define the demands that must be covered in the roster.","icon":"chart-column","href":"/v1/entities/demands"},{"group":"Constraints","icon":"shield-check","pages":[{"title":"Core concepts","href":"/v1/constraints/index"},{"title":"Employee Availability","href":"/v1/constraints/employee-availability"},{"title":"Employee Utilization","href":"/v1/constraints/employee-utilization"},{"title":"Cooldown","href":"/v1/constraints/cooldown"},{"title":"Consecutive","href":"/v1/constraints/consecutive"},{"title":"Pattern","href":"/v1/constraints/pattern"},{"title":"Periodic Rest","href":"/v1/constraints/periodic-rest"},{"title":"Period Distribution","href":"/v1/constraints/period-distribution"},{"title":"Fairness","href":"/v1/constraints/fairness"}]}]},{"group":"Other","pages":[{"title":"Changelog","href":"/v1/misc/changelog"},{"title":"Migrate from XML to JSON","href":"/v1/misc/migrate"}]}]},{"tab":"API reference","pages":[{"title":"API reference","href":"/api-reference/roster/start-job"}]}],"global":{"anchors":[{"anchor":"Documentation","icon":"book-open-cover","href":"/"},{"anchor":"Playground","icon":"code","href":"https://ar-playground-one.vercel.app/"}]}}]},"basePath":"","title":"Shifts - Automatic Rostering","buildId":"dpl_Fyv1NbzwP68g2bEH2Roy98uY1zmE","deploymentId":"dpl_Fyv1NbzwP68g2bEH2Roy98uY1zmE","dynamics":[],"chunks":[]}