Skip to content

SDK

Use the official TypeScript SDK for type-safe access to the Session Services API.

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

OptionTypeRequiredDefaultDescription
environmentstringYes'sandbox', 'prod', or a custom base URL
tenantIdstringNoSession Services tenant IDTenant identifier sent as x-tenant-id
headersobjectNoExtra headers merged into every request (e.g. Authorization for auth)

Environments

EnvironmentBase URL
sandboxhttps://api.sandbox.session.services
prodhttps://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)

ResourceMethods (summary)
eventget, list
admissionget, list
sectionget, list
venueget, list
promoterget
teamget
tenantconfig, regions
userme
orderget, quote, create, update, reserve
ticketlist
analyticstrack, page, identify, alias, group, screen

Authenticated (bearer token required)

ResourceMethods (summary)
eventcreate, update, remove, feature, plus like and performance routes
admissioncreate, update, remove, quote
sectioncreate, update, remove
venuecreate, update, remove, linkLocation, unlinkLocation
locationget, list
couponget, list, create, update, remove
coupon.codeget, list, create, update, remove
orderlist, resend, refund, note
ticketget, create, update, scan
teamlist, create, update, remove, performance routes
teamInvitelist, get, create, accept, resend, cancel
teamMemberget, list, create, update, remove, transfer
teamPaymentconnect, disconnect
promoterlist, create, update, remove, performance routes
eventCollaboratorget, list, create, accept, remove
payoutget, list, stats, breakdown, update, note
beneficiaryget, list, create, remove, schema, validate
internaluploadImage

Package Exports

Import pathPurpose
@session-services/sdkcreateClient, createQueryClient, error utilities
@session-services/sdk/browserBrowser-optimised client build
@session-services/sdk/analyticsAnalytics client and helpers
@session-services/sdk/analytics/reactReact hooks for analytics
@session-services/sdk/schemasZod validation schemas
@session-services/sdk/contractRaw oRPC contract