Why is my discount code not working?
A discount can be set up correctly and still be refused at checkout, because it has to clear every one of its own rules for that specific booking. Work through the checks below in the order they're listed β that's the order Rex applies them, so the first one that fails is your answer.
A discount is all-or-nothing for a booking. If any rule below isn't met, the code is refused outright rather than applied at a reduced amount.
1. Is the discount switched on?
Open the discount and check the Discount is Active toggle. If it's off, the code is refused everywhere, with no message explaining why.
2. Does the booking date fall inside the date range?
Rex compares the discount's Start Date and End Date against the date the guest is booking for, not the date they're booking on. A code that ends 31 July will be refused on a booking for 2 August even if the guest is buying it in July. If guests book weeks ahead, set the End Date to cover the latest date they can book, not the last day of the promotion.
3. Is the code scoped to the package being booked?
By default a discount covers every package and add-on. If you've assigned it to specific ones, the cart has to include one of them. Check the Packages and Add-Ons tabs on the discount and confirm the package the guest is booking is ticked. A newly created package is not added to existing discounts automatically.
4. Does the whole booking fit inside the time window?
This is the check that most often looks like a malfunction. If the discount has a weekly schedule, Rex requires the entire booking, from start to finish, to sit inside the window for that weekday. A booking that starts inside the window but finishes after it closes gets nothing at all.
Example: the window runs until 12:00 noon and a guest books an 11:30 lesson that ends at 12:30. Because the booking crosses noon, the discount is refused. The same guest booking 8:00 to 8:30 that morning gets it without any problem.
Each weekday has its own start and end time. If you widen the hours, change every day you intend to cover. One day left on the old hours will fail only on that day, which reads as the discount working "sometimes" and is easy to mistake for a bug.
To review or change these, click Edit Schedule on the discount's detail page.
5. Has the usage limit been reached?
Max Usage Limit and Max Usage Interval work together. The interval is a rolling window counted backward from the moment the guest tries to apply the code, and Rex refuses the code once the number of redemptions inside that window reaches the limit. With Is Per Person on, the count is tracked separately for each guest's email address.
Example: Max Usage Limit 1, Max Usage Interval Per Month, Is Per Person on. A guest who used the code on 1 July is refused on 22 July, because that's still inside the rolling 30 days. They become eligible again once the earlier booking falls outside the window.
A Max Usage Limit of 0 means unlimited, not "none allowed". The same is true of Max Usage Duration (Minutes).
Raising a usage limit does not reach back to bookings already made. If a guest was refused this morning and you raise the limit this afternoon, their existing booking keeps the price it was created with β it has to be rebooked or adjusted by hand.
6. Are the duration rules being met?
Two settings can refuse a code based on length. Max Usage Duration (Minutes) is a running total per guest: Rex adds up the minutes already discounted for that guest and refuses the code if this booking would push them over. Applied Only For Durations restricts the code to specific booking lengths, so a 60-minute booking is refused by a code set to 30 minutes only. Leave both empty or at 0 unless you specifically want these limits.
7. Is the guest's email allowed?
Open the Eligibility card. If Restrict to specific emails is on, only the addresses listed there can use the code, and the guest has to be booking with one of them. An address with a typo, or a guest booking under a different email than the one you were given, is refused.
8. Does the booking meet the minimum spend?
If Apply Minimum Purchase Requirement is on, the booking subtotal has to reach the Minimum Purchase Amount before the code is accepted. Remember the subtotal is measured before the discount, and add-ons count toward it.
9. For BOGO codes, is the free item in the cart?
A BOGO discount needs both halves present. The buy item is whichever package or add-on the discount is assigned to, and the get item is the Discounted Package or Discounted Add On chosen in the BOGO Configuration card. If the guest hasn't added the get item, the code is refused.
10. Is more than one code being applied?
Most packages accept several codes at once, and their savings add together. Some packages are set to accept only one discount per booking, and on those a second code is refused with a message saying only one can be applied. If you expect two codes to combine and they won't, check that setting on the package rather than on the discount.
Member discounts that don't appear
Discounts granted through a membership plan are applied automatically, with no code for the guest to type. Two things are worth checking when a member is charged full price.
First, the guest has to be signed in to their member account before they reach checkout. Booking as a guest using the same email address does not apply membership perks, because Rex only knows which plan someone is on once they've signed in.
Second, a membership perk still has to clear every rule above. An active membership does not exempt a discount from its own schedule, usage limit, or package scope. A member being charged full price is far more often one of those rules than a problem with their membership.
If the membership itself looks wrong β the wrong plan, or an expired one β check the guest's profile and their plan's Benefits section to confirm which discounts that plan grants.
Still stuck?
Note the exact date and time of the booking, the package, the guest's email address, and the code being used, then contact support. Those four details are enough to identify which rule refused the code.
Updated Jul 31, 2026
Was this helpful?