Home Features Pricing Blog Docs
Log in Start for Free
English | Deutsch

Promo codes give buyers a discount at checkout. They’re separate from hidden tickets, which restrict access to a ticket — a promo code reduces the price. You can use both together: a hidden VIP ticket whose price still drops further with a code.

What you can configure

Each code carries five things you choose:

Field What it does
Type & amount Percentage (1–100%) or a fixed amount in your account’s currency.
Event scope Optional. Restrict the code to a single event, or leave it open across all events on your account.
Expiry Optional datetime. After that moment, the code stops applying.
Total usage cap Optional integer. Honoured across all buyers; a soft cap under high concurrency.
Per-customer cap Optional integer. Counted by checkout email — refunded orders free up a use.

Codes are 3–32 characters, letters / digits / dashes only. We uppercase on save, so news10 and NEWS10 are the same code.

When to use them

  • Newsletter & loyalty discounts — share a code with your list that gives 10% off any ticket.
  • First-time-buyer incentives — set max_per_customer: 1 so each email can only redeem once.
  • Influencer partnerships — give each partner a unique code so you can see in the order list which ones drove sales.
  • Free comps for a specific group — 100% off with a tight total cap, restricted to one event.
  • Time-boxed campaigns — set an expiry so you don’t have to remember to deactivate the code later.

How buyers redeem a code

Two ways, both supported out of the box:

  1. Typed at checkout — there’s a “Have a promo code?” disclosure right above the payment buttons. The buyer expands it, types the code, and the cart total updates immediately.
  2. ?promo=CODE in the URL — append ?promo=NEWS10 to any link on your shop. Usetix captures the code into the buyer’s session, so by the time they reach checkout the discount is already applied. Perfect for newsletter / ad / influencer links.

Codes are silently ignored on the public shop if they don’t match — no scary error appears before the buyer has even decided to buy.

How to create a code

In the admin dashboard, go to Promo codes in the sidebar. Hit New code:

Field Notes
Code What buyers type. 3–32 alphanumeric+dashes. Auto-uppercased.
Discount type Percentage or Fixed.
Discount amount For percentage: integer 1–100. For fixed: an amount in your account’s currency (e.g. 1.50 for €1.50 off).
Event Leave as “All events” or pick one to restrict the code.
Expires at Optional. Past this moment the code stops applying.
Usage limit Optional total cap.
Max per customer Optional per-buyer cap.
Active Uncheck to disable the code without deleting it.

Save. The code is live immediately.

The in-app AI assistant also knows about promo codes. Just say “Create a code FALL26 — 15% off, max 1 per customer” and it will set it up for you.

How the discount lands on Stripe & PayPal

The discount is allocated across the order’s line items proportionally to their original price. The hosted Stripe checkout page shows the discounted unit prices, so the buyer sees the real numbers and pays exactly that. PayPal validates against the discounted total. Free-after-discount orders skip the payment provider entirely — the buyer gets their tickets directly.

VAT is computed on the discounted total, so your customer invoice reads truthfully: line items at the discounted price, a “Promo code” subtotal row, then Net / VAT / Total below.

Caps, races, and refunds

The total usage limit is a soft cap. Under high concurrency on a near-capacity code (e.g. usage_limit: 1 with two buyers in flight simultaneously), a small number of orders may slip past the limit. Hard locking would strand buyers during the payment provider’s async window (Stripe Checkout sessions can live for hours). Soft over-redemption is the correct trade-off.

The per-customer cap is keyed on the buyer’s checkout email and counts paid + currently-reserved orders. Refunded orders free up a slot — so a buyer who cancels in good faith can redeem again, automatically.

redemptions_count is not decremented on refund. An organizer issuing “100 free coupons” doesn’t want refunds to silently restore quota. If you need to allow more redemptions after refunds, edit the code and bump the limit.

Deactivating or deleting a code

In the promo codes list, hit the trash button:

  • Codes with no redemptions — hard-deleted immediately.
  • Codes with at least one redemption — soft-deactivated (active: false). The historical orders keep their snapshot of the code label and discount, so receipts and invoices remain truthful even after the code is gone from the admin view.

What’s visible in the order detail

For any order with a code applied, the admin order page shows:

  • Subtotal — sum of original prices
  • Promo code NAME — the snapshotted code label, with the discount subtracted
  • Total — what was actually charged

The webhook payload for that order includes discount_amount, promo_code, and a per-item original_price alongside price, so external integrations can reconstruct the full picture.

API access

Full CRUD over promo codes is available via the API. Same data model, bearer-authenticated, account-scoped — ideal for syncing codes from an external CRM or generating a unique code per influencer partner.