Shared or independent capacity
Several ticket types can draw from the same real seat count, like adults and children sharing one pool, or keep their own separate pool for a reserved category.
Capacity & Inventory
No reading a number and then writing a number. Every capacity or stock code claim is a single conditional operation in the database, so two purchases for the same seat, at the exact same instant, can never both win.
Each one models a different kind of real-world constraint.
Several ticket types can draw from the same real seat count, like adults and children sharing one pool, or keep their own separate pool for a reserved category.
Reduce or expand capacity for a date, a date range or one specific time, without creating a new pool or touching the default that governs the rest of the calendar.
Guides, vehicles or equipment can back a capacity pool and be shared across products, modeling staffing constraints, not just physical space.
Codes bought in advance from an external supplier, imported by CSV in the background, with their own expiry and duplicate detection.
How it resolves
Five steps, every single time something reserves a piece of inventory.
Every date-and-time combination has its own counting row, created the first time anyone claims it, inheriting capacity from whatever exception is in force, or the pool default.
The claim adds held, booked and the requested quantity together, and only goes through if that total doesn't exceed capacity. No reading first, no gap between reading and writing.
If the condition fails, the write touches no row at all and the attempt is rejected immediately. There's no way for two claims to pass the same condition at the same time.
A pending payment holds the seat in its own counter. If payment confirms, it moves to booked; if it expires or gets cancelled, it releases, never touching what's already booked for real.
Claiming a stock code follows the same logic: the oldest still-available candidate gets picked, and the update only goes through if it is still available at that exact instant; if it loses the race, it tries the next one.
The API, as it is
The same calendar query returns remaining capacity per ticket type, not one shared number. Two types sharing a pool show the same figure; a reserved, independent one shows its own.
{
"date": "2026-08-14",
"slots": [
{
"start_time": "18:00",
"remaining_capacity": {
"adult": 12,
"child": 12,
"accessible": 4
}
}
]
}The detail almost nobody thinks to test
If a pool has no limit, claiming it never adds anything to "held": there's nothing to count. Confirming or releasing that same hold follows the exact same rule, even though it looks redundant, because if that pool is ever switched from unlimited to limited later, those counters need to genuinely start at zero, not carry subtractions from numbers that were never added in the first place.
Only one wins. The claim is a single conditional database operation: it adds the requested quantity and only applies if the total stays within capacity. The second purchase simply fails that condition and gets rejected, with no window where both could pass.
Yes, if configured that way. Several ticket types, even across different options or products, can point at the same capacity pool: selling one reduces what the others have left. A separate, fully independent pool can also be kept for a reserved category.
With a capacity exception: one date, a date range, or one specific time with its own capacity, without creating a new pool or touching the default that governs the rest of the calendar.
It gets held in its own counter, separate from what's already booked for real. If payment confirms, it moves to booked; if it expires or gets cancelled, it releases automatically, never touching sales that already closed.
Yes. Each code is claimed with the same atomic logic: the oldest available one gets picked, and the update only goes through if it is still available at that exact instant. If it loses the race against another claim, the system tries the next candidate, up to five times, before giving up.
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.