---
title: "Install a server SDK"
description: "Install a pinned SeatLayer 0.8.0 server SDK, keep the secret key on your backend, and choose the exact language guide for your stack."
---

SeatLayer publishes official server SDKs for seven languages. Every package on
this page is pinned to the released `0.8.0` contract so an install command, a
method example, and the linked source all describe the same artifact.

<Aside type="danger" title="Server-side only">
  These packages authenticate with an `sk_test_…` or `sk_live_…` secret key.
  Never bundle one into browser code, a mobile application, or anything a
  ticket buyer can inspect. Buyer surfaces receive short-lived, scoped tokens
  minted by your trusted backend.
</Aside>

## Choose and install

| Runtime | Pinned install | Language guide |
|---|---|---|
| Node.js | `npm install @seatlayer/server@0.8.0` | [Node.js](/server-sdk/node/) |
| Python | `pip install seatlayer==0.8.0` | [Python](/server-sdk/python/) |
| PHP | `composer require seatlayer/seatlayer-php:0.8.0` | [PHP](/server-sdk/php/) |
| Java | `io.seatlayer:seatlayer-java:0.8.0` | [Java](/server-sdk/java/) |
| Go | `go get github.com/seatlayer/seatlayer-go@v0.8.0` | [Go](/server-sdk/go/) |
| Ruby | `gem install seatlayer -v 0.8.0` | [Ruby](/server-sdk/ruby/) |
| .NET | `dotnet add package SeatLayer --version 0.8.0` | [.NET](/server-sdk/dotnet/) |

The [server SDK overview](/server-sdk/) explains which work belongs in these
trusted packages. Each language guide includes its runtime requirement, exact
namespace spelling, error types, retry behavior, source, registry, and a
minimal inspect-and-book flow.

## Set the secret key

Store the key in your server's secret manager and expose it to the application
as an environment variable. The placeholder below is deliberately not a usable
credential:

```bash
export SEATLAYER_SECRET_KEY=sk_test_replace_with_your_key
```

Use a test key while integrating. A test key can act only on test resources; a
live key can act only on live resources. Crossing those modes returns `403
mode_mismatch`. A publishable `pk_…` key is not accepted by a server client.

## Create a client

<Tabs>
<TabItem label="Node.js">

```ts
import { SeatLayer } from '@seatlayer/server';

const seatlayer = new SeatLayer(process.env.SEATLAYER_SECRET_KEY!);
```

</TabItem>
<TabItem label="Python">

```python
import os
from seatlayer import SeatLayer

seatlayer = SeatLayer(os.environ["SEATLAYER_SECRET_KEY"])
```

</TabItem>
<TabItem label="PHP">

```php
use SeatLayer\SeatLayer;

$seatlayer = new SeatLayer(getenv('SEATLAYER_SECRET_KEY'));
```

</TabItem>
<TabItem label="Java">

```java
import io.seatlayer.SeatLayer;

SeatLayer seatlayer = new SeatLayer(System.getenv("SEATLAYER_SECRET_KEY"));
```

</TabItem>
<TabItem label="Go">

```go
client, err := seatlayer.New(os.Getenv("SEATLAYER_SECRET_KEY"))
if err != nil {
    return err
}
```

</TabItem>
<TabItem label="Ruby">

```ruby
require "seatlayer"

client = SeatLayer::Client.new(ENV.fetch("SEATLAYER_SECRET_KEY"))
```

</TabItem>
<TabItem label=".NET">

```csharp
using SeatLayer;

var client = new SeatLayerClient(
    Environment.GetEnvironmentVariable("SEATLAYER_SECRET_KEY")!
);
```

</TabItem>
</Tabs>

## Resource namespace map

The capability is shared; the spelling follows each language. These are the
exact top-level resources in `0.8.0`:

| Language | Exact client resources |
|---|---|
| Node.js | `charts`, `channels`, `events`, `inventory`, `performanceGroups`, `sessions`, `seasons`, `templates`, `webhooks`, `workspaces` |
| Python | `charts`, `channels`, `events`, `inventory`, `performance_groups`, `sessions`, `seasons`, `templates`, `webhooks`, `workspaces` |
| PHP | `charts`, `channels`, `events`, `inventory`, `performanceGroups`, `sessions`, `seasons`, `templates`, `webhooks`, `workspaces` |
| Java | `charts()`, `channels()`, `events()`, `inventory()`, `performanceGroups()`, `sessions()`, `seasons()`, `templates()`, `webhooks()`, `workspaces()` |
| Go | `Charts`, `Channels`, `Events`, `Inventory`, `PerformanceGroups`, `Sessions`, `Seasons`, `Templates`, `Webhooks`, `Workspaces` |
| Ruby | `charts`, `channels`, `events`, `inventory`, `performance_groups`, `sessions`, `seasons`, `templates`, `webhooks`, `workspaces` |
| .NET | `Charts`, `Channels`, `Events`, `Inventory`, `PerformanceGroups`, `Sessions`, `Seasons`, `Templates`, `Webhooks`, `Workspaces` |

<Aside type="note" title="The multi-event resources are released in every server SDK">
  All seven `0.8.0` packages expose the same frozen 13-operation Performance
  Group contract and the same frozen 48-operation Season contract. This server
  parity does not imply a native mobile `SeasonPicker`; React Native, Flutter,
  iOS, and Android do not currently expose Season v1 buyer support.
</Aside>

## Verify the setup

Before handling a real checkout:

1. Start with `sk_test_…` and confirm the client reports `test` mode.
2. Choose your language guide above and run its inspect-and-book example
   against a test Event and a hold created by a buyer surface.
3. Store your own stable commercial order ID as `bookingRef`.
4. Add [typed error handling and operation-safe retries](/server-sdk/reliability/).
5. Verify signed events with the [webhook SDK helpers](/server-sdk/webhooks/).
6. Complete the [going-live checklist](/start/going-live/) before changing to a
   live key.

Do not calculate a charge from browser-submitted labels, quantities, or totals.
For an Event checkout, retrieve the hold on your server and use its retained
items as the inventory authority. Fixed Renewable Season holds intentionally
contain inventory identity rather than a package price; your trusted commerce
system owns that price.

## Continue

- Choose [Event, Performance Group, or Fixed Renewable Season](/start/inventory-models/).
- Follow the [booking flow](/server-api/booking/) for a single Event.
- Integrate a [Performance Group](/integrations/performance-groups/).
- Build a [Fixed Renewable Season](/server-api/seasons/).
- Use the tagged package source for installed-method truth. The generated
  [operation support matrix](/server-api/operation-support/) separately reports
  current source, verification, and published-artifact status.