> ## Documentation Index
> Fetch the complete documentation index at: https://help.clinikehr.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Run group classes

> Turn a service into a group class, schedule its sessions, let clients book places or join a waitlist, and keep the roster and attendance.

export const StillStuck = ({topic}) => <div className="ck-callout ck-callout--note" role="note">
    <p className="ck-callout__body">
      <strong>Still stuck{topic ? ` with ${topic}` : ''}?</strong>{' '}
      Check <a href="/platform/help/troubleshooting">Troubleshooting</a> first —
      it covers the failures we see most often. If that does not resolve it,{' '}
      <a href="/platform/help/contact-support">contact support</a> and include
      your workspace name and the time the problem happened, so we can find the
      matching entry in your audit log.
    </p>
  </div>;

export const TaskHeader = ({before, time, after}) => <div className="ck-task">
    {before ? <div className="ck-task__cell">
        <div className="ck-task__title">Before you start</div>
        <p className="ck-task__body">{before}</p>
      </div> : null}

    {time ? <div className="ck-task__cell">
        <div className="ck-task__title">Takes about</div>
        <p className="ck-task__body">{time}</p>
      </div> : null}

    {after ? <div className="ck-task__cell">
        <div className="ck-task__title">When you're done</div>
        <p className="ck-task__body">{after}</p>
      </div> : null}
  </div>;

export const Path = ({steps = []}) => <span className="ck-path">
    {steps.map((s, i) => <span key={i} className="ck-path__step">
        {i > 0 ? <span className="ck-path__sep" aria-hidden="true">
            ›
          </span> : null}
        {s}
      </span>)}
  </span>;

export const Availability = ({editions = ['all'], plans, roles, note}) => {
  const list = editions.includes('all') ? ['clinic', 'pharmacy', 'lims'] : editions;
  return <div className="ck-avail" role="note" aria-label="Feature availability">
      <span className="ck-avail__label">Available in</span>

      {list.map(e => <span key={e} className={`ck-pill ck-pill--${e}`}>
          {EDITION_LABELS[e] || e}
        </span>)}

      {plans ? <span className="ck-avail__label">Plan</span> : null}
      {plans ? <span className="ck-pill ck-pill--plan">{plans}</span> : null}

      {roles ? <span className="ck-avail__label">Who</span> : null}
      {roles ? <span className="ck-pill ck-pill--role">{roles}</span> : null}

      {note ? <span className="ck-avail__note">{note}</span> : null}
    </div>;
};

<Availability editions={['clinic']} plans="Essential and above" roles="Owners and managers schedule and cancel sessions; any staff member books clients in, records attendance and manages the waitlist" />

A group class is a service many clients attend at once — yoga, a pre-natal class, a group therapy session, a fitness class. Each **session** has a number of places. Clients book a place on your booking page or in their patient portal, or you book them in from the roster. When a session is full, clients can join its **waitlist**, and a place that frees up is offered to the next person automatically.

<Path steps={['Appointments', 'Classes']} />

<TaskHeader before="A service to run as a class, and a teacher on your team" time="Five minutes to set up, then a minute per timetable" after="Sessions clients can book, with a roster for each" />

## Turn a service into a class

<Steps>
  <Step title="Open the service">
    Go to **Services**, open the service (or create one) and scroll to the **Group class** card.
  </Step>

  <Step title="Switch on Group class">
    Turn on **Group class** and enter **Places per session**. **Minimum people** is optional — it is shown on the timetable and roster so you can decide whether to run a session; nothing is cancelled for you.
  </Step>

  <Step title="Choose the waitlist">
    **Waitlist when full** is on by default. **Hold an offered place for (hours)** sets how long a freed place is kept for the next person on the waitlist (12 hours unless you change it, and never past the start of the class).
  </Step>

  <Step title="Save">
    Save the service. The price, duration, deposit and cancellation rules on the rest of the service form apply to each place.
  </Step>
</Steps>

A class is booked only as a place in a session. It is no longer offered as a time on the booking calendar, and it cannot be booked as a one-to-one appointment. To turn **Group class** off again, cancel the class's upcoming sessions first.

Group classes need the **Essential** plan or above. On other plans the switch is shown but cannot be turned on.

## Schedule sessions

<Steps>
  <Step title="Open Classes">
    Go to **Appointments** → **Classes** (on the calendar, it is also in the settings menu at the top right). Select **Schedule a class**.
  </Step>

  <Step title="Choose the class and teacher">
    Pick the **Class**, the **Teacher** and, if you use rooms or equipment, a **Room or equipment**. A class takes the whole room for its time.
  </Step>

  <Step title="Set the time and size">
    Choose the **Date** and **Start time**. **Places** starts at the class's size — change it for this session if you need to. Add a **Session name** (for example "Beginners") to show clients instead of the class name.
  </Step>

  <Step title="Repeat it (optional)">
    Turn on **Repeat every week**, tick the days, and choose **Until**. A timetable can run for up to 26 weeks and 100 sessions at a time. The sheet tells you how many sessions will be scheduled.
  </Step>

  <Step title="Schedule">
    Select **Schedule**. Scheduling is all or nothing: if the teacher or the room is already busy on any of the dates, nothing is scheduled and the message names the date.
  </Step>
