Оплаты и депозиты
Обновлено: 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) появляются платёжные поля. Они заполняются при создании/обработке брони и обновляются по ходу оплаты:
| Поле брони | Тип | Назначение |
|---|---|---|
paymentType | string | Тип оплаты по броне |
depositToken | string | Токен депозита (передаётся при создании брони с предоплатой) |
depositStatus | string | Статус оплаты депозита |
isDeposit | boolean | Признак того, что платёж — депозит |
amount | number | Сумма к оплате |
receiptAmount | number | Фактическая сумма чека |
currency | string | Валюта |
cardAttached | boolean | Привязана ли карта гостя |
paymentCustomerId | string | Идентификатор плательщика в платёжной системе |
intentClientSecret | string | Клиентский секрет платёжного intent (для подтверждения оплаты на стороне гостя) |
paymentLinkUrl | string | Ссылка на оплату |
redirectLinkUrl | string | URL для редиректа после оплаты |
details.paymentLinkUrl | string | Ссылка на оплату внутри блока details |
details.paymentError | string | Текст ошибки оплаты, если она была |
Поле
depositTokenпередаётся при создании брони и привязывает предоплату к бронированию. Дальнейший статус смотрите вdepositStatusиdetails.paymentError.
POST /restaurants/{restaurantId}/intents — создать платёжный intent
Создаёт платёжный intent и возвращает секрет, которым гость подтверждает оплату на своей стороне (в платёжном виджете). Используется при оформлении депозита/предоплаты.
| Параметр | Где | Тип | Описание |
|---|---|---|---|
restaurantId * | path | integer | Идентификатор ресторана |
Ответ — IntentSecretContract
| Поле | Тип | Описание |
|---|---|---|
secret | string | Клиентский секрет для подтверждения платежа |
paymentMethod | object 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 * | path | string | Идентификатор ресторана |
reservationId * | path | string | Идентификатор брони |
Тело — PaymentRefundContract
| Поле | Тип | Описание |
|---|---|---|
amount | number | Сумма возврата |
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.
| Поле | Тип | Описание |
|---|---|---|
id | string | Идентификатор карты |
name | string | Название/владелец |
brand | string | Платёжная система (Visa, Mastercard, …) |
last4 | string | Последние 4 цифры |
expirationMonth | integer | Месяц истечения |
expirationYear | integer | Год истечения |
isDefault | boolean | Карта по умолчанию |
curl https://api.hostmeapp.com/api/core/payment/restaurants/123/cards \ -H "Authorization: Bearer $TOKEN"
POST /restaurants/{restaurantId}/cards — привязать карту
Тело — TokenContract: токенизированные данные карты.
| Поле | Тип | Описание |
|---|---|---|
value | string | Платёжный токен карты |
email | string | Email плательщика |
fullName | string | Имя владельца |
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 * | path | integer |
cardId * | path | string |
DELETE /restaurants/{restaurantId}/cards/{cardId} — удалить карту
Отвязывает карту от ресторана.
| Параметр | Где | Тип |
|---|---|---|
restaurantId * | path | integer |
cardId * | path | string |
GET /restaurants/{restaurantId}/charges — история списаний
Возвращает список списаний с пагинацией.
| Параметр | Где | Тип | Описание |
|---|---|---|---|
restaurantId * | path | integer | Идентификатор ресторана |
skip | query | integer | Сколько записей пропустить |
take | query | integer | Сколько записей вернуть |
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.
| Поле | Тип | Описание |
|---|---|---|
id | string | Идентификатор плана |
name | string | Название |
currency | string | Валюта |
amount | integer | Стоимость |
interval | string | Период списания |
intervalCount | integer | Количество периодов |
status | string | Статус плана |
liveMode | boolean | Боевой режим (не тест) |
trialPeriodDays | integer | Дней пробного периода |
created | date-time | Дата создания |
metadata | object 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.
| Поле | Тип | Описание |
|---|---|---|
planId | string | Идентификатор тарифного плана |
couponId | string | Купон/скидка |
fullName | string | Имя плательщика |
email | string | |
intentId | string | Идентификатор платёжного intent |
paymentCustomerId | string | Идентификатор плательщика |
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.
| Поле | Тип | Описание |
|---|---|---|
reason | string | Причина отмены |
newVendorName | string | Имя нового поставщика (если переход) |
customReasonMessage | string | Свободный комментарий |
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}— служебные вебхуки платёжной системы; в партнёрских интеграциях напрямую не вызываются.
Общие правила запросов и кодов ошибок — в разделах Соглашения и Ошибки. Поля платежей в составе брони описаны в разделе Бронирования.