The booking widget (on your own website)
Updated on 2026-07-01
BedFlow includes a standalone booking widget (public/booking-widget.html) that you can embed on your own website — no iframe needed, pure HTML/CSS/JS.
Where do you find it?
The widget lives on your BedFlow server: https://bedflow.eu/booking-widget.html.
Embed it in your WordPress / Statamic / own site via a link or iframe:
<a href="https://bedflow.eu/booking-widget.html" class="book-button">Book directly</a>
Features
- 6-step flow: dates → rooms → extras → guest details → overview → confirmation
- Multilingual (NL / EN / FR / DE) with automatic language detection + runtime switching
- Responsive (mobile, tablet, desktop)
- Multi-room: guest can book several rooms in one session
- Extras: wellness, breakfast, surcharges, honesty bar items
- Mandatory costs: automatically included in the price (see below)
- Wellness slot picker: integrated with WellnessBookingService
- Live availability: via
/api/booking/availabilityand/api/booking/calendar - Proforma + Stripe: after submitting, the guest receives an email with a payment link
- Customisable colours: the widget reads colours + logo per property from the Branding tab
Price breakdown in the overview
In the reservation summary the guest sees how each extra's price is built up: unit price × quantity × persons × nights. A cheese board for 4 people shows as Cheese board (€18.00 × 4 pers) — the same breakdown as the tourist tax. That way a per-person or per-night extra is never a surprise at checkout.
Mandatory costs (e.g. final cleaning or linen at a vacation home) are automatically ticked in the extras step with a Required label. The guest cannot untick them and they immediately count towards the total. Read more: Mandatory costs.
Country list in the guest's language
The guest form contains the full country list (all 249 ISO countries). The country names appear in the language of the widget — a French guest sees Belgique / Pays-Bas / Allemagne, not an English list — and are sorted alphabetically per language. At the top sits a quick-pick group with popular countries (Belgium, Netherlands, Germany, France, United Kingdom, Luxembourg, United States), followed by the rest.
Channel in the DB
Widget bookings get source = 'direct' and channel = 'website'. That way you can filter them in your Email Automations (e.g. a different email for website guests vs OTA guests).
Enable/disable
Settings → Integrations → Booking Widget — toggle on/off. Disabled = the widget shows "Bookings currently unavailable".
Settings that determine widget behaviour
In Settings → Settings → Booking Widget tab:
- Check-in / check-out hours
- Minimum / maximum nights
- Free cancellation up to X days — the info text the guest sees in the widget
- Deposit percentage (or fixed amount)
- Multi-night discount
- Tourist tax per adult per night
- Ask date of birth toggle (default off)
- Per-language texts per step: you can override the main title of each step
Per property, under Settings → My property:
- Cancellation policy (section Cancellation): choose the policy (Flexible / Late-cancel / Non-refundable) that Booking.com and your own widget show, and set the free-cancellation window in hours — up to 4320 hours (180 days). That also allows a long cancellation window, normal for vacation rentals: 48 = 2 days, 168 = 1 week, 1008 = 6 weeks.
- Terms links (section Booking widget behaviour): the URLs of your terms and conditions and your cancellation policy. Filled in → the guest sees clickable links next to the consent checkbox. Left empty → the widget shows the same text without a link, so the guest never clicks a broken (404) link.
- Colours + logo via the Branding tab.
FAQ
Can I set a cancellation window of 6 weeks? Yes. You set the window in hours: 1008 hours = 6 weeks. The maximum is 4320 hours (180 days).
My guest complained the country list was in English — is that fixed? Yes. The country list now follows the language of the widget and is correctly sorted per language.
The terms link in the widget gave a 404. What now? Fill in the URLs of your own terms pages under Booking widget behaviour on your property. As long as they are empty, the widget deliberately shows no link.