Customer Booking Flow
Guide customers through the public six-step booking flow, including resource choices, five-minute slot holds, contact details, and recovery when a time is no longer available.
Customers start a booking at /book; they do not need to sign in for the booking funnel. A signed-in customer can later open My Bookings at /bookings, while a customer who is not signed in should save the private manage link shown after a successful booking.
When Appointments is unavailable for the store
New bookings stop before the service list. The page reads Bookings are not available and This store isn't taking online bookings right now. Existing bookings can still be managed; see My Bookings & Guest Manage Links → After the Appointments add-on ends.
Service → Choose → Time → Details → Confirm → (Pay deposit) → Done
Pay deposit appears for a signed-in customer when the selected offering's effective deposit policy requires payment — either its own saved policy or the store's default when the offering has no saved policy. See Paying a deposit below. A guest never sees this mid-funnel step; instead, an owed deposit shows up directly on Done as a Booking pending payment state with its own pay link — see Save the confirmation below.
Every booking screen shows its position, a progress line, and the Booking steps row. A customer can use a completed step to go back and change an earlier choice, but unreached future steps stay disabled. On a narrower browser (below 768px), the row of step buttons collapses to a single line — Step 3 of 6 · Time, for example — instead of showing every step; the same reachable steps are still available to screen readers, just not as visible buttons. Choosing Book another from the final screen clears the current funnel and starts again at Service.
Complete a booking
Select a service
Open /book. Offerings appear as a card grid — each card shows the offering's photo, or a monogram in
the merchant's brand color when no photo is set, its name, an optional description, its duration, and
its price (a starting-price offering shows From before the amount). Choose Select on a card to
continue. This card grid — along with List, Editorial split, and Photo rail — is one of the
four Offerings formats a merchant can choose in the Booking Experience Editor → Step Format: choosing
a format per step;
every one of them shows the same deposit badge described below.
When the offering's effective Deposit policy requires payment, its card shows a badge next to its name: for example, 20% deposit required for Percentage of total or ₹500.00 deposit required for Fixed amount, or Full payment required for Full prepayment. The effective policy is the offering's own saved policy, or the store's Default deposit (₹) from Booking Settings & Presets when the offering has no saved policy. An offering explicitly saved with No deposit shows no badge and does not inherit the store default. See Create & Manage Offerings → Deposit policy for how each type's amount is set.
The page can show Loading available services..., We couldn't load services right now. Please try again., or No bookable services are available right now. Select a different service only by returning to this first step; opening /book resets selections left over from an earlier funnel.
On a desktop-width browser (1024px and wider), before a service is chosen the right-hand panel shows the merchant's logo (or a monogram) and name, a short How it works guide, and — when the merchant has configured them — its address, phone, and email. A merchant-set tagline appears under the name too; a store that has never set one shows no tagline line at all, rather than a generic placeholder.
Choose a person
After selecting a service, use Choose to select an available person. Rooms, equipment, and other non-person resources are not shown as booking staff. Any available appears only when at least two eligible people are returned; selecting it lets the system assign one of those people, rather than a room or equipment item.
When more than one person is available, select one and then choose Continue. Continue is disabled until a choice is made. When exactly one eligible person is returned, it is selected automatically and the flow goes straight to Time. When no eligible people are returned, the page shows No one is available to book for this service right now.
A group session offering (a service booked by a shared capacity, like a class with several seats, rather than one customer per team member) has no individual to pick at all — this step is skipped entirely for it. The funnel goes straight from Service to Time, the Booking steps row does not list this step, and going back from Time returns to Service, not to this screen. This is a property of the offering itself, not of the on/off switch described later in this page.
Pick Time
On Time, the flow requests availability from today through the next 14 days. Select a date in the horizontal date row, then select a listed time. The page shows No times available on this day. Try another date. when the selected date has no times; choose a different date to continue.
Times use a 12-hour clock with AM or PM throughout the booking flow, including this list, the booking summary, Confirm, the payment and confirmation screens, My Bookings, and private manage links.
When a day has more than six open times, they are grouped under Morning, Afternoon, and Evening headings (before noon, noon to 5pm, and 5pm onward, in that order — a day with no evening times simply has no Evening group). A day with six or fewer open times stays a single flat list with no headings.
Selecting a time immediately creates a five-minute hold; the page itself does not navigate. Where Continue appears next to the countdown depends on screen width. On a desktop-width browser (1024px and wider), a sticky Your booking summary panel appears on the right of the page as soon as the hold lands, showing the service, chosen team member, held time, and total — Continue sits at the foot of that panel. Below that width (including tablets), the summary panel does not render; instead a Holding your slot — bar with a live countdown sticks to the bottom of the screen, with Continue inside it. Either Continue does the same thing: use it only after the hold appears, and it moves to Details.
Enter Details
A signed-in customer sees the account name and phone number in a read-only contact card. A customer who is not signed in enters required Full name and Phone number. An empty name, or a phone number shorter than 6 or longer than 20 characters, stops the form and shows a field error.
A customer who is not signed in must also enter Email address. It has a required marker for every guest, regardless of the Send my booking link via choice; an empty value shows Please enter your email address, and an invalid address shows Please enter a valid email address. The email is used for the booking-verification code described below. The separate WhatsApp, Email, or Both choice controls only where the manage-and-pay link is sent after booking; the link itself always appears on Done.
If the selected service includes additional intake questions, they appear under A few more questions. Required configured questions must be completed before Continue can advance to Confirm. Every answer type the offering's intake-question builder offers reaches this step — see that page for how each one renders to the customer.
On a desktop-width browser (1024px and wider), the same Your booking summary panel from Time stays visible on the right, now including the live hold countdown alongside the service, team member, held time, and total.
After Continue, a guest pauses on Verify your booking before reaching Confirm. The screen says Enter the 6-digit code sent to [masked email] to confirm your booking. Enter the six digits in Verification code; Verify code stays disabled until all six digits are present and changes to Verifying… while the check runs. This is an interstitial within the Details stage, so it does not add another numbered item to Booking steps. A signed-in customer skips it.
The code is sent by email when the verification screen opens. A fresh send shows Code sent — check [masked email]. If the still-valid code is reused, it shows We already sent a code to [masked email] — it's still valid. Resend code is disabled for 60 seconds and initially displays Resend code in 60s; the number counts down during that cooldown. Codes expire after 10 minutes and allow five incorrect attempts. Use the back arrow at the top of the step (accessible label Go back) to return to Details and correct the address. The email identifies the sender with the store's brand name when available, otherwise the owner's name, and finally Your store when neither name is available.
If the verification email cannot be sent
The screen shows We couldn't send the code to your email. Check the address and try again. The customer cannot continue without verifying the code. Use the back arrow at the top of the step (accessible label Go back), correct the email, and continue again; after the cooldown, Resend code can send another copy. Booking verification is delivered by email only.
Review and confirm
On Confirm, review Service, With when Any available was selected, When, and Total. What the page says about money below that summary depends on the offering and on who is booking:
- The effective policy requires no deposit (or the merchant has turned the payment step off): the page states No payment is required now — you'll pay at the time of your appointment.
- The effective policy requires a deposit and the customer is signed in: no notice is shown here, because the deposit is collected on the very next screen — see the Pay deposit step below.
- The effective policy requires a deposit and the customer is booking as a guest: for a Percentage of total or Fixed amount policy, the page states A deposit is required to confirm this appointment. We'll give you a link to pay it on the next screen — your slot is held until then. For Full prepayment, it instead states Full payment is required to confirm this appointment. We'll give you a link to pay on the next screen — your slot is held until then. Either way, a guest never pays inside the booking funnel; they pay from the link on the final screen, and the slot stays held in the meantime.
Choose Confirm booking. The button is disabled while confirmation is being processed. If confirmation cannot be completed for a reason other than a time collision, the page shows its returned error or We couldn't confirm your booking. Please try again. and allows another attempt while the hold remains valid.
On a desktop-width browser (1024px and wider), the Your booking summary panel is still shown on the right with the live hold countdown, matching Details.
Save the confirmation
On Done, what the page says depends on whether the booking still owes money. A booking that needs no deposit, or whose deposit was already paid on Reserve your booking (signed-in customers only — see Paying a deposit below), shows You're all set! under the page title Booking confirmed, with the service, date and time, and total.
A booking that still owes money is never shown as confirmed here, whoever is booking it. The page title reads Booking pending payment and the heading reads Almost there!. The subheading depends on the offering's deposit policy: Pay your deposit to confirm this appointment. for a Percentage of total or Fixed amount policy, or Complete payment to confirm this appointment. for a Full prepayment policy. The appointment's time slot stays held while the payment is unpaid; it is not yet a confirmed booking. For a guest, this is the normal outcome of an offering that requires payment, since a guest is always sent to Done and never to the mid-funnel payment step described under Paying a deposit below. See Sending the manage-and-pay link below for how the customer actually pays from here.
A signed-in customer can choose View my bookings. Anyone can choose Book another to reset the funnel and return to Service.
On a desktop-width browser (1024px and wider), the Your booking summary panel remains visible one last time with the service, team member, time, and total — but with no countdown, since the funnel step that could expire (the slot hold) has already been resolved by this point either way.
After a first successful confirmation, a box shows a private /book/manage/... link with Copy —
titled Save your booking link when the booking is confirmed outright, Pay your deposit to
confirm when it is pending payment on a Percentage of total or Fixed amount deposit policy, or
Complete payment to confirm when it is pending payment on a Full prepayment policy (see above).
This box shows for a signed-in customer exactly as it does for a guest whenever a link is available;
save or use it, it is the route to view, manage, or pay for the booking without needing to sign in. If
copying is unavailable, the visible link can still be selected manually.
Paying a deposit
After Confirm booking succeeds, a signed-in customer is sent to a payment screen instead of Done when the selected offering's effective deposit policy requires it. For a Percentage of total or Fixed amount deposit policy, the screen is titled Pay deposit and shows A deposit is required to secure this appointment. You'll pay the remaining balance later., the Deposit due amount, and Pay deposit, which opens the Razorpay checkout modal. For a Full prepayment deposit policy, the same screen is titled Pay now instead, and shows Full payment is required to secure this appointment., an Amount due amount, and Pay now — it never promises a remaining balance, since none is owed once this payment succeeds. Either way, a successful payment continues to Done automatically; closing the modal without paying returns to the same page so the customer can try again.
A guest booking the same kind of offering never sees this mid-funnel step (see the callout below) — the deposit requirement instead shows up directly on Done, which reads Booking pending payment rather than Booking confirmed for as long as it's unpaid. See Save the confirmation and Sending the manage-and-pay link for what that looks like and how the guest pays from there.
What decides whether this step appears
This step appears mid-funnel, right after Confirm booking, only when the selected offering's effective Deposit policy is anything other than No deposit, and only for a signed-in customer. The effective policy is the offering's own saved policy, or the store default when that policy was never saved. A guest booker is never inserted into this step mid-funnel and always continues straight to Done. That is not the same as a guest never being able to pay a deposit at all: from their saved private manage link, a guest can reach the same payment screen through its own Pay deposit or Pay now action, depending on the policy, without ever signing in — see Paying an outstanding deposit or balance without signing in.
An offering saved with No deposit through Create & Manage Offerings has an explicit no-deposit policy and never falls back to anything else. When the policy was never saved — for example, on an older offering that has not been reopened and saved — public booking reads apply the store's Default deposit (₹) from Settings & Presets. The service card shows that inherited deposit badge, and the booking follows the same signed-in payment or guest pending-payment route as any other effective deposit policy.
Sending the manage-and-pay link
The Send my booking link via choice on Details (see Enter Details above) only controls where a copy of the link is sent — it never controls whether the link exists. Whichever channel a guest picks, and whether or not the customer is signed in at all, the same link also always shows directly on Done in the Save your booking link / Pay your deposit to confirm box, with a Copy button. That on-screen link is the one delivery path that cannot fail — treat it as the fallback for the other two channels, not an optional extra.
Why didn't a customer get the WhatsApp message?
The WhatsApp channel sends a free-form message, which only delivers inside an open 24-hour WhatsApp messaging window with the store's number. A customer who has never messaged the store on WhatsApp before — or whose messaging window with it has lapsed — may not receive that message even though WhatsApp or Both was selected. This is not a bug to chase: point the customer to the link shown directly on their Done screen, or have them check email if Both was selected.
An unpaid Booking pending payment keeps its time slot held only for a limited window after the booking was made — by default 30 minutes — before the hold is released and the slot becomes available to other customers again. This is separate from, and longer than, the five-minute slot hold described below, which only protects the time slot while the customer is still filling in the booking funnel itself.
Keep the held time
A selected time is held for five minutes
The live hold countdown stays visible through Time, Details, and Confirm — on a desktop-width browser it shows in the Your booking panel; on a narrower browser it shows in the bottom bar. In the final minute, the countdown turns to an urgent color as a warning. When it reaches zero, the flow clears the expired time and hold, shows Your held slot expired. Please pick a new time., and returns the customer to Time. They must select a new available time before continuing.
The hold is created as soon as a time is selected, not when Confirm booking is selected. Going back to an earlier completed step is allowed, but it does not extend the original countdown.
Recover when the selected time is taken
Another customer can take the time before the confirmation request finishes. In that case, Confirm shows Sorry, this time was just taken by someone else.
Choose Pick another time. The flow clears the old hold and returns to Time, where the customer must select and hold a new available time. Do not use the browser Back button as a substitute for choosing a fresh slot.
Private-link limits
The private manage token is shown only when the confirmation response includes it. A repeated confirmation that returns an already-confirmed booking can have no recoverable token; instead of an empty link, the page says: This booking is already confirmed. Use the manage link you were sent to view or update it.
Do not share a private manage link. Anyone holding it can open the booking without a customer sign-in. A hard refresh of the plain confirmation URL cannot reload private booking details, so the screen shows the generic confirmation notice and directs the customer to check their messages for details.
The funnel follows your store's branding
The booking pages (/book through Done) render your store's own brand colours and fonts — the
same Primary, Secondary, and Accent colours and heading/body fonts you set under Store
Branding, and the
surface/text/border tokens from your store's Theme
— rather than a fixed look shared by every merchant.
A store that has never set its own branding is unaffected
The funnel falls back to its original built-in look (a cream-and-green "Editorial Calm" palette with serif headings) wherever a brand token has no value, so a store that hasn't configured Store Branding or a Theme renders exactly as it did before — this is a rendering fix for stores with branding configured, not a redesign of the funnel's default appearance.
Choosing a page template and per-step format (admin-side)
Online Store → Pages → Booking page has its own editor where you can pick one of three page templates (Editorial Calm, Warm Concierge, Immersive Reserve) and, separately, a format for each step above except the payment screen (which follows the page template instead of its own row) — see Booking Experience Editor for the exact controls. Once you Publish there, the layouts described on this page reflect whichever template and per-step formats you've saved — the step sequence and content on this page stay the same regardless of format (every step still asks for the same information), but each step's actual visual arrangement follows your choice. See Booking Experience Editor → What each format looks like to a customer for what every format option actually changes, step by step. The Staff / resource picker row's on/off switch additionally reaches the live funnel's step count and labels once published — but not the step's design, and not whether the screen itself is visited (see Booking Experience Editor → When the on/off switch reaches the live funnel for exactly what it does and doesn't do). Don't expect the on/off switch to remove the person-choice screen for an offering that has more than one available person — the one case where the screen is always skipped regardless of the switch is a group session offering, described above.
When this store's home page is Booking
Some stores set their home page to show this booking funnel directly instead of a landing page — see Storefront Mode for what that switch changes (including whether the Shop link and cart/wishlist icons stay visible, which depends on whether the store is on Services or Both mode) and what it leaves alone (checkout still stays reachable). Nothing about the booking funnel steps above changes on a store like this; only how a customer arrives at Service differs — directly from the root URL instead of a Book navigation link.
Troubleshooting the booking flow
- I cannot choose Continue on Choose: Select an available option first. If the page says no one is available, return to Service and choose another service or try again later.
- There are no times on the date I picked: Use another date in the date row. Availability is shown only for the next 14 days.
- I picked a time but nothing happened: The hold was placed — look for Continue in the Your booking summary panel on the right (desktop-width browsers) or in the countdown bar at the bottom of the screen (narrower browsers). The hold expires after 5 minutes; if the countdown runs out before Continue is used, select a new time.
- The countdown disappeared or says Hold expired: The five-minute hold ended. Select a new time on Time; the old time is deliberately cleared.
- I cannot leave Details: A customer who is not signed in needs both Full name and a 6–20 character Phone number. Complete every required additional question and review the field errors.
- Confirmation says the time was just taken: Choose Pick another time, then select a new slot and continue again.
- I am not signed in and cannot find my booking later: Use the saved manage link. The current customer screen does not offer token recovery; contact the business for help if the link was not saved.
- A customer says they never got the WhatsApp message with their link: See Why didn't a customer get the WhatsApp message? above — the free-form WhatsApp message only delivers inside an open 24-hour messaging window, so it can silently fail to arrive. The link on their Done screen (and email, if Both was selected) is the reliable fallback.
- A guest customer's Done screen says Booking pending payment, not Booking confirmed: This is expected, not a bug — see Save the confirmation. A guest is always sent to Done, never to the signed-in-only Reserve your booking step, so an offering with a deposit policy shows the pending-payment state right there instead, with the pay link in the box on that same screen.
- A customer expected the Payment step but went straight to Done confirmed with no prompt at all: Check the offering's saved Deposit policy in Create & Manage Offerings. An explicit No deposit does not inherit anything. If the policy was never saved, check Appointments → Settings → Booking rules → Default deposit (₹) instead; a positive store default should appear on the service card and follow the normal signed-in payment or guest pending-payment route.
- The booking page says Bookings are not available: The store does not currently have Appointments access, so new bookings are stopped. A store owner can buy or reactivate it from Settings → Billing & Plan → Add-ons. Existing customers can still use My Bookings or a saved manage link.
- I turned off the Staff / resource picker row in the Booking page editor but a customer still saw that screen: This is expected — the on/off switch only changes the step count and labels in the Booking steps row, not whether the screen itself is visited. Whether the person-choice screen appears is decided by how many eligible people the customer's chosen offering has; an offering with more than one eligible person still shows the screen regardless of the switch. Space and Equipment resources are excluded from this count. See Booking Experience Editor → When the on/off switch reaches the live funnel.
- A customer says they no longer see the six-step list, only "Step 3 of 6 · Time": This is expected on a narrower browser (below 768px) — the full step row only shows at 768px and wider. The customer can still reach any previously completed step from the desktop-width row on a wider browser or device.
- A customer's times aren't grouped into Morning/Afternoon/Evening: This is expected when the selected day has six or fewer open times — grouping only appears once a day has more than six.
- A store's booking pages show no tagline under the merchant name: This is expected when the store has never set one in its branding — the funnel does not show a generic placeholder line in that case.
- The booking pages don't show our brand colours or font: Check that Primary, Secondary, and Accent are actually set under Store Branding and that a Theme is applied — a store that has never configured either still renders the funnel's original built-in look, which is expected, not a bug.
- A customer can't tell an offering needs a deposit until they've already picked it: Check the offering's saved Deposit policy in Create & Manage Offerings → Deposit policy. An explicit No deposit correctly shows no badge. If the policy was never saved, check Appointments → Settings → Booking rules → Default deposit (₹); the effective store default should produce the same percentage deposit badge on the Service step of Book an appointment.
