Для AI-агентов: markdown этой страницы — /docs-content/entities/calendar-resources/bookings.md индекс документации — /llms.txt
Бронирования ресурсов
GET /v1/calendar-resources/bookings
Возвращает занятые интервалы ресурсов календаря за период — когда и каким бронированием занят каждый ресурс.
Параметры
| Параметр | Тип | Обяз. | По умолч. | Описание |
|---|---|---|---|---|
resourceIds (query) |
string | да | — | ID ресурсов календаря через запятую: ?resourceIds=57,59. Список: GET /v1/calendar-resources |
from (query) |
string | нет | — | Начало периода — дата 2026-10-01 или дата со временем в ISO 8601. Без from и to период — от 30 дней до текущей даты до 90 дней после неё. Если передан только to, начало периода не ограничено |
to (query) |
string | нет | — | Конец периода в том же формате. Если передан только from, конец периода не ограничен |
Примеры
curl — личный ключ
curl "https://vibecode.bitrix24.tech/v1/calendar-resources/bookings?resourceIds=59&from=2025-01-21&to=2025-01-22" \
-H "X-Api-Key: YOUR_API_KEY"
curl — OAuth-приложение
curl "https://vibecode.bitrix24.tech/v1/calendar-resources/bookings?resourceIds=59&from=2025-01-21&to=2025-01-22" \
-H "X-Api-Key: YOUR_APP_KEY" \
-H "Authorization: Bearer USER_SESSION_TOKEN"
JavaScript — личный ключ
const params = new URLSearchParams({ resourceIds: '59', from: '2025-01-21', to: '2025-01-22' })
const res = await fetch(`https://vibecode.bitrix24.tech/v1/calendar-resources/bookings?${params}`, {
headers: {
'X-Api-Key': 'YOUR_API_KEY',
},
})
const { success, data } = await res.json()
for (const slot of data) console.log(slot.resourceId, slot.from, slot.to)
JavaScript — OAuth-приложение
const params = new URLSearchParams({ resourceIds: '59', from: '2025-01-21', to: '2025-01-22' })
const res = await fetch(`https://vibecode.bitrix24.tech/v1/calendar-resources/bookings?${params}`, {
headers: {
'X-Api-Key': 'YOUR_APP_KEY',
'Authorization': 'Bearer USER_SESSION_TOKEN',
},
})
const { success, data } = await res.json()
Поля ответа
from и to приходят у каждого интервала, остальные поля могут отсутствовать.
| Поле | Тип | Описание |
|---|---|---|
success |
boolean | Всегда true при успехе |
data |
array | Занятые интервалы ресурсов |
data[].id |
number | ID события календаря, которое занимает ресурс |
data[].name |
string | Название события |
data[].resourceId |
number | ID ресурса из resourceIds |
data[].bookingId |
number | null | ID бронирования ресурса |
data[].from |
string | Начало интервала: дата и время в ISO 8601 со смещением. У интервала на весь день — дата без времени |
data[].to |
string | Конец интервала в том же формате. У интервала на весь день — последний день включительно |
data[].timezoneFrom |
string | Часовой пояс начала, например Europe/Kaliningrad. У интервала на весь день не приходит |
data[].timezoneTo |
string | Часовой пояс конца. У интервала на весь день не приходит |
data[].skipTime |
boolean | true — интервал на весь день |
data[].accessibility |
string | Занятость в событии, например busy |
data[].importance |
string | Важность события, например normal |
data[].eventType |
string | Тип события. У бронирования ресурса — #resourcebooking# |
meta.total |
number | Число интервалов в ответе |
Пример ответа
{
"success": true,
"data": [
{
"from": "2025-01-21T09:30:00+02:00",
"to": "2025-01-21T10:30:00+02:00",
"id": 7667,
"name": "Бронирование: встреча с клиентом",
"resourceId": 59,
"bookingId": 159,
"accessibility": "busy",
"importance": "normal",
"eventType": "#resourcebooking#",
"timezoneFrom": "Europe/Kaliningrad",
"timezoneTo": "Europe/Kaliningrad",
"skipTime": false
},
{
"from": "2025-01-21T11:00:00+02:00",
"to": "2025-01-21T12:00:00+02:00",
"id": 7707,
"name": "Бронирование: презентация продукта",
"resourceId": 59,
"bookingId": 167,
"accessibility": "busy",
"importance": "normal",
"eventType": "#resourcebooking#",
"timezoneFrom": "Europe/Kaliningrad",
"timezoneTo": "Europe/Kaliningrad",
"skipTime": false
}
],
"meta": {
"total": 2
}
}
Интервал на весь день — даты без времени, без timezoneFrom и timezoneTo:
{
"from": "2024-04-14",
"to": "2024-04-16",
"id": 7389,
"name": "Бронирование: лид",
"resourceId": 59,
"bookingId": 155,
"accessibility": "busy",
"importance": "normal",
"eventType": "#resourcebooking#",
"skipTime": true
}
Пример ответа при ошибке
400 — не передан resourceIds:
{
"success": false,
"error": {
"code": "MISSING_REQUIRED_FIELDS",
"message": "resourceIds must be a comma-separated list of positive safe integers"
}
}
Ошибки
| HTTP | Код | Описание |
|---|---|---|
| 400 | MISSING_REQUIRED_FIELDS |
resourceIds не передан или содержит что-то, кроме положительных целых чисел через запятую |
| 400 | INVALID_PARAMS |
from или to — не дата в формате ISO 8601 |
| 403 | SCOPE_DENIED |
API-ключ не имеет скоупа calendar |
| 403 | BITRIX_ACCESS_DENIED |
Битрикс24 отказал владельцу ключа в доступе к бронированиям |
| 401 | TOKEN_MISSING |
API-ключ не имеет настроенных токенов |
| 401 | MISSING_API_KEY |
Не передан заголовок X-Api-Key |
| 429 | RATE_LIMITED |
Превышен лимит запросов |
| 502 | BITRIX_UNAVAILABLE |
Битрикс24 недоступен, вернул бронирования неверной формы или интервал без даты и часового пояса |
| 503 | BITRIX_TIMEOUT |
Битрикс24 не ответил вовремя |
Полный список общих ошибок API — Ошибки.
Известные особенности
Несуществующий ресурс не даёт ошибки. ID, которого нет в списке ресурсов, возвращает пустой data с 200 — так же, как ресурс без бронирований. Сверяйте ID с GET /v1/calendar-resources, иначе опечатка в ID читается как «ресурс свободен».
Все интервалы — одним ответом. Постраничного перехода нет: метод возвращает все интервалы за период. Чтобы сократить ответ, сужайте период через from и to.