Skip to main content
Cancellations & Credits

Cancellation Policy

How class and booking cancellation policies work, and when refunds vs credits apply.

Overview

Cancellation policies on AllSquads are configurable per class. Each coach or club sets their own policy when creating a class. The policy determines what refund (if any) a player receives when they cancel a booking.


Policy Components

Each cancellation policy has three components:

1. Time threshold

The minimum notice (in hours before the session) a player must give to receive the configured refund type. Common thresholds:

  • 1 hour
  • 12 hours
  • 24 hours (most common)
  • 48 hours
  • 72 hours

2. Refund type

What refund the player receives if they cancel WITH AT LEAST the threshold's notice (i.e. outside the last-threshold-hours window before the session):

  • Full refund: Player receives 100% of the booking value as credits
  • Partial refund: Player receives a percentage of the booking value as credits (e.g., 50%)
  • No refund: Player receives no refund, regardless of notice given

3. Inside the threshold (late cancellation)

If the player cancels with LESS notice than the threshold (i.e. inside the last-threshold-hours window before the session), they always receive NO credit — regardless of the refund type setting. Only a cancellation made with at least the threshold hours' notice receives the configured refund type above.


How It Works — Examples

Example 1: 24-hour full refund policy

  • Policy: Full refund if cancelled with at least 24 hours' notice
  • Player cancels 48 hours before: Full credit refund (48h ≥ 24h threshold)
  • Player cancels 12 hours before: No refund (12h < 24h threshold — inside the window)

Example 2: 24-hour partial refund policy (50%)

  • Policy: 50% refund if cancelled with at least 24 hours' notice
  • Player cancels 48 hours before: 50% credit refund (48h ≥ 24h threshold — the configured type applies)
  • Player cancels 12 hours before: No refund (12h < 24h threshold — inside the window, no credit regardless of the configured type)

Example 3: 24-hour no refund policy

  • Policy: No refund, any time
  • Player cancels 48 hours before: No refund
  • Player cancels 12 hours before: No refund

Cancellation Preview

Before confirming a cancellation, players are shown a cancellation preview that displays:

  • The class name, date, and time
  • The refund outcome (credit amount or no refund)
  • Credit expiry date (if applicable)

Players must confirm before the cancellation is processed.


Refund Mechanics

All refunds are issued as AllSquads credits, not as Stripe reversals. Credits are:

  • Issued immediately upon cancellation confirmation
  • Club-scoped (can only be used for bookings with the same club)
  • Subject to an expiry date
  • Exclusive of the booking platform fee — the fee is non-refundable in all cases (ADR-050). A credit is based on the class price: paying $51.50 ($50 class + $1.50 booking fee) and receiving a full credit returns $50.00. Cash/card refunds happen only manually, by exception, via support.

Multi-Person Bookings — Per-Attendee Pricing & Cancellation (ADR-056)

