Hostme | Оплаты и депозиты

Оплаты и депозиты

Обновлено: 2026-06-24 17:30 MSK

Раздел описывает платёжную часть Hostme: депозиты и предоплаты по бронированиям (платёжные intent, секреты, статусы оплаты, возвраты), а также сервисные эндпоинты для платёжных карт, тарифных планов и подписки самого ресторана.

Все эндпоинты — под Bearer-токеном (см. Аутентификация) и расположены под базовым путём /api/core/payment. Платёжные операции по броням напрямую связаны с полями BookingContract: depositToken, depositStatus, paymentType, intentClientSecret, paymentLinkUrl, details.paymentLinkUrl — см. раздел Бронирования.

МетодПутьНазначение
POST/restaurants/{restaurantId}/intentsСоздать платёжный intent (получить секрет)
POST/restaurants/{restaurantId}/reservations/{reservationId}/refundВернуть депозит по броне
GET/restaurants/{restaurantId}/cardsСписок платёжных карт
POST/restaurants/{restaurantId}/cardsПривязать карту
PUT/restaurants/{restaurantId}/cards/{cardId}Сделать карту картой по умолчанию
DELETE/restaurants/{restaurantId}/cards/{cardId}Удалить карту
GET/restaurants/{restaurantId}/chargesИстория списаний
GET/restaurants/{restaurantId}/plansСписок тарифных планов
GET/restaurants/{restaurantId}/subscriptionsПодписки ресторана

Депозиты и предоплаты по бронированиям

Если в ресторане настроены предоплаты или депозиты, в брони (BookingContract) появляются платёжные поля. Они заполняются при создании/обработке брони и обновляются по ходу оплаты:

Поле брониТипНазначение
paymentTypestringТип оплаты по броне
depositTokenstringТокен депозита (передаётся при создании брони с предоплатой)
depositStatusstringСтатус оплаты депозита
isDepositbooleanПризнак того, что платёж — депозит
amountnumberСумма к оплате
receiptAmountnumberФактическая сумма чека
currencystringВалюта
cardAttachedbooleanПривязана ли карта гостя
paymentCustomerIdstringИдентификатор плательщика в платёжной системе
intentClientSecretstringКлиентский секрет платёжного intent (для подтверждения оплаты на стороне гостя)
paymentLinkUrlstringСсылка на оплату
redirectLinkUrlstringURL для редиректа после оплаты
details.paymentLinkUrlstringСсылка на оплату внутри блока details
details.paymentErrorstringТекст ошибки оплаты, если она была

Поле depositToken передаётся при создании брони и привязывает предоплату к бронированию. Дальнейший статус смотрите в depositStatus и details.paymentError.


POST /restaurants/{restaurantId}/intents — создать платёжный intent

Создаёт платёжный intent и возвращает секрет, которым гость подтверждает оплату на своей стороне (в платёжном виджете). Используется при оформлении депозита/предоплаты.

ПараметрГдеТипОписание
restaurantId *pathintegerИдентификатор ресторана

Ответ — IntentSecretContract

ПолеТипОписание
secretstringКлиентский секрет для подтверждения платежа
paymentMethodobject GuestPaymentMethodСпособ оплаты (enum: 0, 1)
curl -X POST https://api.hostmeapp.com/api/core/payment/restaurants/123/intents \
  -H "Authorization: Bearer $TOKEN"

Полученный secret соответствует полю intentClientSecret в BookingContract и используется фронтендом гостя для завершения оплаты.


POST /restaurants/{restaurantId}/reservations/{reservationId}/refund — вернуть депозит

Возвращает депозит (полностью или частично) по конкретной броне. Сумма возврата задаётся в теле запроса; в ответ приходит обновлённая бронь.

ПараметрГдеТипОписание
restaurantId *pathstringИдентификатор ресторана
reservationId *pathstringИдентификатор брони

Тело — PaymentRefundContract

ПолеТипОписание
amountnumberСумма возврата
curl -X POST https://api.hostmeapp.com/api/core/payment/restaurants/123/reservations/RID/refund \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "amount": 25.00 }'

Ответ. Возвращается обновлённая бронь (BookingContract) — проверьте поля depositStatus, receiptAmount и details.paymentError, чтобы убедиться в успехе возврата. Полную структуру BookingContract см. в разделе Бронирования.


Платёжные карты ресторана

Карты используются для оплаты подписки и сервисных списаний самого ресторана.

GET /restaurants/{restaurantId}/cards — список карт

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

ПолеТипОписание
idstringИдентификатор карты
namestringНазвание/владелец
brandstringПлатёжная система (Visa, Mastercard, …)
last4stringПоследние 4 цифры
expirationMonthintegerМесяц истечения
expirationYearintegerГод истечения
isDefaultbooleanКарта по умолчанию
curl https://api.hostmeapp.com/api/core/payment/restaurants/123/cards \
  -H "Authorization: Bearer $TOKEN"

