# Discount codes

> Create promo codes and customer credits: % off, £ off or free sessions, one code or a batch of unique codes, limited by price, session, date, time or new customers.

Who can do this: admins only.

Create discount codes in [Offers → Discounts](/go/admin/shop/discounts). For vouchers people buy as presents, see [gift vouchers](/docs/gift-vouchers).

<Callout variant="note">
Discount codes only apply to session bookings. For memberships, bundles and gift vouchers, use a [Stripe promotion code](/docs/stripe-promo-codes).
</Callout>

## How the form is laid out

**Add discount** asks **What is this code for?**

- **Share a code** - a promo code anyone can type: **% off**, **£ off** or **Free sessions**, as **One code** or **A unique code each**.
- **Give to a customer** - credit on one person's account: **£ credit**, **Free sessions** or **% off**.

The rest sits under **Limits**.

## How customers receive and redeem a code

Customers enter codes at [checkout](/docs/manage-bookings-customers). To pre-apply one, add `?gv=CODE` to a [session link](/docs/booking-links) (`&gv=CODE` if it already has a `?`).

Customer credits show on their account: **Free sessions** under "Session credits", applied automatically when they book signed in with that address (they can tap **Pay instead** to keep them), and **£ credit** under "Gift card balance", spent by entering its code.

## Recipes

### Comp a specific person with free sessions

<Steps>
<Step>Click **Add discount** and choose **Give to a customer**.</Step>
<Step>In **Customer**, pick the person or type a new email.</Step>
<Step>Under **They get**, choose **Free sessions** and a number, optionally set **Expires** or tick to email them, and click **Give credit**.</Step>
</Steps>

For a free gift card, choose **£ credit** instead. Adjust remaining credits on their [customer](/docs/customers-directory) page.

### Give out single-use free-session codes

**Share a code** with **Free sessions** at **1** and **Total available** **Limited** to 1 session, so it switches off once redeemed. Capping the person with **Uses per customer** isn't enough, as a second email gets around it.

### Give everyone on a list their own code

Choose **A unique code each** and set **Number of codes** (up to 500) and a **Name**. On **% off** or **Free sessions**, set **Total available per code** to **1** (on % off it defaults to the percentage, so 20% means 20 uses). **Copy all** or **Download CSV** before closing the panel.

### Discount every space on a multi-person booking

**% off** discounts every eligible space; **£ off** comes off the booking total once. For "£5 sessions all round", use % off (70% off £16.50 is £4.95) and tick **Communal** under **Applies to**.

### Offer a discount at quieter times

<Screenshot shot="admin-discount-day-time-limit" alt="The Dates and times row of the discount form, open, with Choose days and times selected for Monday to Friday from 9am to 4pm" />

Under **Dates and times**, choose **Off-peak times** to use the times you set in [Settings → Policies](/go/admin/settings/policies#off-peak), or **Choose days and times** for days, **From** and **To**. A session counts if it *starts* inside a time, in your venue's time zone, so 9am to 4pm covers 3:30pm but not 4pm. Customers can only reschedule inside it. A code keeps its own copy of off-peak times, so changing them later changes no existing code. **Create a code** on a [Reports](/docs/reports) quiet session fills this in for you.

### Run an intro offer for new customers

<Screenshot shot="admin-discount-new-customers-only" alt="The Usage row of the discount form, open, with Customers set to New customers only" />

Use **£ off** the difference (£7 off £12 makes £5) or **Free sessions**. Under **Usage**, set **Customers** to **New customers only**, **Uses per customer** to **Once** and **Spaces per booking** to **1 space**. New means no booking under that email or account, apart from cancelled ones; [imported](/docs/import) bookings count.

## Discount code settings

- **Name** - internal, required for a batch. **Code** - must be unique.
- **Email this code to the customer** - sends once, on creation; editing never re-sends. No one is emailed otherwise, and a batch can't be emailed.
- **Booking types and prices** - **All prices**, or **Choose prices** by **Communal**, **Group** or **Private hire**; ticking a whole group covers prices added later. Amber warns when a code reaches group or private hire.
- **Sessions** - **All sessions** or **Choose sessions**, saved per code. To block prepaid sessions on one session, see [bundles](/docs/bundles#stop-bundles-being-used-on-one-session).
- **Session dates** - **Any date**, or **Between dates** (either side can be blank). Customers outside them are told which dates it covers.
- **Code expires** - **Never**, or the last day it can be entered at checkout. Later sessions booked before then still count.
- **Customers** - **Anyone**, or **New customers only** (shared codes only).
- **Uses per customer** - **Unlimited**, **Once** or **Custom**. People are identified by account or email address.
- **Spaces per booking** - **Every space**, **1 space** or **Custom**. Spaces beyond the cap pay the normal price.
- **Total available** - uses on % off, sessions on Free sessions, money on £ off. **Show customers what's left** displays the balance. To charge an extra space to a credit, [edit the booking's quantity](/docs/manage-bookings-admins#adding-a-space-paid-by-a-bundle-or-credit).
- **Notes** - internal, never shown to customers.
- **Active** - retires a code without deleting it.

Free sessions given to one customer can be limited to specific prices - for example, to keep a punch pass off your private hire - and to days and times, but not to new customers. A bundle credit keeps the prices its bundle was limited to - see [bundle limits](/docs/bundles#limits).

Click a code's row for its **history** of changes and redemptions. To reuse a code's setup, choose **Duplicate** from its **⋯** menu (codes you created only); it copies everything except the customer and balance.

## Common questions

1. **A code doesn't work at checkout.** Check it hasn't expired, run out or been switched off, then check its **Limits**.

2. **A code switched itself off.** Codes deactivate when they run out. Topping up **Total available** or **Balance** reactivates it on save.

3. **A code was refused on a booking I [added for a customer](/docs/add-a-booking).** The code's limits still apply to that customer. Check the **history** and raise **Uses per customer** if needed.

4. **A booking shows a discount the code has no redemption for.** The code was refused as the booking saved, so the discount was given anyway. Fix the code before reusing it.
