The seating engine behind Eventhub

Design any venue.
Sell every seat.

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.

Transactional locking — no seat is ever sold twice, even under an on‑sale rush.
Grand Hall · live availability
Stage
Available Selected Held Booked
Seat A‑12 heldfrees in 4:58
VIP · 15,000 ֏ticket type applied

Built for the platforms selling tickets in emerging markets

EventhubMyTourPayLinkDinnoAmeriabank
How it works

From empty hall to sold out in three steps

Everything an organizer and a developer need — the same engine powers the admin console and your storefront.

1

Design the venue

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.

2

Embed the picker

Drop one <script> into your page. Buyers pick seats and ticket types on desktop or mobile, in Armenian, Russian or English — availability updates live.

3

Sell in real time

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.

Features

A complete seating stack, not just a map

Designer, renderer, booking core and webhooks — one coherent system your team and your partners can build on.

✏️

Visual venue designer

Rows, curved sections, tables, GA areas, background images and multi‑floor layouts — with copy/paste, alignment tools and full undo/redo.

🧩

Embeddable widget

A single self‑contained script renders the chart, manages the hold‑token session, and emits the buyer's selection to your checkout.

Real‑time availability

Server‑sent events push every status change to every open chart in ~250ms — batched so a stadium on‑sale won't melt the pipe.

🎟️

Server‑priced ticket types

Adult/Child/VIP levels priced and validated server‑side, frozen at booking. The client never sets a price — no tampering.

🔒

Never double‑books

Every hold and book runs inside a SELECT … FOR UPDATE transaction. Concurrency is physically impossible to oversell.

🪝

Signed webhooks

An append‑only status log drives at‑least‑once, HMAC‑signed webhooks with resume cursors — reconcile orders with confidence.

🌍

Multi‑language

Buyer‑facing UI and chart labels in Armenian, Russian and English out of the box, with locale‑aware pricing.

🧭

Best‑available & GA

Let the server pick the best adjacent seats, or sell general‑admission and book‑by‑table areas with capacity ledgers.

🛡️

Partner‑grade security

Workspace‑scoped keys, rate limiting, SSRF‑guarded webhooks and idempotent writes — ready for real money and real partners.

For developers

Two lines to render. One call to book.

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.

  • REST API with Idempotency‑Key replay for safe retries
  • seats.io‑compatible hold‑token session model
  • Structured error codes & OpenAPI docs at /docs
  • Self‑host it, or run it as your workspace tenant
Read the API reference →
checkout.html
<!-- 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' } }),
});
Built to scale

Engineered for the on‑sale rush

The hard problems in ticketing are concurrency and correctness. We solved those first.

0

double‑bookings — enforced by the database, not by hope

~250ms

batched real‑time updates across every open chart

3

languages built in — Armenian, Russian, English

100%

server‑authoritative pricing — immutable order snapshots

Ready to seat your next sell‑out?

Spin up a workspace, design your venue, and embed the picker in an afternoon. We'll help you go live.

Get started free Book a demo