POST /restaurants/{restaurantId}/cards — привязать карту

Тело — TokenContract: токенизированные данные карты.

ПолеТипОписание
valuestringПлатёжный токен карты
emailstringEmail плательщика
fullNamestringИмя владельца
curl -X POST https://api.hostmeapp.com/api/core/payment/restaurants/123/cards \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "value": "tok_ABC_ID", "email": "owner@example.com", "fullName": "Иван Петров" }'

PUT /restaurants/{restaurantId}/cards/{cardId} — карта по умолчанию

Делает указанную карту картой по умолчанию.

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

DELETE /restaurants/{restaurantId}/cards/{cardId} — удалить карту

Отвязывает карту от ресторана.

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

GET /restaurants/{restaurantId}/charges — история списаний

Возвращает список списаний с пагинацией.

ПараметрГдеТипОписание
restaurantId *pathintegerИдентификатор ресторана
skipqueryintegerСколько записей пропустить
takequeryintegerСколько записей вернуть
curl -G https://api.hostmeapp.com/api/core/payment/restaurants/123/charges \
  -H "Authorization: Bearer $TOKEN" \
  --data-urlencode "skip=0" \
  --data-urlencode "take=20"

Точная схема успешного ответа (200) в спецификации не зафиксирована — структура списаний возвращается платёжной системой.


Тарифные планы и подписка ресторана

Эта группа эндпоинтов управляет подпиской самого ресторана на Hostme (тарифы, оформление, отмена). Для большинства партнёрских интеграций она не требуется.

GET /restaurants/{restaurantId}/plans — список планов

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

ПолеТипОписание
idstringИдентификатор плана
namestringНазвание
currencystringВалюта
amountintegerСтоимость
intervalstringПериод списания
intervalCountintegerКоличество периодов
statusstringСтатус плана
liveModebooleanБоевой режим (не тест)
trialPeriodDaysintegerДней пробного периода
createddate-timeДата создания
metadataobject ExtraPlanDataДоп. данные плана: appId, features, price, discount, pos, mailing и др.
curl https://api.hostmeapp.com/api/core/payment/restaurants/123/plans \
  -H "Authorization: Bearer $TOKEN"

GET /restaurants/{restaurantId}/plans/{planId} — план по ID

Возвращает один план по идентификатору (planId — path).

POST /restaurants/{restaurantId}/plans/{planId}/email — отправить план на email

Тело — PaymentPlanMailContract: { "email": "..." }. Отправляет описание плана на указанный адрес.

POST /restaurants/{restaurantId}/subscriptions — оформить подписку

Тело — PaymentCreateSubscriptionContract.

ПолеТипОписание
planIdstringИдентификатор тарифного плана
couponIdstringКупон/скидка
fullNamestringИмя плательщика
emailstringEmail
intentIdstringИдентификатор платёжного intent
paymentCustomerIdstringИдентификатор плательщика
curl -X POST https://api.hostmeapp.com/api/core/payment/restaurants/123/subscriptions \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "planId": "plan_ABC_ID", "fullName": "Иван Петров", "email": "owner@example.com" }'

GET /restaurants/{restaurantId}/subscriptions — текущие подписки

Возвращает подписки ресторана.

GET /restaurants/{restaurantId}/subscription/usage — использование подписки

Возвращает данные об использовании в рамках подписки (квоты, расход).

DELETE /restaurants/{restaurantId}/subscriptions/{subscriptionId} — отменить подписку

Тело — CancelationReasonContract.

ПолеТипОписание
reasonstringПричина отмены
newVendorNamestringИмя нового поставщика (если переход)
customReasonMessagestringСвободный комментарий

POST /restaurants/{restaurantId}/subscriptions/{subscriptionId}/feedback — отзыв при отмене

Тело — CancelationFeedbackContract: experience, customExperienceMessage. Собирает обратную связь после отмены подписки.

POST /restaurants/{restaurantId}/remind — напоминание об оплате

Отправляет напоминание о необходимости оплаты подписки.


Прочее

  • POST /restaurants/{restaurantId}/accounts — создание платёжного аккаунта (тело — TokenContract: value, email, fullName).
  • GET /restaurants/{restaurantId}/customer — данные плательщика ресторана.
  • DELETE /restaurants/{restaurantId}/customer — удаление плательщика.

Эндпоинты POST /payment/events и POST /payment/events/{appId} — служебные вебхуки платёжной системы; в партнёрских интеграциях напрямую не вызываются.


Общие правила запросов и кодов ошибок — в разделах Соглашения и Ошибки. Поля платежей в составе брони описаны в разделе Бронирования.