Online booking checkout (what your customers see)
Once a client has picked a time on your booking site, everything that follows — signing in, holding the place, collecting details, taking payment and confirming — runs on its own. This page walks you through what your customer experiences, step by step, so you can support them and make sense of a payment in your records. Every stage is shaped by settings you control, and we call those out as we go.
Signing in with email and a one-time code
A customer can browse the booking site without signing in, but before a place is reserved they must identify themselves. When they tap Add to Cart (or pick a time with Express booking on), a sign-in dialog asks for their Email address and sends a one-time code to that inbox. Its length is the booking template's OTP code length; the code is valid for 15 minutes, and three wrong entries lock sign-in for that email address for 20 minutes. Didn't get a code? sends a new one. After the code is accepted, the place is reserved.
Signing in links the booking to the right client record: a returning customer's saved details and available credit are recognised, and an email address go flow does not know yet creates a new client record as soon as the code is requested — even if the person never books. A cart that holds only products asks for the sign-in when the customer continues to the details.
The slot is held with a countdown
The moment a place goes into the cart, a hold is placed on it, so nobody else can take it while the customer finishes. A slim timer bar shows a live countdown and the time the hold runs out. How long they get is the booking template's Reservation timeout — 5 minutes by default. All places in one cart run out together, and adding another place does not extend the time. In the dashboard the customer appears in the session's participant list as Reserved, with the time in the Expires column.
If the countdown reaches zero before checkout is complete, the hold ends: the cart is emptied, the customer is sent back to the calendar with the message Your reservation has expired, and the place is free for the next person. There is nothing for you to clean up.
When the customer goes to the payment provider's page, the hold is kept for the payment: the place stays taken until the payment ends, for at most 40 minutes from that moment, instead of running out after the Reservation timeout. A slow card check or banking app therefore does not let someone else take the place, and the Expires time in the participant list moves on when the payment opens. When the payment outcome is still open or go flow could not reach the provider, the hold is extended to at least 20 minutes from that moment. A captured payment books the place. A declined payment gives the customer the Reservation timeout again to try another payment method; a payment that fails for good or is abandoned releases the place — an abandoned one when go flow settles it, about 30 minutes after the payment started. Only a payment the provider reports as taken after the hold has ended can leave the session with one participant more than it has places, if someone else took the place in the meantime: go flow still confirms the paid booking, and you decide whether to move someone, add a place or refund.
While the hold is live, the client can add gift vouchers, other products or a wallet top-up to the same cart, and apply a voucher code or their existing account credit against the total. Whether those extras appear depends on the Products, Vouchers and Wallets modules of your organisation.
Filling in the checkout details
From the cart the customer taps Continue to Details. The checkout form asks for the fields you chose — the combined set from everything in the cart: the checkout fields of each booked session first, then those of each product in the cart, then the fields selected on the booking template, merged and de-duplicated. An appointment with a treatment adds no fields of its own. A client booking a class whose session asks for "Allergies" and also buying a product that asks for "Recipient name" sees one form containing both. Only fields whose definition is Self managed reach the booking site (process fields always do); a selected field without it is never asked. See Template fields for how those selections are made, and Configure checkout fields for checking the form and the customer profile.
A returning client's form is pre-filled from their profile. One rule is enforced automatically: when there is an amount to pay, the billing address (street, postcode, city) is asked and required — Swiss receipts need it, and go flow refuses a paid checkout without it. While your payments module is on, those three fields are kept on your template's checkout list for exactly this reason; see Configure checkout fields. Free or fully credit-covered bookings skip that. If you use a terms field, it appears as a scroll-to-read agreement rather than a plain input, and it is asked on every checkout — a client who agreed on a previous booking is asked to agree again. A plain consent field behaves the other way round: once a client has answered it, it is hidden on later checkouts and their standing answer is kept. Declarations (process fields) open in their own dialog.
Review, then pay — or confirm instantly
After Review Order the client sees the Order Summary: their details, the booked items, the price breakdown with any voucher, credit and VAT lines, and a final total.
What the confirm button does depends on the total:
- Nothing left to pay — the whole amount is covered by account credit and/or a voucher, or the booking is free. The button shows a checkmark icon (its accessible label is Confirm Booking), and tapping it books everything immediately, with no payment provider involved. Credit and voucher balances are drawn down and the client goes straight to the confirmation page.
- An amount is due — the button shows an arrow icon (its accessible label is Proceed to Payment), and the client is redirected to the payment provider to pay.
Pay at the desk. When your organisation allows it (Allow paying at the desk, in the organisation's payment settings), the summary also asks How would you like to pay? — Pay online now or Pay at the desk when I arrive. The choice appears only for a cart of sessions or appointments with an amount due and no voucher applied; products, vouchers and wallet top-ups must be paid online, and account credit is set aside when the client picks the desk. Choosing the desk confirms the booking at once with no payment page. Checkout writes one unpaid order per participant; the confirmation page and email ask the client to pay the amount on arrival, their profile shows To pay at the desk with the amount, and in your participant list they appear as Unpaid · at the desk, with Take payment pre-filled with the amount they were shown (early-bird and discount codes included). Recording the payment settles that order — or, for a different amount or a waiver, replaces it — and the receipt is emailed.
Express booking
When the booking template's Express booking is on, the cart, details and summary pages are replaced by one sheet. A place is reserved as soon as the customer picks it; the sheet lists all reserved appointments with their total, Add slots returns to the list of times, and the button reads Book when nothing is to pay or Book & Pay otherwise. The sheet asks only for checkout answers still missing from the customer's profile, plus the terms when you use them. It offers no voucher code, no account credit and no pay-at-the-desk choice. A booking with nothing to pay is confirmed on the spot with the message Your booking is confirmed, without the confirmation page; a paid booking goes to the payment provider and returns to the confirmation page like any other.
The payment step and how it reconciles
When money is owed, go flow records a pending payment against the order and opens a payment session with Saferpay, the payment provider set up in your organisation's payment settings (see Organisation). The client is redirected to the provider's page to pay. Nothing is booked yet at this point — the order waits for the outcome, and the place stays held for the payment (see The slot is held with a countdown).
After paying, the provider sends the client back to your booking site with an address that ends in the order and an outcome word: success, fail or abort. That word is never trusted. On return, the booking site asks go flow to complete the payment, and go flow asks the payment provider directly what happened. Only when the provider reports the money as taken — or as authorised, which go flow then captures — is the order activated: the held place becomes a booking, the payment is marked captured, the order is marked paid, and the receipt and confirmation email follow shortly after. A client who changes the address cannot fake a confirmation, and one whose card failed is never shown a false success.
A closed browser tab or a lost connection can interrupt that return. The payment reconciliation worker closes the gap on its own: every minute it asks the provider about each payment that has been pending for more than two minutes.
- The provider has the money — the worker captures it if needed and activates the booking, exactly as the return would have; the confirmation email follows.
- The provider reports no payment, 30 minutes after the payment started — the open payment and its unpaid order are removed, so the client can check out again.
- The provider cannot be reached — nothing changes; the worker asks again on its next round.
A payment marked failed is asked about again for 24 hours, in case the provider took the money after all. How an open payment is settled shows how these steps appear on the Payments page. The upshot: the money and the booking are reconciled from the payment provider's record, not from what the browser did. A charged card ends up as a confirmed booking even if the customer's screen never showed it, and an uncharged one never becomes a phantom booking.
What the payment screens do and do not prove
| What the customer sees | What it means | What it does not prove |
|---|---|---|
| Booking confirmed (or Order confirmed for products only) | go flow asked the provider and the money is taken; the booking is active. | — |
| Confirming your payment | The provider has not confirmed the payment yet. The customer is told not to pay again; the place stays held while the payment is open, at least 20 minutes from this message, and the confirmation follows by email once the worker settles the payment. | It is not a failure: the money may already be taken. |
| Payment declined with Try another payment method | The card, bank or 3-D Secure refused. The place is held again for the Reservation timeout so the customer can retry, up to three times. | — |
| Payment unavailable | Something failed on go flow's or the provider's side. There is no retry button; the place stays held for at least 20 minutes. | It does not mean no money was taken; the worker may still settle the payment. |
| We couldn't confirm this booking here, with My bookings or Sign in to see your bookings | The booking site could not ask go flow about this order, for example because the customer's session expired. | It says nothing about the payment either way. |
An address ending in /success only shows where the provider sent the customer back, and an error page only shows that the booking site could not finish the step. Neither is evidence of the payment outcome; the order, the payment and the participant list are.
The confirmation page and emails
On success the client lands on your confirmation page — your confirmation image (or the first booked session's picture), a thank-you, and a list of every session with its date, time and any per-session confirmation message, and every product they bought. The cart is cleared, and reloading the confirmation later does not trigger anything again.
The customer receives these emails around a checkout:
- Sign-in code — when they sign in.
- Booking confirmation — once the checkout is complete: right away for a free, credit-covered or pay-at-the-desk booking, after the payment is captured for a paid one. A paid order carries the receipt PDF, and each gift voucher bought gets its own code and PDF. A pay-at-the-desk confirmation asks for the amount on arrival and carries no receipt; the receipt follows when the desk records the payment.
- Nothing is sent for a declined payment or an expired hold.
The client can download receipts later from their profile on the booking site. The reply-to address of these emails is the template's Booking email.
Paid checkout requires the Payments module, plus Sessions or Treatments for what is being booked; Vouchers, Wallets and Products each depend on their own module being enabled for your organisation.
When confirmation fails
When a customer says they paid but have no confirmation, or the screen showed an error:
- Do not take a second payment or create another booking while the outcome is open.
- Record the time, the session, the order reference if the customer has one, and the exact message they saw.
- Look at the session's participant list: Reserved with an Expires time is still a hold, not a booking; an active participant with a payment state is booked. A client-history entry alone does not establish an active booking.
- Check the payment and order as described in Review orders and payments before collecting money again. A payment still pending is settled by the worker within minutes once the provider has the money; one the provider never received is removed after 30 minutes.
- If the customer is told Confirming your payment or We couldn't confirm this booking here, ask them to wait for the confirmation email or to open My bookings on the booking site, rather than paying again.
For a new tenant, review the consent and process definitions, including pre-existing fields, then wait for synchronisation before a controlled retry. A free booking does not need a payment provider, even if the error message mentions payment. If the corrected setup still fails, keep the evidence and distinguish that failure from an incomplete configuration. Check the resulting records before retrying a registration or cancellation as well.