Set up instructor contracts (hourly, flat, overage)

Three contract models in one place: hourly tiers with optional overage, flat / per-class fees, and a ledger of every overage charge.

ForOwnerManager
1

Open Settings → Contracts

Three tabs: Hourly plans / Flat & per-class fees / Overage charges.

2

Hourly plans

Create subscription plans (e.g. "10h / month — $300"). For each plan, choose either: Block further bookings once the monthly limit is reached, OR Allow overage and charge per extra hour ($/hour rate you set).

3

Flat & per-class fees

Three flavours on the same tab: Flat monthly (fixed amount each month), Per class (rate × number of classes taught), or Per hour (rate × actual class minutes that month — designed for ad-hoc renters who use the room as-needed). By default these settle manually via the monthly invoice report; Per class and Per hour renters can instead be switched to pay at the moment they book (next step).

4

Collect payment when they book (optional, per renter)

On the instructor's edit page under Flat / per-class, turn on "Collect payment when they book".

5

Overage charges ledger

See every overage with status (pending / charged / failed). Waive any one of them — if it's already charged, the refund happens automatically. A charged overage is only marked waived once that refund has gone through: if it can't (for example Stripe is no longer connected), nothing changes and the page tells you why. If you then refund it yourself in your Stripe dashboard, press Waive again (with Stripe connected) and it will be marked waived. Waive also checks Stripe for a charge that still reads pending or failed: if the card was in fact charged, that payment is refunded and the page says so. If the overage is sitting on a draft invoice, waiving it lowers the draft's total automatically; if it's already on a Sent invoice, waiving is blocked — void that invoice first, waive the charge, then re-generate. Paid invoices are unaffected (use a Stripe refund instead). Waiving requires the "Instructor Contracts & Membership Tiers" manager permission.

6

Assign to instructors

On the instructor's edit page, open the Contract section and choose No contract, Hourly plan, or Flat / per-class fee. Assigning a plan records what they owe — it does not charge anyone by itself. An hourly plan is collected one of two ways: the instructor subscribes once from their own portal (Room Plan → Subscribe; the card then renews every month), or you generate their month under Settings → Invoices and send it. When you assign a paid plan, the instructor is emailed the subscribe link automatically. Until one of the two has happened, the Money tab shows "Not subscribed" — with a Send subscribe link button to re-send that email, and Create invoice — and after 14 days the Dashboard's Alerts tab says so too.

7

Monitor usage on the instructor profile

Once assigned, the Money tab of the instructor's profile shows a Contract Hours card (the "Room plan" button above the tabs takes you straight there): a stacked progress bar (blue for classes, teal for room bookings, amber for hours held from cancelled sessions) against the contracted amount, a breakdown table, and mini bars for the previous three months. Use the arrows to browse past months. The total now matches what the instructor sees on their own Room Plan and what month-end overage actually bills.

8

Audit what was booked and cancelled

The Bookings tab lists this instructor's classes, room bookings and 1-on-1 appointments together. It opens on Upcoming — everything they have booked from today onwards, however far ahead — and one click on Past walks back through their whole history, newest month first.

Limits
  • • If the card is declined the booking is NOT created, and until they save a card they can't make one-off bookings at all. Recurring/weekly series are the exception: those aren't charged at booking (that would bill months of rent at once) — they stay on the monthly report as usual.
  • • No double-billing for auto-charged overage: any overage that was already auto-charged to the instructor's card at month-end (status "charged") is left off the monthly invoice — it is not billed again.
  • • Re-generating a month never touches settled invoices: if an invoice for that instructor and period is already Sent or Paid, generation skips it (reported as "already sent/paid") instead of rolling it back to draft.
  • • Invoice statuses are strict on purpose: only a Sent invoice can be marked Paid (send the draft first), and a Paid invoice can't be voided — refund through Stripe instead.
  • • It does NOT end their plan — remove their tier to stop future months.
