Для 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 — личный ключ

Terminal
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-приложение

Terminal
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 — личный ключ

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-приложение

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_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 Число интервалов в ответе

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

JSON
{
  "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:

JSON
{
  "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:

JSON
{
  "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.

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