Enroll members manually, send payment links, track installments, and handle refunds.
Open the event from the Events page. The bookings list at the bottom shows everyone enrolled so far, with status tabs: All (every live booking — confirmed, pending, waitlisted, completed), Confirmed, Pending (booked but not yet paid/approved), Waitlisted, Completed, and Cancelled. Cancelled bookings only appear under the Cancelled tab, so abandoned or test bookings never clutter the default view.
On the event manage page, click "+ Add booking". Search for the member, pick the option, and (if the event allows both) pick Full or Installments. There's also an optional "Discount code" field — type any code from Settings → Discount codes (e.g. a family-discount or month-long site-wide promo). If the member has a tag that matches an auto-apply code, you can leave the field blank and Klasly picks the best one. The discount is applied to the total before the installment schedule is computed, and it's recorded against the member's usage limit. The booking is created as pending payment — no card is charged yet — and Klasly opens the booking page so you can send a payment link.
On a booking that still has an outstanding installment, the "Collect payment" panel has a Checkout link / Stripe Invoice toggle. Checkout link (default) gives you "Copy" or "Email" — a single-page Stripe Checkout; the first paid installment saves the card so installments 2+ auto-charge on schedule. Stripe Invoice gives you the same Copy/Email pair but issues a proper invoice with PDF, line items, and customer info — good for accounting. Invoices cover one installment each; cron auto-charge is disabled for any installment that has a Stripe Invoice attached, so you come back to send the next one when it's due. Guest bookings only get Checkout (Invoices need a member account).
On the event's Payment step, choose Full / Installments / Both, then set how many installments (2–12, default 3). Klasly splits the total evenly and spaces payments 30 days apart starting at booking. If the event starts soon enough that 30-day spacing would push the last installment past the event, Klasly auto-compresses the spacing so the last payment lands ~7 days before the event begins — the Payment Preview shows the actual dates and warns you. The preview assumes someone books today — each attendee's real due dates count from their own booking date, so a booking made three months from now gets dates three months later. If even compressed spacing won't fit, all installments collapse to booking day and a red warning appears; switch to Full payment or push the start date out. The opposite also surprises people: for an event far in the future, spacing stays at 30 days, so someone booking today finishes paying long before the event — a July 2027 retreat set up today previews due dates in 2026. That is correct, not stale data, and the preview now says so; the dates never move when you change the event's dates. Changes apply to future bookings only — existing bookings keep their original schedule.
In the Cancel Booking panel there's a checkbox "Email the member about this cancellation" — on by default. Untick it when you're cleaning up a test booking, or when you've already told the member out-of-band and don't want a cancellation receipt landing in their inbox. Waitlist promotion emails (if someone moves off the waitlist into the freed spot) still fire — that one's about the promoted member, not the cancelled one.
For events with an application form, click a booking to see the answers. Approve or reject before sending a payment link.
On the booking page, click "Edit details" to update the guest's name, email, phone, your internal notes, and every application-form answer — dietary needs, emergency contacts, anything they sent you after booking. Save, and the changes flow straight into the Day-of operations sheets (rosters, emergency, dietary), so a guest who emails "actually I'm gluten-free now" is reflected on the printout without re-collecting the form.
Retreat guests often hand their spot to a friend or swap with someone else. On the booking page, click "Replace attendee", enter the new person's name, email, and (optionally) phone, and confirm. The spot keeps its option, total, and payment schedule — only who holds it changes, so nobody is re-charged and nothing already paid is lost. If the new person's email is already a member in your studio, the booking re-links to them automatically (and shows up on their member profile); otherwise they're held as a guest. The new attendee gets a confirmation email (with a waiver reminder if the event requires one), and the previous guest's dietary and emergency answers are cleared so the Day-of sheets don't carry the wrong info. To instead remove someone entirely and start fresh, cancel the booking and use "+ Add booking".
Each booking page shows every installment, when it's due, and whether it's paid. Failed cron charges are flagged so you can re-send a payment link.
Migrating from another platform, or took a cash/bank-transfer payment? On the booking page, each pending installment has a "Mark paid (offline)" link. Click it to record that installment as settled — no card is charged and Klasly never touches Stripe for it. The installment shows an "offline" tag, the booking's payment status updates (partial / fully paid), and a pending booking is promoted to confirmed just like a real payment would. To add someone who already paid in full elsewhere, use "+ Add booking" then mark every installment paid offline. Made a mistake? "Undo offline" reverts an offline-marked installment back to pending. Offline payments are deliberately excluded from your Stripe revenue and payout figures, since that money never flowed through Stripe.
If someone cancels, Klasly calculates the refund amount based on your cancellation policy. You can adjust the amount manually before processing.
On the event page, click "Closeout" for a single screen that answers "is this event finished?". The top row shows what came in (add-on takings and tips), what guests still owe you, and what you still owe practitioners. Below it, only the work that is genuinely left: practitioners waiting to be paid — settle everyone in one go with "Pay all now", pay a single practitioner with the "Pay" button on their row (useful when one payout needs checking before the rest, or your card can only cover part of the total today), or click "Paid by hand" for anyone you settled in cash — guests who received a session and never paid (each row has its own "Email link" button to nudge just that guest, "Email pay link to all" to nudge everyone at once, and "Mark paid" for a guest who handed you cash; each row shows the email address the link would go to, and flags a guest who already paid for another session at the same event, which usually means one person is on the list twice — often because a friend booked the second session under their own address), and registrations nobody ever paid for that are still holding seats (tick the ones to release). Each block disappears once it is empty, so an event with nothing outstanding looks finished at a glance. At the bottom is a per-practitioner table — sessions, what was collected, their share, and whether they have been paid — with a "Download CSV" button next to it. That file is the one to keep for your books: it carries the summary totals, the full practitioner table, and every outstanding item, with amounts written as plain numbers so your spreadsheet can add them up.
You don't have to email every unpaid add-on guest at once. In a slot's "Bookings" panel, every unpaid booking has a "Payment link" button that opens that booking's pay QR code along with "Copy link" (paste it into a text message or show the guest the code) and "Email link to guest" (sends it straight to their inbox, throttled to one send per five minutes). The Closeout screen offers the same per-guest control: each row under "guests who haven't paid" has its own "Email link" button, so you can nudge one person without mailing everyone else.
Guests who leave without settling get followed up without you doing anything. Klasly emails an unpaid guest their pay link automatically — but deliberately gently: only AFTER their session has actually happened (nobody is chased for a massage they haven't had yet), about once a day per booking, at most three times ever, and never more than a week after the event ends — so a forgotten booking from months ago will never suddenly email someone. Manual sends share the same timer: if you press "Email link to guest" yourself, the automatic reminder holds off for about 20 hours, so a guest never gets two nudges in the same day. Reminders stop the moment the booking is paid or cancelled. The Closeout screen shows "reminder N of 3 sent" next to each unpaid guest, so you can see who has already been nudged before deciding to push again by hand.
Open the event's Manage page → "Add-on services" → the slot → "Bookings". Each booking lists the guest's name with their email and phone number underneath; both are links, so on a phone or tablet you can tap to call or write without copying anything out. The phone number only appears if the guest typed one — it is optional at the kiosk and on your public event page, so some bookings will show an email alone. The same details print on the Add-on Appointments sheet under Day-of operations, in a "Contact" column, for staff working away from a screen.
A practitioner opens "My Earnings" in their own portal and, under "What you were paid", sees each payment you have made for that month with the date, and underneath it the itemised work behind it — retreat add-on sessions with tips included, appointment shares, class and pass earnings, and any bonus you added, with the note you typed on it. It matches your own Payouts screen because it is the same calculation. Two things it deliberately does not show. Only months you have actually paid appear: practitioners are often settled in cash or by transfer, so a session Klasly has not paid out is not proof they are unpaid, and showing "not paid yet" would contradict money already in their hand. And they never see why a charge failed or what is outstanding — that stays on your side. If a practitioner says a session is missing from their statement, it means that session has not been paid through Klasly yet.
When a guest books a session for a friend, the booking carries the friend's name but the booker's own email and phone — so the roster shows two lines under one name, and any payment link goes to the wrong inbox. The "Edit" button on a booking in a slot's "Bookings" panel fixes exactly that: change the guest's name, email and phone, and save. Nothing else about the booking moves — same time, same price, same payment status, same signed waiver — so use "Move" to change the time and "Cancel" if the session never happened. Two details worth knowing. The email can be left empty: a wrong address is worse than none, because pay links and reminders would go to a stranger. And the waiver keeps the name of whoever actually signed it, since that is the legal record — if it no longer matches the guest, the booking shows "Waiver signed as [name]" underneath rather than quietly hiding the difference. Every edit is recorded in your Activity feed.
The "Cancel" and "Move" buttons in a slot's "Bookings" panel keep working after the event is over, so you can clear no-shows and put mis-booked sessions where they actually happened whenever you get to them — cancelling a booking also stops any remaining automatic payment reminders for it. Use "Move" when the session went ahead under a different time or practitioner than the booking says: it keeps the guest's record and, when the practitioner has not been paid yet, moves what you owe to the person who actually did the work. Use "Cancel" when it never happened at all — that also drops it out of what you owe. The guest side is deliberately narrower: "Manage my booking" on the kiosk only ever shows a guest their upcoming sessions, so once the event has ended guests can no longer see, change or cancel anything there — post-event tidy-up is yours to do from the Bookings panel. As always, cancelling an already-paid booking does not reverse the practitioner payout or refund the guest automatically; handle refunds on-site or in Stripe.
When someone starts booking on your public page and closes the tab before paying, their spot would otherwise be held forever — and it still counts against "spots remaining", so a nearly-full event can look sold out when it isn't. Klasly now handles this: about half a day before the hold runs out the guest gets one "your spot isn't confirmed yet" email, and if payment still hasn't arrived after two days the booking is cancelled, the seat goes back on sale, and the guest is told it was released (nothing was ever charged). This applies ONLY to bookings the guest started themselves. A booking YOU created with "+ Add booking" is never auto-cancelled, no matter how long it stays unpaid — those are yours to hold while you collect cash or a transfer. Bookings that already existed before this was introduced are also left alone; clear those by hand from the Pending tab if they're dead.