Eventhub Seats is the seating‑chart and booking engine for ticketing platforms — a visual venue designer, an embeddable seat‑picker, and a real‑time booking API that never double‑books.
Built for the platforms selling tickets in emerging markets
Everything an organizer and a developer need — the same engine powers the admin console and your storefront.
Draw rows, tables, GA zones and multi‑floor halls in the visual designer. Rotate, align, bulk‑edit, undo — publish immutable versions when you're ready.
Drop one <script> into your page. Buyers pick seats and ticket
types on desktop or mobile, in Armenian, Russian or English — availability updates
live.
Hold, best‑available and book through the REST API. The server prices every ticket type, freezes an immutable order, and fires signed webhooks to your backend.
Designer, renderer, booking core and webhooks — one coherent system your team and your partners can build on.
Rows, curved sections, tables, GA areas, background images and multi‑floor layouts — with copy/paste, alignment tools and full undo/redo.
A single self‑contained script renders the chart, manages the hold‑token session, and emits the buyer's selection to your checkout.
Server‑sent events push every status change to every open chart in ~250ms — batched so a stadium on‑sale won't melt the pipe.
Adult/Child/VIP levels priced and validated server‑side, frozen at booking. The client never sets a price — no tampering.
Every hold and book runs inside a SELECT … FOR UPDATE transaction.
Concurrency is physically impossible to oversell.
An append‑only status log drives at‑least‑once, HMAC‑signed webhooks with resume cursors — reconcile orders with confidence.
Buyer‑facing UI and chart labels in Armenian, Russian and English out of the box, with locale‑aware pricing.
Let the server pick the best adjacent seats, or sell general‑admission and book‑by‑table areas with capacity ledgers.
Workspace‑scoped keys, rate limiting, SSRF‑guarded webhooks and idempotent writes — ready for real money and real partners.
A public key renders and holds in the browser. Your server books with a secret key after payment — the seat can never be sold twice in between.
Idempotency‑Key replay for safe retries
/docs
<!-- 1. Render the seating chart --> <div id="chart"></div> <script src="https://seats.eventhub.am/embed/chart.js"></script> <script> new EventHubSeats.SeatingChart({ divId: 'chart', publicKey: 'pk_live_…', event: 'grand-hall-oct-12', session: 'continue', // holds survive reload onSelectionChange: (refs, detail) => renderCart(detail), }).render(); </script> // 2. Book server-side after payment (secret key) await fetch(`/events/grand-hall-oct-12/actions/book`, { method: 'POST', headers: { 'Authorization': `Bearer ${SECRET_KEY}` }, body: JSON.stringify({ objects: ['A-12'], holdToken, orderRef, levels: { 'A-12': 'lvl_vip' } }), });
The hard problems in ticketing are concurrency and correctness. We solved those first.
double‑bookings — enforced by the database, not by hope
batched real‑time updates across every open chart
languages built in — Armenian, Russian, English
server‑authoritative pricing — immutable order snapshots
Spin up a workspace, design your venue, and embed the picker in an afternoon. We'll help you go live.