Workspace isolation
Charts and events are workspace-scoped; API keys, webhook endpoints, team membership, and billing remain organization-wide.
One workspace per organizer. Their charts and events live inside your product; your checkout, payments, tickets and customer records do not move.
POST /v1/workspaces { name, externalRef: "org_123" }
POST /v1/charts/{masterId}/duplicate → publish → POST /v1/events
One isolated workspace per organizer; their charts and events inherit it. Your ids travel as externalRef.
new SeatPicker({ event: eventKey, publicKey,
onCheckout: (_, __, handoff) => sendToServer(handoff.holdId) })
For public sale, the SDK receives chart and inventory directly from SeatLayer, then hands one temporary hold to your application. Your backend is not in the chart-load path.
hold = GET /v1/events/{eventKey}/holds/{holdId}
charge(hold.items)
POST /v1/events/{eventKey}/book { holdId, bookingRef }
Your backend rechecks the hold, takes payment, and confirms the sale. Account secrets never reach the buyer browser; one webhook endpoint hears every organizer.
Your model maps onto SeatLayer's in one table. workspaceId is the enforced isolation boundary; externalRef carries your ids back to you.
| Your product | SeatLayer |
|---|---|
| Venue / layout | Reusable chart |
| Performance, departure or timed session | Event with independent inventory |
| Tenant, organizer or customer account | Workspace |
| Cart reservation | Hold |
| Inventory committed for a paid order | Inventory booking |
| Your stable resource id | externalRef |
Charts and events are workspace-scoped; API keys, webhook endpoints, team membership, and billing remain organization-wide.
Short-lived, origin-bound sessions open the Designer in your CMS (dse_) or the live seat board in your admin (mse_) — never an account secret.
Buyer holds, bookings, blocks, releases, box office, and audience allocations operate on the same live seat state.
Verify the HMAC signature, route by the stored event id, check the workspace matches your record, and process each occurrenceId once across retries.
Switching vendors? Import a chart that is already public and keep the organizer selling. Building counter sales too? Review the reserved-seating Box Office workflow.
This integration path adds reserved seating without moving your buyers, money, orders, or support workflow into a second ticketing system.
Platform/SDK billing is one organization-wide credit pool: 100 free SDK seat credits every month, then prepaid credits from 10¢ down to 5¢ per confirmed sold seat, never expiring, no subscription — sold-seat pricing. White-label add-ons are priced separately. Review the security guide before moving from test to live mode.
The same platform can add chart-derived 3D, compose native buyer controls around the shared map through the mobile SDKs, and opt a compatible browser into buyer WebMCP for event lookup, seat finding and visible selection. Buyer tools do not expose checkout or payment; your trusted server still inspects the hold and confirms booking.
Six calls, two of them in the browser. Steps 04–06 are the same buyer flow the seat map SDK integration guide walks through in code.
Scope the organizer's charts and events to a workspace. API keys, webhook endpoints, team membership, and billing remain organization-wide.
Open the Designer with a short-lived session restricted to the workspace, chart, parent origin, and allowed actions.
Publish a chart version and create the reserved-seating event in test or live mode.
SeatPicker uses { event, publicKey } to bootstrap public sale directly, creates a temporary hold and follows live seat changes. Private audiences replace publicKey with a backend-backed token provider.
Read current hold status, mode, expiry, and line items before payment. Confirm with a stable bookingRef.
One endpoint for every organizer: verify each webhook signature, route by workspace, and process its stable occurrence identifier once across retries.
Try the released buyer flow, then bring us your tenancy, checkout, or migration questions when an architecture conversation is useful.