GuestMe B2B API позволяет внешним партнёрам подключаться к системе GuestMe, получать данные о ресторанах, создавать бронирования и подписываться на события через вебхуки.

1. Получение доступа

Запросите client_id и client_secret и адрес сервера у менеджера GuestMe или через поддержку.

2. Получение access_token

Используйте client_credentials grant через /oauth2/token: Параметры:
  • grant_type: client_credentials
  • scope: ROLE_EXTERNAL_INTEGRATION
  • заголовок: Authorization: Basic base64(client_id:client_secret)
Пример запроса:
POST /oauth2/token
Content-Type: application/x-www-form-urlencoded
Authorization: Basic Z3Vlc3RtZTpzZWNyZXQ=

grant_type=client_credentials&scope=ROLE_EXTERNAL_INTEGRATION

3. Подключение веб хуков

Создайте веб хук через POST /api/v1/external/webhook, чтобы получать уведомления о событиях:
  • События: CREATE, UPDATE, DELETE
  • Сущности: BOOKING, RESTAURANT
При регистрации веб хука вы должны указать:
  • url: адрес вашей системы, куда GuestMe будет отправлять события.
И опционально вы можете указать токен и префикс хедера авторизации:
  • authorizationHeaderPrefix: префикс который будет добавлен в заголовок Authorization перед токеном
  • token: ваш собственный токен, который будет добавлен в заголовок Authorization каждого запроса вида:
Authorization: {authorizationHeaderPrefix} {token}
Тело события приходит как WebhookEventExternalDto, в поле data - один из вариантов: BookingExternalDto или RestaurantExternalDto.

4. Проверка подключения ресторана

Чтобы определить, подключён ли ресторан к системе бронирования, проверьте поле:
{
  "properties": {
    "guestAcquisitionChannelEnabled": true
  }
}
Это поле возвращается в объекте RestaurantPropertiesExternalDto в поле ресторана RestaurantExternalDto.properties. Если оно true, ресторан готов к приёму онлайн-бронирований.

5. Подтверждение номера телефона

Номер телефона резерва обязательно должен быть валидным по формату, его можно проверить на валидность библиотекой Google libphonenumber Некоторые рестораны могут требовать обязательное подтверждение номера телефона гостя перед созданием резерва. Эта настройка регулируется полем properties.phoneConfirmationEnabled в объекте ресторана.
{
  "properties": {
    "phoneConfirmationEnabled": true
  }
}
Значение:
  • true - ресторан требует подтверждения номера телефона перед созданием резерва.
  • false - подтверждение номера телефона не требуется.

Логика применения

  • Если phoneConfirmationEnabled = true:
    • Все новые резервы должны содержать подтвержденный номер телефона гостя.
    • Партнёр обязан выполнить проверку телефона одним из способов:
      1. Использовать шлюз ресторана через API интеграции GuestMe для подтверждения номера.
        • Запросить код подтверждения
        • Запросить проверку кода подтверждения
      2. Использовать собственную систему подтверждения телефонов (повторная проверка через шлюз не нужна).
  • Если phoneConfirmationEnabled = false:
    • Подтверждение номера телефона не требуется.
    • Партнёр может передавать номер без дополнительной проверки.

Ограничения, связанные с датой бронирования

  1. Запрос на бронирование может быть выполнен только в ресторан с настроенным расписанием:
    • ScheduleType.RESTAURANT - базовое расписание работы ресторана (обязательно).
    • ScheduleType.BOOKING - расписание приёма резервов (необязательно, но, если есть, проверка ведётся по нему).
  2. Время резерва должно попадать в указанные интервалы расписания.
  3. Резерв не может быть создан на прошедшее время (по локальному времени ресторана).
Если ресторан не имеет подходящего расписания или время резерва не попадает в него, бронирование будет отклонено.

Ограничения по отмене резерва

  • Отмена резерва возможна только для резервов в статусе:
    • CREATED
    • SENT
Попытка отмены в любом другом статусе вернёт ошибку booking_incompatible_state

Ограничения по номеру телефона

  • На один номер телефона можно создать только одну активную бронь в одном ресторане.
  • При попытке создать вторую бронь будет возвращена ошибка: guest_have_not_closed_booking

Ошибки API бронирования

Все ошибки возвращаются в JSON-формате.

Пример

[
  {
    "message": "Booking date is incorrect: cannot be created in the past",
    "code": "booking_incorrect_date",
    "params": {
      "date": "2025-08-01T10:00:00"
    }
  }
]

Ниже приведены основные ошибки, возвращаемые API бронирования.

КодОписание
booking_incorrect_dateУказанная дата резерва некорректна (в прошлом или не попадает в расписание).
restaurant_guest_acquisition_is_disabledКанал привлечения гостей в ресторане отключен.
restaurant_code_confirmation_is_disabledШлюз подтверждения номера телефона по коду отключен в ресторане.
mobile_confirmation_code_is_incorrectНеверный код подтверждения телефона.
mobile_confirmation_code_is_not_expiredКод подтверждения телефона ещё не истёк.
booking_incompatible_stateПопытка отменить резерв в неподходящем статусе. Отмена возможна только в статусах CREATED или SENT.
guest_have_not_closed_bookingНа один номер телефона может быть только одна активная бронь в ресторане.

Контакты

По вопросам интеграции — обращайтесь в поддержку: api@guestme.ru