</Steps>

A session makes its teacher busy for its whole time, however many people come, and nobody can book the teacher for a one-to-one appointment at that time. Their other appointments, other classes and any synced calendar set to **Blocks booking** count as busy too.

## The timetable

**Classes** shows two weeks at a time; use the arrows to move. Each session shows its time, name and teacher, and:

| Badge                 | Meaning                                                    |
| --------------------- | ---------------------------------------------------------- |
| **n of N booked**     | Places taken out of places in the session                  |
| **n on waitlist**     | People waiting, including anyone a place is being held for |
| **Below minimum (n)** | Fewer people booked than the class's minimum               |
| **Cancelled**         | The session was cancelled                                  |

Select a session to open its roster.

## The roster

The roster lists who is booked, their payment state, and the waitlist in order.

* **Attended** records that the client came. It completes their appointment, as on the calendar.
* **Did not attend** records a no-show. If the client booked under your cancellation policy, the missed-appointment fee is raised for you to review on the appointment — it is never charged from here. See [Deposits, cancellations and missed visits](/practice/work/booking-page#deposits-cancellations-and-missed-visits).
* **Undo** puts a recorded attendance back to booked.
* **Move to another session** moves the client to another session of the same class. Full sessions cannot be chosen.
* **Book into class** books a client you search for into the session (payment is taken later, at the class price). When the session is full, the button becomes **Add to waitlist**.
* **Remove** takes someone off the waitlist.
* **Places** changes the size of this session. It cannot go below the number already booked, and any extra places are offered to the waitlist straight away.

Each booked client is an ordinary appointment: they get the usual confirmation and reminders, the appointment has its own invoice, and it appears on the client's record and in their portal.

## The waitlist

When every place is taken, clients can **Join waitlist** on your booking page or in their portal, and you can add clients from the roster.

When a place frees up — someone cancels, is moved, or you add places — it is offered to the first person on the waitlist. The place is held for them for the class's claim time, and they are emailed a **Claim your place** link. While a place is held, nobody else can book it. If they have not booked by the time the hold ends, the place goes to the next person. One freed place is only ever offered to one person at a time, and no offer is made in the last hour before a class.

Offer emails follow the client's appointment email choice and the **Email appointment reminders** setting in your portal settings. A client who is signed in to the portal also sees the held place there.

## Cancel a session

Open the session and select **Cancel this session**, then confirm. This cannot be undone:

* every booked client's appointment is cancelled, and they get the usual cancellation email;
* deposits and online payments are refunded, and no cancellation fee is charged, because the clinic cancelled;
* the waitlist is closed.

If a refund cannot be made automatically, the message says how many, and you refund them from your payment provider. Your team gets one notice for the session — **Cancelled class refunded**, or **Cancelled class: a payment needs your review** when a refund did not go through or an attendee paid at the desk. A payment taken at the desk is never refunded to a card; refund it at the desk if it applies.

## What clients see

On your booking page, a class shows its upcoming sessions instead of a calendar, each with the places left. There is no **Provider** choice — each session already names who runs it — and no option to repeat the booking: clients book each session they want on its own. Clients choose **Book**, fill in the booking form and pay as for any service, including any deposit and your cancellation policy. A full session offers **Join waitlist**. See [Your booking page](/practice/work/booking-page).

In the patient portal, **Book** → the class lists its sessions the same way, and **Your class waitlists** on the **Appointments** page shows the client's waiting places and any place held for them. See [Book and manage appointments](/portal/patients/appointments).

## Check it worked

Open **Classes**, select the session and check the booked count. Then open your booking page in a private window, choose the class, and check the session shows the places you expect.

## Common issues

<AccordionGroup>
  <Accordion title="“The teacher or room is already busy on …”">
    The teacher has an appointment, another class or a blocking calendar event at that time on the named date, or the room is reserved. Nothing was scheduled. Pick another time, teacher or room, or leave that date out of the timetable.
  </Accordion>

  <Accordion title="“This session is full” when booking a client in">
    Every place is taken, or a place is being held for someone on the waitlist. Add places to the session, or add the client to the waitlist.
  </Accordion>

  <Accordion title="The class does not appear on the booking page">
    Check the service is on your booking page, **Group class** is on, and it has sessions within your booking page's **Advance Booking Days**. Sessions that start too soon for the service's minimum notice are not shown online.
  </Accordion>

  <Accordion title="“Confirm your two-factor sign-in to see and change class bookings.”">
    The roster shows client names, so your clinic's two-factor rule applies. Sign in again with your second step.
  </Accordion>
</AccordionGroup>

<StillStuck />
