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:

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 options under Conditions are:

Several conditions at once. On a promotion whose places are all Order & Pay orders (collection, delivery or table) you can press Add another condition and stack them — every condition has to be met before the offer applies. "Free dessert when you buy two mains, Tuesdays only" is a Free item when you buy promotion with a Certain days of the week condition; "20% off on Tuesdays when the order has two mains" is a percentage-off promotion with a day condition and a basket condition. A promotion can't carry two conditions of the same type, and the builder's summary joins them with "and" so you can read exactly what you've built. Promotions on bookings, tickets or at the venue take one condition.

Free item when you buy is its own promotion type, not a condition: you pick what the customer must buy (any 2 of the Mains category, say) and what they get free (the Desserts category), and the cheapest qualifying item in their order comes off at its real price — Once per order, or Once for every multiple, up to a cap you set. Anyone can get it with no sign-in, it works with No code (applies itself at checkout, with a banner on the ordering menu) or with a shared code, and it combines with other automatic promotions dish by dish like any other. See How do I create a promotion?.

Self-applying (no code at all) works on table bookings — the offer attaches itself when a matching booking is made — and on Order & Pay orders (collection, delivery and table alike), 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, first-visit and first-order 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, ticket and ordering 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?