Skip to content

Packages & Payments

Create a discount code

Build a promo code clients type at checkout in Calso — percentage off, a fixed amount off, or a free session — and set which sessions it covers, how many times, by whom, and for how long it can be used.

Updated August 28, 2026

A discount code is the simplest lever you have for filling a quiet week or thanking someone for a referral. Decide what it takes off and who can use it, then hand it out — the client types it at checkout and the charge drops before their card is touched.

Codes live under Promo Codes in the sidebar, in the Configure group. The page is headed Promotions and carries two tabs: Promo Codes, where you build them, and Vouchers, a separate record of free sessions clients earn from checkout add-ons. A discount only means something when there is a payment to discount, so you need Stripe connected and at least one priced session first.

The three kinds of discount

Percentage takes a share off the price — a whole number from 1 to 100, so 20 means twenty percent off whatever the session costs. Because it scales with the price, it is the safe choice when your sessions are priced differently from one another.

Fixed Amount takes a set sum off. The discount is capped at the price, so a code worth more than the session simply makes it free rather than leaving a credit behind.

Free Session zeroes the whole charge. When a code brings the total to nothing — this type, or a discount that happens to cover the full price — the booking is confirmed on the spot and no card is asked for.

In the list, the Type column badges these % Off, $ Off and Free.

Create the code

  1. Open Promo Codes

    Click Promo Codes in the sidebar. The Promo Codes tab is already selected; before you have any, it reads "No promo codes yet."

  2. Press Create Promo Code

    The Create Promo Code button sits at the top right of the page, and again in the middle of the empty state. It opens a single modal where the whole code is built.

  3. Write the code itself

    Code is what the client types, forced to capitals as you go — WELCOME20 is the example in the box. Generate beside it invents an eight-character code, skipping the letters and digits that look alike so nobody mistypes it. Each code must be unique in your workspace, or the save answers "A promo code with this name already exists."

  4. Choose the discount type and its value

    Pick Percentage, Fixed Amount or Free Session under Discount Type. The field beneath changes to match: Percentage Off for a share, Amount Off (cents) for a set sum, and nothing at all for a free session.

  5. Choose what the code covers

    Limit to Event Types lists your event types with a checkbox each. Leave them all clear — the hint beneath reads "Leave empty to apply to all event types" — and the code works everywhere you sell. Tick one or more and it works only on those, which is how you discount a single session without marking down everything else.

  6. Set the restrictions and the limits

    Under Restrictions, tick First-time clients only to hold the code back for people who have never booked with you, and use Minimum Purchase (cents) to require a certain spend. Max Total Uses caps redemptions across everyone — blank means Unlimited — while Per Customer caps one person, and starts at 1.

  7. Set the date window and save

    Starts At holds the code back until a moment you choose, and Expires At retires it. Leave both blank and the code is live the second you press Create, with No expiry shown in its row.

Limit a code to certain event types

A code with boxes ticked under Limit to Event Types is checked against the event type the client is booking. On one you ticked it applies as normal; on anything else the client is told "This code doesn't apply to this session type" and the full price stands. A scoped offer is therefore safe to share widely — post an intro-session discount anywhere you like, and it still cannot be spent on the sessions you left out.

Leave the boxes clear rather than ticking every one. An empty list means everything, including event types you add later, while a ticked list only ever covers what you ticked — so a new session sells at full price until you reopen the code and add it.

Amounts are typed in cents

Amount Off (cents) and Minimum Purchase (cents) both take the small unit, not the big one. The hint under the box spells it out — 1000 means $10.00 — so a $25 discount is 2500 and a $100 minimum spend is 10000. It is the easiest thing to get wrong here: 5000 meant as $50.00 and typed as 50 is a five-cent discount.

There is no currency picker on the form, and you do not need one. What you type is a number of cents, and those cents come off the price in whatever currency that session is sold in — 1000 takes $10.00 off a session priced in US dollars and £10.00 off one priced in pounds, so one code works across everything you sell. The Discount column on the list is written in your workspace currency, and the message a client sees when a session falls under a Minimum Purchase is written in the currency that session is priced in — so both read the way the client's own checkout does.

Where a client enters it

The code goes in at the payment step, after a client has picked a time and given their name and email. Alongside the billing fields is a Have a promo code? link; opening it reveals a box reading Enter promo code and an Apply button. Apply stays greyed out until the email address is filled in, because that address is what Per Customer and First-time clients only are checked against.

A code that works confirms itself in green — "20% off applied!" or "Free session applied!" — with a Remove link beside it, and the total updates before the card is charged. One that does not says why in the client's own words: "This code has expired", "You've already used this code", or "This code has reached its usage limit". The box only appears when there is something to pay, so a client spending package credits never sees it.

Reading the list, and retiring a code

Each row shows the Code, its Discount and Type, a Used count, a Status and the Expires date, where Status reads Active, Expired once the date has passed, or Disabled once you switch it off.

CalsoThe Promo Codes list

Read the Used column, not the badge, to tell whether a code is spent: one that has hit its Max Total Uses keeps its green Active badge, and the count reading 25 / 25 is what tells you it is done. Edit reopens the modal on any code, expired ones included, so pushing Expires At into the future brings a lapsed code back. Disable is the one action you cannot walk back, so reach for an expiry date whenever you might want the code again later.

Once codes are bringing bookings in, the other half of that moment is what else you can put in front of someone already paying — offer add-ons at checkout.

Frequently asked questions

Do I enter a discount in dollars or in cents?

In cents. The field is labelled Amount Off (cents) and the hint under it reads e.g. 1000 = $10.00, so a $25 discount is typed as 2500. Minimum Purchase (cents) works the same way. Only percentage discounts are typed as a plain number — 20 means twenty percent.

A client says my promo code isn't working. What should I check?

Start with what the code covers: if anything is ticked under Limit to Event Types, it only works on those, and a client booking anything else is told the code doesn't apply to this session type. Then read the Used column — a code that has hit its Max Total Uses keeps a green Active badge, so the count is the only signal — and check Expires At. Then the restrictions: First-time clients only turns away anyone who has booked with you before, and a session priced under the Minimum Purchase is turned away too. Promo codes are honoured at checkout on the Practice plan and above.

Can I turn a promo code back on after I disable it?

No. Disable is one way — there is no re-enable control, and the code stays greyed out as Disabled for good. If you only want a code to stop working for now and possibly come back later, give it an Expires At date instead. An expired code can still be edited, and pushing the date into the future makes it usable again.

Can a client use a promo code when they're booking with package credits?

No, and they will not see the field. The promo box only appears when there is money to collect, so a session paid for with credits from a package goes straight through without a discount step. Use a discount code to win the package purchase itself, not the sessions inside it.