События ресторана
Обновлено: 2026-06-24 17:30 MSK
События — это специальные мероприятия ресторана (ужины, банкеты, тематические вечера, дегустации), у которых своё расписание, билеты/депозиты и отдельные настройки бронирования. На событие можно принимать брони: у каждой брони есть поле 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(см. Ошибки).