The booking flow at a glance
1
Open the app and enter a destination
When you land on OpenBookings, you’ll see a search panel in the bottom-right corner. Click the Destination field and start typing a city name. A typeahead list of matching cities appears — select the one you want. The app records the destination’s geographic coordinates (latitude and longitude) internally; these are what drive the hotel search radius.
2
Select your check-in and check-out dates
Click the date field (labelled From / Till) to open the calendar picker. Tap your check-in date first, then your check-out date. Both dates are stored in
YYYY-MM-DD format. The number of nights is derived automatically from the difference between the two dates.Dates are interpreted in your local timezone. The calendar always shows the date as you selected it — no UTC conversion surprises.
3
Set your guest count and number of rooms
Click the guests field to open the Guest Selector. Use the
+ and − buttons to set:The selector defaults to 2 adults, 0 children, 1 room on first load. Only rooms whose
max_adults ≥ your adult count and max_children ≥ your child count are returned in results — the API filters unsuitable rooms before they ever reach you.4
Run the search
Click Find my trip. The app sends your destination coordinates, dates, and guest counts to
GET /api/query and displays the matching hotels.5
Review search results
Each result card shows the best-priced available room for that hotel. Here’s what every field on a result means:
Results are sorted by
total_price ascending, and only the cheapest available room per hotel is shown. If a hotel has multiple room types, you’ll see whichever one costs least for your dates and guest count.6
Choose a room and proceed to book
Click Explore on the hotel card you want. You’ll see the full room details and a booking button.
7
Sign in to complete the booking
OpenBookings uses email magic-link authentication — no password required. If you’re not already signed in, enter your email address and click the link sent to your inbox. You’ll be redirected back to complete the booking.
Your search state is preserved through the sign-in redirect so you don’t have to start over.
8
Confirm your booking
Review the booking summary (hotel, room, dates, total price, cancellation policy) and confirm. You’ll receive a confirmation email once the reservation is placed.
Calling the API directly
You can reproduce any search programmatically with a singleGET request to /api/query. All parameters are passed as URL query strings.
Required parameters
Optional parameters
Example response
The endpoint returns a JSON array. Each element represents the best-priced room for one hotel. Fields are sorted bytotal_price ascending.
subtotal is the sum of all nightly base prices (plus any per-night surcharges). total_price is the final amount after booking-level discounts. applied_modifiers lists which modifier types changed the price — see the pricing modifiers guide for details.
Error responses
If a required parameter is missing or invalid, the API returns HTTP400 with an errors array:
500 response indicates a server-side error and will include a single error string.
When no results are returned
The API returns an empty array ([]) when no rooms match your search. This can happen for several reasons:
- No hotels within 250 km of the destination coordinates have available inventory for your dates.
- No room fits your guest count — every room within range has a
max_adultsormax_childrenlower than what you requested. - Stay length constraints — the room’s
min_stayis longer than your selected stay, or your stay exceedsmax_stay.
results.length === 0 and prompt the user to adjust their dates, guest count, or destination.