Overview
Reserved seating lets fans pick exact seats on an interactive map at checkout. Each event has its own map (tours = one map per city stop).
Path: Event → Seating tab
Step 1 — Choose a starting layout
Use Load template before building:
| Template | Typical use |
|---|---|
| Blank canvas | Custom venue from scratch |
| Theatre | Orchestra / mezzanine / balcony blocks |
| Cabaret | Small table clusters |
| Banquet | Round tables (8 covers) |
| Stadium | Four stands around a pitch |
Templates place sections on a drag-and-drop canvas. Adjust names, row counts, and colours after loading.
Step 2 — Configure each section
For every section (zone):
| Field | Purpose |
|---|---|
| Name | Fan-facing label (e.g. "Stalls", "Circle A") |
| Section type | Reserved (numbered seats) or GA (general admission within zone) |
| Rows × seats per row | Inventory count for reserved sections |
| Price modifier | Adds to base ticket price for seats in this zone (e.g. +£20 front row) |
| Colour | Map display |
| View image URL | Optional "view from seat" photo |
| Accessible | Wheelchair / accessible section flag |
| Companion section | Link to companion seats zone (see accessibility guide) |
| Position (x/y) | Drag sections on canvas to match venue layout |
Click Save — map persists to ticketing_seating_maps and generates seat rows in the database.
Step 3 — Link ticket types to seating
Not every ticket type requires seat picking.
- Go to Ticket types
- For types that need assigned seats (e.g. "Reserved seated", "VIP seated"):
- Enable Requires seat selection
- Choose Seating section the ticket can pick from (or all sections if multiple types share the map)
- For GA tickets (standing, unassigned):
- Leave Requires seat selection off — fans buy quantity only, no map step
Fans must select exactly as many seats as their seated ticket quantity before checkout.
Step 4 — Public checkout flow
- Fan selects seated ticket types + quantity
- Interactive map loads — available seats green, sold/hold greyed
- Fan taps seats → temporary hold during checkout
- Stripe Checkout opens — if they abandon, holds release after timeout
- On payment, seats claim permanently; sold seats never reappear
Mixed baskets (2 × GA + 1 × seated) only require map picks for the seated tickets.
Step 5 — Admin holds (before/on sale)
Below the map builder, Holds panel lets staff block seats without selling:
| Hold type | Use |
|---|---|
| reserved | Production / artist holds |
| blocked | Obstructed view, broken seat |
| vip | Guest list |
| comp | Complimentary allocation |
| wheelchair | Accessible allocation |
| temp_hold | Short manual hold while on phone |
Enter section, row label, seat label → hold. Release holds when seats should return to public sale.
Availability dashboard
The holds panel shows per section:
- Total / available / held / sold counts
- Lists of held and sold seat keys
Use this on sale day to monitor sell-through by zone.
GA sections on the map
A section marked GA still appears on the map for visual layout but fans do not pick individual seats — capacity is managed by ticket type quantity caps instead.
Tours & seating
Build a separate map per tour stop — London's O2 layout ≠ Manchester Arena. Duplicate the event, rebuild or adjust seating, keep the same tour slug.
Box office & walk-ups
Volunteers selling at the door use the same map inventory — see Box office guide. Manual seat selection respects holds and sold state.
Troubleshooting
| Issue | Fix |
|---|---|
| Map not on public page | Save map; ensure at least one ticket type requires seat selection |
| "Select N more seats" | Seat count must match seated ticket qty exactly |
| Seats disappeared after checkout timeout | Normal — fan must re-select |
| Companion seat error at checkout | See Accessible & companion seating guide |
| Wrong price on seat | Check section price modifier + ticket type base price |