---
title: "Understand the SeatLayer product model"
description: "Relate Events, Performance Groups, Seasons, sales channels, buyer access, SDKs, holds, bookings, and host-owned commerce before implementing."
---

> Documentation Index
> Fetch the complete documentation index at: https://docs.seatlayer.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Understand the SeatLayer product model

SeatLayer has one inventory core and several ways to compose it. The concepts
below answer different questions and can be combined, but they do not replace
one another.

> **The shortest correct mental model**
>
> Choose **who owns commerce**, then choose the **inventory transaction**, add
> any **audience access**, and finally choose the **SDK or API surface**. A
> browser or mobile SDK creates a temporary hold; a trusted server commits the
> inventory booking.

## Read the model in this order

| Decision | Question it answers | Canonical guide |
|---|---|---|
| Product boundary | Does your product or SeatLayer own checkout, payment, orders, and tickets? | [Choose an integration](/start/choose-an-integration/) |
| Inventory model | Is the buyer purchasing one Event, one multi-performance run, or one renewable Plan? | [Choose an inventory model](/start/inventory-models/) |
| Sales and access | Is inventory public, private, allocated to a partner, or shared with several eligible audiences? | [Sales channels and allocations](/platform/sales-channels/) |
| Integration surface | Does the experience run on web, Flutter, React Native, iOS, Android, or only on a trusted backend? | [Choose an SDK or API](/sdks/) |
| Price presentation | Does an Event use its normal prices, ticket types, a temporary offer, or an audience-specific channel price? | [Ticket pricing and offers](/platform/ticket-pricing-and-offers/) |

These decisions are independent. For example, a Platform integration can use
a Performance Group, sell part of each member Event through private channels,
render the buyer journey on the web, and still keep payment and ticket
fulfilment in the host product.

The product boundary itself is immutable for an Event. A buyer surface does not
change who owns commerce; reuse the Chart and create a new Event if the
integration must move between Platform/SDK and Managed Ticketing.

## Core entities and relationships

| Entity | Owns | Relates to |
|---|---|---|
| **Chart** | Reusable venue geometry, labels, sections, categories, and accessibility metadata | A published Chart snapshot creates one or more Events |
| **Event** | Realtime availability for one occurrence | The base inventory unit; may participate in a Performance Group or a Season Plan |
| **Performance Group** | One coordinated purchase across a fixed 2–8 Event run | Creates one atomic group hold and booking; it creates no durable renewal right |
| **Season** | A renewable programme and its lifecycle | Contains an immutable 2–20 Event Plan, Contracts, Seat Rights, and renewal offers |
| **Sales Channel** | The audience assignment for inventory on one Event | Public sale or exactly one private channel per seat; it does not create another Event or stock count |
| **Buyer access session** | Short-lived browser authority for an exact audience and origin | May expose Public sale and/or named channels; it can hold but never book |
| **Hold** | Temporary inventory protection during selection or checkout | Created by a buyer surface or trusted server and expires unless booked |
| **Booking** | Permanent inventory commitment | Created from a trusted server; linked to the host order by `bookingRef` |
| **Offer or channel price** | A rule for resolving the price shown and frozen on a hold | Changes price only; it does not grant access or reserve inventory |

### The inventory hierarchy

```text
Chart (reusable venue design)
└── Event (one realtime occurrence)
    ├── may be a member of one Performance Group purchase
    ├── may be included in a fixed Season Plan
    └── owns Public sale and private Sales Channel assignments
```

A Chart is not inventory. An Event is. Reusing one Chart for several dates does
not automatically make those dates a Performance Group or Season.

### The access hierarchy

```text
Event inventory
├── Public sale
└── Private Sales Channel
    ├── hosted buyer link
    ├── buyer access session for your website or app
    ├── staff selling flow
    └── Partner access for an external organisation
```

A channel answers **who may select this inventory**. Blocking answers whether
the inventory is on sale. An offer answers which price applies. Those are three
separate controls.

### The Platform transaction boundary

```text
Buyer SDK → temporary hold → your trusted checkout → SeatLayer booking
                                      └────────────→ your order, payment, tickets
```

