Для AI-агентов: markdown этой страницы — /docs-content/calendar/settings.md индекс документации — /llms.txt
Настройки календаря
GET /v1/calendar/settings
Возвращает настройки календаря портала: начало и конец рабочего дня, выходные дни недели, праздники, рабочие субботы и первый день недели. Это те же значения, по которым интерфейс Битрикс24 размечает нерабочие дни.
Параметры
Параметров нет.
Примеры
curl — личный ключ
curl -H "X-Api-Key: YOUR_API_KEY" \
https://vibecode.bitrix24.tech/v1/calendar/settings
curl — OAuth-приложение
curl -H "X-Api-Key: YOUR_APP_KEY" \
-H "Authorization: Bearer USER_SESSION_TOKEN" \
https://vibecode.bitrix24.tech/v1/calendar/settings
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-приложение
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. Имена таких полей приходят в том виде, в каком их отдаёт портал, поэтому набор полей ответа не фиксирован.
Пример ответа
{
"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:
{
"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— это часы, а не полное время, поэтому сравнение с меткой времени события требует приведения к часовому поясу портала.