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.

01 / 10

Design

Turn any room, bowl, or field into live inventory.

Draw the room. We’ll make it bookable.

Trace sections with pen and shape tools, import an existing manifest, or generate a venue with AI. Publishing bakes geometry, tiers, prices, and fan views into a bookable event.

SeatMapOSVenue designerriverton-arena · Draft
PITCH
01

Draw without CAD

Pen, shapes, curved rows, and a full transform frame — a venue designer that runs in the browser.

02

Import or generate

Drop a spreadsheet manifest, rebuild from listing data, or describe the venue and let AI draft the bowl.

03

Publish to an event

One publish turns the drawing into priced seats, per-seat 3D elevation, and section views.

ALSO IN THE DESIGNEREverything below ships with the Spring ’26 pilot.

Pen and shape tools trace any roomFreehand paths, rectangles, arcs, and polygons snap to the venue grid.

Curved rows regenerate at even spacingBend a row and its seats redistribute along the new arc automatically.

Spreadsheet manifests keep every seat labelHeaders are auto-detected; sections, rows, seats, and prices survive intact.

Listing data rebuilds a bowl automaticallySection, row, seat, and price labels are enough to reconstruct a layout.

AI generation drafts a venue from a sentenceDescribe “a 15k two-tier arena”, then refine the generated bowl by hand.

Tier rake bakes per-seat 3D elevationPublish computes an elevation for every seat — no plug-ins, no re-import.

360° views attach directly to sectionsDrop a panorama on a section; buyers preview it before picking a price.

Transform frame rotates and scales groupsMulti-select sections and move, rotate, or mirror them as one unit.

Undo and redo restore the full venueGeometry, pricing, and label changes all step back cleanly.

02 / 10

Booking

Every seat live. Every hold atomic.

Sold exactly once.

One lock engine per event holds, confirms, and releases seats as a single atomic operation. Holds are all-or-nothing, expire on their own, and can never oversell — even mid on-sale.

SeatMapOSBooking workspaceRiverton vs City · Live
BEST AVAILABLE

GET /best?count=3 → G7 · G8 · G9

Contiguous · Row G · no seat left stranded
PITCH
01

Five-minute holds

A hold reserves every requested seat or none of them, then releases itself when the countdown ends.

02

Best available

One call returns the best contiguous seats in a row — without stranding a lone seat between sold ones.

03

Live everywhere

Availability streams over WebSocket to every open map the moment a seat is held, sold, or released.

ALSO IN THE ENGINEEverything below ships with the Spring ’26 pilot.

One lock engine per eventA single Durable Object serialises every hold, confirm, and release.

Holds reserve every seat or nonePartial holds don't exist — a conflict names the exact seats that clashed.

Expired holds release automaticallyNo cron, no cleanup job — the lock engine forgets on time.

Confirmed seats can never be re-heldA paid seat leaves the pool until a refund reopens it.

Conflicts answer with a clean 409The response lists the conflicting seat ids, ready for your UI.

Stranded single seats are refused422 orphan_seat by default — pass allowOrphans only when you mean it.

Best available prefers the frontContiguous runs first, then lower price, then rows nearer the stage.

Blocked seats never reach a buyerOrganizer blocks trump holds, best available, and agents alike.

Refunds reopen inventory safelyThe exact seats return to sale the moment the refund lands.

03 / 10

Embed

A world-class seat experience that remains entirely yours.

Your brand. Your checkout. Our seat layer.

Give every event a hosted booking page, hand any surface a signed checkout link, or drive your own UI with the booking API. The fan relationship stays yours.

RIVERTON FCTickets   Fixtures   My account
HOME · SAT 19:30

Riverton
vs City

Choose the view that feels right.

Powered by SeatMapOS · live availability
PITCH
01

A page per event

Every published venue gets a fast hosted booking page — share one link anywhere you sell.

02

Signed claim links

A single-use, expiring link carries a live seat hold into any checkout surface — even a chat.

03

Or bring your UI

Availability, best available, hold, and confirm are plain HTTP — render seats however you like.

ALSO IN THE STOREFRONTEverything below ships with the Spring ’26 pilot.

A hosted booking page for every eventPublishing mints /book/<event> — share one link anywhere you sell.

Signed claim links carry live holdsA compact signed token binds each link to a real, expiring hold.

Claim links expire and refuse replaysExpired answers 410; a replay shows the original receipt, never a resale.

Plain HTTP hold, confirm, and releaseThree endpoints run the whole flow — no SDK required.

WebSocket availability for your own UISeat states stream per event; render them however you like.

Bearer tokens for server-side callsThe same signed token works as a cookie or an Authorization header.

