Для AI-агентов: markdown этой страницы — /docs-content/entities/calendar-sections.md индекс документации — /llms.txt

Секции календаря

Управление секциями календаря Битрикс24: личными, групповыми и календарями переговорных. Секция — это сам календарь, в котором живут события. У одного сотрудника может быть несколько секций, например «Работа» и «Личное», у группы — один или несколько групповых календарей.

Битрикс24 API: calendar.section.* Скоуп: calendar

Список секций

GET /v1/calendar-sections

Возвращает все секции календаря для пары type + ownerId. У одного сотрудника может быть несколько секций — например, «Работа», «Личное», «Командные встречи».

Параметры

Параметр Тип Обяз. По умолч. Описание
Параметрtype (query) Типstring Обяз.да По умолч.— ОписаниеТип календаря: user — личный, group — групповой, company_calendar — календарь компании, location — переговорная
ПараметрownerId (query) Типnumber Обяз.да По умолч.— ОписаниеИдентификатор владельца календаря. Для сотрудника — из GET /v1/users, для рабочей группы — её id, для type=location — 0
Параметрlimit (query) Типnumber Обяз.нет По умолч.50 ОписаниеКоличество записей, до 5000. При limit > 50 включается автопагинация
Параметрoffset (query) Типnumber Обяз.нет По умолч.0 ОписаниеПринимается, но не влияет на выборку — список возвращает все секции пары type + ownerId
Параметрselect (query) Типstring Обяз.нет По умолч.— ОписаниеПоля в ответе через запятую: ?select=id,name,color
Параметрfilter (query) Типobject Обяз.нет По умолч.— ОписаниеДругая форма передачи type и ownerId. Других ключей список не принимает: например, filter[name]=... возвращает 400 UNSUPPORTED_FILTER ещё до обращения к Битрикс24.
Синтаксис фильтрации. Пример: ?filter[type]=user&filter[ownerId]=1
Параметрsort (query) Типstring Обяз.нет По умолч.— ОписаниеПринимается, но не влияет на порядок секций в ответе
Параметрorder (query) Типobject | string Обяз.нет По умолч.— ОписаниеОбе формы — ?order[id]=desc и ?order=desc — принимаются, но, как и sort, не влияют на порядок секций в ответе. Направление в форме order[поле] вне asc, desc, ASC, DESC возвращает 400 INVALID_SORT_DIRECTION
ПараметрwithTotal (query) Типstring Обяз.нет По умолч.— ОписаниеРаспознаются значения true и false. Для секций параметр на ответ не влияет: meta.total приходит и при withTotal=false

Примеры

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

Terminal
curl "https://vibecode.bitrix24.tech/v1/calendar-sections?type=user&ownerId=1" \
  -H "X-Api-Key: YOUR_API_KEY"

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

Terminal
curl "https://vibecode.bitrix24.tech/v1/calendar-sections?type=user&ownerId=1" \
  -H "X-Api-Key: YOUR_APP_KEY" \
  -H "Authorization: Bearer USER_SESSION_TOKEN"

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

javascript
const params = new URLSearchParams({ type: 'user', ownerId: '1' })
const res = await fetch(`https://vibecode.bitrix24.tech/v1/calendar-sections?${params}`, {
  headers: {
    'X-Api-Key': 'YOUR_API_KEY',
  },
})

const { success, data, meta } = await res.json()
console.log(`Найдено ${meta.total} секций`)

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

javascript
const params = new URLSearchParams({ type: 'user', ownerId: '1' })
const res = await fetch(`https://vibecode.bitrix24.tech/v1/calendar-sections?${params}`, {
  headers: {
    'X-Api-Key': 'YOUR_APP_KEY',
    'Authorization': 'Bearer USER_SESSION_TOKEN',
  },
})

const { success, data, meta } = await res.json()

Поля ответа

Поле Тип Описание
Полеsuccess Типboolean ОписаниеВсегда true при успехе
Полеdata Типarray ОписаниеМассив секций
Полеmeta.total Типnumber ОписаниеОбщее количество секций в выборке
Полеmeta.hasMore Типboolean ОписаниеЕсть ли ещё записи за пределами limit

Поля одной секции в массиве data:

