Ulsav Docs

Sell Passes

Sale windows, capacity, checkout holds, discounts, and the failure modes a buyer will actually meet

A Pass sells only while the Event, its window, and its capacity all still allow it.

What has to be true

  • The Event is published, and not archived, cancelled, completed, or suspended.
  • Sales are not paused, manually or by moderation.
  • The Pass still exists and is active. A Pass can be removed only while the Event is a draft.
  • The current time is inside the Pass's sale window.
  • Capacity exists at the Pass and at any Event or Session ceiling above it.

For a Pass's sale state, only three things are stored: the Pass's active flag and sale window, and the Event's manual pause flag. Whether a Pass reads as scheduled, open, ended, or cancelled is derived from those and the clock, which is why a Pass can look on sale in one view and refuse a purchase in another.

Window and capacity

A sale window is two timestamps, so early-bird phases are Passes with their own windows and prices. Set them before publishing: after publication the price, capacity, quantity limits, and window are all refused, and only a Reschedule can shift a window.

Capacity is optional per Pass, and Passes keep independent capacity by default. Event and EventSession capacity are optional ceilings above that, which is how a room is capped without capping a tier.

Capacity basis is not pricing basis. A Pass whose capacity basis is registrations counts entries; one counted in participants counts people. A five-person team on a registration-based Pass uses one unit of Pass capacity and five units of any Event or Session ceiling, whether priced per team or per member.

Order quantity limits are per Pass and capped at 50: a quantity outside the minimum and maximum is rejected at checkout, not trimmed.

Price and discounts

The offer price is what a buyer pays per chargeable unit, in the Organization's currency. The optional list price is the MRP shown struck through; the gap is an OrganizerDiscount, applied unconditionally and without a code.

A Coupon is the code-driven discount, and exactly one applies per Order. Create and edit codes under Registrations → Coupons. Two behaviours surprise organizers:

Public code

Discoverable, and applied automatically when it saves the buyer the most, with no entry at all.

Unlisted code

Applies only when typed, and a buyer-entered valid code is always honoured — even when a bigger public discount exists.

A buyer may remove an auto-applied coupon and choose another, including a smaller one. An invalid entered code errors with its reason; it never falls back to the best public code.

Codes may carry redemption caps, a discount budget, a first-purchase rule, and a scope limited to certain Passes or Events, enforced at confirmation under a lock. Discounts reduce the taxable base and the proportional fee leg; the fixed leg does not move.

What happens during checkout

Starting a paid checkout creates a pending Order and, in the same transaction, an InventoryHold — an atomic reservation across every applicable Pass, Event, and Session capacity.

15 minutesHold window

It starts when the payment intent is created. The window is fixed and there is no extension.

ImmediatelyA provider failure

The intent is cancelled and the hold is released.

After expiryA payment that still captures

It never becomes a sale: the capture is auto-refunded, and an unusable callback goes to reconciliation.

Before the buyer leaves for the payment page, they read a server-computed quote with the same breakdown confirmation will snapshot. The quote is advisory; confirmation re-prices under the Order lock and the snapshot is authoritative.

The quote a buyer reads

Pass list price × 1 unit

₹1,200.00

OrganizerDiscount

list price minus offer price

−₹200.00

Coupon, 10% of the offer price

−₹100.00

Taxable base

the base the fee and the tax both use

₹900.00

CGST 9%

+₹81.00

SGST 9%

+₹81.00

Platform fee

2% of the ₹1,062 base + ₹10 fixed

+₹31.24

GST on the platform fee, 18%

+₹5.62

Buyer pays

₹1,098.86

Amounts in minor units. The fee and tax components follow the Organization's platform fee and tax profile.

On a discovery card the price line reads Free, From ₹… — with the list price struck through when there is one — or Sales not open. A Pass that is not on sale on its Event page shows Sales have ended on the register button.

Failure modes

What the buyer meetsWhat it means
Sold outCapacity is exhausted at the Pass or a ceiling above it; released capacity returns the Pass to sale.
Sales not open, or closedThe window has not started or has ended, or the Event is paused, cancelled, completed, or suspended.
Hold expiredThe reservation elapsed before payment; the buyer starts a new checkout.
Payment failedThe Order stays pending until its window closes, then expires and releases its hold.
Coupon rejectedThe code is inactive, out of window, out of scope, or exhausted.

Failures return a stable code in an RFC 9457 problem document.

When a Pass sells out

Sold out is a fact about one Pass, not the Event: another Pass with spare capacity still sells. Capacity comes back when a Registration is cancelled, and the Pass returns to sale on its own.

There is no waitlist, no notification list, and no sale queue today. A buyer who finds nothing on sale can only check again; you can release capacity by cancelling a Registration, or add another Pass to the Event.

On this page