A code and a QR, not a count
Each ticket carries a short printable code and its own QR, generated straight from that code, ready to validate on its own regardless of how many others were in the same order.
Orders & Tickets
Buy three seats, get three individually redeemable tickets, each one frozen at the price and policy that applied the moment they were bought. A catalog change next week never reaches back to rewrite a sale that already happened.
Each one covers a different part of turning a paid order into something a customer can actually use.
Each ticket carries a short printable code and its own QR, generated straight from that code, ready to validate on its own regardless of how many others were in the same order.
Product, option, ticket type, price and cancellation policy get copied onto the order the moment it's paid. A price change next week never rewrites what someone already paid for.
A ticket needing a third-party voucher carries its own fulfillment status, independent of whether it's valid for entry, so gate staff always knows whether a code still needs attaching.
Every status change, issued, void, redeemed, writes an event recording who changed it and from what source: an agent, the system, or a payment webhook.
How it resolves
Five steps, from the moment payment confirms to the moment a customer holds a code.
Right after payment confirms, the organization's counter row locks briefly, increments, and that number gets assigned. Two orders paid at the exact same second still get two distinct, sequential numbers.
Buying three units of the same ticket type creates three separate ticket rows, each with its own position within the order, never one row carrying a quantity field.
A ten-character code, drawn from an alphabet that excludes visually ambiguous characters like 0 and O, gets generated and checked unique within the organization before being assigned.
The QR encodes exactly the ticket code and nothing else, embedded directly into the confirmation email rather than sent as a separate attachment.
Confirmation only queues once the paid transaction genuinely commits, so a customer never receives a ticket for an order that, moments later, actually failed.
The API, as it is
Position within the order, product, ticket type, date, buyer name and fulfillment status, resolved from the code alone. Price and cost never appear here, on purpose.
{
"ticket_code": "7K3P9QXFH2",
"status": "issued",
"position": 2,
"quantity": 3,
"product_name": "City Food Tour",
"pricing_category_name": "Adult",
"date": "2026-08-14",
"fulfillment_status": "not_required"
}The detail almost nobody explains
A ticket still waiting on an external voucher can still be redeemed. Gate staff sees a clear "verify manually" warning instead of a hard block, because an operator can't always control when a third-party code arrives, and refusing entry over a paperwork gap would be the wrong failure mode.
Four. Every unit sold becomes its own ticket, with its own code, its own QR and its own position within the order, so any single one can be validated independently of the rest.
Nothing. The price, the product name, the ticket type and the cancellation policy all get frozen onto the order the moment it gets paid. A later catalog change is invisible to a sale that already closed.
The organization's own counter row gets locked for the brief moment it's read and incremented, so two orders confirming at the exact same instant still receive two distinct, sequential numbers, never a collision.
It carries its own fulfillment status, separate from whether it's valid for entry. Gate staff sees a clear warning to verify it manually until an agent attaches the real code or PDF, but the ticket is never blocked from redemption while that's pending.
No. It only queues after the database transaction that marks the order paid actually commits, closing the gap where an email could go out for a purchase that, a moment later, turns out to have failed.
Tiqory keeps availability, pricing, payments and access working together as your operation grows. Tell us where you are headed; we’ll show you how to get there without starting over.