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

Настройки календаря

GET /v1/calendar/settings

Возвращает настройки календаря портала: начало и конец рабочего дня, выходные дни недели, праздники, рабочие субботы и первый день недели. Это те же значения, по которым интерфейс Битрикс24 размечает нерабочие дни.

Параметры

Параметров нет.

Примеры

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

Terminal
curl -H "X-Api-Key: YOUR_API_KEY" \
  https://vibecode.bitrix24.tech/v1/calendar/settings

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

Terminal
curl -H "X-Api-Key: YOUR_APP_KEY" \
  -H "Authorization: Bearer USER_SESSION_TOKEN" \
  https://vibecode.bitrix24.tech/v1/calendar/settings

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

javascript
const res = await fetch('https://vibecode.bitrix24.tech/v1/calendar/settings', {
  headers: { 'X-Api-Key': 'YOUR_API_KEY' },
})
const { data, meta } = await res.json()

if (meta?.warnings?.some((w) => w.code === 'calendar_settings_partial')) {
  throw new Error('Ключ принадлежит не сотруднику портала — настройки недоступны')
}

const weekends = data.weekHolidays
const holidays = data.yearHolidays ? data.yearHolidays.split(',') : []
console.log('Рабочий день:', data.workTimeStart, '—', data.workTimeEnd)
console.log('Выходные дни недели:', weekends.join(', '))
console.log('Праздников в списке:', holidays.length)

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

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

Поля ответа

Поле Тип Описание
success boolean true при успешном ответе
data.workTimeStart string | number Час начала рабочего дня
data.workTimeEnd string | number Час окончания рабочего дня. Дробное значение означает минуты — 23.3 читается как 23:30
data.weekHolidays array Выходные дни недели — SU, MO, TU, WE, TH, FR, SA
data.weekStart string Первый день недели в том же формате, что weekHolidays
data.yearHolidays string Праздничные дни через запятую в формате Д.ММ или ДД.ММ1.01,2.01,7.01 либо 01.01,02.01. Ведущий ноль зависит от языка портала, поэтому разбирайте оба варианта. Пустая строка означает, что список не заполнен на портале
data.yearWorkdays string Рабочие выходные через запятую в том же формате, что yearHolidays
data.userNameTemplate string Шаблон отображения имени сотрудника — #NAME# #LAST_NAME#
data.userShowLogin string | boolean Показывать ли логин рядом с именем сотрудника
data.syncByPush string | boolean Включена ли синхронизация календаря через уведомления
data.depManagerSub string | boolean Видит ли руководитель подразделения календари подчинённых
data.deniedSuperposeTypes array Типы календарей, запрещённые к наложению на личный календарь
data.pathToUser string Шаблон адреса профиля сотрудника. Подстановка — #user_id#
data.pathToUserCalendar string Шаблон адреса личного календаря сотрудника
data.pathToGroup string Шаблон адреса рабочей группы. Подстановка — #group_id#
data.pathToGroupCalendar string Шаблон адреса календаря рабочей группы
data.pathToVr string Шаблон адреса переговорных
data.pathToRm string Шаблон адреса бронирования ресурсов
data.rmIblockType string Тип информационного блока переговорных
data.rmIblockId string Идентификатор информационного блока переговорных
data.rmForSites string | boolean Общие ли переговорные для всех сайтов портала
data.pathes array Адреса разделов для отдельных сайтов портала. Через этот эндпоинт всегда пустой
data.pathesForSites string | boolean Заданы ли адреса разделов отдельно для каждого сайта
data.forumId string Идентификатор форума, к которому привязаны обсуждения событий
meta.warnings array Появляется, только когда портал вернул сокращённый набор. Формат элемента — code и message

Кроме перечисленных полей ответ содержит адреса разделов для нестандартных типов календаря — по одному полю на тип, с именем вида path_to_type_location. Имена таких полей приходят в том виде, в каком их отдаёт портал, поэтому набор полей ответа не фиксирован.

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