The hold handoff is an inventory reference, not proof of payment and not a
ticket. Your backend inspects authoritative allocations, applies your commerce
rules, then books with a retry-safe reference. Read the
[single-Event Platform flow](/start/how-it-works/) for the complete sequence.

## Follow one canonical feature family

Each feature family has one overview and separate pages for different jobs.
Use the overview to understand the concept; use the integration guide to build
the workflow; use the buyer page for UI behavior; use the API page for exact
operations and schemas.

| Feature family | Understand and decide | Build end to end | Buyer surface | Trusted API |
|---|---|---|---|---|
| Single Event | [Platform flow](/start/how-it-works/) | [Quickstart](/start/quickstart/) | [SeatPicker](/buyer-sdk/seat-picker/) | [Events](/server-api/events/), [holds](/server-api/holds/), and [booking](/server-api/booking/) |
| Performance Group | [Inventory model comparison](/start/inventory-models/#choose-a-performance-group) | [Performance Group integration](/integrations/performance-groups/) | [Performance Group picker](/buyer-sdk/performance-groups/) | [Performance Groups API](/server-api/performance-groups/) |
| Fixed Renewable Season | [Inventory model comparison](/start/inventory-models/#choose-a-fixed-renewable-season) | [Season integration](/integrations/seasons/) | [Season picker](/buyer-sdk/seasons/) | [Seasons API](/server-api/seasons/) |
| Sales channels and partner access | [Sales channels and allocations](/platform/sales-channels/) | [Organizer private-sales guide](/integrations/private-and-partner-sales/) | [Partner selling guide](/integrations/partner-selling/) | [Buyer access sessions](/server-api/buyer-access-sessions/) and [Channels API](/server-api/channels/) |

## Do not infer these relationships

- A Performance Group is not a Season. It has no Contract, Seat Right, or
  renewal lifecycle.
- A Season is not a set of independent Event holds. Its same-seat transaction
  and Plan lifecycle are coordinated as one product.
- A Sales Channel is not a second event, cloned inventory, a login, or a block.
- Partner access is an operating context for an allocated channel. It does not
  grant the organizer's secret key or direct booking authority.
- A scheduled offer changes price. It does not make inventory private or reserve
  it for an audience.
- A client SDK does not own payment, orders, tickets, refunds, or fulfilment in
  a Platform integration.
- A server SDK is a typed way to call the same trusted contracts. It is not a
  buyer-facing widget.

## Recommended reading paths

### Building a ticketing platform

1. [Choose the Platform boundary](/start/choose-an-integration/).
2. [Choose Event, Performance Group, or Season inventory](/start/inventory-models/).
3. [Choose a client SDK](/buyer-sdk/) and [server SDK](/server-sdk/).
4. Add [Sales Channels](/platform/sales-channels/) only when audience allocation
   is required.
5. Rehearse the complete hold, payment, booking, webhook, and recovery path in
   test mode.

### Running Managed Ticketing as a direct organizer

1. Request Managed Ticketing access and wait for staff approval.
2. Confirm Hosted Checkout (`hosted_checkout`) is enabled for the organization.
3. Create a Managed Event and connect the organizer's eligible payment account.
4. Choose a Hosted Event Page, managed embed, or Organizer Website without
   changing the Event's commerce boundary.
5. Complete the managed readiness checks before opening sales.

### Integrating a private or partner sale

1. Read the [Sales Channels model](/platform/sales-channels/).
2. Follow the [organizer integration](/integrations/private-and-partner-sales/)
   or the [partner operating guide](/integrations/partner-selling/), according
   to your role.
3. Use the [Buyer Access Sessions API](/server-api/buyer-access-sessions/) for
   an authenticated app flow and the [Channels API](/server-api/channels/) for
   exact allocation operations.

### Building a renewable season product

1. Confirm that a [Season is the correct inventory model](/start/inventory-models/).
2. Follow the [end-to-end Season integration](/integrations/seasons/).
3. Implement the [Season picker](/buyer-sdk/seasons/) and trusted
   [Seasons API](/server-api/seasons/) as two halves of the same transaction.

Source: https://docs.seatlayer.io/start/product-model/index.mdx
