Hostme | События ресторана

События ресторана

Обновлено: 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)

Это та модель, которую возвращают эндпоинты-списки. Поля верхнего уровня:

ПолеТипОписание
idintegerИдентификатор события
namestringНазвание события
descriptionstringОписание
promoImagestringURL промо-изображения
startDatedate-timeДата и время начала
endDatedate-timeДата и время окончания
isOfflinebooleanСнято с публикации (черновик/выключено)
isPublicbooleanВидно гостям публично
datesarray<string>Конкретные даты проведения (для повторяющихся событий)
additionalInfoobjectДоступные на событии признаки/пожелания (см. ниже)
reservationHoursarrayЧасы приёма броней по дням недели (см. «Расписание»)
openingHoursarrayЧасы работы события по дням недели
specialPeriodsarrayОсобые периоды/исключения в расписании
reservationSettingsobjectНастройки бронирования события (ReservationSettingsContract)
depositRulesobjectПравила депозита/предоплаты

Признаки события (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):

ПолеТипОписание
idstringИдентификатор билета
eventIdintegerID события
typestringТип билета
titlestringНазвание билета
descriptionstringОписание
amountintegerСтоимость билета

Депозит/предоплата на событие конфигурируются через reservationSettings.depositRules, reservationSettings.depositEvents[] и reservationSettings.creditCardChargeEnabled. Вместимость и лимиты гостей — через поля reservationSettings (maxGuestsPerReservation, minGuestsPerReservation, defaultMaxCoversPerSlot, totalCoversAvailableAtTime, maxBookingsPerSlot и др.).


Расписание события

Расписание задаётся тремя массивами в модели события:

  • openingHours[] — часы работы события по дням недели.
  • reservationHours[] — в какие часы принимаются брони.
  • specialPeriods[] — разовые исключения (праздничные дни, переносы, закрытия).

Каждый элемент openingHours/reservationHours — это WeekDayOpenHoursContract:

ПолеТипОписание
weekDayintegerДень недели (0–6)
timearrayИнтервалы дня (HourlyIntervalContract)

Интервал HourlyIntervalContract: open (начало), close (конец), name (метка интервала).

Элемент specialPeriods[] (SpecialPeriodContract): starts, ends, closed (закрыто в этот период), repeat (повторять), isSystem (системный), time[] (интервалы).


GET /events — все события

Возвращает массив EventDetailsContract.

ПараметрГдеТипОписание
restaurantId *pathintegerИдентификатор ресторана
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 *pathinteger
eventId *pathinteger
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 *pathinteger
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 *pathinteger
eventId *pathinteger
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 *pathinteger
eventId *pathinteger
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 *pathintegerИдентификатор ресторана
copyFromId *pathintegerID события-источника
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 *pathintegerИдентификатор ресторана
eventId *pathintegerID события
isOfflinequerybooleantrue — снять с публикации, 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 (см. Ошибки).