Поле Тип RO Описание
Полеid Типnumber ROда ОписаниеИдентификатор секции
Полеname Типstring ROнет ОписаниеНазвание
Полеdescription Типstring ROнет ОписаниеОписание
Полеtype Типstring ROнет ОписаниеТип календаря: user, group, company_calendar, location
ПолеownerId Типnumber ROнет ОписаниеИдентификатор владельца календаря. Для сотрудника — из GET /v1/users
Полеcolor Типstring ROнет ОписаниеЦвет секции в формате #RRGGBB
ПолеtextColor Типstring ROнет ОписаниеЦвет текста в формате #RRGGBB
Полеexport Типobject ROнет ОписаниеПараметры экспорта в формате iCal. Набор ключей зависит от направления: на чтение приходят ALLOW, PATH и LINK, на запись принимаются ALLOW и SET — см. Создать секцию. Ключи в верхнем регистре и не преобразуются к camelCase
Полеaccess Типobject ROда ОписаниеКарта прав доступа: ключ — идентификатор права доступа, значение — числовой идентификатор разрешения
Полеperm Типobject ROда ОписаниеКарта разрешений текущего сотрудника: view_time, view_title, view_full, add, edit, edit_section, access
ПолеisCollab Типboolean ROда ОписаниеПринадлежность к коллабе
ПолеcreatedBy Типnumber ROда ОписаниеИдентификатор сотрудника, создавшего секцию. Список сотрудников — GET /v1/users
ПолеdateCreate Типdatetime ROда ОписаниеДата создания
ПолеupdatedAt Типdatetime ROда ОписаниеДата последнего изменения

«RO» — поле доступно только на чтение, передавать в POST / PATCH нельзя, иначе Вайбкод вернёт 400 READONLY_FIELD.

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

JSON
{
  "success": true,
  "data": [
    {
      "id": 42,
      "name": "Работа",
      "description": "Основной рабочий календарь",
      "type": "user",
      "ownerId": 1,
      "color": "#9cbeee",
      "textColor": "#283000",
      "export": {
        "ALLOW": true,
        "PATH": "https://example.bitrix24.ru/company/personal/user/1/calendar/",
        "LINK": "&type=user&owner=1&ncc=1&user=1&sec_id=42&sign=704a559a691722ae080fa420dcb9d7f8"
      },
      "access": {
        "U1": 39,
        "G2": 13
      },
      "perm": {
        "view_time": true,
        "view_title": true,
        "view_full": true,
        "add": true,
        "edit": true,
        "edit_section": true,
        "access": true
      },
      "isCollab": false,
      "createdBy": 1,
      "dateCreate": "2026-05-15 09:34:33",
      "updatedAt": "2026-05-15 09:34:33"
    }
  ],
  "meta": {
    "total": 1,
    "hasMore": false
  }
}

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

400 — не переданы обязательные type или ownerId:

JSON
{
  "success": false,
  "error": {
    "code": "MISSING_REQUIRED_PARAMS",
    "message": "GET /v1/calendar-sections requires query parameters: type, ownerId. Example: GET /v1/calendar-sections?type=...&ownerId=..."
  }
}

Ошибки

HTTP Код Описание
HTTP400 КодMISSING_REQUIRED_PARAMS ОписаниеНе переданы type или ownerId
HTTP400 КодUNSUPPORTED_FILTER ОписаниеПередан ключ filter[...], отличный от filter[type] и filter[ownerId]
HTTP400 КодINVALID_SORT_DIRECTION ОписаниеНаправление в order[поле] вне asc, desc, ASC, DESC
HTTP403 КодSCOPE_DENIED ОписаниеAPI-ключ не имеет скоупа calendar
HTTP401 КодTOKEN_MISSING ОписаниеУ API-ключа нет настроенных токенов
HTTP502 КодBITRIX_UNAVAILABLE ОписаниеБитрикс24 временно недоступен — повторите запрос позже
HTTP429 КодRATE_LIMITED ОписаниеПревышен лимит запросов: 300 в минуту на портал, все API-ключи портала делят один лимит. Действующее значение — в заголовке x-ratelimit-limit. Повторите после срока из заголовка Retry-After

Полный список общих ошибок API — Ошибки.

Известные особенности

limit обрезает выдачу на стороне API Вайбкод, offset не действует. Список всегда возвращает все секции указанной пары type + ownerId. limit обрезает полученный массив до N записей, а offset принимается, но игнорируется — пропустить записи через него нельзя.

Набор ключей export различается на чтение и на запись. В ответе приходят ALLOW, PATH и LINK: PATH — адрес календаря на портале, LINK — подписанный хвост ссылки на выгрузку iCal. Период выгрузки задаётся ключом SET при отправке через POST /v1/calendar-sections, но обратно в ответе он не появляется — сохраните значение у себя, если оно нужно для отображения. Регистр ключей Битрикс24 сохраняется в обе стороны: они остаются в верхнем регистре и не преобразуются к camelCase.

Даты приходят в часовом поясе портала без указания смещения. Формат dateCreate и updatedAt — ГГГГ-ММ-ДД ЧЧ:ММ:СС. Чтобы разобрать их как момент времени, добавьте смещение портала самостоятельно: new Date(s.replace(' ', 'T') + '+03:00').

Получить секцию по одному id через API нельзя. Эндпоинт GET /v1/calendar-sections/:id не поддерживается. Чтобы найти одну секцию по id — получите список и отфильтруйте на стороне клиента: data.find(s => s.id === 42).

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