For AI agents: markdown of this page — /docs-content-en/infra/work-schedules.md documentation index — /llms.txt

Work schedule library

Work schedules for servers in the on-a-schedule run mode: the server runs during the schedule windows and sleeps outside them. The library is shared across the Bitrix24 account — one schedule is assigned to many servers, and editing its windows changes the run of every assigned machine at once.

Preset and custom schedules. The platform provides the presets: weekdays-9-18 — weekdays from 9 to 18, weekdays-8-20 — weekdays from 8 to 20, daily-9-21 — every day from 9 to 21. They cannot be edited or deleted: for a different week, create a custom schedule. A Bitrix24 account can keep up to 50 custom schedules.

Week windows. A window is an object { isoDay, start, end } in the schedule's local time: isoDay from 1 (Monday) to 7, start and end as HH:MM on a 30-minute step, the end of the day is 24:00. A window lasts at least an hour and never crosses midnight. A day holds up to two windows, at least 30 minutes apart.

Who edits. A custom schedule is edited and deleted by its author or by an administrator of the Bitrix24 account. The canEdit field in the response tells whether the key owner may do it.

Before run modes are enabled. Reading the library is always available. Creating, editing and deleting, like setting a server's run mode, answer 400 RUN_MODE_UNAVAILABLE until run modes are enabled for the Bitrix24 account. Until then the library is empty: the presets appear in it together with the run modes.

Scope: vibe:infra

List schedules

GET /v1/work-schedules

Returns the work schedule library of the Bitrix24 account — platform presets and custom schedules — with the number of servers assigned to each.

Parameters

No parameters. The library of a Bitrix24 account is limited to three presets and 50 custom schedules, so filtering and pagination are not provided.

Examples

curl — personal key

Terminal
curl -H "X-Api-Key: YOUR_API_KEY" \
  https://vibecode.bitrix24.com/v1/work-schedules

curl — OAuth application

Terminal
curl -H "X-Api-Key: YOUR_APP_KEY" \
  -H "Authorization: Bearer USER_SESSION_TOKEN" \
  https://vibecode.bitrix24.com/v1/work-schedules

JavaScript — personal key

javascript
const res = await fetch('https://vibecode.bitrix24.com/v1/work-schedules', {
  headers: { 'X-Api-Key': 'YOUR_API_KEY' },
})
const { data } = await res.json()
const own = data.filter(s => s.kind === 'CUSTOM')
console.log(`Schedules: ${data.length}, custom: ${own.length}`)

JavaScript — OAuth application

javascript
const res = await fetch('https://vibecode.bitrix24.com/v1/work-schedules', {
  headers: {
    'X-Api-Key': 'YOUR_APP_KEY',
    'Authorization': 'Bearer USER_SESSION_TOKEN',
  },
})
const { data } = await res.json()

Response fields

Field Type Description
success boolean Always true on success
data array Schedules of the Bitrix24 account: presets first, then custom schedules in the order they were created
data[].id string Schedule ID. Setting a server's run mode and the other library operations take it
data[].kind string PRESET — a platform preset, CUSTOM — a custom schedule
data[].name string Name. A preset's name comes in the key owner's language
data[].presetKey string | null Preset key: weekdays-9-18, weekdays-8-20, daily-9-21. null for a custom schedule
data[].timezone string IANA time zone the windows are read in
data[].windows array Windows { isoDay, start, end } in local time. Window rules are on the section index
data[].version number Version number. Passed to update
data[].canEdit boolean Whether the key owner may edit and delete the schedule. Always false for a preset
data[].assignedCount number How many servers of the Bitrix24 account run on the schedule, other employees' servers included. The servers themselves are not named

Response example

JSON
{
  "success": true,
  "data": [
    {
      "id": "cmfp4qz7x00031ocg5d1a8k2m",
      "kind": "PRESET",
      "name": "Weekdays 9–18",
      "presetKey": "weekdays-9-18",
      "timezone": "Europe/Berlin",
      "windows": [
        { "isoDay": 1, "start": "09:00", "end": "18:00" },
        { "isoDay": 2, "start": "09:00", "end": "18:00" },
        { "isoDay": 3, "start": "09:00", "end": "18:00" },
        { "isoDay": 4, "start": "09:00", "end": "18:00" },
        { "isoDay": 5, "start": "09:00", "end": "18:00" }
      ],
      "version": 1,
      "canEdit": false,
      "assignedCount": 3
    },
    {
      "id": "cmfp4r0q2000a1ocg7h2k9x3d",
      "kind": "CUSTOM",
      "name": "Warehouse shifts",
      "presetKey": null,
      "timezone": "Europe/Berlin",
      "windows": [
        { "isoDay": 1, "start": "09:00", "end": "18:00" },
        { "isoDay": 2, "start": "09:00", "end": "13:00" },
        { "isoDay": 2, "start": "14:00", "end": "24:00" }
      ],
      "version": 2,
      "canEdit": true,
      "assignedCount": 1
    }
  ]
}

Error response example

403 — the key lacks the vibe:infra scope:

JSON
{
  "success": false,
  "error": {
    "code": "INFRA_SCOPE_REQUIRED",
    "message": "This API key does not have infrastructure rights (scope vibe:infra).",
    "details": { "requiredScope": "vibe:infra" }
  }
}

Errors

HTTP Code Description
401 MISSING_API_KEY The X-Api-Key header is missing
401 INVALID_API_KEY The key is not recognized: no such key exists on the platform
403 INFRA_SCOPE_REQUIRED The key lacks the vibe:infra scope
403 INFRA_FORBIDDEN_FOR_COWORK_KEY The call was made with a Cowork/Code key. The schedule library manages servers and what they cost, so it is closed to such a key entirely, reads included. What to do — Project deploy key
404 NOT_FOUND The key is not bound to a Bitrix24 account
429 RATE_LIMITED The limit of 60 requests per minute per key is exceeded. The exact value is in the x-ratelimit-limit header (the ceiling is split between replicas)

Full list of shared error codes — Errors.

Known specifics

  • The list is empty until run modes are enabled. The presets are added to the account's library together with enabling run modes, and custom schedules cannot be created before that. An empty data for such an account is not an error.
  • A preset's name depends on the key. The name is not stored in the data — it is translated into the key owner's language, so two keys of one Bitrix24 account can get different strings. Identify a preset reliably by presetKey.

See also