[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"docs-entities\u002Fcalendar-events":3,"docs-tabs-entities\u002Fcalendar-events":6},{"content":4,"lastmod":5},"# События календаря\n\nУправление событиями календарей Битрикс24: личных, групповых и календарей компании. Поддерживаются создание, получение, обновление и удаление событий, а также получение схемы полей.\n\nБитрикс24 API: `calendar.event.*`\nСкоуп: `calendar`\n\n## Операции\n\n- [Создать событие](.\u002Fcalendar-events\u002Fcreate.md) — `POST \u002Fv1\u002Fcalendar-events`\n- [Список событий](.\u002Fcalendar-events\u002Flist.md) — `GET \u002Fv1\u002Fcalendar-events`\n- [Получить событие](.\u002Fcalendar-events\u002Fget.md) — `GET \u002Fv1\u002Fcalendar-events\u002F:id`\n- [Обновить событие](.\u002Fcalendar-events\u002Fupdate.md) — `PATCH \u002Fv1\u002Fcalendar-events\u002F:id`\n- [Удалить событие](.\u002Fcalendar-events\u002Fdelete.md) — `DELETE \u002Fv1\u002Fcalendar-events\u002F:id`\n- [Поиск событий](.\u002Fcalendar-events\u002Fsearch.md) — `POST \u002Fv1\u002Fcalendar-events\u002Fsearch`\n- [Поля события](.\u002Fcalendar-events\u002Ffields.md) — `GET \u002Fv1\u002Fcalendar-events\u002Ffields`\n\n## Ключевые поля\n\n| Поле | Описание |\n|------|---------|\n| `type` | Тип календаря: `user`, `group`, `company_calendar` |\n| `ownerId` | ID владельца календаря. Для `type=user` — ID сотрудника из `GET \u002Fv1\u002Fusers`, для `type=group` — ID рабочей группы |\n| `name` | Название события |\n| `from` \u002F `to` | Начало и конец события в ISO 8601 |\n| `timezoneFrom` \u002F `timezoneTo` | Часовой пояс события в формате IANA (`Europe\u002FMoscow`). Необязателен — без него используется часовой пояс сотрудника, к которому привязан API-ключ |\n| `skipTime` | Событие на весь день — при `true` длительность фиксируется в 24 часа |\n| `sectionId` | ID секции календаря |\n| `attendees` | Массив ID приглашённых сотрудников для записи (`POST`\u002F`PATCH`). На чтение участники приходят в полях `attendeeList`, `attendeesCodes` |\n| `rrule` | Расписание повторения регулярного события — объект с полями периодичности и границ серии |\n\nПолный список полей — [`GET \u002Fv1\u002Fcalendar-events\u002Ffields`](.\u002Fcalendar-events\u002Ffields.md).\n\n## Что нужно знать перед работой\n\n1. **Календарь определяется парой `type` + `ownerId`.** Эта пара обязательна и для списка событий, и для создания. События всегда привязаны к конкретному календарю, а не к порталу в целом.\n2. **Для создания события нужны 5 полей:** `type`, `ownerId`, `name`, `from`, `to`. Если событие на весь день — передайте `skipTime: true`; время в `from`\u002F`to` будет проигнорировано, длительность события зафиксируется в 24 часа.\n3. **`from` и `to` принимают ISO 8601 в любом виде:** с offset (`\"2026-06-01T10:00:00+03:00\"`), в UTC (`\"2026-06-01T07:00:00Z\"`) или без зоны (`\"2026-06-01T10:00:00\"`). В ответе возвращается ISO 8601 с offset; instant и wall-clock соответствуют тому, что отображается в календаре пользователя.\n4. **Часовой пояс события задаётся через `timezoneFrom` \u002F `timezoneTo`.** Передайте IANA-имя (`Europe\u002FMoscow`, `Asia\u002FAlmaty`, `UTC`). Если параметры опущены, событие создаётся в часовом поясе сотрудника-владельца API-ключа.\n5. **`PATCH` — частичный.** При обновлении одного поля Вайбкод дочитывает текущее состояние события и автоматически подставляет `type`, `ownerId`, `name`, которые Битрикс24 требует при каждом обновлении.\n6. **Отключение источника — на стороне приложения, не платформы.** API без состояния: чтобы перестать получать события календаря, приложение не вызывает `GET \u002Fv1\u002Fcalendar-events`. Платформа не хранит признак «источник включён» и не возобновляет загрузку по сохранённым настройкам приложения. Ответы `calendar-events` не кэшируются — кэш на стороне Вайбкод включается только для `GET \u002Fv1\u002Fusers` и `GET \u002Fv1\u002Fstatuses`, см. [Кэширование](\u002Fdocs\u002Foptimization). Устаревшие данные после отключения источника берутся из состояния самого приложения, а не от платформы.\n\n## Типичный сценарий\n\n1. Найти владельца календаря: [`GET \u002Fv1\u002Fusers`](\u002Fdocs\u002Fentities\u002Fusers) для личного календаря или ID рабочей группы для группового.\n2. Получить ближайшие события: [`GET \u002Fv1\u002Fcalendar-events?type=user&ownerId=1`](.\u002Fcalendar-events\u002Flist.md).\n3. Создать новое или обновить существующее: [`POST \u002Fv1\u002Fcalendar-events`](.\u002Fcalendar-events\u002Fcreate.md) \u002F [`PATCH \u002Fv1\u002Fcalendar-events\u002F:id`](.\u002Fcalendar-events\u002Fupdate.md).\n\n## Лимиты\n\n| Лимит | Значение |\n|-------|----------|\n| Максимум записей на запрос | 5000 (`limit ≤ 5000`) |\n| Авто-пагинация | включается при `limit > 50` |\n| `offset` на больших выборках | рекомендуется `limit ≤ 500` при `offset ≥ 2500` |\n| Batch-запросы | до 50 операций в [`POST \u002Fv1\u002Fbatch`](\u002Fdocs\u002Fbatch) |\n| Rate limit | общий для Вайбкод API — см. [Лимиты и оптимизация](\u002Fdocs\u002Foptimization) |\n\n## Смотрите также\n\n- [Entity API](\u002Fdocs\u002Fentity-api)\n- [Batch](\u002Fdocs\u002Fbatch)\n- [Справочник сущностей](\u002Fdocs\u002Fentities-index)\n","2026-07-01",{"calendar-events\u002Fcreate.md":7,"calendar-events\u002Flist.md":8,"calendar-events\u002Fget.md":9,"calendar-events\u002Fupdate.md":10,"calendar-events\u002Fdelete.md":11,"calendar-events\u002Fsearch.md":12,"calendar-events\u002Ffields.md":13},"\n## Создать событие\n\n`POST \u002Fv1\u002Fcalendar-events`\n\nСоздаёт новое событие в указанном календаре.\n\n## Поля запроса (body)\n\n| Поле | Тип | Обяз. | Описание |\n|------|-----|:-----:|---------|\n| `type` | string | да | Тип календаря: `user`, `group`, `company_calendar` |\n| `ownerId` | number | да | ID владельца календаря: сотрудник (`GET \u002Fv1\u002Fusers`) или рабочая группа |\n| `name` | string | да | Название события |\n| `from` | datetime | да | Начало события в ISO 8601. Принимается строка с явным смещением (`2026-06-10T10:00:00+03:00`), в UTC (`2026-06-10T07:00:00Z`) или без зоны (`2026-06-10T10:00:00`) |\n| `to` | datetime | да | Окончание события в ISO 8601. Принимается строка с явным смещением (`2026-06-10T11:00:00+03:00`), в UTC (`2026-06-10T08:00:00Z`) или без зоны (`2026-06-10T11:00:00`) |\n| `timezoneFrom` | string | нет | Часовой пояс начала события (IANA-имя: `Europe\u002FMoscow`, `Asia\u002FAlmaty`, `UTC`). Без него используется часовой пояс сотрудника-владельца API-ключа |\n| `timezoneTo` | string | нет | Часовой пояс окончания события (IANA-имя) |\n| `description` | string | нет | Описание |\n| `sectionId` | number | нет | ID секции календаря. Если поле не передано — при каждом вызове создаётся новая секция. Чтобы события писались в одну секцию, передавайте `sectionId` существующей секции. ID существующей секции возвращает [`GET \u002Fv1\u002Fcalendar-events`](.\u002Flist.md) в поле `sectionId` любого ранее созданного события |\n| `skipTime` | boolean | нет | Событие на весь день. При `true` время в `from`\u002F`to` игнорируется, длительность фиксируется в 24 часа |\n| `importance` | string | нет | `high`, `normal`, `low` |\n| `accessibility` | string | нет | Занятость: `busy`, `quest` (под вопросом), `free`, `absent` |\n| `location` | string | нет | Место проведения |\n| `color` | string | нет | Цвет события (HEX, `#RRGGBB`) |\n| `attendees` | number[] | нет | Массив ID приглашённых сотрудников. Список: `GET \u002Fv1\u002Fusers`. **Только для записи** — в ответе участники возвращаются в полях `attendeeList`, `attendeesCodes`. См. [Поля события](.\u002Ffields.md) |\n| `remind` | array | нет | Настройки напоминаний. Каждый элемент: `{type: 'min' \\| 'hour' \\| 'day', count: \u003Cчисло>}` |\n| `rrule` | object | нет | Расписание повторения регулярного события. Структура полей и пример — секция [Регулярное событие](#регулярное-событие) ниже |\n| `isPrivate` | boolean | нет | Приватное событие — детали скрыты от других пользователей |\n| `isMeeting` | boolean | нет | Событие-встреча с приглашениями |\n\nПолный список полей: [`GET \u002Fv1\u002Fcalendar-events\u002Ffields`](.\u002Ffields.md).\n\n## Примеры\n\n### curl — личный ключ\n\n```bash\ncurl -X POST \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fcalendar-events\" \\\n  -H \"X-Api-Key: YOUR_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"type\": \"user\",\n    \"ownerId\": 1,\n    \"name\": \"Созвон с командой\",\n    \"from\": \"2026-06-10T10:00:00\",\n    \"to\": \"2026-06-10T11:00:00\",\n    \"timezoneFrom\": \"Europe\u002FMoscow\",\n    \"timezoneTo\": \"Europe\u002FMoscow\",\n    \"description\": \"Еженедельная синхронизация\",\n    \"accessibility\": \"busy\",\n    \"sectionId\": 3\n  }'\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl -X POST \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fcalendar-events\" \\\n  -H \"X-Api-Key: YOUR_APP_KEY\" \\\n  -H \"Authorization: Bearer USER_SESSION_TOKEN\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"type\": \"user\",\n    \"ownerId\": 1,\n    \"name\": \"Созвон с командой\",\n    \"from\": \"2026-06-10T10:00:00\",\n    \"to\": \"2026-06-10T11:00:00\",\n    \"timezoneFrom\": \"Europe\u002FMoscow\",\n    \"timezoneTo\": \"Europe\u002FMoscow\",\n    \"description\": \"Еженедельная синхронизация\",\n    \"accessibility\": \"busy\",\n    \"sectionId\": 3\n  }'\n```\n\n### JavaScript — личный ключ\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fcalendar-events', {\n  method: 'POST',\n  headers: {\n    'X-Api-Key': 'YOUR_API_KEY',\n    'Content-Type': 'application\u002Fjson',\n  },\n  body: JSON.stringify({\n    type: 'user',\n    ownerId: 1,\n    name: 'Созвон с командой',\n    from: '2026-06-10T10:00:00',\n    to: '2026-06-10T11:00:00',\n    timezoneFrom: 'Europe\u002FMoscow',\n    timezoneTo: 'Europe\u002FMoscow',\n    description: 'Еженедельная синхронизация',\n    accessibility: 'busy',\n    sectionId: 3,\n  }),\n})\n\nconst { success, data } = await res.json()\nconsole.log('ID события:', data.id)\n```\n\n### JavaScript — OAuth-приложение\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fcalendar-events', {\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    type: 'user',\n    ownerId: 1,\n    name: 'Созвон с командой',\n    from: '2026-06-10T10:00:00',\n    to: '2026-06-10T11:00:00',\n    timezoneFrom: 'Europe\u002FMoscow',\n    timezoneTo: 'Europe\u002FMoscow',\n    description: 'Еженедельная синхронизация',\n    accessibility: 'busy',\n    sectionId: 3,\n  }),\n})\n\nconst { success, data } = await res.json()\n```\n\n## Регулярное событие\n\nЧтобы создать повторяющееся событие, передайте поле `rrule` как объект. Запрос:\n\n```bash\ncurl -X POST \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fcalendar-events\" \\\n  -H \"X-Api-Key: YOUR_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"type\": \"user\",\n    \"ownerId\": 1,\n    \"name\": \"Созвон команды\",\n    \"from\": \"2026-07-13T10:00:00\",\n    \"to\": \"2026-07-13T11:00:00\",\n    \"timezoneFrom\": \"Europe\u002FMoscow\",\n    \"timezoneTo\": \"Europe\u002FMoscow\",\n    \"rrule\": {\n      \"FREQ\": \"WEEKLY\",\n      \"INTERVAL\": 1,\n      \"BYDAY\": [\"MO\", \"WE\"],\n      \"UNTIL\": \"2026-09-30\"\n    }\n  }'\n```\n\nСоздаётся одно событие с одним `id` — список (`GET \u002Fv1\u002Fcalendar-events`) вернёт по элементу на каждое вхождение серии, все они будут иметь общий `parentId`. Удаление события (`DELETE \u002Fv1\u002Fcalendar-events\u002F:id`) убирает всю серию.\n\nПоля `rrule`:\n\n| Поле | Тип | Описание |\n|------|-----|---------|\n| `FREQ` | string | Периодичность: `DAILY`, `WEEKLY`, `MONTHLY`, `YEARLY` |\n| `INTERVAL` | number | Интервал. `1` — каждый цикл, `2` — через один и т. д. |\n| `BYDAY` | string[] | Дни недели для `WEEKLY`: `SU`, `MO`, `TU`, `WE`, `TH`, `FR`, `SA` |\n| `UNTIL` | date | Дата окончания серии в формате `YYYY-MM-DD`. Альтернатива — `COUNT` |\n| `COUNT` | number | Количество повторений. Альтернатива — `UNTIL` |\n\n## Поля ответа\n\nОбъект созданного события со всеми полями — см. [Поля события](.\u002Ffields.md).\n\nURL карточки события в Битрикс24 зависит от типа календаря:\n\n| `type` | URL |\n|---|---|\n| `user` | `https:\u002F\u002F\u003Cportal>.bitrix24.ru\u002Fcompany\u002Fpersonal\u002Fuser\u002F\u003CownerId>\u002Fcalendar\u002F?EVENT_ID=\u003Cid>&EVENT_DATE=\u003Cdd.mm.yyyy>` |\n| `group` | `https:\u002F\u002F\u003Cportal>.bitrix24.ru\u002Fworkgroups\u002Fgroup\u002F\u003CownerId>\u002Fcalendar\u002F?EVENT_ID=\u003Cid>&EVENT_DATE=\u003Cdd.mm.yyyy>` |\n| `company_calendar` | `https:\u002F\u002F\u003Cportal>.bitrix24.ru\u002Fcalendar\u002F?EVENT_ID=\u003Cid>&EVENT_DATE=\u003Cdd.mm.yyyy>` |\n\n`\u003Cdd.mm.yyyy>` — дата начала события (поле `from`) в формате «день.месяц.год» через точку. `\u003Cportal>` — домен вашего портала. Доступ ограничен правами сотрудника в Битрикс24.\n\n## Пример ответа\n\n```json\n{\n  \"success\": true,\n  \"data\": {\n    \"id\": 7773,\n    \"parentId\": 7773,\n    \"deleted\": false,\n    \"type\": \"user\",\n    \"ownerId\": 1,\n    \"name\": \"Созвон с командой\",\n    \"from\": \"2026-06-10T10:00:00+03:00\",\n    \"to\": \"2026-06-10T11:00:00+03:00\",\n    \"skipTime\": false,\n    \"durationSeconds\": 3600,\n    \"createdBy\": 1,\n    \"dateCreate\": \"06\u002F05\u002F2026 09:12:00 am\",\n    \"updatedAt\": \"06\u002F05\u002F2026 09:12:00 am\",\n    \"description\": \"Еженедельная синхронизация\",\n    \"accessibility\": \"busy\",\n    \"importance\": \"normal\",\n    \"isMeeting\": false,\n    \"meetingStatus\": \"H\",\n    \"meetingHost\": 1,\n    \"sectionId\": 3,\n    \"attendeeList\": [\n      { \"id\": 1, \"entryId\": \"7773\", \"status\": \"H\" }\n    ]\n  }\n}\n```\n\n## Пример ответа при ошибке\n\n422 — не передано обязательное поле:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"BITRIX_ERROR\",\n    \"message\": \"Не задан обязательный параметр \\\"name\\\" для метода \\\"calendar.event.add\\\"\"\n  }\n}\n```\n\n## Ошибки\n\n| HTTP | Код | Описание |\n|------|-----|---------|\n| 422 | `BITRIX_ERROR` | Не передано обязательное поле (`type`, `ownerId`, `name`, `from`, `to`) |\n| 400 | `READONLY_FIELD` | В теле запроса передано read-only поле (`id`, `createdBy`, `dateCreate`, `updatedAt`) |\n| 403 | `SCOPE_DENIED` | API-ключ не имеет скоупа `calendar` |\n| 401 | `TOKEN_MISSING` | API-ключ не имеет настроенных токенов |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Известные особенности\n\n**Накопление секций при создании без `sectionId`.** Если поле `sectionId` не передано, при каждом вызове создаётся новая секция календаря. На серии вызовов без `sectionId` в календаре сотрудника копятся пустые секции, видимые в веб-интерфейсе Битрикс24. Чтобы все события писались в одну секцию, передавайте `sectionId` существующей секции — её ID можно взять из ответа [`GET \u002Fv1\u002Fcalendar-events`](.\u002Flist.md).\n\n## Смотрите также\n\n- [Поля события](.\u002Ffields.md)\n- [Обновить событие](.\u002Fupdate.md)\n- [Удалить событие](.\u002Fdelete.md)\n- [Список событий](.\u002Flist.md)\n","\n## Список событий\n\n`GET \u002Fv1\u002Fcalendar-events`\n\nВозвращает события календаря за фиксированный период вокруг текущей даты: с месяца назад по три месяца вперёд.\n\n## Параметры\n\n| Параметр | Тип | Обяз. | По умолч. | Описание |\n|----------|-----|:-----:|-----------|---------|\n| `type` (query) | string | да | — | Тип календаря: `user`, `group`, `company_calendar` |\n| `ownerId` (query) | number | да | — | ID владельца календаря: сотрудник (`GET \u002Fv1\u002Fusers`) или рабочая группа |\n| `limit` (query) | number | нет | `50` | Количество записей (до 5000). При `limit > 50` Вайбкод автоматически запрашивает несколько страниц у Битрикс24 |\n| `offset` (query) | number | нет | `0` | Пропустить N записей. При `offset > 0` рекомендуется `limit ≤ 500` |\n\n## Примеры\n\n### curl — личный ключ\n\n```bash\ncurl \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fcalendar-events?type=user&ownerId=1&limit=10\" \\\n  -H \"X-Api-Key: YOUR_API_KEY\"\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fcalendar-events?type=user&ownerId=1&limit=10\" \\\n  -H \"X-Api-Key: YOUR_APP_KEY\" \\\n  -H \"Authorization: Bearer USER_SESSION_TOKEN\"\n```\n\n### JavaScript — личный ключ\n\n```javascript\nconst params = new URLSearchParams({ type: 'user', ownerId: '1', limit: '10' })\nconst res = await fetch(`https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fcalendar-events?${params}`, {\n  headers: {\n    'X-Api-Key': 'YOUR_API_KEY',\n  },\n})\n\nconst { success, data, meta } = await res.json()\nconsole.log(`Найдено ${meta.total} событий`)\n```\n\n### JavaScript — OAuth-приложение\n\n```javascript\nconst params = new URLSearchParams({ type: 'user', ownerId: '1', limit: '10' })\nconst res = await fetch(`https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fcalendar-events?${params}`, {\n  headers: {\n    'X-Api-Key': 'YOUR_APP_KEY',\n    'Authorization': 'Bearer USER_SESSION_TOKEN',\n  },\n})\n\nconst { success, data, meta } = await res.json()\n```\n\n## Поля ответа\n\n| Поле | Тип | Описание |\n|------|-----|---------|\n| `success` | boolean | Всегда `true` при успехе |\n| `data` | array | Массив событий (все поля — см. [Поля события](.\u002Ffields.md)) |\n| `meta.total` | number | Общее количество событий в выборке |\n| `meta.hasMore` | boolean | Есть ли ещё записи за пределами `limit` |\n\nURL карточки любого события из массива `data` зависит от типа календаря:\n\n| `type` | URL |\n|---|---|\n| `user` | `https:\u002F\u002F\u003Cportal>.bitrix24.ru\u002Fcompany\u002Fpersonal\u002Fuser\u002F\u003CownerId>\u002Fcalendar\u002F?EVENT_ID=\u003Cid>&EVENT_DATE=\u003Cdd.mm.yyyy>` |\n| `group` | `https:\u002F\u002F\u003Cportal>.bitrix24.ru\u002Fworkgroups\u002Fgroup\u002F\u003CownerId>\u002Fcalendar\u002F?EVENT_ID=\u003Cid>&EVENT_DATE=\u003Cdd.mm.yyyy>` |\n| `company_calendar` | `https:\u002F\u002F\u003Cportal>.bitrix24.ru\u002Fcalendar\u002F?EVENT_ID=\u003Cid>&EVENT_DATE=\u003Cdd.mm.yyyy>` |\n\n`\u003Cdd.mm.yyyy>` — дата начала события (поле `from`) в формате «день.месяц.год» через точку. `\u003Cportal>` — домен вашего портала. Доступ ограничен правами сотрудника в Битрикс24.\n\n## Пример ответа\n\n```json\n{\n  \"success\": true,\n  \"data\": [\n    {\n      \"id\": 7773,\n      \"parentId\": 7773,\n      \"active\": true,\n      \"deleted\": false,\n      \"type\": \"user\",\n      \"ownerId\": 1,\n      \"name\": \"Созвон с командой\",\n      \"from\": \"2026-06-10T10:00:00+03:00\",\n      \"to\": \"2026-06-10T11:00:00+03:00\",\n      \"skipTime\": false,\n      \"durationSeconds\": 3600,\n      \"createdBy\": 1,\n      \"dateCreate\": \"06\u002F05\u002F2026 09:12:00 am\",\n      \"updatedAt\": \"06\u002F05\u002F2026 09:12:00 am\",\n      \"description\": \"Еженедельная синхронизация\",\n      \"accessibility\": \"busy\",\n      \"importance\": \"normal\",\n      \"isMeeting\": false,\n      \"meetingStatus\": \"H\",\n      \"meetingHost\": 1,\n      \"sectionId\": 3,\n      \"attendeeList\": [\n        { \"id\": 1, \"entryId\": \"7773\", \"status\": \"H\" }\n      ]\n    }\n  ],\n  \"meta\": {\n    \"total\": 1,\n    \"hasMore\": false\n  }\n}\n```\n\n## Пример ответа при ошибке\n\n400 — не переданы обязательные `type` и `ownerId`:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"MISSING_REQUIRED_PARAMS\",\n    \"message\": \"GET \u002Fv1\u002Fcalendar-events requires query parameters: type, ownerId. Example: GET \u002Fv1\u002Fcalendar-events?type=...&ownerId=...\"\n  }\n}\n```\n\n## Ошибки\n\n| HTTP | Код | Описание |\n|------|-----|---------|\n| 400 | `MISSING_REQUIRED_PARAMS` | Не переданы `type` и (или) `ownerId` |\n| 403 | `SCOPE_DENIED` | API-ключ не имеет скоупа `calendar` |\n| 401 | `TOKEN_MISSING` | API-ключ не имеет настроенных токенов |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Известные особенности\n\n**Авто-пагинация.** При `limit > 50` Вайбкод автоматически запрашивает несколько страниц у Битрикс24 и собирает их в один ответ. Если общее количество событий больше `limit`, в `meta.hasMore` придёт `true`.\n\n**Регулярные события.** Событие с полем `rrule` в списке возвращается отдельным элементом на каждое вхождение серии, попадающее в окно выборки. У всех элементов общий `id` и `parentId`, отличаются только `from` \u002F `to`.\n\n## Смотрите также\n\n- [Создать событие](.\u002Fcreate.md)\n- [Получить событие](.\u002Fget.md)\n- [Поля события](.\u002Ffields.md)\n","\n## Получить событие\n\n`GET \u002Fv1\u002Fcalendar-events\u002F:id`\n\nВозвращает одно событие календаря по идентификатору.\n\n## Параметры\n\n| Параметр | Тип | Обяз. | Описание |\n|----------|-----|:-----:|---------|\n| `id` (path) | number | да | ID события |\n\n## Примеры\n\n### curl — личный ключ\n\n```bash\ncurl \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fcalendar-events\u002F7773\" \\\n  -H \"X-Api-Key: YOUR_API_KEY\"\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fcalendar-events\u002F7773\" \\\n  -H \"X-Api-Key: YOUR_APP_KEY\" \\\n  -H \"Authorization: Bearer USER_SESSION_TOKEN\"\n```\n\n### JavaScript — личный ключ\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fcalendar-events\u002F7773', {\n  headers: {\n    'X-Api-Key': 'YOUR_API_KEY',\n  },\n})\n\nconst { success, data } = await res.json()\nconsole.log(data.name, '—', data.from)\n```\n\n### JavaScript — OAuth-приложение\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fcalendar-events\u002F7773', {\n  headers: {\n    'X-Api-Key': 'YOUR_APP_KEY',\n    'Authorization': 'Bearer USER_SESSION_TOKEN',\n  },\n})\n\nconst { success, data } = await res.json()\n```\n\n## Поля ответа\n\nОбъект события со всеми полями — см. [Поля события](.\u002Ffields.md).\n\n## Пример ответа\n\n```json\n{\n  \"success\": true,\n  \"data\": {\n    \"id\": 7773,\n    \"parentId\": 7773,\n    \"deleted\": false,\n    \"type\": \"user\",\n    \"ownerId\": 1,\n    \"name\": \"Созвон с командой\",\n    \"from\": \"2026-06-10T10:00:00+03:00\",\n    \"to\": \"2026-06-10T11:00:00+03:00\",\n    \"skipTime\": false,\n    \"durationSeconds\": 3600,\n    \"createdBy\": 1,\n    \"dateCreate\": \"06\u002F05\u002F2026 09:12:00 am\",\n    \"updatedAt\": \"06\u002F05\u002F2026 09:12:00 am\",\n    \"description\": \"Еженедельная синхронизация\",\n    \"accessibility\": \"busy\",\n    \"importance\": \"normal\",\n    \"isMeeting\": false,\n    \"meetingStatus\": \"H\",\n    \"meetingHost\": 1,\n    \"sectionId\": 3,\n    \"attendeeList\": [\n      { \"id\": 1, \"entryId\": \"7773\", \"status\": \"H\" }\n    ]\n  }\n}\n```\n\n## Пример ответа при ошибке\n\n404 — событие не найдено:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"ENTITY_NOT_FOUND\",\n    \"message\": \"calendarEvent 99999999 not found\"\n  }\n}\n```\n\n## Ошибки\n\n| HTTP | Код | Описание |\n|------|-----|---------|\n| 404 | `ENTITY_NOT_FOUND` | Событие с указанным `id` не существует |\n| 403 | `SCOPE_DENIED` | API-ключ не имеет скоупа `calendar` |\n| 401 | `TOKEN_MISSING` | API-ключ не имеет настроенных токенов |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Смотрите также\n\n- [Поля события](.\u002Ffields.md)\n- [Обновить событие](.\u002Fupdate.md)\n- [Список событий](.\u002Flist.md)\n","\n## Обновить событие\n\n`PATCH \u002Fv1\u002Fcalendar-events\u002F:id`\n\nОбновляет поля существующего события. Передавайте только изменяемые поля — Вайбкод автоматически дочитывает текущее событие и подставляет `type`, `ownerId`, `name`, которые Битрикс24 требует при каждом обновлении.\n\n## Часто обновляемые поля\n\n| Поле | Тип | Описание |\n|------|-----|---------|\n| `name` | string | Название события |\n| `to` | datetime | Перенос окончания (ISO 8601). Передавайте вместе с `timezoneTo` |\n| `timezoneTo` | string | Часовой пояс окончания (IANA-имя, `Europe\u002FMoscow`) |\n| `location` | string | Место проведения |\n| `description` | string | Описание |\n| `accessibility` | string | Занятость: `busy`, `quest`, `free`, `absent` |\n| `importance` | string | Важность: `high`, `normal`, `low` |\n| `attendees` | number[] | Массив ID приглашённых сотрудников |\n\nПолный список изменяемых полей: [`GET \u002Fv1\u002Fcalendar-events\u002Ffields`](.\u002Ffields.md).\n\n## Примеры\n\n### curl — личный ключ\n\n```bash\ncurl -X PATCH \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fcalendar-events\u002F7773\" \\\n  -H \"X-Api-Key: YOUR_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"name\": \"Созвон с командой — расширенная встреча\",\n    \"to\": \"2026-06-10T12:00:00\",\n    \"timezoneTo\": \"Europe\u002FMoscow\",\n    \"location\": \"Переговорная №3\"\n  }'\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl -X PATCH \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fcalendar-events\u002F7773\" \\\n  -H \"X-Api-Key: YOUR_APP_KEY\" \\\n  -H \"Authorization: Bearer USER_SESSION_TOKEN\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"name\": \"Созвон с командой — расширенная встреча\",\n    \"to\": \"2026-06-10T12:00:00\",\n    \"timezoneTo\": \"Europe\u002FMoscow\",\n    \"location\": \"Переговорная №3\"\n  }'\n```\n\n### JavaScript — личный ключ\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fcalendar-events\u002F7773', {\n  method: 'PATCH',\n  headers: {\n    'X-Api-Key': 'YOUR_API_KEY',\n    'Content-Type': 'application\u002Fjson',\n  },\n  body: JSON.stringify({\n    name: 'Созвон с командой — расширенная встреча',\n    to: '2026-06-10T12:00:00',\n    timezoneTo: 'Europe\u002FMoscow',\n    location: 'Переговорная №3',\n  }),\n})\n\nconst { success, data } = await res.json()\n```\n\n### JavaScript — OAuth-приложение\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fcalendar-events\u002F7773', {\n  method: 'PATCH',\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    name: 'Созвон с командой — расширенная встреча',\n    to: '2026-06-10T12:00:00',\n    timezoneTo: 'Europe\u002FMoscow',\n    location: 'Переговорная №3',\n  }),\n})\n\nconst { success, data } = await res.json()\n```\n\n## Поля ответа\n\nОбновлённый объект события со всеми полями — см. [Поля события](.\u002Ffields.md).\n\n## Пример ответа\n\n```json\n{\n  \"success\": true,\n  \"data\": {\n    \"id\": 7773,\n    \"parentId\": 7773,\n    \"type\": \"user\",\n    \"ownerId\": 1,\n    \"name\": \"Созвон с командой — расширенная встреча\",\n    \"from\": \"2026-06-10T10:00:00+03:00\",\n    \"to\": \"2026-06-10T12:00:00+03:00\",\n    \"skipTime\": false,\n    \"durationSeconds\": 7200,\n    \"updatedAt\": \"06\u002F05\u002F2026 11:30:00 am\",\n    \"accessibility\": \"busy\",\n    \"importance\": \"normal\",\n    \"sectionId\": 3,\n    \"location\": \"Переговорная №3\"\n  }\n}\n```\n\n## Пример ответа при ошибке\n\n404 — событие не найдено:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"ENTITY_NOT_FOUND\",\n    \"message\": \"calendarEvent 99999999 not found\"\n  }\n}\n```\n\n## Ошибки\n\n| HTTP | Код | Описание |\n|------|-----|---------|\n| 404 | `ENTITY_NOT_FOUND` | Событие с указанным `id` не существует |\n| 400 | `READONLY_FIELD` | В теле запроса передано read-only поле — полный список в [Поля события](.\u002Ffields.md) с пометкой «да» в колонке RO |\n| 403 | `SCOPE_DENIED` | API-ключ не имеет скоупа `calendar` |\n| 401 | `TOKEN_MISSING` | API-ключ не имеет настроенных токенов |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Известные особенности\n\n**Перенос начала события через `PATCH` сейчас не работает.** Поле `from` принимается, но новое значение в Битрикс24 не записывается. Поле `to` обновляется корректно. Чтобы перенести начало события — удалите старое и создайте новое через [`POST \u002Fv1\u002Fcalendar-events`](.\u002Fcreate.md).\n\n## Смотрите также\n\n- [Получить событие](.\u002Fget.md)\n- [Поля события](.\u002Ffields.md)\n- [Создать событие](.\u002Fcreate.md)\n- [Удалить событие](.\u002Fdelete.md)\n","\n## Удалить событие\n\n`DELETE \u002Fv1\u002Fcalendar-events\u002F:id`\n\nУдаляет событие календаря по идентификатору. Восстановить удалённое событие через API нельзя — создавайте новое при необходимости.\n\n## Параметры\n\n| Параметр | Тип | Обяз. | Описание |\n|----------|-----|:-----:|---------|\n| `id` (path) | number | да | ID события |\n\n## Примеры\n\n### curl — личный ключ\n\n```bash\ncurl -X DELETE \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fcalendar-events\u002F7773\" \\\n  -H \"X-Api-Key: YOUR_API_KEY\"\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl -X DELETE \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fcalendar-events\u002F7773\" \\\n  -H \"X-Api-Key: YOUR_APP_KEY\" \\\n  -H \"Authorization: Bearer USER_SESSION_TOKEN\"\n```\n\n### JavaScript — личный ключ\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fcalendar-events\u002F7773', {\n  method: 'DELETE',\n  headers: {\n    'X-Api-Key': 'YOUR_API_KEY',\n  },\n})\n\nif (res.status === 204) {\n  console.log('Событие удалено')\n}\n```\n\n### JavaScript — OAuth-приложение\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fcalendar-events\u002F7773', {\n  method: 'DELETE',\n  headers: {\n    'X-Api-Key': 'YOUR_APP_KEY',\n    'Authorization': 'Bearer USER_SESSION_TOKEN',\n  },\n})\n\nif (res.status === 204) {\n  console.log('Удалено')\n}\n```\n\n## Ответ\n\nПри успешном удалении возвращается HTTP-статус `204 No Content` с пустым телом. Признак успеха — код ответа, не содержимое.\n\n## Пример ответа\n\n```\nHTTP\u002F1.1 204 No Content\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| 422 | `BITRIX_ERROR` | Событие с указанным `id` не существует или уже удалено |\n| 403 | `SCOPE_DENIED` | API-ключ не имеет скоупа `calendar` |\n| 401 | `TOKEN_MISSING` | API-ключ не имеет настроенных токенов |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Известные особенности\n\n**Регулярные события.** Удаление события с правилом повторения (`rrule`) удаляет всю серию — все вхождения с одним `parentId`. Точечно убрать одно вхождение из серии через API нельзя.\n\n## Смотрите также\n\n- [Список событий](.\u002Flist.md)\n- [Batch](\u002Fdocs\u002Fbatch) — массовое удаление\n","\n## Поиск событий календаря\n\n`POST \u002Fv1\u002Fcalendar-events\u002Fsearch`\n\nВозвращает те же события, что и `GET \u002Fv1\u002Fcalendar-events`, но параметры передаются в теле запроса. Поиск ведётся в пределах одного календаря — `type` и `ownerId` обязательны.\n\n## Поля запроса (body)\n\n| Поле | Тип | Обяз. | Описание |\n|------|-----|-------|---------|\n| `filter` | object | да | Условия поиска. Обязательны `type` и `ownerId`. Дополнительно — `from`, `to`, `section`. Поле вне этого набора возвращает `400 UNSUPPORTED_FILTER` |\n| `filter.type` | string | да | Тип календаря: `user`, `group`, `company_calendar` |\n| `filter.ownerId` | number | да | ID владельца календаря. Для `type=user` — ID сотрудника из `GET \u002Fv1\u002Fusers`, для `type=group` — ID рабочей группы |\n| `filter.from` | string | нет | Начало периода выборки событий (ISO 8601) |\n| `filter.to` | string | нет | Конец периода выборки событий (ISO 8601) |\n| `filter.section` | number | нет | ID секции календаря |\n| `limit` | number | нет | Количество записей до 5000. По умолчанию `50` |\n| `offset` | number | нет | Пропустить N записей |\n| `order` | object | нет | Сортировка: `{ \"from\": \"desc\" }` |\n| `select` | string[] | нет | Выборка полей: `[\"id\", \"name\", \"from\"]` |\n\n## Примеры\n\n### curl — личный ключ\n\n```bash\ncurl -X POST \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fcalendar-events\u002Fsearch\" \\\n  -H \"X-Api-Key: YOUR_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"filter\": {\n      \"type\": \"user\",\n      \"ownerId\": 1,\n      \"from\": \"2026-06-01T00:00:00\",\n      \"to\": \"2026-07-01T00:00:00\"\n    },\n    \"order\": { \"from\": \"desc\" },\n    \"limit\": 20\n  }'\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl -X POST \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fcalendar-events\u002Fsearch\" \\\n  -H \"X-Api-Key: YOUR_APP_KEY\" \\\n  -H \"Authorization: Bearer USER_SESSION_TOKEN\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"filter\": {\n      \"type\": \"user\",\n      \"ownerId\": 1,\n      \"from\": \"2026-06-01T00:00:00\",\n      \"to\": \"2026-07-01T00:00:00\"\n    },\n    \"order\": { \"from\": \"desc\" },\n    \"limit\": 20\n  }'\n```\n\n### JavaScript — личный ключ\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fcalendar-events\u002Fsearch', {\n  method: 'POST',\n  headers: {\n    'X-Api-Key': 'YOUR_API_KEY',\n    'Content-Type': 'application\u002Fjson',\n  },\n  body: JSON.stringify({\n    filter: {\n      type: 'user',\n      ownerId: 1,\n      from: '2026-06-01T00:00:00',\n      to: '2026-07-01T00:00:00',\n    },\n    order: { from: 'desc' },\n    limit: 20,\n  }),\n})\n\nconst { success, data } = await res.json()\nconsole.log('Найдено:', data.length)\n```\n\n### JavaScript — OAuth-приложение\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fcalendar-events\u002Fsearch', {\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    filter: {\n      type: 'user',\n      ownerId: 1,\n      from: '2026-06-01T00:00:00',\n      to: '2026-07-01T00:00:00',\n    },\n    order: { from: 'desc' },\n    limit: 20,\n  }),\n})\n\nconst { success, data } = await res.json()\n```\n\n## Поля ответа\n\n| Поле | Тип | Описание |\n|------|-----|---------|\n| `success` | boolean | Всегда `true` при успехе |\n| `data` | array | Массив событий. Все поля — см. [Поля события](\u002Fdocs\u002Fentities\u002Fcalendar-events\u002Ffields) |\n| `meta.total` | number | Количество найденных событий |\n| `meta.hasMore` | boolean | Есть ли записи за пределами `limit` |\n\n## Пример ответа\n\nПоказаны основные поля. Полный список — [Поля события](\u002Fdocs\u002Fentities\u002Fcalendar-events\u002Ffields).\n\n```json\n{\n  \"success\": true,\n  \"data\": [\n    {\n      \"id\": 7521,\n      \"type\": \"user\",\n      \"ownerId\": 1,\n      \"name\": \"Еженедельная планёрка\",\n      \"from\": \"2026-06-15T14:00:00+03:00\",\n      \"to\": \"2026-06-15T15:00:00+03:00\",\n      \"skipTime\": false,\n      \"durationSeconds\": 3600,\n      \"importance\": \"normal\",\n      \"accessibility\": \"busy\",\n      \"isMeeting\": true,\n      \"sectionId\": 3\n    }\n  ],\n  \"meta\": { \"total\": 1, \"hasMore\": false }\n}\n```\n\n## Пример ответа при ошибке\n\n400 — фильтр по неподдерживаемому полю:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"UNSUPPORTED_FILTER\",\n    \"message\": \"calendar-events search accepts only top-level parameters: type, ownerId, from, to, section. Filter keys received: NAME. For single-record lookup use GET \u002Fv1\u002Fcalendar-events\u002F:id.\"\n  }\n}\n```\n\n## Ошибки\n\n| HTTP | Код | Описание |\n|------|-----|---------|\n| 400 | `UNSUPPORTED_FILTER` | Фильтр содержит поле вне набора `type`, `ownerId`, `from`, `to`, `section` |\n| 403 | `SCOPE_DENIED` | Ключу не хватает скоупа `calendar` |\n| 401 | `MISSING_API_KEY` | Не передан заголовок `X-Api-Key` |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Известные особенности\n\n**Поиск ограничен одним календарём и периодом.** Отбор идёт только по `type`, `ownerId`, `from`, `to`, `section` — по содержимому события (`name`, `importance`, `accessibility` и другим полям) поиск не ведётся. Чтобы отобрать события по таким полям, получите выборку за нужный период и отфильтруйте её на стороне приложения.\n\n## Смотрите также\n\n- [Список событий](\u002Fdocs\u002Fentities\u002Fcalendar-events\u002Flist)\n- [Синтаксис фильтрации](\u002Fdocs\u002Ffiltering)\n- [Batch](\u002Fdocs\u002Fbatch)\n- [Лимиты и оптимизация](\u002Fdocs\u002Foptimization)\n","\n## Поля события\n\n`GET \u002Fv1\u002Fcalendar-events\u002Ffields`\n\nВозвращает схему полей события: тип, признак readonly, доступные batch-операции.\n\n## Примеры\n\n### curl — личный ключ\n\n```bash\ncurl \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fcalendar-events\u002Ffields\" \\\n  -H \"X-Api-Key: YOUR_API_KEY\"\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fcalendar-events\u002Ffields\" \\\n  -H \"X-Api-Key: YOUR_APP_KEY\" \\\n  -H \"Authorization: Bearer USER_SESSION_TOKEN\"\n```\n\n### JavaScript — личный ключ\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fcalendar-events\u002Ffields', {\n  headers: {\n    'X-Api-Key': 'YOUR_API_KEY',\n  },\n})\n\nconst { success, data } = await res.json()\nconsole.log('Полей:', Object.keys(data.fields).length)\n```\n\n### JavaScript — OAuth-приложение\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fcalendar-events\u002Ffields', {\n  headers: {\n    'X-Api-Key': 'YOUR_APP_KEY',\n    'Authorization': 'Bearer USER_SESSION_TOKEN',\n  },\n})\n\nconst { success, data } = await res.json()\n```\n\n## Поля ответа\n\n| Поле | Тип | RO | Описание |\n|------|-----|:--:|---------|\n| `id` | number | да | ID события |\n| `parentId` | number | да | ID родительского события (для повторяющихся событий совпадает с `id` исходного) |\n| `active` | boolean | да | Активность события. Возвращается в списке `GET \u002Fv1\u002Fcalendar-events`, в карточке `GET \u002Fv1\u002Fcalendar-events\u002F:id` отсутствует |\n| `deleted` | boolean | да | Признак удаления |\n| `name` | string | | Название |\n| `description` | string | | Описание |\n| `type` | string | | Тип календаря: `user`, `group`, `company_calendar` |\n| `ownerId` | number | | ID владельца календаря. Сотрудник: `GET \u002Fv1\u002Fusers` |\n| `from` | datetime | | Начало (ISO 8601) |\n| `to` | datetime | | Окончание (ISO 8601) |\n| `skipTime` | boolean | | Событие на весь день. При `true` длительность фиксируется в 24 часа |\n| `durationSeconds` | number | да | Продолжительность события в секундах |\n| `importance` | string | | Важность: `high`, `normal`, `low` |\n| `accessibility` | string | | Занятость: `busy`, `quest`, `free`, `absent` |\n| `location` | string | | Место проведения |\n| `color` | string | | Цвет события (HEX) |\n| `textColor` | string | | Цвет текста события (HEX). Возвращается в списке `GET \u002Fv1\u002Fcalendar-events`, в карточке `GET \u002Fv1\u002Fcalendar-events\u002F:id` отсутствует |\n| `sectionId` | number | | ID секции календаря |\n| `isPrivate` | boolean | | Приватное событие |\n| `isMeeting` | boolean | | Событие-встреча с приглашениями |\n| `attendees` | number[] | | Массив ID приглашённых сотрудников для записи. **Только для записи** — в ответах событий это поле не возвращается, участники доступны в `attendeeList`, `attendeesCodes` |\n| `attendeesCodes` | string[] | да | Внутренние коды участников Битрикс24 (формат `U\u003Cid>`) |\n| `attendeeList` | array | да | Расширенный список участников: `{ id, entryId, status }`, где `status` — `Y` (принято), `H` (хост), `Q` (под вопросом), `N` (отклонено) |\n| `remind` | array | | Настройки напоминаний |\n| `rrule` | object | | Расписание повторения регулярного события: периодичность (`FREQ`), интервал (`INTERVAL`), дни недели (`BYDAY`), граница серии (`UNTIL` или `COUNT`). На чтение `BYDAY` приходит объектом-словарём вида `{\"MO\":\"MO\"}`, а `UNTIL` — строка-дата в формате региональных настроек портала, которую Битрикс24 подставляет даже при заданном `COUNT` |\n| `createdBy` | number | да | ID создателя события. Поиск: `GET \u002Fv1\u002Fusers` |\n| `dateCreate` | string | да | Дата создания. Строка в формате Битрикс24, зависящем от региональных настроек портала (например `08.06.2026 17:29:51` или `06\u002F08\u002F2026 05:29:51 pm`). Это не ISO 8601 — не разбирать фиксированным парсером |\n| `updatedAt` | string | да | Дата последнего изменения. Строка в том же формате региональных настроек портала, что и `dateCreate`. Это не ISO 8601 |\n| `meetingStatus` | string | да | Статус участия владельца календаря: `Y` (принято), `H` (хост), `Q` (под вопросом), `N` (отклонено) |\n| `meetingHost` | number | да | ID организатора встречи. Поиск: `GET \u002Fv1\u002Fusers` |\n| `eventType` | string | да | Технический тип события (для системных событий) |\n| `syncStatus` | string | да | Статус синхронизации с внешними календарями |\n| `recurrenceId` | number | да | ID серии повторяющихся событий |\n| `collabId` | number | да | ID коллабораций (при участии внешних пользователей) |\n\nНезаполненные скалярные поля возвращаются как `null`, пустые массивы — как `[]`. В минимальном событии `null` приходит, например, в `eventType`, `description`, `location`, `color`, `textColor`, `rrule`, `recurrenceId`, `syncStatus`, `collabId`, а `remind` приходит пустым массивом `[]`.\n\n## Пример ответа\n\n```json\n{\n  \"success\": true,\n  \"data\": {\n    \"fields\": {\n      \"id\": { \"type\": \"number\", \"readonly\": true },\n      \"name\": { \"type\": \"string\", \"readonly\": false },\n      \"type\": { \"type\": \"string\", \"readonly\": false },\n      \"ownerId\": { \"type\": \"number\", \"readonly\": false },\n      \"from\": { \"type\": \"datetime\", \"readonly\": false },\n      \"to\": { \"type\": \"datetime\", \"readonly\": false },\n      \"skipTime\": { \"type\": \"boolean\", \"readonly\": false },\n      \"durationSeconds\": { \"type\": \"number\", \"readonly\": true },\n      \"importance\": { \"type\": \"string\", \"readonly\": false },\n      \"accessibility\": { \"type\": \"string\", \"readonly\": false },\n      \"sectionId\": { \"type\": \"number\", \"readonly\": false },\n      \"attendees\": { \"type\": \"array\", \"readonly\": false },\n      \"rrule\": { \"type\": \"object\", \"readonly\": false },\n      \"dateCreate\": { \"type\": \"string\", \"readonly\": true },\n      \"updatedAt\": { \"type\": \"string\", \"readonly\": true }\n    },\n    \"batch\": [\"create\", \"update\", \"delete\"]\n  }\n}\n```\n\n## Пример ответа при ошибке\n\n403 — нет скоупа:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"SCOPE_DENIED\",\n    \"message\": \"This endpoint requires 'calendar' scope\"\n  }\n}\n```\n\n## Ошибки\n\n| HTTP | Код | Описание |\n|------|-----|---------|\n| 403 | `SCOPE_DENIED` | API-ключ не имеет скоупа `calendar` |\n| 401 | `TOKEN_MISSING` | API-ключ не имеет настроенных токенов |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Смотрите также\n\n- [Создать событие](.\u002Fcreate.md)\n- [Обновить событие](.\u002Fupdate.md)\n- [Список событий](.\u002Flist.md)\n"]