The @session-services/sdk package gives you a fully typed client for the
Session Services API. It works in Node.js and the browser.
Install
npm install @session-services/sdk
Create a Client
import { createClient } from '@session-services/sdk';
const client = createClient({
environment: 'sandbox',
tenantId: 'tnt_01jqpj2t2kfvmstt6f6tzkbaf2',
});
Configuration
| Option | Type | Required | Default | Description |
|---|---|---|---|---|
environment | string | Yes | — | 'sandbox', 'prod', or a custom base URL |
tenantId | string | No | Session Services tenant ID | Tenant identifier sent as x-tenant-id |
headers | object | No | — | Extra headers merged into every request (e.g. Authorization for auth) |
Environments
| Environment | Base URL |
|---|---|
sandbox | https://api.sandbox.session.services |
prod | https://api.session.services |
Pass any other string and it is used as-is, so you can point at a local dev server during development.
Fetching Events
const { events, after } = await client.event.list({});
Fetch a single event by ID or slug:
const { event } = await client.event.get({ key: 'evt_01jps5cgsenjrazw6wswmyspa3' });
// or by slug
const { event } = await client.event.get({ key: 'summer-festival' });
Creating an Order
The order flow has two steps: quote then create.
1. Get a Quote
A quote calculates pricing for a set of line items without reserving inventory.
const quote = await client.order.quote({
eventId: 'evt_01jps5cgsenjrazw6wswmyspa3',
items: [
{
admissionId: 'adm_01jps5cgsee0xvapbk92e8eb4g',
sectionId: 'sct_01jps5cgse0g3qj16kpq8t221r',
quantity: 2,
},
],
});
2. Create the Order
Creating an order reserves inventory and returns a checkout URL.
const { order } = await client.order.create({
eventId: 'evt_01jps5cgsenjrazw6wswmyspa3',
items: [
{
admissionId: 'adm_01jps5cgsee0xvapbk92e8eb4g',
sectionId: 'sct_01jps5cgse0g3qj16kpq8t221r',
quantity: 2,
},
],
returnUrl: 'https://yoursite.com/order/complete',
});
Customer details are collected in hosted checkout. If you need to update them
in a customer-facing flow, call order.update with the checkout signature
(sig) returned to your returnUrl.
Authenticated Requests
Endpoints that modify data require a JWT Bearer token. Pass it in the
headers option:
const client = createClient({
environment: 'prod',
tenantId: 'tnt_01jqpj2t2kfvmstt6f6tzkbaf2',
headers: {
Authorization: `Bearer ${accessToken}`,
},
});
const { event } = await client.event.create({
name: 'Launch Party',
// ...
});
See the Authentication page for how to obtain tokens.
Error Handling
Use the safe helper to avoid try/catch and get typed errors:
import { createClient, safe, isDefinedError } from '@session-services/sdk';
const [error, result] = await safe(client.event.get({ key: 'evt_01jps5cgsenjrazw6wswmyspa3' }));
if (isDefinedError(error)) {
console.error(`API error [${error.code}]:`, error.message);
} else if (error) {
console.error('Network error:', error.message);
} else {
console.log(result.event.name);
}
React Query Integration
The SDK ships with first-class TanStack Query
support. Use createQueryClient instead of createClient:
import { createQueryClient } from '@session-services/sdk';
const api = createQueryClient({
environment: 'prod',
tenantId: 'tnt_01jqpj2t2kfvmstt6f6tzkbaf2',
});
function EventList() {
const { data, isLoading } = api.event.list.useQuery({ input: {} });
if (isLoading) return <p>Loading...</p>;
return <ul>{data?.events.map((event) => <li key={event.id}>{event.name}</li>)}</ul>;
}
CDN / Browser Usage
Import the browser build directly in a <script type="module"> tag:
<script type="module">
import { createClient } from 'https://unpkg.com/@session-services/sdk/dist/browser.mjs';
const client = createClient({
environment: 'prod',
tenantId: 'tnt_01jqpj2t2kfvmstt6f6tzkbaf2',
});
const { events } = await client.event.list({});
console.log(events);
</script>
Available Resources
Method names in the SDK mirror the API contract. For the complete and always-current list, use the API Reference.
Public (no bearer token)
| Resource | Methods (summary) |
|---|---|
event | get, list |
admission | get, list |
section | get, list |
venue | get, list |
promoter | get |
team | get |
tenant | config, regions |
user | me |
order | get, quote, create, update, reserve |
ticket | list |
analytics | track, page, identify, alias, group, screen |
Authenticated (bearer token required)
| Resource | Methods (summary) |
|---|---|
event | create, update, remove, feature, plus like and performance routes |
admission | create, update, remove, quote |
section | create, update, remove |
venue | create, update, remove, linkLocation, unlinkLocation |
location | get, list |
coupon | get, list, create, update, remove |
coupon.code | get, list, create, update, remove |
order | list, resend, refund, note |
ticket | get, create, update, scan |
team | list, create, update, remove, performance routes |
teamInvite | list, get, create, accept, resend, cancel |
teamMember | get, list, create, update, remove, transfer |
teamPayment | connect, disconnect |
promoter | list, create, update, remove, performance routes |
eventCollaborator | get, list, create, accept, remove |
payout | get, list, stats, breakdown, update, note |
beneficiary | get, list, create, remove, schema, validate |
internal | uploadImage |
Package Exports
| Import path | Purpose |
|---|---|
@session-services/sdk | createClient, createQueryClient, error utilities |
@session-services/sdk/browser | Browser-optimised client build |
@session-services/sdk/analytics | Analytics client and helpers |
@session-services/sdk/analytics/react | React hooks for analytics |
@session-services/sdk/schemas | Zod validation schemas |
@session-services/sdk/contract | Raw oRPC contract |