How do promo codes and automatic offers work?
Shared codes for posters, one-per-person codes for targeted emails, and automatic triggers that apply an offer with no code at all.
Every promotion reaches customers one of three ways, set under How customers get it in the builder: a shared code, one-per-person codes, or no code at all (automatic).
Shared codes
One code everyone types — right for posters, table talkers and social media. It's 4–24 characters (letters, numbers and hyphens, like SUMMER-20), and you can pause the promotion at any time to stop the code working. Total-use and per-guest caps still apply, so a shared code on a poster can't run away from you. A code can only belong to one promotion at a time — try to reuse one and the save is refused with a message naming exactly which promotion owns it and whether it's live, paused, scheduled or ended, so you know which one to delete if you want the code back.
One-per-person codes
Codes for targeted sends — each code works exactly once. When you save a new one-per-person promotion, the Generate one-per-person codes window opens by itself with the batch size pre-filled from your total-use limit; you can also open it any time via Codes on the promotion's card:
- Enter How many codes? — up to 500 per batch, 2,000 per promotion.
- Optionally set a prefix (2–6 letters or numbers — codes come out like VIP-XX7KQ2M4).
- Click generate, then Copy all or Download CSV — and don't worry if you close the window: View codes shows every code again later, marked Used, Unused or Switched off, with copy and CSV download. A code that a marketing campaign has handed out also shows Sent to with the recipient's email address, and the CSV carries a matching sent_to column.
Hand codes out individually, or let the marketing composer do it for you: attach the promotion to a campaign and its Give each recipient their own code switch gives every recipient one unused code, locked to their email address so nobody else can use it — see How do I send a marketing campaign?. Once any one-per-person codes exist, the promotion can't be switched back to a shared code.
Automatic triggers
An offer can apply by itself, with nothing to type. The Automatic trigger options are:
- Around the customer's birthday — within a set number of days of their birthday (7 by default; needs a birthday on their customer profile).
- Customer's first visit — applies to a brand-new customer making their first booking with you. Any customer counts, not just loyalty members: it looks at the visit history on the customer profile matching their email, and no profile (or zero visits) means first visit.
- Certain days of the week — e.g. Monday–Wednesday only.
- Off-peak times — a time window, on every day or just the days you pick.
Self-applying (no code at all) works on table bookings — the offer attaches itself when a matching booking is made — and on Order & Pay table orders, where a matching money-off promotion discounts the order automatically at checkout (the happy-hour pattern: an off-peak window plus a percentage off, applied by itself while the window is open, with a banner on the ordering menu — when more than one automatic offer is live at once the banner takes turns showing each of them, and every qualifying offer still applies at checkout, each dish getting whichever suits it best). On offers that do carry a code, the trigger instead sets when the code works (a Tuesdays-only code simply refuses on a Wednesday). The builder's What this does summary box spells out exactly how your combination behaves.
Birthday and first-visit offers are checked against the customer's customer profile, so the customer needs to have entered their email before the offer can recognise them — the booking and ticket pages handle that prompt for you.
Protection against code guessing
Public code checks are bot-protected and rate-limited per device, and a wrong guess sees the same neutral message — "That code isn't valid right now." — whether the code doesn't exist, is paused or has run out. Guessers learn nothing; genuine customers with a typo just try again. The one deliberate exception: a real, publicly-advertised shared code that's outside its date, day or time window explains itself plainly (for example "This offer is only valid on Tuesdays") — those conditions are already public. One-per-person codes never explain themselves.
Related: How do I create a promotion? · How do promo codes work on event tickets? · How do I send a marketing email?