workplaces.reservation.list

Scope: workplaces

Кто может вызывать: Владелец, админ или секретарь офиса (после выборки)

Объект бронирования:

  • id, userId, workplaceId, dateFrom, dateTo, active
  • typeOfReservationId, reservationType (xmlId)
  • dateConfirmed, dateCanceled, cancelTypeId, createdBy, workplaceName

Ярлыки: workplaceId, userId, officeId, dateRangeFrom, dateRangeTo, status (confirmed|pending|cancelled)

filter: DATE_FROM, DATE_TO, STATUS (confirmed|pending|cancelled), WORKPLACE_ID, USER_ID

HTTP: GET

Побочные эффекты: none

Параметры метода

Параметр Тип Обяз. Описание
limit int нет Размер страницы, по умолчанию 50, максимум 500
offset int нет Смещение, по умолчанию 0
fetchAll bool нет Если true — вернуть все записи (лимит rest_fetch_all_max, по умолчанию 5000)
filter object нет Mongo; DATE_FROM, DATE_TO, STATUS — см. раздел ниже
workplaceId int нет
userId int нет
officeId int нет Все места офиса
dateRangeFrom string нет Пересечение: конец брони ≥ from; форматы — Обзор
dateRangeTo string нет Пересечение: начало брони ≤ to
status string нет confirmed / pending / cancelled

Mongo-фильтр DATE_FROM / DATE_TO / STATUS

Поля в filter (не путать с полями в ответе):

Ключ в filter Поле в HL Поле в ответе API Смысл
DATE_FROM UF_BEGIN_DATETIME dateFrom Начало брони
DATE_TO UF_END_DATETIME dateTo Конец брони
WORKPLACE_ID UF_WORKPLACE workplaceId ID рабочего места
USER_ID UF_EMPLOYEE userId ID сотрудника
STATUS Семантический статус (см. ниже), не UF_ACTIVE напрямую

Операторы: $eq, $ne, $gt, $gte, $lt, $lte, $in, $nin — см. Обзор.

Mongo-фильтр STATUS

Значения те же, что у корневого параметра status: confirmed, pending, cancelled (не 0/1 и не UF_ACTIVE).

Значение Условие
confirmed UF_ACTIVE=1 и UF_DATE_CONFIRMATION заполнено
pending UF_ACTIVE=1 и UF_DATE_CONFIRMATION пусто
cancelled UF_ACTIVE=0

Примеры:

  • filter[STATUS][$eq]=cancelled
  • filter[STATUS][$in][0]=confirmed&filter[STATUS][$in][1]=pending

При filter[STATUS] дефолт UF_ACTIVE=1 не накладывается (иначе отменённые брони не попадут в выборку). Корневой status в query игнорируется, если передан filter[STATUS].

Неверное значение (filter[STATUS][$eq]=1 и т.п.) → VALIDATION_ERROR, details.field = filter.STATUS, details.allowed = ["confirmed","pending","cancelled"], сообщение: filter.STATUS: допустимые значения confirmed, pending, cancelled.

Пустой $in или условие без оператора у STATUSINVALID_FILTER.

Формат даты и времени в filter

Значения в Mongo-фильтре передаются как строки в БД (без автоматического разбора, в отличие от dateRangeFrom / dateRangeTo).

Рекомендуемый формат: dd.mm.yyyy HH:ii:ss — например 01.06.2026 00:00:00.

Допустимо и yyyy-mm-dd HH:ii:ss (2026-06-01 00:00:00), если так же хранятся значения в HL на портале.

В ответе API даты всегда в формате yyyy-mm-dd HH:ii:ss (dateFrom, dateTo). Для фильтра не копируйте значение из ответа «как есть», если на портале в HL используется dd.mm.yyyy — сравнение в выборке может работать некорректно.

GET: пробел между датой и временем в URL

В query-параметре между датой и временем нужен пробел. В URL его кодируют как %20 (это не часть времени):

  • в ссылке: 01.06.2026%2000:00:00
  • читается как: 01.06.2026 + пробел + 00:00:00 (полночь)
  • в Postman в колонке Value можно вводить 01.06.2026 00:00:00 — клиент сам закодирует пробел

Примеры смысла условий

  • filter[DATE_TO][$gte]=01.06.2026 00:00:00 — брони, у которых конец (dateTo) не раньше 1 июня 2026.
  • filter[DATE_TO][$lte]=01.06.2026 23:59:59 — брони, у которых конец не позже указанного момента.
  • Пересечение с периодом (бронь «заходит» в июнь):
    DATE_FROM $lte конец периода и DATE_TO $gte начало периода.

Для пересечения с диапазоном без Mongo удобнее ярлыки dateRangeFrom / dateRangeTo (другая семантика: «бронь пересекается с интервалом», см. таблицу параметров).

Пример URL (одна строка)

https://{портал}/rest/{user_id}/{webhook_code}/workplaces.reservation.list.json?limit=50&filter[DATE_FROM][$lte]=30.06.2026%2023:59:59&filter[DATE_TO][$gte]=01.06.2026%2000:00:00
        

Поле TYPE_OF_WORKPLACE в reservation.list не поддерживается (это свойство рабочего места; фильтр по типу — в workplaces.workplace.list) → ответ INVALID_FILTER с details.allowed.

Неизвестный оператор ($like и т.д.) у DATE_* / WORKPLACE_ID / USER_IDINVALID_FILTER_OPERATOR. Неверный корневой status в query → VALIDATION_ERROR, details.field = status.

Возвращаемые данные

Массив броней в result.result.

Обработка ошибок

Ответ в едином конверте модуля: result, total, next, error (внутри обёртки Bitrix REST — поле result). Справочник всех кодов: error-codes.md.

Код Описание
ACCESS_DENIED Бронирование отключено
VALIDATION_ERROR Параметр status или filter.STATUS не confirmed/pending/cancelled; details.field, details.allowed
INVALID_FILTER Неизвестное поле filter (не DATE_FROM, DATE_TO, …); details.allowed
INVALID_FILTER_OPERATOR Неизвестный оператор у поля filter ($like и т.д.)
UNAUTHORIZED Пользователь не авторизован
INVALID_LIMIT limit < 1 или > 500
INVALID_OFFSET offset < 0
FETCH_ALL_LIMIT_EXCEEDED Слишком много записей для fetchAll
INTERNAL_ERROR Внутренняя ошибка

Примеры кода

Пример запроса (GET)

curl -G "https://{портал}/rest/{user_id}/{webhook_code}/workplaces.reservation.list.json?officeId=108&status=confirmed&limit=50" \
          -H "Accept: application/json"
        

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

{
          "result": {
            "result": [
              {
                "id": 10,
                "userId": 1,
                "workplaceId": 1234,
                "dateFrom": "2026-06-09 10:00:00",
                "dateTo": "2026-06-09 18:00:00",
                "active": true,
                "typeOfReservationId": 60,
                "reservationType": "workDay",
                "dateConfirmed": null,
                "dateCanceled": null,
                "cancelTypeId": null,
                "createdBy": 1,
                "workplaceName": "Место 1"
              }
            ],
            "next": null,
            "error": null
          },
          "total": 1
        }
        
Предыдущая
Следующая