Fees are computed server-side, alwaysClients display totals; they never invent them.

Section views travel with inventoryYour storefront can show the view from any section it sells.

Adoption can begin with one eventRun a single on-sale on SeatMapOS while the rest of your stack stays put.

04 / 10

Fan view

Give every fan the confidence to choose.

Stand in the seat before you pay.

Flat maps hide what a seat is worth. SeatMapOS lifts the map into a tiered 3D bowl and renders the view from the seat — sightline, elevation, and section context before checkout.

PER-SEAT ELEVATION · BAKED AT PUBLISH

The tiered bowl

Tiers3Rake24°Seat elevation14.2 m
PITCH
01

The 3D bowl

A toggle raises the flat map into the raked, tiered bowl — per-seat elevation is baked at publish.

02

View from the seat

A geometric sightline from the exact section, plus 360° photos where the venue provides them.

03

Fewer surprises

Fans who saw the view before paying file fewer complaints and request fewer refunds.

ALSO IN FAN VIEWEverything below ships with the Spring ’26 pilot.

The buyer map lifts into the 3D bowlOne toggle, same canvas — no plug-ins and no model files.

Per-seat elevation baked at publishTier rake becomes a z for every seat, stored with the map.

Geometric sightline from any sectionThe view is computed from real seat position and stage geometry.

360° panoramas where venues provide themDrop a photo sphere on a section; buyers can look around.

View media is versioned with the venueRepublishing keeps views in step with the geometry.

Tiers stack solid from the ground upNo floating decks — the bowl reads like the building it is.

Section context follows the ticketThe chosen view stays attached after purchase.

The same 3D data powers the phone appiOS renders the identical bowl from the identical payload.

Plain canvas rendering — no plug-insWorks in every modern browser with nothing to install.

05 / 10

AI

The first seat map your AI can actually book.

Sell seats inside the conversation.

SeatMapOS speaks MCP. ChatGPT searches your events, compares real seats, places a genuine five-minute hold, and hands the fan a signed checkout — working end to end today.

SeatMapOSChatGPT · SeatMapOSMCP · live commerce tools

Two seats together for Riverton vs City this Saturday, under $150 total.

search_events · 1 matchget_seat_options · Row G runhold_seats · G7 G8 · 05:00
RIVERTON VS CITY · SAT 19:30 · NORTH STANDRow G · Seats 7–8$128.00 + $12.03 fees · together, aisle sideHeld · 04:58Complete checkout ↗

I’m holding G7 and G8 for five minutes. The checkout link is signed and single-use — if it expires, the seats release automatically.

01

Real tools, real holds

search_events, get_seat_options, hold_seats — the agent uses the same atomic engine as your site.

02

Seat cards in chat

An Apps SDK widget renders events, seat options, and the live hold countdown inside the thread.

03

Signed checkout handoff

The hold travels through a single-use claim link and completes on a secure checkout page.

ALSO IN THE AI SURFACEEverything below ships with the Spring ’26 pilot.

ChatGPT books through real MCP toolsFive commerce tools, verified working end to end.

search_events reads live inventoryResults come from the live database, not a cached feed.

hold_seats places a real five-minute holdThe agent competes fairly with every other buyer.

Seat cards render inside the conversationAn Apps SDK widget shows events, seats, and the countdown.

Claim links finish checkout on your pageThe hold travels by signed token to /claim/<token>.

Expired claims answer 410, replays get receiptsSafe to retry, impossible to double-sell.

release_hold frees seats mid-conversationChanged your mind? The seats go straight back on sale.

AI venue generation drafts a full bowlgenerate_venue turns a sentence into editable geometry.

Spreadsheet import runs from a chat promptimport_spreadsheet maps a manifest without leaving the thread.

06 / 10

Finance

Every dollar accounted for, event by event.

From face value to payout.

A finance dashboard that itemises gross, fees, refunds, and net per event — with standard or instant payouts and reports ready for your accountant.

SeatMapOSFinanceAll events · This season
GROSS FACE VALUE$184,620PAID OUT$146,064BUYER FEES$14,890REFUNDS$2,140
NET REVENUE BY EVENT
INSTANT PAYOUT3%min $2.99 · capped at $40
ORGANIZER KEEPS100%of face value, every order
REFUNDS
Seats reopen the moment a refund lands
01

Itemised by order

Face value, service fee, processing, promos, and refunds stay separate from checkout to report.

02

Payouts at your pace

Standard payout after the event, or instant payout for 3% — never less than $2.99 or more than $40.

03

Refund-safe inventory

A refund reopens the exact seats atomically, ready to resell — no spreadsheet surgery.

