[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"docs-workday\u002Fendpoints":3,"docs-tabs-workday\u002Fendpoints":6},{"content":4,"lastmod":5},"\n# Эндпоинты раздела «Рабочий день»\n\nПереключатель методов учёта рабочего времени. Каждый таб открывает страницу соответствующего эндпоинта с параметрами, примерами кода и реальными ответами.\n\n**Bitrix24 API:** `timeman.*` · **Скоуп:** `timeman`\n\n## Операции\n\n- [Открыть рабочий день](.\u002Fopen.md) — `POST \u002Fv1\u002Fworkday\u002Fopen`\n- [Закрыть рабочий день](.\u002Fclose.md) — `POST \u002Fv1\u002Fworkday\u002Fclose`\n- [Поставить на паузу](.\u002Fpause.md) — `POST \u002Fv1\u002Fworkday\u002Fpause`\n- [Текущий статус](.\u002Fstatus.md) — `GET \u002Fv1\u002Fworkday\u002Fstatus`\n- [Настройки учёта](.\u002Fsettings.md) — `GET \u002Fv1\u002Fworkday\u002Fsettings`\n- [График работы](.\u002Fschedule.md) — `GET \u002Fv1\u002Fworkday\u002Fschedule`\n","2026-06-11",{"open.md":7,"close.md":8,"pause.md":9,"status.md":10,"settings.md":11,"schedule.md":12},"\n## Открыть рабочий день\n\n`POST \u002Fv1\u002Fworkday\u002Fopen`\n\nОткрывает новый рабочий день текущего пользователя. Вайбкод проксирует запрос в Битрикс24 без дополнительной обработки и возвращает ответ как есть. Поведение для уже активных дней определяется на стороне Битрикс24: для дня в статусе `OPENED` возвращается текущее состояние без изменений; для дня в статусе `PAUSED` — день переводится обратно в `OPENED` с продолжением учёта.\n\n## Поля запроса (body)\n\nВсе параметры опциональны. Тело может быть пустым: `{}`.\n\n| Поле | Тип | Обяз. | Описание |\n|------|-----|:-----:|---------|\n| `userId` | number | нет | Идентификатор сотрудника. По умолчанию — пользователь, которому принадлежат токены ключа |\n| `time` | string | нет | Дата и время начала в формате ISO 8601 (например `2026-05-05T09:00:00+03:00`). Дата должна совпадать с текущей. Применяется только когда день в статусе `CLOSED`. При указании этого поля становится обязательным `report` |\n| `report` | string | нет | Причина изменения. Обязательно при заданном `time` и для сотрудников с фиксированным графиком работы |\n| `lat` | number | нет | Географическая широта точки начала рабочего дня |\n| `lon` | number | нет | Географическая долгота точки начала рабочего дня |\n\n## Примеры\n\n### curl — личный ключ\n\n```bash\ncurl -X POST https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fworkday\u002Fopen \\\n  -H \"X-Api-Key: YOUR_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{}'\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl -X POST https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fworkday\u002Fopen \\\n  -H \"X-Api-Key: YOUR_APP_KEY\" \\\n  -H \"Authorization: Bearer USER_SESSION_TOKEN\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{}'\n```\n\n### JavaScript — личный ключ\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fworkday\u002Fopen', {\n  method: 'POST',\n  headers: {\n    'X-Api-Key': 'YOUR_API_KEY',\n    'Content-Type': 'application\u002Fjson',\n  },\n  body: JSON.stringify({}),\n})\nconst { data } = await res.json()\nconsole.log('Статус:', data.status)\nconsole.log('Открыт в:', data.timeStart)\n```\n\n### JavaScript — OAuth-приложение\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fworkday\u002Fopen', {\n  method: 'POST',\n  headers: {\n    'X-Api-Key': 'YOUR_APP_KEY',\n    'Authorization': 'Bearer USER_SESSION_TOKEN',\n    'Content-Type': 'application\u002Fjson',\n  },\n  body: JSON.stringify({}),\n})\nconst { data } = await res.json()\n```\n\n## Поля ответа\n\n| Поле | Тип | Описание |\n|------|-----|---------|\n| `success` | boolean | `true` при успешном открытии |\n| `data.status` | string | Актуальный статус: `OPENED`, `CLOSED`, `PAUSED`, `EXPIRED` |\n| `data.timeStart` | string | Дата и время начала дня (ISO 8601, часовой пояс сотрудника) |\n| `data.timeFinish` | string \\| null | Дата и время завершения дня. `null` для незакрытого дня |\n| `data.duration` | string | Длительность дня в формате `HH:MM:SS`. Для только что открытого — `00:00:00` |\n| `data.timeLeaks` | string | Суммарная длительность пауз за день в формате `HH:MM:SS` |\n| `data.active` | boolean | Признак активной записи рабочего дня |\n| `data.ipOpen` | string | IP-адрес начала дня. Пустая строка при открытии без IP-фиксации |\n| `data.ipClose` | string | IP-адрес завершения дня. Пустая строка для незакрытого дня |\n| `data.latOpen` | number | Географическая широта точки начала. `0` — координаты не переданы |\n| `data.lonOpen` | number | Географическая долгота точки начала. `0` — координаты не переданы |\n| `data.latClose` | number | Географическая широта точки завершения |\n| `data.lonClose` | number | Географическая долгота точки завершения |\n| `data.tzOffset` | number | Смещение часового пояса сотрудника в секундах (зависит от настроек сотрудника на портале; пример `10800` соответствует UTC+3) |\n\n## Пример ответа\n\n```json\n{\n  \"success\": true,\n  \"data\": {\n    \"status\": \"OPENED\",\n    \"timeStart\": \"2026-05-05T09:00:00+03:00\",\n    \"timeFinish\": null,\n    \"duration\": \"00:00:00\",\n    \"timeLeaks\": \"00:00:00\",\n    \"active\": true,\n    \"ipOpen\": \"\",\n    \"ipClose\": \"\",\n    \"latOpen\": 0,\n    \"lonOpen\": 0,\n    \"latClose\": 0,\n    \"lonClose\": 0,\n    \"tzOffset\": 10800\n  }\n}\n```\n\n## Пример ответа при ошибке\n\n403 — у ключа нет скоупа `timeman`:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"SCOPE_DENIED\",\n    \"message\": \"This endpoint requires 'timeman' scope\"\n  }\n}\n```\n\n## Ошибки\n\n| HTTP | Код | Описание |\n|------|-----|---------|\n| 400 | `INVALID_PARAMS` | Битрикс24 вернул `INVALID_PARAMS` — нарушена валидация поля запроса |\n| 401 | `MISSING_API_KEY` | Не передан заголовок `X-Api-Key` |\n| 401 | `INVALID_API_KEY` | Неверный API-ключ |\n| 401 | `KEY_EXPIRED` | Срок действия API-ключа истёк |\n| 401 | `TOKEN_MISSING` | Ключу не настроены OAuth-токены для портала |\n| 402 | `ACCOUNT_FROZEN` | Баланс портала заморожен |\n| 403 | `SCOPE_DENIED` | У ключа нет скоупа `timeman` |\n| 422 | `BITRIX_ERROR` | Битрикс24 отклонил запрос — текст в `message`. Возможные причины: дата `time` не совпадает с текущей, отсутствует `report` при заданном `time`, день уже в нужном состоянии |\n| 429 | `RATE_LIMITED` | Превышен лимит запросов к Битрикс24 |\n| 502 | `BITRIX_UNAVAILABLE` | Портал Битрикс24 недоступен |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Смотрите также\n\n- [Закрыть рабочий день](\u002Fdocs\u002Fworkday\u002Fclose) — `POST \u002Fv1\u002Fworkday\u002Fclose`.\n- [Поставить на паузу](\u002Fdocs\u002Fworkday\u002Fpause) — `POST \u002Fv1\u002Fworkday\u002Fpause`.\n- [Текущий статус](\u002Fdocs\u002Fworkday\u002Fstatus) — `GET \u002Fv1\u002Fworkday\u002Fstatus`.\n- [Рабочий день](\u002Fdocs\u002Fworkday) — обзор раздела.\n","\n## Закрыть рабочий день\n\n`POST \u002Fv1\u002Fworkday\u002Fclose`\n\nЗавершает текущий рабочий день и фиксирует его длительность. Вызов поддерживает отчёт за день и точку завершения.\n\n## Поля запроса (body)\n\nВсе параметры опциональны. Тело может быть пустым: `{}`.\n\n| Поле | Тип | Обяз. | Описание |\n|------|-----|:-----:|---------|\n| `userId` | number | нет | Идентификатор сотрудника. По умолчанию — пользователь, которому принадлежат токены ключа |\n| `time` | string | нет | Дата и время завершения в формате ISO 8601 (например `2026-05-05T18:00:00+03:00`). Дата должна совпадать с датой открытия дня — значением `timeStart` из [`GET \u002Fv1\u002Fworkday\u002Fstatus`](\u002Fdocs\u002Fworkday\u002Fstatus). При указании этого поля становится обязательным `report` |\n| `report` | string | нет | Итоговый отчёт за день. Обязательно при заданном `time` и для сотрудников с фиксированным графиком работы |\n| `lat` | number | нет | Географическая широта точки завершения |\n| `lon` | number | нет | Географическая долгота точки завершения |\n\n## Примеры\n\n### curl — личный ключ\n\n```bash\ncurl -X POST https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fworkday\u002Fclose \\\n  -H \"X-Api-Key: YOUR_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{ \"report\": \"Закрыл 5 сделок, обработал 12 лидов\" }'\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl -X POST https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fworkday\u002Fclose \\\n  -H \"X-Api-Key: YOUR_APP_KEY\" \\\n  -H \"Authorization: Bearer USER_SESSION_TOKEN\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{ \"report\": \"Закрыл 5 сделок, обработал 12 лидов\" }'\n```\n\n### JavaScript — личный ключ\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fworkday\u002Fclose', {\n  method: 'POST',\n  headers: {\n    'X-Api-Key': 'YOUR_API_KEY',\n    'Content-Type': 'application\u002Fjson',\n  },\n  body: JSON.stringify({\n    report: 'Закрыл 5 сделок, обработал 12 лидов',\n  }),\n})\nconst { data } = await res.json()\nconsole.log('Длительность дня:', data.duration)\nconsole.log('Перерывы:', data.timeLeaks)\n```\n\n### JavaScript — OAuth-приложение\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fworkday\u002Fclose', {\n  method: 'POST',\n  headers: {\n    'X-Api-Key': 'YOUR_APP_KEY',\n    'Authorization': 'Bearer USER_SESSION_TOKEN',\n    'Content-Type': 'application\u002Fjson',\n  },\n  body: JSON.stringify({\n    report: 'Закрыл 5 сделок, обработал 12 лидов',\n  }),\n})\nconst { data } = await res.json()\n```\n\n## Поля ответа\n\n| Поле | Тип | Описание |\n|------|-----|---------|\n| `success` | boolean | `true` при успешном закрытии |\n| `data.status` | string | Статус после закрытия — `CLOSED` |\n| `data.timeStart` | string | Дата и время начала дня (ISO 8601) |\n| `data.timeFinish` | string | Дата и время завершения дня (ISO 8601) |\n| `data.duration` | string | Длительность дня в формате `HH:MM:SS` без учёта пауз |\n| `data.timeLeaks` | string | Суммарная длительность пауз за день в формате `HH:MM:SS` |\n| `data.active` | boolean | Признак активной записи рабочего дня |\n| `data.ipOpen` | string | IP-адрес начала дня |\n| `data.ipClose` | string | IP-адрес завершения дня |\n| `data.latOpen` | number | Географическая широта точки начала. `0` — координаты не переданы |\n| `data.lonOpen` | number | Географическая долгота точки начала |\n| `data.latClose` | number | Географическая широта точки завершения |\n| `data.lonClose` | number | Географическая долгота точки завершения |\n| `data.tzOffset` | number | Смещение часового пояса сотрудника в секундах (зависит от настроек сотрудника на портале; пример `10800` соответствует UTC+3) |\n\n## Пример ответа\n\n```json\n{\n  \"success\": true,\n  \"data\": {\n    \"status\": \"CLOSED\",\n    \"timeStart\": \"2026-05-05T09:00:00+03:00\",\n    \"timeFinish\": \"2026-05-05T18:00:00+03:00\",\n    \"duration\": \"08:00:00\",\n    \"timeLeaks\": \"00:30:00\",\n    \"active\": true,\n    \"ipOpen\": \"203.0.113.10\",\n    \"ipClose\": \"203.0.113.10\",\n    \"latOpen\": 0,\n    \"lonOpen\": 0,\n    \"latClose\": 0,\n    \"lonClose\": 0,\n    \"tzOffset\": 10800\n  }\n}\n```\n\n## Пример ответа при ошибке\n\n422 — попытка закрыть уже закрытый день:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"BITRIX_ERROR\",\n    \"message\": \"Невозможно выполнить действие\"\n  }\n}\n```\n\n## Ошибки\n\n| HTTP | Код | Описание |\n|------|-----|---------|\n| 400 | `INVALID_PARAMS` | Битрикс24 вернул `INVALID_PARAMS` — нарушена валидация поля запроса |\n| 401 | `MISSING_API_KEY` | Не передан заголовок `X-Api-Key` |\n| 401 | `INVALID_API_KEY` | Неверный API-ключ |\n| 401 | `KEY_EXPIRED` | Срок действия API-ключа истёк |\n| 401 | `TOKEN_MISSING` | Ключу не настроены OAuth-токены для портала |\n| 402 | `ACCOUNT_FROZEN` | Баланс портала заморожен |\n| 403 | `SCOPE_DENIED` | У ключа нет скоупа `timeman` |\n| 422 | `BITRIX_ERROR` | Битрикс24 отклонил запрос — текст в `message`. Возможные причины: день уже закрыт, дата `time` не совпадает с датой открытия дня, отсутствует `report` при заданном `time` |\n| 429 | `RATE_LIMITED` | Превышен лимит запросов к Битрикс24 |\n| 502 | `BITRIX_UNAVAILABLE` | Портал Битрикс24 недоступен |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Известные особенности\n\n- **Закрытие в паузе.** Если день в статусе `PAUSED`, вызов закрывает день, фиксируя `timeFinish` на момент закрытия. Длительность пауз попадёт в `timeLeaks`.\n- **Сумма `duration` и `timeLeaks` равна разнице между `timeFinish` и `timeStart`** — то есть общее время с момента открытия дня раскладывается на отработанное и перерывы без потерь.\n\n## Смотрите также\n\n- [Открыть рабочий день](\u002Fdocs\u002Fworkday\u002Fopen) — `POST \u002Fv1\u002Fworkday\u002Fopen`.\n- [Поставить на паузу](\u002Fdocs\u002Fworkday\u002Fpause) — `POST \u002Fv1\u002Fworkday\u002Fpause`.\n- [Текущий статус](\u002Fdocs\u002Fworkday\u002Fstatus) — `GET \u002Fv1\u002Fworkday\u002Fstatus`.\n- [Рабочий день](\u002Fdocs\u002Fworkday) — обзор раздела.\n","\n## Поставить на паузу\n\n`POST \u002Fv1\u002Fworkday\u002Fpause`\n\nПриостанавливает текущий рабочий день. Статус переходит в `PAUSED`, длительность паузы накапливается до возобновления или закрытия дня. Тело запроса может быть пустым.\n\n## Поля запроса (body)\n\n| Поле | Тип | Обяз. | Описание |\n|------|-----|:-----:|---------|\n| `userId` | number | нет | Идентификатор сотрудника. По умолчанию — пользователь, которому принадлежат токены ключа |\n\nТело может быть пустым: `{}`.\n\n## Примеры\n\n### curl — личный ключ\n\n```bash\ncurl -X POST https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fworkday\u002Fpause \\\n  -H \"X-Api-Key: YOUR_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{}'\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl -X POST https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fworkday\u002Fpause \\\n  -H \"X-Api-Key: YOUR_APP_KEY\" \\\n  -H \"Authorization: Bearer USER_SESSION_TOKEN\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{}'\n```\n\n### JavaScript — личный ключ\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fworkday\u002Fpause', {\n  method: 'POST',\n  headers: {\n    'X-Api-Key': 'YOUR_API_KEY',\n    'Content-Type': 'application\u002Fjson',\n  },\n  body: JSON.stringify({}),\n})\nconst { data } = await res.json()\nconsole.log('Статус:', data.status)\n```\n\n### JavaScript — OAuth-приложение\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fworkday\u002Fpause', {\n  method: 'POST',\n  headers: {\n    'X-Api-Key': 'YOUR_APP_KEY',\n    'Authorization': 'Bearer USER_SESSION_TOKEN',\n    'Content-Type': 'application\u002Fjson',\n  },\n  body: JSON.stringify({}),\n})\nconst { data } = await res.json()\n```\n\n## Поля ответа\n\n| Поле | Тип | Описание |\n|------|-----|---------|\n| `success` | boolean | `true` при успешной постановке на паузу |\n| `data.status` | string | Статус после паузы — `PAUSED` |\n| `data.timeStart` | string | Дата и время начала дня (ISO 8601) |\n| `data.timeFinish` | string | Дата и время начала текущей паузы (ISO 8601) |\n| `data.duration` | string | Длительность дня в формате `HH:MM:SS` без учёта пауз |\n| `data.timeLeaks` | string | Суммарная длительность пауз за день в формате `HH:MM:SS` |\n| `data.active` | boolean | Признак активной записи рабочего дня |\n| `data.ipOpen` | string | IP-адрес начала дня |\n| `data.ipClose` | string | IP-адрес завершения дня. Пустая строка для дня, который ещё не был закрыт |\n| `data.latOpen` | number | Географическая широта точки начала |\n| `data.lonOpen` | number | Географическая долгота точки начала |\n| `data.latClose` | number | Географическая широта точки завершения |\n| `data.lonClose` | number | Географическая долгота точки завершения |\n| `data.tzOffset` | number | Смещение часового пояса сотрудника в секундах (зависит от настроек сотрудника на портале; пример `10800` соответствует UTC+3) |\n\n## Пример ответа\n\n```json\n{\n  \"success\": true,\n  \"data\": {\n    \"status\": \"PAUSED\",\n    \"timeStart\": \"2026-05-05T09:00:00+03:00\",\n    \"timeFinish\": \"2026-05-05T13:00:00+03:00\",\n    \"duration\": \"04:00:00\",\n    \"timeLeaks\": \"00:00:00\",\n    \"active\": true,\n    \"ipOpen\": \"203.0.113.10\",\n    \"ipClose\": \"\",\n    \"latOpen\": 0,\n    \"lonOpen\": 0,\n    \"latClose\": 0,\n    \"lonClose\": 0,\n    \"tzOffset\": 10800\n  }\n}\n```\n\n## Пример ответа при ошибке\n\n403 — у ключа нет скоупа `timeman`:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"SCOPE_DENIED\",\n    \"message\": \"This endpoint requires 'timeman' scope\"\n  }\n}\n```\n\n## Ошибки\n\n| HTTP | Код | Описание |\n|------|-----|---------|\n| 400 | `INVALID_PARAMS` | Битрикс24 вернул `INVALID_PARAMS` — нарушена валидация поля запроса |\n| 401 | `MISSING_API_KEY` | Не передан заголовок `X-Api-Key` |\n| 401 | `INVALID_API_KEY` | Неверный API-ключ |\n| 401 | `KEY_EXPIRED` | Срок действия API-ключа истёк |\n| 401 | `TOKEN_MISSING` | Ключу не настроены OAuth-токены для портала |\n| 402 | `ACCOUNT_FROZEN` | Баланс портала заморожен |\n| 403 | `SCOPE_DENIED` | У ключа нет скоупа `timeman` |\n| 422 | `BITRIX_ERROR` | Битрикс24 отклонил запрос — текст в `message` |\n| 429 | `RATE_LIMITED` | Превышен лимит запросов к Битрикс24 |\n| 502 | `BITRIX_UNAVAILABLE` | Портал Битрикс24 недоступен |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Известные особенности\n\n- **Снятие паузы — отдельный вызов.** Повторный `\u002Fpause` оставляет день в статусе `PAUSED` без изменений. Чтобы продолжить день после паузы, используйте [`POST \u002Fv1\u002Fworkday\u002Fopen`](\u002Fdocs\u002Fworkday\u002Fopen) — он переводит день обратно в `OPENED`.\n- **Возобновление закрытого дня.** Если день уже в статусе `CLOSED`, вызов возвращает текущее состояние без изменений. Чтобы продолжить ранее закрытый день, используйте [`POST \u002Fv1\u002Fworkday\u002Fopen`](\u002Fdocs\u002Fworkday\u002Fopen).\n\n## Смотрите также\n\n- [Открыть рабочий день](\u002Fdocs\u002Fworkday\u002Fopen) — `POST \u002Fv1\u002Fworkday\u002Fopen`. Используется и для продолжения дня после паузы.\n- [Закрыть рабочий день](\u002Fdocs\u002Fworkday\u002Fclose) — `POST \u002Fv1\u002Fworkday\u002Fclose`.\n- [Текущий статус](\u002Fdocs\u002Fworkday\u002Fstatus) — `GET \u002Fv1\u002Fworkday\u002Fstatus`.\n- [Рабочий день](\u002Fdocs\u002Fworkday) — обзор раздела.\n","\n## Текущий статус\n\n`GET \u002Fv1\u002Fworkday\u002Fstatus`\n\nВозвращает текущее состояние рабочего дня сотрудника: статус, время начала и завершения, длительность, перерывы.\n\n## Параметры\n\n| Параметр | Тип | Обязательный | Описание |\n|----------|-----|--------------|---------|\n| `userId` | number | нет | Идентификатор сотрудника. По умолчанию — пользователь, которому принадлежат токены ключа. Чужие `userId` доступны только администраторам портала и непосредственным руководителям сотрудника — иначе Bitrix24 возвращает ошибку доступа |\n\n## Примеры\n\n### curl — личный ключ\n\n```bash\ncurl -H \"X-Api-Key: YOUR_API_KEY\" \\\n  https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fworkday\u002Fstatus\n```\n\n### curl — статус другого сотрудника\n\n```bash\ncurl -H \"X-Api-Key: YOUR_API_KEY\" \\\n  \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fworkday\u002Fstatus?userId=503\"\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl -H \"X-Api-Key: YOUR_APP_KEY\" \\\n  -H \"Authorization: Bearer USER_SESSION_TOKEN\" \\\n  https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fworkday\u002Fstatus\n```\n\n### JavaScript — личный ключ\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fworkday\u002Fstatus', {\n  headers: { 'X-Api-Key': 'YOUR_API_KEY' },\n})\nconst { data } = await res.json()\nconsole.log('Статус:', data.status)\nconsole.log('Активный день:', data.active)\nconsole.log('Длительность:', data.duration)\n```\n\n### JavaScript — статус другого сотрудника\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fworkday\u002Fstatus?userId=503', {\n  headers: { 'X-Api-Key': 'YOUR_API_KEY' },\n})\nconst { data } = await res.json()\n```\n\n### JavaScript — OAuth-приложение\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fworkday\u002Fstatus', {\n  headers: {\n    'X-Api-Key': 'YOUR_APP_KEY',\n    'Authorization': 'Bearer USER_SESSION_TOKEN',\n  },\n})\nconst { data } = await res.json()\n```\n\n## Поля ответа\n\n| Поле | Тип | Описание |\n|------|-----|---------|\n| `success` | boolean | `true` при успешном ответе |\n| `data.status` | string | Статус дня: `OPENED`, `CLOSED`, `PAUSED`, `EXPIRED` |\n| `data.timeStart` | string | Дата и время начала текущего или последнего дня (ISO 8601) |\n| `data.timeFinish` | string \\| null | Дата и время завершения. `null` для незакрытого дня. Для дня в `PAUSED` — момент начала текущей паузы |\n| `data.duration` | string | Длительность дня в формате `HH:MM:SS` |\n| `data.timeLeaks` | string | Суммарная длительность пауз за день в формате `HH:MM:SS` |\n| `data.active` | boolean | Признак активной записи рабочего дня |\n| `data.ipOpen` | string | IP-адрес начала дня. Пустая строка, если день начат без фиксации IP |\n| `data.ipClose` | string | IP-адрес завершения дня. Пустая строка для незакрытого дня |\n| `data.latOpen` | number | Географическая широта точки начала. `0` — координаты не переданы |\n| `data.lonOpen` | number | Географическая долгота точки начала |\n| `data.latClose` | number | Географическая широта точки завершения |\n| `data.lonClose` | number | Географическая долгота точки завершения |\n| `data.tzOffset` | number | Смещение часового пояса сотрудника в секундах (зависит от настроек сотрудника на портале — пример `10800` соответствует UTC+3) |\n\nКогда у запрошенного сотрудника нет записи рабочего дня, в `data` присутствует только `status` — остальные поля отсутствуют. Подробнее — «Вырожденный ответ без записи дня» в «Известных особенностях».\n\n## Возможные значения `status`\n\n| Статус | Описание |\n|--------|---------|\n| `OPENED` | Рабочий день открыт |\n| `CLOSED` | Рабочий день закрыт |\n| `PAUSED` | Рабочий день на паузе |\n| `EXPIRED` | Рабочий день не был закрыт до начала следующих календарных суток |\n\n## Пример ответа\n\n```json\n{\n  \"success\": true,\n  \"data\": {\n    \"status\": \"OPENED\",\n    \"timeStart\": \"2026-05-05T09:00:00+03:00\",\n    \"timeFinish\": null,\n    \"duration\": \"04:00:00\",\n    \"timeLeaks\": \"00:30:00\",\n    \"active\": true,\n    \"ipOpen\": \"203.0.113.10\",\n    \"ipClose\": \"\",\n    \"latOpen\": 0,\n    \"lonOpen\": 0,\n    \"latClose\": 0,\n    \"lonClose\": 0,\n    \"tzOffset\": 10800\n  }\n}\n```\n\nСотрудник без записи рабочего дня — ответ вырождается до одного поля `status`:\n\n```json\n{\n  \"success\": true,\n  \"data\": {\n    \"status\": \"CLOSED\"\n  }\n}\n```\n\n## Пример ответа при ошибке\n\n403 — у ключа нет скоупа `timeman`:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"SCOPE_DENIED\",\n    \"message\": \"This endpoint requires 'timeman' scope\"\n  }\n}\n```\n\n## Ошибки\n\n| HTTP | Код | Описание |\n|------|-----|---------|\n| 400 | `INVALID_PARAMS` | `userId` не является положительным целым числом |\n| 401 | `MISSING_API_KEY` | Не передан заголовок `X-Api-Key` |\n| 401 | `INVALID_API_KEY` | Неверный API-ключ |\n| 401 | `KEY_EXPIRED` | Срок действия API-ключа истёк |\n| 401 | `TOKEN_MISSING` | Ключу не настроены OAuth-токены для портала |\n| 402 | `ACCOUNT_FROZEN` | Баланс портала заморожен |\n| 403 | `SCOPE_DENIED` | У ключа нет скоупа `timeman` |\n| 422 | `BITRIX_ERROR` | Битрикс24 отклонил запрос — текст в `message` (например, нет прав на чужого `userId`) |\n| 429 | `RATE_LIMITED` | Превышен лимит запросов к Битрикс24 |\n| 502 | `BITRIX_UNAVAILABLE` | Портал Битрикс24 недоступен |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Известные особенности\n\n- **Состояние после закрытия.** После закрытия дня эндпоинт продолжает возвращать сведения последнего дня (`CLOSED`, заполненный `timeFinish`) до открытия следующего — отчёт по закрытому дню доступен этим же запросом.\n- **Запись может быть любой давности — сверяйте `timeStart` с сегодняшней датой.** `status` и `timeStart` описывают *последнюю* запись рабочего дня сотрудника, а она может быть сколь угодно старой: Битрикс24 `timeman.status` возвращает последнюю запись независимо от её возраста. И день, `CLOSED` три года назад, и день, оставшийся `EXPIRED` (открытым и не закрытым) пять дней назад, отдаются как есть — ни один из них не означает «сегодня». У эндпоинта нет фильтра «только сегодня», поэтому, чтобы понять, относится ли день к текущей дате, сравните дату из `timeStart` с сегодняшней на своей стороне, прежде чем доверять `status`. Для командного дашборда считайте запись, у которой `timeStart` не сегодняшний, как «рабочий день сегодня не начат».\n- **Вырожденный ответ без записи дня.** Если у запрошенного сотрудника нет записи рабочего дня, `data` содержит только поле `status`. Остальные поля (`timeStart`, `timeFinish`, `duration` и прочие) в ответе отсутствуют, поэтому проверяйте наличие поля перед чтением. Запись отсутствует, например, у сотрудника, которому день ни разу не открывали.\n- **Закрытие просроченного дня.** В статусе `EXPIRED` день закрывается задним числом. Передайте в [`POST \u002Fv1\u002Fworkday\u002Fclose`](\u002Fdocs\u002Fworkday\u002Fclose) параметр `time` с датой, равной дате открытия дня — это значение `timeStart` из ответа этого эндпоинта — вместе с обязательным `report`. Дата `time`, не равная дате открытия, возвращает `422`.\n\n## Смотрите также\n\n- [Открыть рабочий день](\u002Fdocs\u002Fworkday\u002Fopen) — `POST \u002Fv1\u002Fworkday\u002Fopen`.\n- [Закрыть рабочий день](\u002Fdocs\u002Fworkday\u002Fclose) — `POST \u002Fv1\u002Fworkday\u002Fclose`.\n- [Поставить на паузу](\u002Fdocs\u002Fworkday\u002Fpause) — `POST \u002Fv1\u002Fworkday\u002Fpause`.\n- [Настройки учёта](\u002Fdocs\u002Fworkday\u002Fsettings) — `GET \u002Fv1\u002Fworkday\u002Fsettings`.\n- [Рабочий день](\u002Fdocs\u002Fworkday) — обзор раздела.\n","\n## Настройки учёта\n\n`GET \u002Fv1\u002Fworkday\u002Fsettings`\n\nВозвращает настройки учёта рабочего времени, действующие на портале для текущего пользователя: разрешено ли рабочее время, свободный ли график, допустимое начало и завершение дня, минимальная длительность.\n\n## Параметры\n\nПараметров нет.\n\n## Примеры\n\n### curl — личный ключ\n\n```bash\ncurl -H \"X-Api-Key: YOUR_API_KEY\" \\\n  https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fworkday\u002Fsettings\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl -H \"X-Api-Key: YOUR_APP_KEY\" \\\n  -H \"Authorization: Bearer USER_SESSION_TOKEN\" \\\n  https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fworkday\u002Fsettings\n```\n\n### JavaScript — личный ключ\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fworkday\u002Fsettings', {\n  headers: { 'X-Api-Key': 'YOUR_API_KEY' },\n})\nconst { data } = await res.json()\nconsole.log('Учёт времени включён:', data.ufTimeman)\nconsole.log('Свободный график:', data.ufTmFree)\nconsole.log('Допустимое начало до:', data.ufTmMaxStart)\n```\n\n### JavaScript — OAuth-приложение\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fworkday\u002Fsettings', {\n  headers: {\n    'X-Api-Key': 'YOUR_APP_KEY',\n    'Authorization': 'Bearer USER_SESSION_TOKEN',\n  },\n})\nconst { data } = await res.json()\n```\n\n## Поля ответа\n\n| Поле | Тип | Описание |\n|------|-----|---------|\n| `success` | boolean | `true` при успешном ответе |\n| `data.ufTimeman` | boolean | Включён ли учёт рабочего времени для пользователя |\n| `data.ufTmFree` | boolean | Свободный график. `true` — нет ограничений по началу и завершению дня; `false` — действуют поля `ufTmMaxStart`\u002F`ufTmMinFinish`\u002F`ufTmMinDuration` |\n| `data.ufTmMaxStart` | string | Самое позднее допустимое время начала дня в формате `HH:MM:SS` |\n| `data.ufTmMinFinish` | string | Самое раннее допустимое время завершения дня в формате `HH:MM:SS` |\n| `data.ufTmMinDuration` | string | Минимальная длительность рабочего дня в формате `HH:MM:SS` |\n| `data.ufTmAllowedDelta` | string | Допустимое отклонение от установленного времени начала и завершения в формате `HH:MM:SS` |\n| `data.admin` | boolean | Является ли пользователь администратором учёта рабочего времени |\n\n## Пример ответа\n\n```json\n{\n  \"success\": true,\n  \"data\": {\n    \"ufTimeman\": true,\n    \"ufTmFree\": true,\n    \"ufTmMaxStart\": \"09:15:00\",\n    \"ufTmMinFinish\": \"17:45:00\",\n    \"ufTmMinDuration\": \"08:00:00\",\n    \"ufTmAllowedDelta\": \"00:15:00\",\n    \"admin\": true\n  }\n}\n```\n\n## Пример ответа при ошибке\n\n403 — у ключа нет скоупа `timeman`:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"SCOPE_DENIED\",\n    \"message\": \"This endpoint requires 'timeman' scope\"\n  }\n}\n```\n\n## Ошибки\n\n| HTTP | Код | Описание |\n|------|-----|---------|\n| 401 | `MISSING_API_KEY` | Не передан заголовок `X-Api-Key` |\n| 401 | `INVALID_API_KEY` | Неверный API-ключ |\n| 401 | `KEY_EXPIRED` | Срок действия API-ключа истёк |\n| 401 | `TOKEN_MISSING` | Ключу не настроены OAuth-токены для портала |\n| 402 | `ACCOUNT_FROZEN` | Баланс портала заморожен |\n| 403 | `SCOPE_DENIED` | У ключа нет скоупа `timeman` |\n| 422 | `BITRIX_ERROR` | Битрикс24 отклонил запрос — текст в `message` |\n| 429 | `RATE_LIMITED` | Превышен лимит запросов к Битрикс24 |\n| 502 | `BITRIX_UNAVAILABLE` | Портал Битрикс24 недоступен |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Известные особенности\n\n- **Привязка к токенам ключа.** Ответ соответствует пользователю, которому принадлежат токены ключа. У разных сотрудников значения могут отличаться, если для них настроены разные графики работы.\n\n## Смотрите также\n\n- [График работы](\u002Fdocs\u002Fworkday\u002Fschedule) — `GET \u002Fv1\u002Fworkday\u002Fschedule`.\n- [Текущий статус](\u002Fdocs\u002Fworkday\u002Fstatus) — `GET \u002Fv1\u002Fworkday\u002Fstatus`.\n- [Рабочий день](\u002Fdocs\u002Fworkday) — обзор раздела.\n","\n## График работы\n\n`GET \u002Fv1\u002Fworkday\u002Fschedule`\n\nВозвращает график работы по идентификатору. Параметр id обязателен. Если графика с указанным идентификатором не существует, возвращается пустой массив.\n\n## Параметры\n\n| Параметр | В | Тип | Обяз. | По умолч. | Описание |\n|----------|---|-----|:-----:|-----------|---------|\n| `id` | query | number | да | — | Идентификатор графика. Список графиков и их идентификаторы настраиваются в разделе учёта рабочего времени на портале Битрикс24 |\n\n## Примеры\n\n### curl — личный ключ\n\n```bash\ncurl -H \"X-Api-Key: YOUR_API_KEY\" \\\n  \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fworkday\u002Fschedule?id=1\"\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl -H \"X-Api-Key: YOUR_APP_KEY\" \\\n  -H \"Authorization: Bearer USER_SESSION_TOKEN\" \\\n  \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fworkday\u002Fschedule?id=1\"\n```\n\n### JavaScript — личный ключ\n\n```javascript\nconst res = await fetch(\n  'https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fworkday\u002Fschedule?id=1',\n  { headers: { 'X-Api-Key': 'YOUR_API_KEY' } },\n)\nconst { data } = await res.json()\nif (Array.isArray(data) && data.length === 0) {\n  console.log('График не найден')\n} else {\n  console.log('График:', data.name)\n  console.log('Тип:', data.scheduleType)\n}\n```\n\n### JavaScript — OAuth-приложение\n\n```javascript\nconst res = await fetch(\n  'https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fworkday\u002Fschedule?id=1',\n  {\n    headers: {\n      'X-Api-Key': 'YOUR_APP_KEY',\n      'Authorization': 'Bearer USER_SESSION_TOKEN',\n    },\n  },\n)\nconst { data } = await res.json()\n```\n\n## Поля ответа\n\nКогда график найден, `data` — объект со сведениями о графике. Когда график с указанным `id` отсутствует, `data` — пустой массив.\n\n| Поле | Тип | Описание |\n|------|-----|---------|\n| `success` | boolean | `true` при успешном ответе |\n| `data` | object \\| array | Объект графика или пустой массив `[]` для несуществующего идентификатора |\n| `data.id` | number | Идентификатор графика |\n| `data.name` | string | Название графика |\n| `data.scheduleType` | string | Тип графика: `FIXED` (фиксированный), `SHIFT` (сменный), `FLEXTIME` (свободный) |\n| `data.reportPeriod` | string | Периодичность отчётов: `MONTH`, `WEEK`, `TWO_WEEKS`, `QUARTER` |\n| `data.reportPeriodOptions` | object | Дополнительные настройки периода отчётов (например, `startWeekDay`). Возвращается для всех значений `reportPeriod` |\n| `data.calendarId` | number | Идентификатор календаря, связанного с графиком |\n| `data.allowedDevices` | object | Разрешённые устройства учёта (`browser`, `mobile`). Каждое поле — boolean |\n| `data.deleted` | string | `\"0\"` — график активен; `\"1\"` — график удалён |\n| `data.isForAllUsers` | boolean | `true` — график применяется ко всем сотрудникам |\n| `data.worktimeRestrictions` | array | Массив правил ограничений рабочего времени. Пустой массив — ограничений нет |\n| `data.controlledActions` | number | Количество контролируемых действий по графику |\n| `data.updatedBy` | number | Идентификатор пользователя, который последним обновил график. `0` — обновлений не было |\n| `data.deletedBy` | number | Идентификатор пользователя, удалившего график. `0` — график не удалён |\n| `data.deletedAt` | string | Дата и время удаления. Пустая строка — график не удалён |\n| `data.createdBy` | number | Идентификатор пользователя, создавшего график. `0` — системное создание |\n| `data.createdAt` | string | Дата и время создания (ISO 8601) |\n| `data.shifts` | array | Массив объектов смен по графику |\n| `data.shifts[].id` | number | Идентификатор смены |\n| `data.shifts[].name` | string | Название смены |\n| `data.shifts[].breakDuration` | number | Длительность перерыва в секундах (`3600` = 1 час) |\n| `data.shifts[].workTimeStart` | number | Время начала смены в секундах от начала суток (`32400` = 09:00) |\n| `data.shifts[].workTimeEnd` | number | Время завершения смены в секундах от начала суток (`64800` = 18:00) |\n| `data.shifts[].workDays` | string | Дни недели цифрами 1–7, где 1 = понедельник, 7 = воскресенье. `\"12345\"` — будние дни |\n| `data.shifts[].scheduleId` | number | Идентификатор графика, к которому привязана смена |\n| `data.shifts[].deleted` | boolean | Признак удалённой смены (boolean, в отличие от строкового `data.deleted`) |\n| `data.calendar` | object | Сведения о календаре графика |\n| `data.calendar.id` | number | Идентификатор календаря |\n| `data.calendar.name` | string | Название календаря |\n| `data.calendar.parentCalendarId` | number | Идентификатор родительского календаря |\n| `data.calendar.systemCode` | string | Системный код календаря |\n| `data.calendar.exclusions` | array | Список исключений календаря |\n| `data.scheduleViolationRules` | object | Правила нарушения графика. Поля со значением `-1` означают «параметр не задан» |\n\n## Пример ответа\n\nГрафик с указанным идентификатором найден (тип `FIXED`, смена 09:00–18:00 пн-пт):\n\n```json\n{\n  \"success\": true,\n  \"data\": {\n    \"id\": 9,\n    \"name\": \"Фиксированный график\",\n    \"scheduleType\": \"FIXED\",\n    \"reportPeriod\": \"MONTH\",\n    \"reportPeriodOptions\": { \"startWeekDay\": 0 },\n    \"calendarId\": 37,\n    \"allowedDevices\": { \"browser\": true, \"mobile\": true },\n    \"deleted\": \"0\",\n    \"isForAllUsers\": true,\n    \"worktimeRestrictions\": [],\n    \"controlledActions\": 3,\n    \"updatedBy\": 0,\n    \"deletedBy\": 0,\n    \"deletedAt\": \"\",\n    \"createdBy\": 1,\n    \"createdAt\": \"2026-05-05T11:50:40+03:00\",\n    \"shifts\": [\n      {\n        \"id\": 7,\n        \"name\": \"\",\n        \"breakDuration\": 3600,\n        \"workTimeStart\": 32400,\n        \"workTimeEnd\": 64800,\n        \"workDays\": \"12345\",\n        \"scheduleId\": 9,\n        \"deleted\": false\n      }\n    ],\n    \"calendar\": {\n      \"id\": 37,\n      \"name\": \"\",\n      \"parentCalendarId\": 1,\n      \"systemCode\": \"\",\n      \"exclusions\": []\n    },\n    \"scheduleViolationRules\": {\n      \"id\": 11,\n      \"scheduleId\": 9,\n      \"entityCode\": \"UA\",\n      \"maxExactStart\": -1,\n      \"minExactEnd\": -1,\n      \"maxOffsetStart\": -1,\n      \"minOffsetEnd\": -1,\n      \"relativeStartFrom\": -1,\n      \"relativeStartTo\": -1,\n      \"relativeEndFrom\": -1,\n      \"relativeEndTo\": -1,\n      \"minDayDuration\": -1,\n      \"maxAllowedToEditWorkTime\": -1,\n      \"maxWorkTimeLackForPeriod\": -1,\n      \"periodTimeLackAgentId\": 0,\n      \"maxShiftStartDelay\": -1,\n      \"missedShiftStart\": 0,\n      \"usersToNotify\": {\n        \"fixedStartEnd\": [],\n        \"fixedPerRecord\": [],\n        \"fixedEditWorktime\": [],\n        \"fixedPeriodic\": [],\n        \"shiftDelay\": [],\n        \"shiftMissedStart\": []\n      }\n    }\n  }\n}\n```\n\nГрафик с указанным идентификатором не найден:\n\n```json\n{\n  \"success\": true,\n  \"data\": []\n}\n```\n\n## Пример ответа при ошибке\n\n422 — параметр `id` не передан:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"BITRIX_ERROR\",\n    \"message\": \"Could not find value for parameter {id}\"\n  }\n}\n```\n\n## Ошибки\n\n| HTTP | Код | Описание |\n|------|-----|---------|\n| 400 | `INVALID_PARAMS` | Битрикс24 вернул `INVALID_PARAMS` — нарушена валидация поля запроса |\n| 401 | `MISSING_API_KEY` | Не передан заголовок `X-Api-Key` |\n| 401 | `INVALID_API_KEY` | Неверный API-ключ |\n| 401 | `KEY_EXPIRED` | Срок действия API-ключа истёк |\n| 401 | `TOKEN_MISSING` | Ключу не настроены OAuth-токены для портала |\n| 402 | `ACCOUNT_FROZEN` | Баланс портала заморожен |\n| 403 | `SCOPE_DENIED` | У ключа нет скоупа `timeman` |\n| 422 | `BITRIX_ERROR` | Битрикс24 отклонил запрос — текст в `message` (например, не передан `id` или у пользователя нет прав на просмотр графика) |\n| 429 | `RATE_LIMITED` | Превышен лимит запросов к Битрикс24 |\n| 502 | `BITRIX_UNAVAILABLE` | Портал Битрикс24 недоступен |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Известные особенности\n\n- **Тип поля `deleted` различается на разных уровнях ответа.** На уровне графика `data.deleted` — строка (`\"0\"`\u002F`\"1\"`), внутри смены `data.shifts[].deleted` — boolean (`true`\u002F`false`). При написании клиентского кода нельзя обрабатывать оба поля одинаково.\n\n## Смотрите также\n\n- [Настройки учёта](\u002Fdocs\u002Fworkday\u002Fsettings) — `GET \u002Fv1\u002Fworkday\u002Fsettings`.\n- [Текущий статус](\u002Fdocs\u002Fworkday\u002Fstatus) — `GET \u002Fv1\u002Fworkday\u002Fstatus`.\n- [Рабочий день](\u002Fdocs\u002Fworkday) — обзор раздела.\n"]