Top.Mail.Ru
Центр помощи / Администратор / 4. Интеграции / API и Webhooks / API для получения истории бронирований

API для получения истории бронирований

Требования к API:

  1. Юзкейс принимает только: bookingTypestartDate и endDate;
  2. Эндпоинт /api/external/v1/bookings доступен без авторизации;
  3. Максимальный диапазон данных — 92 дня;
  4. Лимит частоты: 1 запрос / на клиента / раз в 2 сек → при превышении будет ответ 429 Too Many Requests;
  5. Поведение контроллера:
    • Без bookingType → 400 Bad Request.
    • Без timeRange → вернуть данные за последние 92 дня, включая текущую дату (today – 91 days → today).
    • Если диапазон timeRange > 92 дней → 400 Bad Request.
    • Если переданы другие фильтры → 400 Bad Request.

Примеры запроса:

  • GET /api/external/v1/bookings?bookingType=DESK&startDate=1767339466&endDate=1770017866

Пример запроса только с обязательным параметром:

  • GET /api/external/v1/bookings?bookingType=DESK&startDate=1767339466&endDate=1770017866

Query-параметры:

  • bookingType — обязательный (DESK, PARKING, MEETING_ROOM)
  • startDate, endDate — обязательный (timestamp)

Примеры запросов от внешней системы:

GET /api/external/v1/users?limit=100&offset=0

GET /api/external/v1/users?email=user@example.com&limit=100&offset=0

GET /api/external/v1/users?externalId=8f1c-...

GET /api/external/v1/users?employeeId=A-7788...

Query-параметры (все опциональны):

  • email      //строка, почта пользователя, ищем точное совпадение
  • externalId //строка, значение внешнего ID
  • employeeId //строка, табельный номер пользователя
  • limit      //int (по умолчанию 100, максимум 100)
  • offset     //int (по умолчанию 0)

Ответ (Response)

{
  "message": "OK",
  "body": {
    "items": [
      {
       "firstName": "Иван",
       "lastName": "Петров",
       "position": "Разработчик",
       "department": "Отдел разработки",    //поле org_department_id в табл Users
       "manager": "Сидоров Алексей",        //fullName руководителя
       "workSchedule": {
          "workingHours": "09:00–18:00",
          "assignedOffice": "Москва",      //офис в user_settings
          "workMode": "hybrid"             //поле в user_settings
        },
       "contacts": {
          "email": "ivan.petrov@example.com",
          "phone": "+7 (900) 123-45-67",
          "messenger": "Telegram: @ivanpetrov"
        },
       "assignedDesks": [
            {
              "name": "12, HS Liana",  //в name: название стола, офиса
              "days": ["We", "Th"]
            }
        ],
       "status": {
          "inOfficeNow": true,                    //если статус "в офисе" true, иначе false
          "schedule": {                           //расписание за сегодня
            "todayStatus": "in office",           //remote | not working | null
            "extraStatus": null,                  //опционально, только для remote | not working
            "placeName": "Рабочее место A-12",    //опционально, только для booking
            "startTime": "2025-10-16T09:00:00Z",  //опционально, только для booking
            "endTime": "2025-10-16T18:00:00Z"     //опционально, только для booking
          }
        }
      }
    ],
    "limit": 100,
    "offset": 0,
    "totalRecords": 1
  }
}

Коды ответов

200 OK — даже если список пуст, просто направляем пустой массив items: [].

Оставьте заявку, и мы свяжемся с вами в течение 30 минут.

Загрузка

Как улучшить работу офиса?

Оставьте контакт - покажем на демо как уйти от таблиц, двойных бронирований и путаницы с рабочими местами.

Загрузка