Payments, refunds, and payouts
Booking payments, refund intents, provider payouts, and disputes.
All pages need canManagePayments.
Payments
/dashboard/platform/payments (hotelPaymentOperations) lists BookingPayment records with provider, status, and amount. Guests pay through a BookingPaymentSession (initiateBookingPaymentSession, then completeBookingPayment on return). Provider events are stored as PaymentEvent.
Refunds
Quote
hotelRefundQuote(paymentId) shows the refundable amount.
Request
requestBookingPaymentRefund takes the payment, amount, a bounded reason, and an idempotency key. It creates a RefundIntent.
Execute
The refund worker sends it to the provider. Status goes pending → processing → succeeded, or failed and dead_letter.
Replay
Replay a stuck intent with replayRefundIntent.
A refund requires an independent approval when it exceeds the thresholds in Property settings. A booking cannot have two cancellation refunds in progress.
Payouts
/dashboard/platform/payouts (hotelPayoutOperations). Import a reviewed provider statement, match each payment, and approve the bank deposit with manageHotelPayout.
Disputes
/dashboard/platform/disputes lists Stripe dispute notices. Add an evidence note with annotateHotelDispute. Submit evidence in Stripe.