# Voucher codes

Attach codes to a promotion so it only applies when a customer hands one over, and cap how many times each code can be used

Source: https://getolet.com/resources/help/catalog/voucher-codes/
Updated: 2026-10-15

A voucher code turns a promotion into something a customer has to ask for. The promotion sits idle until a cashier enters one of its codes, and then it applies to that sale.

Voucher codes ship with promotions, so if you can build a promotion you can add codes to it. Codes live on the promotion, not in a list of their own: open [**Catalog > Promotions**](/resources/help/catalog/promotions/), open the promotion, and scroll to **Voucher codes**.

This feature depends on your plan. Check Settings > Billing to see what your plan includes.

## Turn the gate on first

Set **Requires a code** to **Yes, only with a voucher code** in the **Availability** section, and save.

While that is off the code controls are disabled and the promotion applies to every qualifying sale, code or no code. OLET says so in the **Voucher codes** section rather than letting you build a campaign that quietly discounts everybody.

## Add codes

There are three ways, and you can mix them on one promotion.

- **One at a time.** Type into **Code** at the foot of the list, set an optional **Max redemptions**, and select **Add code**.
- **Generate a batch.** Select **Generate codes**, then set **How many codes (1-500)**, an optional **Prefix** such as `SUMMER`, and an optional **Max redemptions per code**. OLET invents the rest of each code for you.
- **Import a list.** Select **Import**, then paste one code per line. To give a code its own cap, write `CODE,max_redemptions` on the line, for example `SAVE20,100`. OLET tells you how many it parsed before you commit, and after the import it lists any it skipped and why.

**Export** downloads every code on the promotion with its cap and how many times it has been redeemed.

## Single use or reusable

**Max redemptions** is what decides this, per code.

- Leave it blank for **Unlimited**, which is the right setting for a code printed in an advert.
- Set it to 1 for a single-use code, which is what you want when each customer gets their own.
- Set it to any other number for a shared code with a ceiling, such as the first 100 customers.

The **Redeemed** column counts how many times each code has been used, so you can watch a campaign burn down. Removing a code stops it being accepted from that moment.

The promotion's own **Total redemption limit** applies on top of the per-code caps, and stops the whole campaign once it is reached.

## What a code can contain

Codes are letters and digits only. Separators are ignored, so `SAVE-10`, `SAVE 10`, and `SAVE10` are all the same code, and a customer reading the dash off a flyer still redeems. Case is ignored too.

That also means a code has to have at least one letter or digit in it. OLET refuses anything that reduces to nothing.

## If it goes wrong

- **The code controls are grayed out.** **Requires a code** is still off. Turn it on and save.
- **The promotion discounts everyone.** Same cause. A promotion holding codes with the gate off ignores them entirely.
- **A code was refused as already used.** It has hit its **Max redemptions**. The **Redeemed** column shows the count.
- **A code will not add.** Either it is a duplicate, or it contains something outside letters and digits.
- **The customer typed it and nothing happened.** The rest of the promotion still has to match. Check the schedule, the outlets, the customer groups, and the trigger.

## Where to go next

- [Promotions](/resources/help/catalog/promotions/)
- [Promotions and voucher codes on the register](/resources/help/selling/promotions-and-voucher-codes-on-the-register/)
