TouricalDevelopers
Endpoints

Payments

Read the booking-payment ledger. Read-only on v1 — refunds and rebookings stay in the operator dashboard.

Each booking has one or more payments — deposit, installments, final balance. The ledger tracks every Stripe charge attempt against the booking's payment intent.

MethodPathScope
GET/api/v1/paymentspayments:read

The BookingPayment object:

FieldTypeNotes
idstringOpaque payment id.
bookingIdstringOwning booking.
modeenumfull, deposit_only, installment.
statusenumpending, scheduled, processing, succeeded, failed, cancelled.
labelstringOperator-facing label (e.g. "Deposit", "Final balance").
amountCentsinteger
currencystringISO 4217.
scheduledForISO 8601 | nullPlanned off-session charge time.
chargedAtISO 8601 | nullWhen Stripe accepted the charge.
isDepositbooleanTrue for the first payment of a booking.
paymentRailstringcard, bank, etc.
kindstringMore specific: stripe_card, stripe_sepa_debit, etc.

The public surface intentionally omits internal Stripe identifiers, payout deadlines, and dispute-related timing fields.


GET /api/v1/payments

List payments in the tenant. Cursor-paginated. Tenant scoping uses the booking's tenant id.

Required scope — payments:read

Query parameters

NameTypeDefaultNotes
limitinteger50Max 100.
cursorstring—From a previous response.
statusstring—One of pending, scheduled, processing, succeeded, failed, cancelled. Unknown values are ignored.
bookingIdstring—Filter to one booking's ledger.

Response 200

{
  "data": [ /* BookingPayment[] */ ],
  "meta": { "cursor": "pay_a1b2c3" | null, "hasMore": true | false }
}

Errors — 401 unauthorized, 403 (scope-required, or plan-required when the plan has no API access), 429 rate-limited.

GET/api/v1/paymentsTry it

Requests are proxied through this docs site so CORS doesn't block the call. Use a sandbox token if you don't want test calls hitting live data.

Query parameters

limit
cursor
status
bookingId
GET /api/v1/payments

Real-time updates

For reactive flows (e.g. notify on failed installments), subscribe to the payment.succeeded and payment.failed webhooks rather than polling this endpoint.

On this page