Tips
  • • To raise a room plan's price for new instructors only, add a new plan. Editing the price of an existing plan re-prices every instructor already subscribed to it, from their next renewal.
  • • To refund a month of a room plan: open the instructor, Money tab, 'Room plan payments', press Refund on that month. The plan itself keeps running.
  • • Hours are tracked in 15-minute increments automatically.
  • • Held cancellations count: a cancelled session keeps counting against the allowance until an admin returns the hours, so the Contract Hours total can be higher than the classes actually taught. The amber "Held (cancelled)" line shows how much — return those hours (on the cancelled tile or the profile's Bookings card) to bring the count down.
  • • Looking for a booking you just made and not seeing it? Check the range. The Bookings card opens on Upcoming, so a session earlier today or last week is under Past. The card covers every month either way — you don't have to be in the right month to find it.
  • • When an instructor books a room that would put them over their tier, they see a confirmation modal with the hours over and the estimate before the booking goes through. On Instructor Direct studios with Stripe connected it asks them to agree to the month-end charge; everywhere else it says the hours are tracked and the studio may add them to an invoice ("Book anyway").
  • • The room plan subscription is billed on your Stripe account too. Until Stripe is connected an instructor on a priced tier sees "Online billing isn't set up at your studio yet" in place of Start Subscription.
  • • On Instructor Direct payouts a member pays for a class with "Book & Pay" only when someone can be paid for it: the class's instructor has finished their own Stripe setup, or you have. A class where neither has is booked without payment and you collect it yourself.
  • • Overage is charged automatically at month-end only for studios on Instructor Direct payouts. On every other studio (every new one) Klasly shows the extra hours on the Room Plan and the Contract Hours card but does not charge them — add them to that instructor's invoice as an adjustment if you want to collect.
  • • Instructors see "This month: 12h used of 10h, estimated overage $50" on their Room Plan page (Instructor → Room Plan). The line, the booking confirmation email and the hour-limit alerts only promise a charge on the 1st where Klasly actually charges it (Instructor Direct + Stripe); otherwise they say the hours are tracked and the studio may add them to an invoice.
  • • Per hour vs. Hourly plan: the new "Per hour" option in Flat & per-class is for renters with no monthly commitment ($X × hours taught, billed manually). "Hourly plan" is a Stripe subscription with a fixed monthly hour pool — pick that one when the instructor has a predictable monthly schedule.
  • • Per hour now includes ad-hoc room bookings (instructor-driven room rentals that don't belong to a class) in addition to class session minutes — the monthly report sums both.
  • • Class sessions were missing from the Flat & per-class monthly report until 6 Oct 2026 (only room bookings were counted). They are counted now, for every month you open — so a past month in which a per-class or per-hour renter taught classes shows more than it did before. The report charges nobody by itself.
  • • Invoice discounts: open a draft invoice from Settings → Invoices (under Instructors) and click "Apply code" to subtract a percent or fixed amount. The code is recorded as a redemption when you click "Send".
  • • Once an instructor pays an invoice online it is marked Paid automatically; you can no longer manually mark it paid (this prevents double-charging). You can still manually mark Paid any invoice the instructor settles offline (bank transfer, cash).
  • • 80% alert: instructors who pass 80% of their monthly hour pool get an automatic heads-up email with remaining hours and (when applicable) the projected overage — worded as a charge only where overage is auto-charged. Fires once per month per instructor.
  • • No double-billing for Stripe-subscribed tiers: when an instructor's membership tier is already auto-charged via a Stripe subscription, the monthly invoice shows "auto-billed via Stripe" for the tier line instead of an amount, and the tier fee is excluded from the invoice total.
  • • Overage that is still uncollected (a "failed" auto-charge, or one waiting to be charged) is included on the invoice so you can still collect it.
  • • Changing a tier mid-subscription: when you switch an instructor to a different tier while they have an active Stripe subscription, Klasly automatically re-prices the subscription — the new price takes effect at their next renewal (no mid-cycle proration). Removing the tier entirely cancels the subscription immediately so they aren't billed again.
  • • This keeps the settlement record honest.
More detail

Anything paid at booking is automatically excluded from the monthly report so nobody is billed twice. And if a paid booking is later cancelled — by the renter, by you, or by a studio closure — that session's rent is refunded to their card automatically.

If that rent refund does not go through (Stripe refused it, or Stripe is not connected), the session is still cancelled and the refund is kept on a list until it is done: the cancel result says "$40.00 room rent was not refunded", your dashboard shows "1 room rent refund did not go through", and Settings → Instructor contracts → Flat & per-class fees lists it under "Rent refunds to finish" with a "Refund $40.00" button. Press it once the cause is fixed (it is safe to press again). If you already refunded the whole charge in Stripe, pressing it just clears the row. A renter who cancels their own booking is told the refund did not go through and that the studio will finish it.

The renter saves a card once (they're prompted on their Room Bookings page), and from then on each ONE-OFF booking — a single room booking or a one-time class — charges that card immediately (a 90-minute booking at $45/hour charges $67.50 on the spot). The charge is in your studio's currency (Settings → Money → Studio Currency).

Cancelled sessions are kept in the list, each with an attribution badge naming who cancelled it ("By Jamie Bischoff"; older cancellations without an audit record fall back to "By admin" / "By teacher"), and those whose hours are still held show a Return hours button right there, so you can reconcile an instructor's count without opening each class. The current month's class and room totals stay pinned to the top of the card whichever range you're looking at. Appointments (1-on-1 services) appear in the same list with an "Appointment" badge, the client's name, and the appointment's own status (Pending, Confirmed, Completed, Cancelled, No answer …); an Appointments filter chip appears once the practitioner has any. A home visit that includes an automatically-booked intake shows as one line starting at the intake's time, and its minutes are totalled separately in the header ("1h 45m appointments") because they are not studio hours.

Instructors can pay contract invoices online: once you Send an invoice, the instructor sees it under Instructor → Invoices (NOT under Room Plan — that page is only for the monthly room-booking tier subscription) and can pay the exact amount by card. Their sidebar shows an unpaid-invoice count badge so the bill is hard to miss, and the invoice email also includes a "Pay invoice online" link.

Refunding a month of an instructor's room plan: open the instructor, go to the Money tab (or press 'Room plan' above the tabs), find 'Room plan payments', and press Refund on the month you mean. Each row shows the billing window, so two identical charges are tellable apart, and a month already refunded shows 'Refunded' with no button. The money goes back to their card and Klasly's platform fee is reversed with it, so the refund costs you exactly what you charged.

The instructor's Start Subscription payment page stays open for 30 minutes, and it is closed early if you change or remove their tier while it is open. If a payment still arrives from an out-of-date page, Klasly checks it against the plan as it is now. After a tier change the subscription starts, that first month stays as charged, and it renews at the new tier's price. After you removed the plan — or when they paid twice — no subscription is started: the payment shows under 'Room plan payments' marked 'refund this one', and you and the instructor are both emailed. Klasly does not refund it for you. Until you refund it the payment counts as room plan income on your monthly statement, because the money is in your Stripe balance; once refunded it is taken back out.

A room plan month refunded from the Stripe dashboard is picked up too: the payment is marked refunded in Klasly, comes off your monthly statement, and you get the refund email. Refunding from Klasly is still the safer way, because it always returns Klasly's fee with it.

Changing the price of an hourly plan changes it for everyone on the plan, including instructors who already pay it by subscription. The edit form tells you how many subscribed instructors there are before you save, and the button names the number. When you save, each of their subscriptions is moved to the new price from their next renewal: the month they have already paid is left as it is, nothing is charged that day, and each of them gets an email with the old price, the new price and the date it starts. If Stripe cannot update one of them, nothing is changed for anyone and the plan keeps its old price. To keep current subscribers on the old price, leave the plan alone and add a new plan for new instructors. Setting the price to $0 makes the plan free: the subscriptions are cancelled when you save, nobody is charged again, payments already made are not refunded (use Refund under Room plan payments if you want to return a month), and the instructors stay on the plan.

When the instructor comes back from the payment page, their Room Plan page confirms the payment with Stripe itself and shows the result straight away: the plan is Active, it is Active and renews at a different price than they just paid, or the payment was taken and no subscription was started. Until the result is in, Start Subscription is not offered, so a slow confirmation cannot turn into a second payment for you to refund.

Help Center - Klasly