SeatMapOSInventory workspaceAll venues · Live
Inventory by section
North Stand1,264 seats74% soldHealthy
East Lower842 seats91% soldSelling fast
Club Level418 seats66% soldHealthy
West Upper1,126 seats58% soldReview
Floor2,140 seats83% soldHealthy
SeatMapOSOrders & refundsRiverton vs City · Live
TO REVIEW
Refund request · Row D2 min ago
Promo check · SPRING203 min ago
Reused claim link4 min ago
IN PROGRESS
Refund · order #18422 min ago
Instant payout · $2,4003 min ago
Seat block · Section 1044 min ago
RESOLVED
Seats reopened · D4–D5Completed
Payout sent · $12,480Completed
Claim expired · releasedCompleted
ALSO IN FINANCEEverything below ships with the Spring ’26 pilot.

Gross, fees, refunds, and net per eventOne dashboard reads the season the way your accountant does.

Money is integer cents end to endNo floats anywhere — every total reproduces to the cent.

Service fee: 3.7% plus $1.79 a ticketRounded half-up per charge and itemised on every receipt.

Processing shown separately at 2.9%Buyers see exactly where every dollar goes.

Free orders carry zero feesNo service fee, no flat fee, no processing on a $0 order.

Promos apply before fees, never afterA discount shrinks the fee base — it can never inflate it.

Instant payout: 3%, from $2.99 to $40Optional speed; the standard payout stays free.

Refunds itemised against their ordersEvery refund lands in the report next to the order it reverses.

Reports export event by eventHand your accountant a file, not a login.

07 / 10

Mobile

The whole booking engine, in a native app.

From lock screen to Row G.

A native SwiftUI fan app with zero third-party dependencies: browse events, pick from live availability, hold with a real countdown, and keep every ticket in a wallet.

01 · CHOOSE

The whole room, in their hand.

Live sections, prices, and availability come straight from the same booking engine as the web map — not a cached copy.

9:41
Aurora · Opening NightSat 14 Sep · 21:00 · The Warehouse
2D map3D view
Mezzanine B12 left$75
Floor · GAsold fast$45
VIP Booth4 left$220
2 seats · Mezzanine BSee the view
01

Same engine, same truth

Holds, best available, and fee math match the web checkout to the cent — one production API.

02

Sign in with Google

PKCE sign-in with rotating refresh tokens. No passwords, nothing kept outside the keychain.

03

A wallet that remembers

Event, section, row, and seat stay one tap away from purchase through event day.

ALSO IN THE APPEverything below ships with the Spring ’26 pilot.

Native SwiftUI with zero dependenciesNo pods, no packages — the whole app is first-party code.

Sign in with Google over PKCESystem auth session and CryptoKit — no embedded webview.

Refresh tokens rotate; reuse revokesA stolen refresh token dies the first time it is replayed.

Best available built into the pickerOne tap asks the engine for the best contiguous run.

Hold countdown mirrors the live engineThe timer on screen is the hold's real expiry.

Fees match the web to the centThe app mirrors the same fee math — same rounding, same receipt.

The ticket wallet keeps full seat contextEvent, section, row, and seat — available offline after purchase.

Deep links open straight to an eventseatmapbooking:// routes land on the exact seat map.

One production API — no shadow stackThe app talks to the same Workers the web does.

08 / 10

Checkout

A clean path from selected seat to confirmed order.

No detour between desire and purchase.

Keep the seat context visible, itemise every fee, and complete payment before the five-minute hold expires. Totals are computed server-side, so the receipt always matches.

01 · YOUR SEATS

Row G
07–09

PITCH
SECURE CHECKOUT · HOLD 04:58

Three seats.
Still together.

3 × Row G$180.00
Service fee$12.03
Processing$5.22
Total$197.25
Continue to checkout
03 · CONFIRMED

You’re in.

Riverton vs City
Saturday · 19:30

View your seats
01

Transparent totals

Face value, service fee, and processing stay itemised from selection to receipt.

02

Promo-aware

Percent or amount codes apply before fees — a discount never inflates the fee line.

03

Free means free

RSVPs and comps carry no service fee and no processing fee. Zero means zero.

ALSO IN CHECKOUTEverything below ships with the Spring ’26 pilot.

Face value and fees stay itemisedThree lines, no bundles: face value, service, processing.

The seat selection remains visibleFans never lose sight of what they are buying.

The hold countdown runs to the secondCheckout shows the same expiry the engine enforces.

Expired sessions cannot oversellA dead hold means a clean error — never a stolen seat.

Promo codes apply before feesPercent or amount, the discount lands before the fee math.

Free tickets skip every feeRSVPs and comps carry no service or processing fee at all.

Claim receipts survive link replaysReopening a paid claim shows the receipt, not an error.

