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

Поиск событий календаря

POST /v1/calendar-events/search

Возвращает те же события, что и GET /v1/calendar-events, но параметры передаются в теле запроса. Поиск ведётся в пределах одного календаря — type и ownerId обязательны.

Поля запроса (body)

Поле Тип Обяз. Описание
filter object да Условия поиска. Обязательны type и ownerId. Дополнительно — from, to, section. Поле вне этого набора возвращает 400 UNSUPPORTED_FILTER
filter.type string да Тип календаря: user, group, company_calendar
filter.ownerId number да ID владельца календаря. Для type=user — ID сотрудника из GET /v1/users, для type=group — ID рабочей группы
filter.from string нет Начало периода выборки событий (ISO 8601)
filter.to string нет Конец периода выборки событий (ISO 8601)
filter.section number нет ID секции календаря
limit number нет Количество записей до 5000. По умолчанию 50
offset number нет Пропустить N записей
order object нет Сортировка: { "from": "desc" }
select string[] нет Выборка полей: ["id", "name", "from"]

Примеры

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

Terminal
curl -X POST "https://vibecode.bitrix24.tech/v1/calendar-events/search" \
  -H "X-Api-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "filter": {
      "type": "user",
      "ownerId": 1,
      "from": "2026-06-01T00:00:00",
      "to": "2026-07-01T00:00:00"
    },
    "order": { "from": "desc" },
    "limit": 20
  }'

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

Terminal
curl -X POST "https://vibecode.bitrix24.tech/v1/calendar-events/search" \
  -H "X-Api-Key: YOUR_APP_KEY" \
  -H "Authorization: Bearer USER_SESSION_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "filter": {
      "type": "user",
      "ownerId": 1,
      "from": "2026-06-01T00:00:00",
      "to": "2026-07-01T00:00:00"
    },
    "order": { "from": "desc" },
    "limit": 20
  }'

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

javascript
const res = await fetch('https://vibecode.bitrix24.tech/v1/calendar-events/search', {
  method: 'POST',
  headers: {
    'X-Api-Key': 'YOUR_API_KEY',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    filter: {
      type: 'user',
      ownerId: 1,
      from: '2026-06-01T00:00:00',
      to: '2026-07-01T00:00:00',
    },
    order: { from: 'desc' },
    limit: 20,
  }),
})

const { success, data } = await res.json()
console.log('Найдено:', data.length)

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

javascript
const res = await fetch('https://vibecode.bitrix24.tech/v1/calendar-events/search', {
  method: 'POST',
  headers: {
    'X-Api-Key': 'YOUR_APP_KEY',
    'Authorization': 'Bearer USER_SESSION_TOKEN',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    filter: {
      type: 'user',
      ownerId: 1,
      from: '2026-06-01T00:00:00',
      to: '2026-07-01T00:00:00',
    },
    order: { from: 'desc' },
    limit: 20,
  }),
})

const { success, data } = await res.json()

Поля ответа

Поле Тип Описание
success boolean Всегда true при успехе
data array Массив событий. Все поля — см. Поля события
meta.total number Сколько записей подошло под фильтр
meta.hasMore boolean Есть ли ещё записи за пределами limit
meta.durationMs number Длительность запроса в миллисекундах

Поля meta лежат рядом с data, а не внутри него. Обходить страницы нужно по meta.hasMore: длина data, равная limit, последней страницы не исключает.

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

Показаны основные поля. Полный список — Поля события.

JSON
{
  "success": true,
  "data": [
    {
      "id": 7521,
      "type": "user",
      "ownerId": 1,
      "name": "Еженедельная планёрка",
      "from": "2026-06-15T14:00:00+03:00",
      "to": "2026-06-15T15:00:00+03:00",
      "skipTime": false,
      "durationSeconds": 3600,
      "importance": "normal",
      "accessibility": "busy",
      "isMeeting": true,
      "sectionId": 3
    }
  ],
  "meta": { "total": 1, "hasMore": false, "durationMs": 169 }
}

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

400 — фильтр по неподдерживаемому полю:

JSON
{
  "success": false,
  "error": {
    "code": "UNSUPPORTED_FILTER",
    "message": "calendar-events search accepts only top-level parameters: type, ownerId, from, to, section. Filter keys received: NAME. For single-record lookup use GET /v1/calendar-events/:id."
  }
}

Ошибки

HTTP Код Описание
400 MISSING_REQUIRED_PARAMS Не переданы обязательные type и (или) ownerId. message перечисляет недостающие поля
400 UNSUPPORTED_FILTER Фильтр содержит поле вне набора type, ownerId, from, to, section
403 SCOPE_DENIED Ключу не хватает скоупа calendar
401 MISSING_API_KEY Не передан заголовок X-Api-Key

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

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

Поиск ограничен одним календарём и периодом. Отбор идёт только по type, ownerId, from, to, section — по содержимому события (name, importance, accessibility и другим полям) поиск не ведётся. Чтобы отобрать события по таким полям, получите выборку за нужный период и отфильтруйте её на стороне приложения.

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