## Получить расписание

`GET /v1/work-schedules/:id`

Возвращает одно расписание работы из библиотеки портала: окна по дням недели, часовой пояс, версию и число назначенных серверов.

## Параметры

| Параметр | В | Тип | Обяз. | Описание |
|----------|---|-----|:-----:|----------|
| `id` | path | string | да | ID расписания. Источник — `data[].id` из [списка расписаний](./list.md) или `workSchedule.id` в [`GET /v1/infra/servers/:id`](/docs/infra/servers/get) |

## Примеры

### curl — личный ключ

```bash
curl -H "X-Api-Key: YOUR_API_KEY" \
  https://vibecode.bitrix24.tech/v1/work-schedules/WORK_SCHEDULE_ID
```

### curl — OAuth-приложение

```bash
curl -H "X-Api-Key: YOUR_APP_KEY" \
  -H "Authorization: Bearer USER_SESSION_TOKEN" \
  https://vibecode.bitrix24.tech/v1/work-schedules/WORK_SCHEDULE_ID
```

### JavaScript — личный ключ

```javascript
const res = await fetch(
  `https://vibecode.bitrix24.tech/v1/work-schedules/${workScheduleId}`,
  { headers: { 'X-Api-Key': 'YOUR_API_KEY' } }
)
const { data } = await res.json()
console.log(`${data.name}: окон ${data.windows.length}, серверов ${data.assignedCount}`)
```

### JavaScript — OAuth-приложение

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

## Поля ответа

| Поле | Тип | Описание |
|------|-----|----------|
| `success` | boolean | Всегда `true` при успехе |
| `data.id` | string | ID расписания |
| `data.kind` | string | `PRESET` — готовое расписание платформы, `CUSTOM` — своё |
| `data.name` | string | Название. У готового расписания — на языке владельца ключа |
| `data.presetKey` | string \| null | Ключ готового расписания: `weekdays-9-18`, `weekdays-8-20`, `daily-9-21`. У своего — `null` |
| `data.timezone` | string | Часовой пояс IANA, в котором читаются окна |
| `data.windows` | array | Окна `{ isoDay, start, end }`: `isoDay` от 1 (понедельник) до 7, `start` и `end` — местное время `ЧЧ:ММ`, конец суток — `24:00` |
| `data.version` | number | Номер версии. Передаётся в [обновление](./update.md) |
| `data.canEdit` | boolean | Вправе ли владелец ключа править и удалять расписание. У готового всегда `false` |
| `data.assignedCount` | number | Сколько серверов портала работает по расписанию, включая серверы других сотрудников. Сами серверы не называются |

## Пример ответа

```json
{
  "success": true,
  "data": {
    "id": "cmfp4r0q2000a1ocg7h2k9x3d",
    "kind": "CUSTOM",
    "name": "Смены склада",
    "presetKey": null,
    "timezone": "Europe/Moscow",
    "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
  }
}
```

## Пример ответа при ошибке

404 — расписания нет в портале ключа:

```json
{
  "success": false,
  "error": {
    "code": "NOT_FOUND",
    "message": "Work schedule not found"
  }
}
```

## Ошибки

| HTTP | Код | Описание |
|------|-----|----------|
| 401 | `MISSING_API_KEY` | Не передан заголовок `X-Api-Key` |
| 401 | `INVALID_API_KEY` | Ключ не опознан: такой строки на платформе нет |
| 403 | `INFRA_SCOPE_REQUIRED` | У ключа нет скоупа `vibe:infra` |
| 403 | `INFRA_FORBIDDEN_FOR_COWORK_KEY` | Вызов сделан ключом Cowork/Code. Библиотека расписаний управляет серверами и их счётом, поэтому такому ключу она закрыта целиком, включая чтение. Что делать — [Проектный ключ для деплоя](/docs/cowork/deploy-key) |
| 404 | `NOT_FOUND` | Расписания с таким `id` нет в портале ключа, либо ключ не привязан к порталу Битрикс24. Расписание другого портала отвечает так же — ответ не подтверждает, что оно существует |
| 429 | `RATE_LIMITED` | Превышен лимит 60 запросов в минуту на ключ. Точное значение — в заголовке `x-ratelimit-limit` (потолок делится на реплики) |

Полный список общих ошибок API — [Ошибки](/docs/errors).

## Смотрите также

- [Список расписаний](./list.md)
- [Обновить расписание](./update.md)
- [Удалить расписание](./delete.md)