A single "Book" action can cover several attendees at once — yourself plus saved children, or yourself plus typed adult guests (e.g. bringing friends to a social session). Each attendee is priced and can be cancelled individually:

  • Pricing. Each attendee's price is resolved for THEM specifically — a saved child checks that child's (or the account's) membership per the club's membership model; a typed adult guest is matched, by name, to an active club member if one exists, otherwise pays the standard rate. A guest never inherits the booker's OWN membership rate just because they were added to the booker's booking — the club always sees a guest priced standard unless that guest is independently a recognised member.
  • Cancelling one attendee. The player (for their own booking) or a coach/club can cancel a single attendee out of a multi-person booking without affecting the others — the remaining attendees keep their spot, unaffected. The credit issued for that ONE attendee reflects what THEY actually paid — a booking with a mix of member and guest pricing does not average everyone's price together when crediting one cancelled seat.
  • Displaying what each attendee paid. Every surface that lists the attendees on a booking shows each one's own charged amount next to their name whenever it's known (e.g. "Eve Collins — $8.00"):
  • the booking confirmation page after checkout,
  • My Classes → View details (the booking detail pop-up),
  • the coach/club roster and its booking detail panel,
  • the booking confirmation email.

The whole booking's total is shown once, clearly attributed to the booking ("Amount paid (whole booking)" when more than one person is on it) — never repeated against every attendee's name.

  • On a multi-week or multi-session booking, each attendee's figure is what THEY were charged for the WHOLE booking, not for one session. Two children in an 8-week term at $12.50 a session each show "$100.00", and the two figures add back up to the $200.00 booking total.
  • Bookings made before 2026-07-31 don't have a stored per-attendee amount. Where that split is genuinely unknown and more than one person shares the booking, no per-attendee figure is shown for those attendees ("Amount not itemised" rather than a guess) — the booking's real total is still shown once. We deliberately do NOT divide the total by the number of attendees: an even split is a guess, and on a booking mixing a member seat with standard-rate guest seats it's a wrong one. If a legacy booking has only ONE attendee, the booking total unambiguously IS that attendee's own charge, so it still displays normally.
  • One more case shows no per-attendee figure: a term-class roster row covering adult guests who aren't linked to saved profiles can't always tell two guests on the same booking apart, so it shows the booking-level wording instead of attributing one number to one person. Saved children (and any booking made from 2026-07-31 onward) are unaffected.
  • Cancelling one seat on an older, unsplit multi-person booking still splits the CREDIT evenly across attendees, same as before — only the DISPLAY of what was originally charged is affected by the missing split, not the cancel-credit math.

Session Cancellations by Club

What happens when a coach or club cancels a session depends on the class type (2026-07-09):

  • Term classes: no automatic refund by default. The coach picks the outcome at cancel time — No credit, Pro-rata credit (based on sessions remaining/total in the term), or Full credit — issued as a credit or a make-up entitlement depending on the class's configured refund mode (see Make-up Sessions below).
  • Every other class type (group, private, social, camp, casual recurring): the refund is calculated automatically from that class's own cancellation policy (window + refund type + percentage) — the coach does not choose an amount in the moment; the configured policy decides it.

In both cases:

  • Players are notified immediately via in-app notification and email whenever a credit or make-up is actually issued
  • The cancellation is logged in the booking audit trail

Auto-credit vs manual credit

  • Coach cancels a session on a TERM class → no automatic refund; the coach explicitly chooses none / pro-rata / full at cancel time.
  • Coach cancels a session on any other class type → auto-credited per that class's configured refund type (full / partial / none). The notice threshold does NOT apply when the COACH cancels — the player gets the same credit whether the coach cancels a month ahead or an hour before, because the notice window exists to price a player's own late cancellation, and this cancellation was not theirs. A club that has configured "no refund" still credits nothing, and a 50% policy still credits 50%.
  • Player cancels with at least the policy's threshold notice (outside the window) → auto-credit per the class's cancellation policy (full / partial per the configured refund type). Always.
  • Player cancels with less than the policy's threshold notice (inside the window — a late cancellation) → no auto-credit. The coach may issue a manual credit from the Bookings tab if they choose to make an exception. This is the only non-automatic path.

Term Class Cancellations

Per ADR-041 (amends ADR-021), player self-cancellation of a term enrolment is governed by five rules. Coach-side cancellation (the calendar drawer / session-page cancel flows) is unchanged by this ADR.

1. Before the term starts (any payment type)

Every term class has a single term cancellation policy — a notice period in days set in the wizard's CANCELLATION POLICIES section (annual_subscription_notice_days, defaults to 28). The same field applies regardless of how the player pays (upfront, weekly instalment, or annual subscription):

  • Cancelling on or before the notice-period cutoff (N days before the term start date) → full credit
  • Cancelling inside the notice window but still before the term starts → cancellation is still allowed, but $0 credit — the player sees an explicit "no refund" confirmation before it executes
  • A weekly-instalment subscription cancelled pre-start is cancelled immediately in Stripe with no further invoice — there is nothing to credit because nothing further is charged

2. Mid-term cancellation — split by payment type

Once the term has started, the rule depends on how the player paid:

  • Upfront (paid the full term in one payment): the player MAY still cancel and vacate their spot — but with no refund. An explicit confirmation step is shown before the cancellation executes.
  • Weekly-instalment subscription: the player cannot self-cancel mid-term (ADR-021's original block, retained) — weekly payments continue until the term ends. They must contact their coach, who can manually cancel and choose whether to issue a credit at their discretion.

3. Annual (multi-term) commitment

A player on an annual subscription (committed across multiple terms via a Stripe Subscription Schedule) cannot self-cancel at all — not mid-term, not between terms, not even before the very first term starts. Cancellation is coach/club-only, via the manual override path.

4. Rolling term-at-a-time enrolment (auto-renew)

Some term classes auto-enrol a player into the next term by default (a club setting, auto_renew_default_enabled). Continuing is the default — to opt OUT of the next term, the player must cancel before that class's configured notice-period cutoff (annual_subscription_notice_days, the SAME field that governs rule 1's whole-term pre-start cancel, default 28 days before the next term starts — per ADR-041 rule 4: "the wizard notice-period field governs the opt-out deadline"). After the cutoff, the next term's charge is already in flight and cannot be self-cancelled. (2026-07-19: a separate, unsynced auto_renew_opt_out_cutoff_days field was previously enforced here instead — retired; the DB column still exists but is no longer read.)

5. Single-session cancel (including session 1)

A player may cancel just ONE session of their term enrolment — including the very first session — independent of the rules above (allowed mid-term, pre-start, any payment type). Credit is per the class's per-session cancellation policy (the hourly threshold/refund-type/refund-percentage control, same as a drop-in booking) — not the term's own notice-period rule. Cancelling one session does not affect the rest of the term enrolment or its billing.

Date or time change by coach

If the coach changes the date or time of a recurring class or term class:

  • All enrolled players are notified
  • Players are given the option to cancel for a full credit refund within a response window
  • Players who do not respond are assumed to accept the change

Holiday exclusions on term classes

Term classes may have specific dates excluded (e.g., public holidays). Excluded dates are shown on the class detail page. Players enrolled in the term are not charged for excluded sessions.


Casual Recurring Subscriptions

Casual recurring weekly subscriptions are open-ended weekly (or fortnightly) memberships on a non-term class. The class has schedule_type = recurring, subscription_enabled = true, and annual_subscription_enabled = false. Distinct from term-class instalments (which run for a fixed term) and annual subscriptions (which commit for the full year).

Player self-cancellation

A player can request to cancel a casual recurring subscription at any time. The class has a configured cancellation notice period in days (subscription_notice_period_days, set in the wizard, default 7). On cancellation:

  • The subscription continues until the later of (a) the configured notice period from the cancellation request, or (b) the end of the current billing period. So a 7-day-notice sub cancelled mid-period stops at the period end if that is ≥7 days away, otherwise it runs through to 7 days after the request.
  • No partial refund is issued for time already paid.
  • After that date, no further charges are taken and future auto-bookings are cancelled.
  • The dashboard shows an "Ends [date]" indicator until that date.
  • Enforcement matches the displayed copy: the cancellation takes effect at whichever is later — the end of the notice period or the end of the current billing period.

Coach cancels a session (auto-credit)

When a coach cancels a future session that a casual recurring subscriber is booked into:

  • A credit equal to the per-session value of the cancelled session is issued automatically.
  • The credit is auto-applied to the player's next Stripe invoice as a negative line item via the invoice.upcoming webhook (see ADR-022) — implemented as stripe.invoiceItems.create({ customer, subscription, amount: -<per_session_cents>, ... }).
  • No manual redemption — the discount appears on the next renewal invoice automatically.
  • If multiple sessions are cancelled in the same billing period, each contributes a separate negative line item on the next invoice.

No skip-week (v2 launch)

Players cannot skip individual weeks while keeping the subscription active in v2. To skip, the player must cancel and re-subscribe. Skip-week support is a post-launch enhancement.

What players see

The cancellation copy is resolved dynamically from the class's configured notice period (N = subscription_notice_period_days) — it is the same string across the checkout, the subscription confirm page, the booking confirmation page + email, and the My Subscriptions dashboard:

  • Subscription confirm page / checkout / confirmation email (before/at paying): "Cancel with N days notice — your subscription continues until the later of N days from your request or the end of the current billing period (no refund of past weeks). If your coach cancels a session, credits are auto-applied to your next invoice."
  • The confirm page also surfaces the full configured sub terms: open-ended weekly commitment, the pause allowance (up to pause_max_weeks_per_year weeks/year, ADR-025), and the coach-cancel credit.
  • My subscriptions dashboard (after cancelling): "Ends [date]" with the cancellation date.

Court Hire Cancellation Policy

Court hire has a separate cancellation policy configured per club. The same policy components apply (time threshold, refund type). Court hire cancellation policies are set in Dashboard > Court Hire > Settings. The time threshold is evaluated against the court's booking slot in the club's own local time zone, not the server's.


Private Lesson Cancellations

Cancelled by player

Standard cancellation policy applies.

Declined by coach

If a coach declines a private lesson booking:

  • Player receives a full credit refund immediately
  • Coach may optionally suggest an alternative time
  • Player is notified of the decline and any suggested alternative

Not accepted in time (auto-cancelled)

A private lesson request left pending — the coach hasn't accepted or declined it yet — automatically cancels if the coach doesn't respond within a configurable timeout (default 1 hour, club-configurable):

  • The coach gets reminder alerts before the timeout expires
  • On timeout, the request cancels automatically, the player is credited (same as a coach decline), and the player is notified with a prompt to rebook a different time
  • Clubs can change the timeout for their private lessons; ask support if you need it adjusted

Configuring a Cancellation Policy

Setting a policy on a class

When creating or editing a class, the cancellation policy is configured in Step 4:

  1. Select refund type: Full, Partial, or None
  2. Enter time threshold in hours (1–72)
  3. If Partial: enter the refund percentage (1–99%)
  4. Save

Default policy

A default cancellation policy can be set at the coach or club level in Settings. New classes inherit the default policy, which can be overridden per class.

Changing a policy on a live class

Changing the cancellation policy on a live class with existing bookings only affects future bookings. Players with existing bookings retain the policy that applied at the time of booking.


Make-up Sessions (term classes only)

For term classes, the cancellation refund mode can be set to either Credits (default) or Make-up entitlement. The two modes are mutually exclusive — pick one per class.

How make-ups work

When a player cancels a term session within policy on a class set to Make-up entitlement mode:

  • A make-up entitlement is created instead of a credit
  • The entitlement value matches the cancelled session's per-seat value
  • The entitlement expires at the end of the source term (not 12 months like credits)
  • The player or coach can attach the entitlement to a different class at the same club with a per-session price equal to or less than the entitlement value

Eligible destination classes

  • Same club as the source class (cross-coach within the club is fine)
  • price_per_session_cents <= entitlement.value_cents
  • Term-active with available capacity
  • Make-up bookings count against capacity — they take a regular slot, no hidden +1

Player flow (My Bookings)

The make-up entitlement appears as an amber card on /dashboard/bookings. Tap Redeem → pick a class → pick a session → confirm. The destination booking is created automatically and the entitlement is marked redeemed.

Coach flow (Bookings tab)

The Bookings tab shows outstanding entitlements at the top of the class list. Coaches tap Attach to a class to redeem on a player's behalf.

Expiry

A make-up entitlement expires at the source term's end date. There is no automatic conversion to a credit at expiry — the make-up was the chosen refund mode for that class. If the player did not redeem in time, the entitlement is forfeit. Coaches can issue a manual credit if they choose to make an exception.

Why pick make-ups over credits?

Make-ups encourage players to keep training within the term they paid for, which suits programmes with a structured progression (skills development, squad cohort consistency). Credits give the player more flexibility (12-month expiry, redeemable on any class at the same club). Most clubs run one model consistently across their term programmes.