События ресторана
Специальные мероприятия ресторана (банкеты, тематические вечера, дегустации): чтение списка событий и работа с бронями на них.
События — это специальные мероприятия ресторана (ужины, банкеты, тематические вечера, дегустации),
у которых своё расписание, билеты/депозиты и отдельные настройки бронирования. На событие можно
принимать брони: у каждой брони есть поле eventId, которое связывает её с конкретным событием
(см. Создание брони).
Все эндпоинты — под Bearer-токеном (см. Аутентификация).
Базовый путь: /api/core/admin/restaurants/{restaurantId}/events.
| Метод | Путь | Назначение |
|---|---|---|
GET | /events | Все события |
GET | /events/active | Активные (опубликованные) события |
GET | /events/past | Прошедшие события |
GET | /events/draft | Черновики |
GET | /events/{eventId} | Получить событие по ID |
POST | /events | Создать событие |
PUT | /events/{eventId} | Обновить событие |
DELETE | /events/{eventId} | Удалить событие |
POST | /events/{copyFromId}/saveas | Создать копию существующего события |
PUT | /events/{eventId}/status | Опубликовать / снять с публикации |
PUT | /events/{eventId}/status/system | Системная смена статуса |
О формате данных. Списки возвращают компактную модель
EventDetailsContract(см. ниже). А создание, обновление, чтение по ID и смена статуса работают с «большим» контрактомRestaurantFullContract— той же структурой, что и настройки ресторана, но применённой к событию (расписание, настройки бронирования, схема зала события). Поэтому проще всего готовить тело запроса на основе того, что вернулGET /events/{eventId}, меняя только нужные поля.
Модель события (EventDetailsContract)
Это та модель, которую возвращают эндпоинты-списки. Поля верхнего уровня:
| Поле | Тип | Описание |
|---|---|---|
id | integer | Идентификатор события |
name | string | Название события |
description | string | Описание |
promoImage | string | URL промо-изображения |
startDate | date-time | Дата и время начала |
endDate | date-time | Дата и время окончания |
isOffline | boolean | Снято с публикации (черновик/выключено) |
isPublic | boolean | Видно гостям публично |
dates | array<string> | Конкретные даты проведения (для повторяющихся событий) |
additionalInfo | object | Доступные на событии признаки/пожелания (см. ниже) |
reservationHours | array | Часы приёма броней по дням недели (см. «Расписание») |
openingHours | array | Часы работы события по дням недели |
specialPeriods | array | Особые периоды/исключения в расписании |
reservationSettings | object | Настройки бронирования события (ReservationSettingsContract) |
depositRules | object | Правила депозита/предоплаты |
Признаки события (additionalInfo)
Булевы флажки, какие пожелания/опции доступны на событии:
highChair, babyChair, babyCarrier, stroller, vip, booth, highTop, table,
party, contactless, dontDisturb, needCardReader, allergy, vegetarian, event,
handicapAccessible, proofOfVaccinationOrTest, showNotes. Плюс массив customs[]
(пользовательские признаки: id, type, label, icon, description, important, online, data[]).
Билеты и цена
Цена/билеты события задаются на уровне схемы зала: в floors[].event (EventInfoContract)
лежит массив tickets[] (EventTicketContract):
| Поле | Тип | Описание |
|---|---|---|
id | string | Идентификатор билета |
eventId | integer | ID события |
type | string | Тип билета |
title | string | Название билета |
description | string | Описание |
amount | integer | Стоимость билета |
Депозит/предоплата на событие конфигурируются через
reservationSettings.depositRules,reservationSettings.depositEvents[]иreservationSettings.creditCardChargeEnabled. Вместимость и лимиты гостей — через поляreservationSettings(maxGuestsPerReservation,minGuestsPerReservation,defaultMaxCoversPerSlot,totalCoversAvailableAtTime,maxBookingsPerSlotи др.).
Расписание события
Расписание задаётся тремя массивами в модели события:
openingHours[]— часы работы события по дням недели.reservationHours[]— в какие часы принимаются брони.specialPeriods[]— разовые исключения (праздничные дни, переносы, закрытия).
Каждый элемент openingHours/reservationHours — это WeekDayOpenHoursContract:
| Поле | Тип | Описание |
|---|---|---|
weekDay | integer | День недели (0–6) |
time | array | Интервалы дня (HourlyIntervalContract) |
Интервал HourlyIntervalContract: open (начало), close (конец), name (метка интервала).
Элемент specialPeriods[] (SpecialPeriodContract): starts, ends, closed (закрыто в этот
период), repeat (повторять), isSystem (системный), time[] (интервалы).
Все события
GET /events
Возвращает массив EventDetailsContract.
| Параметр | Где | Тип | Описание |
|---|---|---|---|
restaurantId * | path | integer | Идентификатор ресторана |
curl -G https://api.hostmeapp.com/api/core/admin/restaurants/123/events \ -H "Authorization: Bearer $TOKEN"Эндпоинты /events/active, /events/past и /events/draft принимают те же параметры и
возвращают такой же массив EventDetailsContract, но отфильтрованный:
/events/active— опубликованные/идущие события;/events/past— завершившиеся события;/events/draft— черновики (isOffline = true).
curl -G https://api.hostmeapp.com/api/core/admin/restaurants/123/events/active \ -H "Authorization: Bearer $TOKEN"Получить событие
GET /events/{eventId}
Возвращает событие в виде RestaurantFullContract (полная структура: расписание,
reservationSettings, схема зала floors[] с билетами события).
| Параметр | Где | Тип |
|---|---|---|
restaurantId * | path | integer |
eventId * | path | integer |
curl https://api.hostmeapp.com/api/core/admin/restaurants/123/events/4567 \ -H "Authorization: Bearer $TOKEN"Используйте ответ как основу для последующего
PUT— меняйте только нужные поля и отправляйте объект обратно.
Создать событие
POST /events
Создаёт новое событие. Тело — RestaurantFullContract (та же структура, что у настроек
ресторана, но описывающая событие): название, описание, промо-изображение, даты, расписание
(openingHours/reservationHours/specialPeriods), настройки бронирования
(reservationSettings), а также схема зала события с билетами (floors[].event.tickets[]).
| Параметр | Где | Тип |
|---|---|---|
restaurantId * | path | integer |
curl -X POST https://api.hostmeapp.com/api/core/admin/restaurants/123/events \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{ "name": "Винный ужин", "description": "Дегустация из 5 блюд с сомелье", "startDate": "2026-07-15T19:00:00", "endDate": "2026-07-15T23:00:00", "isPublic": true }'Это упрощённый пример. На практике вместе с событием передаётся расписание и
reservationSettings. Проще скопировать структуру из существующего события (GET /events/{eventId}) и подставить свои значения.
Обновить событие
PUT /events/{eventId}
Обновляет событие. Тело — RestaurantFullContract (как при создании).
| Параметр | Где | Тип |
|---|---|---|
restaurantId * | path | integer |
eventId * | path | integer |
curl -X PUT https://api.hostmeapp.com/api/core/admin/restaurants/123/events/4567 \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{ "name": "Винный ужин (обновлённое название)", "isPublic": true }'Удалить событие
DELETE /events/{eventId}
Удаляет событие.
| Параметр | Где | Тип |
|---|---|---|
restaurantId * | path | integer |
eventId * | path | integer |
curl -X DELETE https://api.hostmeapp.com/api/core/admin/restaurants/123/events/4567 \ -H "Authorization: Bearer $TOKEN"Ответ —
200 OKбез тела.
Копировать событие
POST /events/{copyFromId}/saveas
Создаёт новое событие на основе существующего (copyFromId). Тело — RestaurantFullContract
с полями нового события (например, новое название и даты); остальное копируется из исходного.
| Параметр | Где | Тип | Описание |
|---|---|---|---|
restaurantId * | path | integer | Идентификатор ресторана |
copyFromId * | path | integer | ID события-источника |
curl -X POST https://api.hostmeapp.com/api/core/admin/restaurants/123/events/4567/saveas \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{ "name": "Винный ужин — август", "startDate": "2026-08-15T19:00:00" }'Опубликовать / снять с публикации
PUT /events/{eventId}/status
Меняет статус публикации события. Управляется query-параметром isOffline:
isOffline=false — опубликовать (сделать активным), isOffline=true — снять с публикации
(вернуть в черновики).
| Параметр | Где | Тип | Описание |
|---|---|---|---|
restaurantId * | path | integer | Идентификатор ресторана |
eventId * | path | integer | ID события |
isOffline | query | boolean | true — снять с публикации, false — опубликовать |
# Опубликовать событиеcurl -X PUT "https://api.hostmeapp.com/api/core/admin/restaurants/123/events/4567/status?isOffline=false" \ -H "Authorization: Bearer $TOKEN"Ответ — обновлённое событие (RestaurantFullContract).
Системная смена статуса
PUT /events/{eventId}/status/system
Системный вариант смены статуса — те же параметры (isOffline) и тот же ответ.
Предназначен для служебного/автоматического переключения статуса.
Точные схемы успешных ответов для создания/обновления документированы как
RestaurantFullContract; полную структуру со всеми вложенными объектами смотрите в Swagger UI. Документированные ошибки —ProblemDetails(см. Ошибки).