Hostme | Создание и управление

Создание и управление

Обновлено: 2026-06-25 00:15 MSK

Полный жизненный цикл брони: создание, список за период, чтение, изменение и отмена. Все эндпоинты — под Bearer-токеном (см. Аутентификация).

Базовый путь: /api/rsv/admin/restaurants/{restaurantId}/reservations.

МетодПутьНазначение
POST/reservationsСоздать бронь
GET/reservationsСписок броней за период
GET/reservations/{reservationId}Получить бронь по ID
PUT/reservations/{reservationId}Изменить бронь
PUT/reservations/{reservationId}/cancelОтменить бронь

POST /reservations — создать бронь

Создаёт новое бронирование. Поведение зависит от типа токена:

  • Hostme / Partner — бронь создаётся от имени текущего пользователя (хоста/менеджера).
  • Vendor — бронь создаётся от имени внешнего приложения (POS, CRM и т.п.).

Тело — CreateReservationContract. Ниже — наиболее используемые поля верхнего уровня.

Основные поля

ПолеТипОписание
reservationTimedate-timeДата и время визита (локальное время ресторана)
groupSizeintegerКоличество гостей
customerNamestringИмя гостя
phonestringТелефон
emailstringEmail
tableNumberstringЖелаемый/назначенный стол
specialRequestsstringПожелания гостя
internalNotesstringВнутренние заметки (не для гостя)
aboutGuestNotesstringЗаметки о госте
amountnumberСумма (например, предоплата/чек)
estimatedTurnOverTimeintegerОжидаемое время оборота стола, мин
sourcestringИсточник брони (маркировка вашего канала)
statestringСостояние/статус
deliveryTypestringТип обслуживания (зал/доставка/самовывоз)
paymentTypestringТип оплаты
depositTokenstringТокен депозита (если используется предоплата)
eventIdintegerID события, если бронь на событие
externalUserIdstringВнешний ID гостя на вашей стороне
createdBystringКто создал

Вложенные объекты

ПолеОбъектСодержит
customerProfileProfileDataПрофиль гостя: allergy[], vegetarian, vip, handicapAccessible, anniversary, birthdate, companyName, адрес доставки
additionalsAdditionalsПризнаки/пожелания: highChair, vip, booth, highTop, babyChair, stroller, allergy, vegetarian, contactless, dontDisturb, event, eventTypes[], customs[]
orderOnlineOrderПрикреплённый заказ: orderItems[] (productId, amount, modifiers[]), note, total, subTotal, taxes, tips
referralReferralInfoContractРеферал/пригласивший

Пример (минимальный)

curl -X POST https://api.hostmeapp.com/api/rsv/admin/restaurants/123/reservations \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "reservationTime": "2026-07-01T19:00:00",
    "groupSize": 2,
    "customerName": "Иван Петров",
    "phone": "+79991234567",
    "email": "ivan@example.com",
    "specialRequests": "Столик у окна",
    "source": "partner-widget"
  }'

Пример (с профилем гостя и пожеланиями)

curl -X POST https://api.hostmeapp.com/api/rsv/admin/restaurants/123/reservations \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "reservationTime": "2026-07-01T20:30:00",
    "groupSize": 4,
    "customerName": "Мария Иванова",
    "phone": "+79990000000",
    "additionals": { "highChair": true, "vip": true },
    "customerProfile": { "allergy": ["орехи"], "vegetarian": true },
    "internalNotes": "Постоянный гость",
    "source": "partner-crm"
  }'

Ответ. При успехе возвращается созданная бронь в виде BookingContract (см. ниже). Документированные ошибки: 400 Bad Request, 404 Not Found (тело — ProblemDetails).


GET /reservations — список за период

Возвращает брони ресторана за период. Для запросов от внешних приложений (scope App) автоматически проставляется VendorAppId, и обязателен диапазон дат не более 60 дней.

Параметры

ПараметрГдеТипОписание
restaurantId *pathintegerИдентификатор ресторана
fromquerydate-timeНачало периода
toquerydate-timeКонец периода
businessDateFromquerydateНачало по «бизнес-дате»
businessDateToquerydateКонец по «бизнес-дате»
pendingquerybooleanТолько ожидающие
unviewedquerybooleanТолько непросмотренные
includeEventsquerybooleanВключать брони на события
kindquerystringТип брони
statusquerystringФильтр по статусу
VendorAppIdquerystringФильтр по приложению-источнику (для внешних приложений проставляется автоматически)

Пример

curl -G https://api.hostmeapp.com/api/rsv/admin/restaurants/123/reservations \
  -H "Authorization: Bearer $TOKEN" \
  --data-urlencode "from=2026-07-01T00:00:00" \
  --data-urlencode "to=2026-07-07T23:59:59"

Для внешних приложений диапазон обязателен и ограничен 60 днями — разбивайте длинные периоды на части.


GET /reservations/{reservationId} — получить бронь

Возвращает бронь по идентификатору. Ответ — BookingContract.

ПараметрГдеТип
restaurantId *pathinteger
reservationId *pathstring

Ключевые поля ответа (BookingContract)

ПолеТипОписание
customerProfileobjectПрофиль гостя (ProfileData)
additionalsobjectПризнаки/пожелания (Additionals)
detailsobjectДоп. детали: cancelOptionName, cancelNote, cancelSource, paymentError, paymentLinkUrl
waiters[]arrayНазначенные официанты (id, fullName, …)

Полный объект BookingContract обширен (профиль, заказ, чек, платёж). Здесь перечислены ключевые блоки; полную структуру смотрите в Swagger UI.


PUT /reservations/{reservationId} — изменить бронь

Обновляет существующую бронь (время, размер компании, стол и т.п.). Изменение фиксируется с привязкой к текущему пользователю (для аудита).

ПараметрГдеТип
restaurantId *pathinteger
reservationId *pathstring

Тело запроса — те же поля, что и при создании (CreateReservationContract): присылайте изменяемые поля (reservationTime, groupSize, tableNumber, specialRequests и др.).

curl -X PUT https://api.hostmeapp.com/api/rsv/admin/restaurants/123/reservations/RID \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "reservationTime": "2026-07-01T20:00:00", "groupSize": 3 }'

PUT /reservations/{reservationId}/cancel — отменить бронь

Отменяет бронь от имени персонала ресторана. Тело — CancelReservationContract.

ПолеТипОписание
notestringКомментарий к отмене
cancelOptionNamestringНазвание причины отмены
updatedBystringКто отменил
originstringИсточник отмены
doNotChargeFeebooleanНе списывать штраф/плату за отмену

Ответ — обновлённая бронь (BookingContract) со статусом отмены.

curl -X PUT https://api.hostmeapp.com/api/rsv/admin/restaurants/123/reservations/RID/cancel \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "cancelOptionName": "Гость отменил", "note": "Перенос на другой день", "doNotChargeFee": true }'

Нужна модерация броней из внешних каналов? Используйте Запросы на бронь — заявку подтверждает хост, прежде чем она станет полноценной бронью.