JSON
{
  "success": true,
  "data": {
    "workTimeStart": "10",
    "workTimeEnd": "22",
    "yearHolidays": "",
    "yearWorkdays": "",
    "weekHolidays": ["SA", "SU"],
    "weekStart": "MO",
    "userNameTemplate": "#NAME# #LAST_NAME#",
    "syncByPush": "",
    "userShowLogin": "1",
    "pathToUser": "/company/personal/user/#user_id#/",
    "pathToUserCalendar": "/company/personal/user/#user_id#/calendar/",
    "pathToGroup": "/workgroups/group/#group_id#/",
    "pathToGroupCalendar": "/workgroups/group/#group_id#/calendar/",
    "pathToVr": "",
    "pathToRm": "",
    "rmIblockType": "",
    "rmIblockId": "",
    "depManagerSub": "1",
    "deniedSuperposeTypes": [],
    "pathesForSites": "",
    "pathes": [],
    "forumId": "1",
    "rmForSites": "1",
    "path_to_type_company_calendar": "/calendar/",
    "path_to_type_events": "",
    "path_to_type_location": "",
    "path_to_type_resource": ""
  }
}

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

403 — у ключа нет скоупа calendar:

JSON
{
  "success": false,
  "error": {
    "code": "SCOPE_DENIED",
    "message": "This endpoint requires 'calendar' scope"
  }
}

Ошибки

HTTP Код Описание
401 MISSING_API_KEY Не передан заголовок X-Api-Key
401 INVALID_API_KEY Неверный API-ключ
401 KEY_EXPIRED Срок действия API-ключа истёк
401 TOKEN_MISSING Ключу не настроены токены для портала
402 ACCOUNT_FROZEN Баланс портала заморожен
403 SCOPE_DENIED У ключа нет скоупа calendar
422 BITRIX_ERROR Битрикс24 отклонил запрос — текст в message
429 RATE_LIMITED Превышено 120 запросов в минуту на портал к этому эндпоинту, либо лимит запросов к Битрикс24
502 BITRIX_UNAVAILABLE Портал недоступен либо вернул ответ неожиданной структуры

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

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

  • Сокращённый ответ у ключа внешнего пользователя. Владельцу ключа, который не является сотрудником портала, Битрикс24 отдаёт два поля — workTimeStart и workTimeEnd — со значениями по умолчанию 9 и 19 вместо настроек портала. По самим значениям отличить такой ответ от настроенного портала нельзя, поэтому в ответ добавляется meta.warnings с кодом calendar_settings_partial. Проверяйте это поле до того, как использовать границы рабочего дня. Полный набор настроек читается ключом, который принадлежит сотруднику портала.

  • Значения приходят строками, а незаполненное поле — пустой строкой. Включённая настройка приходит как "1", выключенная — как пустая строка. Значений Y и N эндпоинт не возвращает, поэтому сравнение с N даст неверный результат на любом настроенном портале. Проверяйте истинность значения, а не равенство конкретной строке. Настройка, которую на портале ни разу не сохраняли, приходит логическим значением, а не строкой — обработчик должен принимать оба варианта.

  • Пустой список праздников не означает, что праздников нет. Пустая строка означает, что список на портале не заполнен, а не что в году нет праздничных дней.

  • Непустой список не означает, что его заполнил администратор. У полей yearHolidays и yearWorkdays три состояния, а не два: список заполнил администратор портала; список пуст; либо администратор настройки не открывал, и пришёл локализованный набор по умолчанию. Третье состояние от первого по ответу неотличимо. Набор по умолчанию выбирается по языку портала, а не по стране, и у части языков он совпадает с русским — портал другой страны на языке из этой группы вернёт российские праздники. Не размечайте по нему календарь как по подтверждённым данным.

  • День приходит с ведущим нулём и без него. Один и тот же праздник выглядит как 1.01 или 01.01 в зависимости от языка портала. Сравнение с одной из форм тихо не найдёт дату: ошибки не будет, день просто окажется рабочим. Приводите к одной форме и элементы списка, и ключ, по которому ищете.

  • Лимит 120 запросов в минуту на портал. Отдельный лимит именно этого эндпоинта, помимо общего лимита обращений к Битрикс24. Он существует потому, что чтение настроек на стороне Битрикс24 может дописывать служебную настройку портала, поэтому частый опрос стоит дороже обычного чтения. Настройки меняются редко — кэшируйте ответ на своей стороне вместо повторного опроса.

  • Настройки относятся ко всему порталу. Ответ не зависит от того, чей календарь читается, и не содержит персональных предпочтений сотрудника.

  • Часы указаны в часовом поясе портала. Поля workTimeStart и workTimeEnd — это часы, а не полное время, поэтому сравнение с меткой времени события требует приведения к часовому поясу портала.

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