New: AI venue generation via MCP Learn more

Every seat, live.Sold exactly once.

The embeddable seat map and booking layer for ticketing products. Real-time availability, atomic holds, your checkout.

A stadium that sells itself.

Hover a section for live pricing. Tap to zoom in and pick real seats. This is the actual renderer, not a video.

Grand Arena, Sat 8:00 PMHover a sectionLive
101102103104105106107108109110111112113114115116201202203204205206207208209210211212213214215216
$95 $70 $55 $40
Tap a section to zoom in$0
Try the real thing

One night, told by the engine.

Scroll through on-sale night. Four moments, one machine, zero oversells.

20:00 — Doors open

Two fans. One pair of seats.

The listing drops and everyone wants Block 3, Row 8. Every purchase runs through one lock that takes requests strictly in order — the first buyer secures the pair, the second gets an instant, clean 'sold' in milliseconds. Never the same seat twice.

A complete seat layer, not a widget.

01

Atomic booking engine

One single-threaded lock per event serializes every hold. All-or-nothing baskets, TTL expiry, confirm with your order reference. Double-booking is impossible by construction.

02

Visual venue designer

Draw sections on a map, slice them into rows, number seats, set zone pricing. Import a CSV seat manifest, or start from an AI-generated layout and refine.

03

Renderer built for stadiums

One compact protobuf blob per venue, spatially indexed in the browser. Tens of thousands of seats with instant hover and click hit-testing, on any device.

04

Real-time availability

Every hold, confirm and release fans out over WebSocket to every open map. No polling, no stale seats, no refresh button.

05

REST API and embeddable SDK

Three JSON calls to a sold seat, a WebSocket for live state, and a renderer that drops into any page. Your backend stays in charge.

06

AI-native via MCP

A built-in MCP server lets Claude, Codex or Cursor generate a venue from a description or a spreadsheet and push it straight to the designer.

From blank canvas to on-sale night.

Scroll sideways through the whole workflow — design, price, publish, sell.

01

Draw the bowl

Sketch sections on a map or import a CAD/CSV export.

02

Slice the rows

One tap turns a section into numbered, straight rows.

03

Price by zone

Drag price tiers across the map; events inherit them.

04

Publish to the edge

One compact blob ships the whole venue worldwide.

05

Sell, live

Holds lock atomically and fan out to every open map.

Built for on-sale night.

0double-bookings, by construction. One lock serializes every hold
1binary blob per venue. The whole seat map, streamed from the edge
3API calls to a sold seat: hold, confirm, and live state
$0of your revenue touched. Payments stay in your checkout

From black-box theaters to 80,000-seat bowls.

/01

Stadiums and arenas

Two tiers, eighty thousand seats, sub-second hit-testing on a phone.

/02

Theaters and performing arts

Curved rows, boxes and balconies, drawn in the designer and priced by zone.

/03

Clubs and festivals

GA capacity zones and reserved seating side by side on one map.

/04

Ticketing platforms

White-label embed: your brand, your checkout, our seat layer underneath.

Three calls to a sold seat.

1

Hold

The buyer picks seats; you request an all-or-nothing hold. The engine grants it atomically and starts the TTL clock.

2

Confirm

Your checkout completes payment, then confirms the hold with your order reference. The sale is recorded durably, exactly once.

3

Everyone sees it

Seat state fans out over WebSocket to every open map. Abandoned holds expire on their own, with no reconciliation jobs.

booking-session.sh
# 1: hold seats (all-or-nothing, TTL-bound)
POST /api/events/evt_42/hold
  { "owner": "buyer_42", "seatIds": ["E7", "E8"] }
→ 200 { "holdId": "hold_9f2" }

# 2: confirm with your order reference
POST /api/events/evt_42/confirm
  { "holdId": "hold_9f2", "externalOrderRef": "order_981" }
→ 200 sale recorded, exactly once

# 3: live seat state, everywhere
GET /api/events/evt_42/ws
→ ws: E7 held, E8 held, E7 sold, E8 sold

Questions, answered.

Put a seat map in your product this week.

The demo theater is already loaded. Open it in two tabs, watch a seat lock live, then wire in your checkout with three API calls.

$claude mcp add --transport http seatmapos https://your-host/api/mcp