Refunds reopen the exact seatsInventory heals itself the moment a refund lands.

Totals are computed server-sideThe client renders; the Worker decides.

09 / 10

Pricing

Keep your revenue. And your checkout.

A model clubs and fans can understand.

No platform or setup fee for the founding pilot. Buyers pay one itemised service fee — 3.7% plus $1.79 per ticket — and 2.9% processing. Organizers keep the full face value.

CLEAR ECONOMICS · ONE LIVE VIEW
FOUNDING CLUB · PILOT

$0

Platform fee and setup for your whole pilot season.

  • Unlimited events and seats
  • Designer, bowl, and fan views
  • Direct access to the builders
  • A real say in the roadmap
Request demo access
BUYER SERVICE FEE

3.7% + $1.79

Per ticket, plus 2.9% payment processing — itemised at checkout.

  • Organizers keep face value
  • Free tickets stay free
  • Promos apply before fees
  • No hidden organizer percentage
ORGANIZER100%of face value stays yours
FREE TICKETS$0fees on comps and RSVPs
01

$0 founding pilot

No setup fee and no platform fee for your whole pilot season.

02

3.7% + $1.79 a ticket

The entire buyer service fee, shown next to 2.9% processing at checkout. Nothing hidden.

03

Free stays free

Free tickets carry no SeatMapOS fee and no processing fee at all.

THE FINE PRINT, IN THE OPENEverything below ships with the Spring ’26 pilot.

Founding pilot pays no platform feeNo setup fee either — the whole pilot season is on us.

Organizers keep the full face valueSeatMapOS takes no percentage of your ticket price.

3.7% + $1.79 service fee, itemisedThe entire buyer fee, shown line by line at checkout.

2.9% processing, shown separatelyPayment costs are never hidden inside the service fee.

Comps and RSVPs remain fee-freeFree tickets carry no SeatMapOS fee and no processing fee.

Promos never inflate the fee lineFees are computed on the discounted subtotal.

Instant payout optional at 3%From $2.99 up to a $40 cap — standard payout stays free.

No hidden organizer percentageThe buyer fee is the entire SeatMapOS revenue model.

Every total is reproducible mathThe fee function is pure — same inputs, same receipt, every time.

10 / 10

Developer

A serious seat layer for the stack you already have.

Ship the experience. Keep the architecture.

Plain HTTP and WebSocket against a zero-dependency engine on Cloudflare Workers: availability, best available, hold, confirm, release, and finance — with honest error contracts.

hold-seats.ts
// All-or-nothing: every seat is reserved, or none are.
const hold = await fetch("/api/events/evt_main-hall/hold", {
  method: "POST",
  body: JSON.stringify({
    owner: "web:fan_81",
    seatIds: ["G7", "G8", "G9"],
    ttlMs: 300_000,
  }),
}); // 200 { holdId } · 409 { conflicts } · 422 { orphan seat }

const live = new WebSocket("/api/events/evt_main-hall/ws");
WebSocket connected · live seat states
01

Atomic by construction

One lock engine per event serialises every hold and confirm. Conflicts return 409 — never a double sell.

02

Honest failure modes

409 seat conflicts, 422 orphan-seat protection, 410 expired claims — errors you can build UI on.

03

Agent-ready

The same engine is exposed as MCP tools, so AI surfaces book exactly like your own storefront.

ALSO IN THE PLATFORMEverything below ships with the Spring ’26 pilot.

Zero third-party runtime dependenciesThe production Worker ships no npm runtime deps at all.

Workers, D1, R2, and Durable ObjectsEdge compute, SQL, object storage, and one lock per event.

One Durable Object lock per eventEvery hold and confirm for an event runs through one serialised door.

Plain HTTP hold, confirm, releaseThe whole booking flow is three endpoints and a JSON body.

WebSocket seat-state stream per eventSubscribe once; every hold, sale, and release arrives live.

409 conflicts and 422 orphan seatsFailure modes are named, typed, and safe to build UI on.

Signed compact tokens, one crypto pathSessions, bearer auth, and claim links share one HMAC core.

MCP server with commerce toolsAgents search, hold, and hand off checkout like any client.

Mobile PKCE with rotating refreshThe iOS app signs in without ever seeing a password.

Hold retries stay idempotent by holdIdRetrying a hold with the same id can never double-book.

Venue import and export endpointsGeometry moves in and out as plain JSON.

Typed end to end in TypeScriptOne repo, one type system, no codegen step.

DEMO ACCESS · 2026

See it with your own venue.

Request access to the SeatMapOS demo environment. For clubs, venues, promoters, and ticketing teams who want a fan-first seat experience without giving up their brand or checkout.

Request demo access