---
title: "Choose an SDK or API"
description: "Compare SeatLayer client SDKs, seven server SDKs, and REST/OpenAPI, then follow the shortest production path for your application stack."
---

Choose the surface that matches where your code runs and how much of the buyer
experience your product should own. Client SDKs select and hold inventory;
trusted server code inspects the hold and confirms booking.

<Aside type="note" title="Check exact release status before installing">
  Package versions and release channels change independently. Use the
  [machine-readable SDK catalog](/sdk-catalog.json) for the current package,
  registry, source, stability, and verification evidence, then follow the
  selected SDK guide for implementation.
</Aside>

## Choose by runtime

| Your code runs in | Start here | Best when |
|---|---|---|
| Browser or web framework | [Web SDKs](/buyer-sdk/web/) | JavaScript, TypeScript, React, Vue, or Angular owns the buyer page |
| Native mobile application | [Native app SDKs](/buyer-sdk/mobile/) | Flutter, React Native, Swift, or Kotlin owns the app screen |
| Trusted application server | [Server SDKs](/server-sdk/) | You want an idiomatic client for Node.js, Python, PHP, Java, Go, Ruby, or .NET |
| Any HTTPS-capable backend | [REST API and OpenAPI](/server-api/) | You want direct HTTP control or generated clients for another language |

## Choose the client control level

<CardGrid>
  <Card title="Use the complete buyer flow" icon="ph:browser">
    Start with [`SeatPicker`](/buyer-sdk/seat-picker/). SeatLayer supplies the
    selection experience and returns an opaque hold to your checkout.
  </Card>
  <Card title="Build a custom web cart" icon="ph:code">
    Use [`SeatingChart`](/buyer-sdk/seating-chart/) when your application owns
    the cart, controls holds explicitly, or needs a non-standard layout.
  </Card>
  <Card title="Build a native app experience" icon="ph:device-mobile">
    Compare the [native app SDKs](/buyer-sdk/mobile/) before choosing a drop-in
    picker, composable native widgets, or the lower-level map surface.
  </Card>
  <Card title="Model multiple performances" icon="ph:calendar-dots">
    Choose an [Event, Performance Group, or Season](/start/inventory-models/)
    before selecting the corresponding buyer and server APIs.
  </Card>
</CardGrid>

## Keep the trust boundary fixed

The browser or mobile app may select inventory, create a temporary hold, and
send its opaque `holdId` to your backend. Only trusted server code should hold a
secret key, inspect authoritative hold contents, calculate the charge, and book
with a stable `bookingRef`.

Continue with the [client SDK overview](/buyer-sdk/), the
[server SDK overview](/server-sdk/), or the [REST API overview](/server-api/).