Guest booking and payments
Public URLs
Section titled “Public URLs”Guests do not need a BUKMI login. They use:
- Business hub -
https://<your-app-domain>/b/{business-slug}
Lists active services (with search and layout options when there are many services). - Direct service page -
https://<your-app-domain>/b/{business-slug}/{service-slug}
Goes straight into booking that service.
Replace <your-app-domain> with the real host where BUKMI is installed (for example your production URL or .test in development).
Where to copy links in the app
Section titled “Where to copy links in the app”Open the Business page (from the dashboard or your business list - the browser path looks like /businesses/{id}).
- Public booking page section - next to the shown URL, click Copy link. This copies the guest hub URL (your service list for clients).
- Services section - for each active service you can copy the direct service URL:
- Copy link on the card layout, or
- Actions (⋯ on the row) → Copy link in the table layout.
Button labels follow your account / UI language; the names above match the English interface.
Public routes are rate-limited to reduce abuse; normal use is unaffected.
What the guest sees (step by step)
Section titled “What the guest sees (step by step)”The public page uses a wizard-style flow similar in spirit to staff Create booking, but only for active services and without logging in.
1. Choose a service
Section titled “1. Choose a service”- From the hub, the guest sees your active services (cards or list). With many services, search narrows the list.
- From a direct link, this step is skipped - the service is already chosen.
Configurable package (before date and time)
Section titled “Configurable package (before date and time)”Plan: Starter or higher (not Free for new services of this type).
If the service type is Configurable package, the guest first completes the configurator (Configure this service - option groups with live total price and duration), then continues to Pick date and time below. Owner setup: Configurable package services.
2. Pick date and time
Section titled “2. Pick date and time”Two modes (labels match the English UI):
- Soonest available - shows the next open time slots in order; good for “first available”.
- Calendar - month view: pick a day that has availability, then pick a time from the list for that day. Use month navigation to move forward.
Only dates within the business booking horizon (how many calendar days forward guests may book - today is day 1) appear here and in reschedule for 1:1 services. Owners set it under Business and settings → Booking rules (database field guest_max_booking_days_ahead).
If the business assigns performers to the service, the guest may choose who serves them, or leave “any available” - only slots where that person is free will appear.
3. Contact details, consents, and terms
Section titled “3. Contact details, consents, and terms”- Name and email are required.
- Phone appears and may be required if you enabled that on the service.
- Operational processing (required) - the guest must confirm that providing their details is necessary to perform the booking. Copy includes a link to the BUKMI Privacy Policy (platform document).
- Marketing (optional, separate checkbox) - if the guest agrees, they may receive marketing from this business only; the choice is stored on the booking and on the Contact record for that business and email.
- Service terms - if the business added optional Client terms on the service (Pricing section in service editor), the text appears on this step with an accept checkbox when terms exist. If empty, no terms block is shown.
See Contacts, consents, and client terms for how contacts and withdrawals work.
“Mobile - at customer address” services
Section titled ““Mobile - at customer address” services”Plan: The business must be on Starter or higher (or a trial that includes the feature). Free accounts do not offer this service type to new services.
When a service uses the Mobile - at customer address type (you travel to the client), the guest enters the visit address on the same step as contact details: street, postal code, city, country, and optional notes for finding the place. If the business configured a list of served cities in the service editor, city is a dropdown - bookings outside that list are rejected.
The travel buffer set on the service is applied in the performer’s calendar in addition to the usual before/after visit buffers, so with the same nominal duration you may see fewer open slots than for an on-site service at a fixed location.
After booking, the address appears on the thank-you page, in the confirmation email, and in the .ics file (as the event location). In the app, the booking list and booking detail show location / address with an option to open maps. Deposit and paid online flows work the same as for other service types when you enable them.
Group session / class services
Section titled “Group session / class services”Plan: The business must be on Growth or higher (or a trial that includes the feature). Starter and Free cannot publish new group/class services.
When a service uses the Group session / class type, the guest does not pick a slot from your weekly availability grid. Instead, you publish scheduled sessions (date, time, capacity, online link or in-person location) under the service in the dashboard. On the public page the guest sees a list of upcoming sessions with spots left and the service price, selects one session, then continues with the same contact, consent, and payment steps as for other services.
Paid online and deposit behave like a normal ticket: a pending booking still holds a seat until payment completes or the pending checkout expires. Coupons apply when your plan supports them and the service is paid.
To configure sessions, open the service editor and use Manage sessions (or the equivalent link). Group/class services are not offered in the quick service modal from manual Create booking - they must be created in the full editor so you can add sessions.
You can also sell a full series (multi-session package as one booking / one online payment), restrict the offer to single sessions only, series only, or both, and - for a series - enable drop-in bookings on attached runs. Full walkthrough: Group sessions, runs, and series (cycles). When drafting refund rules for courses and workshops, read the high-level consumer-law primer (not advice): Refunds for courses and events - information for businesses.
4. Coupon (optional)
Section titled “4. Coupon (optional)”If your plan includes coupons and the service is paid, a coupon code field is shown. Valid codes apply the discount before payment; invalid codes show an error from the app.
5. Confirm and pay (if needed)
Section titled “5. Confirm and pay (if needed)”- Free or Pay on site - confirming creates the booking (usually confirmed or pending per your rules).
- Paid online - the guest is sent to Stripe Checkout. Until payment succeeds, the booking may stay pending. See below.
- Deposit online, rest on site - Stripe collects only the deposit amount; the remaining balance is settled in person at the visit.
Paid online (Stripe)
Section titled “Paid online (Stripe)”For who can enable Connect, onboarding requirements, and legal terms (including commission at contract level), read Stripe integration (guest payments) first; the rest of this section walks through guest-facing behaviour.
When a service is Paid online and priced above zero:
- The booking is created in a pending state until payment is sorted.
- The guest is sent to Stripe Checkout (your business uses Stripe Connect Express - connected under Integrations).
- After successful payment, the booking is treated as confirmed according to product rules.
- If the guest abandons checkout, you may see pending payment status until the session expires; scheduled jobs can mark unpaid sessions as expired.
How long an unpaid booking keeps holding the slot depends on the product scheduler and business settings: under Business settings → Booking rules, you can keep “Use platform default unpaid checkout timeout” or set a custom timeout in minutes - see Business and settings.
Pay on site and free services do not collect card payment through this checkout flow.
Deposit online
Section titled “Deposit online”The Deposit online, rest on site price type lets you secure a slot with a partial upfront charge:
- In the service editor (Pricing section) you set two fields: Total price and Deposit amount (must be > 0 and ≤ total price).
- At checkout the guest sees a “Deposit” / “Due on site” breakdown and clicks “Confirm booking and pay deposit”.
- Stripe Checkout charges only the deposit (the platform commission is calculated from the deposit, not from the total price).
- After a successful payment the booking becomes confirmed with payment status Deposit paid; the Paid timestamp stays empty (the full amount is settled at the visit).
- If the guest applies a coupon, the discount reduces the total price - the deposit is automatically capped to the new total so “Due on site” never goes negative.
Until the deposit payment succeeds, the same pending / expiry behaviour applies as for paid online, including the timeout configured under Business settings → Booking rules (platform default vs custom minutes). Overview: Business and settings.
Deposit services require active Stripe Connect (like Paid online); without Connect the option is hidden in the service editor.
On the Pro plan the platform withholds a service commission from every online payment - Stripe deducts it automatically during the transfer. The guest pays the full price; the commission is a business cost settled via a single monthly invoice. Details: Commission on online payments.
After booking
Section titled “After booking”The guest usually lands on a confirmation / thank-you page with the visit summary. From there they may:
- Download or add an
.icscalendar file where offered, - Use a reschedule link if the business allows self-service rescheduling and the booking is eligible,
- Complete payment if they were redirected back before paying.
They also receive a booking confirmation email (with a calendar invite where applicable). If they opted in to marketing for that business, the email includes a short notice and a link to withdraw marketing consent (no login required; updates the Contact for that business).
Payment status labels (paid online)
Section titled “Payment status labels (paid online)”For staff, bookings can show payment states such as pending, paid, deposit paid, or expired (exact wording comes from the app’s translations). Pending while checkout is unfinished is normal until the guest pays or the session times out. For Deposit services, once Stripe collects the deposit the booking shows Deposit paid - the remaining amount is settled in person and is not written into the Paid timestamp.
Coupons (guest side)
Section titled “Coupons (guest side)”On plans that include coupons, you create codes under Coupons in the app. Guests enter the code during booking when the service is paid. Full options (percent vs fixed, limits, dates) are described in Coupons.
Troubleshooting for guests
Section titled “Troubleshooting for guests”- “No slots” - check availability rules, calendars blocking time, minimum lead time, how far ahead guests may book (booking rules on the business), and plan booking limits.
- Payment loop - ensure Stripe Connect is completed and charges are enabled for the business.
- Cannot reschedule - too close to the start time, wrong status, payment still pending for online-paid bookings, or the booking is tied to a group session (self-service reschedule is not available for those; the guest can contact the business).
- Public booking unavailable - the business’s platform subscription (BUKMI plan) may be in a blocked billing state. The owner must fix Subscription / payment; see Billing and subscriptions. During a grace period, booking usually still works.