Booking Flow Overview
The booking process follows these steps:- Get available slots for a product and space
- Create temporary booking (reserves slot for 15 minutes)
- Collect customer information (name, email, phone)
- Add additional products (optional)
- Confirm booking with payment choice
1) Prerequisites
- OAuth2 access token with
booking:write - Product ID (booking product with duration metadata)
- Space ID (the bookable resource)
- Use UTC timestamps; avoid local timezone ambiguity
2) Get available slots
Query available time slots for a specific product and space:productId— UUID of the booking productspaceId— UUID of the spacefrom— Start date (ISO 8601)to— Number of days to look ahead (or end date)
3) Create temporary booking
Create a booking with just the product, space, and slot. This reserves the slot for 15 minutes:201 Created):
RESERVED_15_MIN and expires in 15 minutes if not confirmed.
4) Update booking with customer information
Update the booking with customer details and confirm it:email— Customer email (required)name— Customer name (optional)phone— Customer phone (required)status— Set toCONFIRMEDto finalize the bookingadditionalProducts— Array of additional product IDs (optional)paymentEnabled— Iftrue, returns payment URL inLocationheadersuccessUrl— Redirect URL after successful paymentcancelUrl— Redirect URL if payment is cancelled
paymentEnabled: true, the response includes a Location header with the payment URL:
5) Booking statuses
RESERVED_15_MIN— Temporary reservation (expires in 15 minutes)PENDING— Booking created but not yet confirmedCONFIRMED— Booking confirmed and activePAID— Payment completedCANCEL— Booking cancelledREFUNDED— Payment refunded
6) Cancel a booking
To cancel a booking before confirmation:7) Complete flow example
Best practices
- Reserve quickly: Create the temporary booking immediately when user selects a slot
- Confirm within 15 minutes: Update the booking with customer info before expiry
- Handle expiry: If booking expires, create a new one or notify the user
- Idempotency: Use idempotency keys for retries when updating bookings
- Payment URLs: Redirect users to the
LocationURL ifpaymentEnabled: true
Listen for updates
Subscribe to booking webhooks to handle status changes:booking.created— Temporary booking createdbooking.updated— Booking status changed (confirmed, cancelled, etc.)booking.paid— Payment completed