This is the official JavaScript client library for the Seats.io V2 REST API.
Important
❗️ Read This First!
seatsio-js
requires your seats.io secret key. This key carries many privileges, including creating events, booking and releasing seats, and more. If you use this lib in a browser, you are exposing your secret key to your user.
This means you can only use seatsio-js
:
- on the server (Node), just like any other seats.io API client library
- in the browser, in a secure, password-protected backoffice application for administrators. Never, ever on pages that are accessible by your customers or ticket buyers.
👉 Only use this in browser code if you know what you're doing. You have been warned :)
For Node, you can install using yarn or npm:
yarn add seatsio
# or
npm install seatsio --save
To use this library, you'll need to create a SeatsioClient
:
import { SeatsioClient, Region } from 'seatsio'
let client = new SeatsioClient(Region.EU(), <WORKSPACE SECRET KEY>)
...
You can find your workspace secret key in the settings section of the workspace. It is important that you keep your secret key private and not expose it in-browser calls unless it is password protected.
The region should correspond to the region of your account:
Region.EU()
: EuropeRegion.NA()
: North-AmericaRegion.SA()
: South-AmericaRegion.OC()
: Oceania
If you're unsure about your region, have a look at your company settings page.
import { SeatsioClient, Region } from 'seatsio'
let client = new SeatsioClient(Region.EU(), <WORKSPACE SECRET KEY>)
let chart = await client.charts.create()
let event = await client.events.create(chart.key)
console.log(`Created a chart with key ${chart.key} and an event with key: ${event.key}`)
import { SeatsioClient, Region, Events } from 'seatsio'
let client = new SeatsioClient(Region.EU(), <WORKSPACE SECRET KEY>)
let chart = await client.charts.create()
let events = await client.events.createMultiple(chart.key, [ Events.eventCreationParams(), Events.eventCreationParams('aSpecificEventKey') ])
for (const event of events) {
console.log(`Created an event with key: ${event.key}`)
}
Booking an object changes its status to booked
. Booked seats are not selectable on a rendered chart.
https://docs.seats.io/docs/api-book-objects.
import { SeatsioClient, Region } from 'seatsio'
let client = new SeatsioClient(Region.EU(), <WORKSPACE SECRET KEY>)
await client.events.book(<AN EVENT KEY>, ['A-1', 'A-2'])
import { SeatsioClient, Region } from 'seatsio'
let client = new SeatsioClient(Region.EU(), <WORKSPACE SECRET KEY>)
await client.events.book(<AN EVENT KEY>, ["A-1", "A-2"], <A HOLD TOKEN>)
Either
import { SeatsioClient, Region } from 'seatsio'
let client = new SeatsioClient(Region.EU(), <WORKSPACE SECRET KEY>)
await client.events.book(<AN EVENT KEY>, ["GA1", "GA1", "GA1"])
Or:
import { SeatsioClient, Region } from 'seatsio'
let client = new SeatsioClient(Region.EU(), <WORKSPACE SECRET KEY>)
await client.events.book(<AN EVENT KEY>, {"objectId": "GA1", "quantity" : 3})
Releasing objects changes its status to free
. Free seats are selectable on a rendered chart.
https://docs.seats.io/docs/api-release-objects.
import { SeatsioClient, Region } from 'seatsio'
let client = new SeatsioClient(Region.EU(), <WORKSPACE SECRET KEY>)
await client.events.release(<AN EVENT KEY>, ["A-1", "A-2"])
Changes the object status to a custom status of your choice. If you need more statuses than just booked and free, you can use this to change the status of a seat, table or booth to your own custom status.
https://docs.seats.io/docs/api-custom-object-status
import { SeatsioClient, Region } from 'seatsio'
let client = new SeatsioClient(Region.EU(), <WORKSPACE SECRET KEY>)
await client.events.changeObjectStatus(<AN EVENT KEY>, ["A-1", "A-2"], "unavailable")
statusChanges
method returns a Lister
. You can use statusChanges().all()
, which returns an AsyncIterator, in a for await
loop to iterate over all status changes.
for await (let statusChange of client.events.statusChanges(<AN EVENT KEY>).all()) {
//Do something with the status change
}
You can alternatively use the paginated methods to retrieve status changes. To list status changes that comes after or before a given status change, you can use statusChanges().pageAfter()
and statusChanges().pageBefore()
methods.
await client.events.statusChanges(<AN EVENT KEY>).firstPage(<OPTIONAL parameters>, <OPTIONAL pageSize>)
await client.events.statusChanges(<AN EVENT KEY>).pageAfter(<A STATUS CHANGE ID>, <OPTIONAL parameters>, <OPTIONAL pageSize>)
await client.events.statusChanges(<AN EVENT KEY>).pageBefore(<A STATUS CHANGE ID>, <OPTIONAL parameters>, <OPTIONAL pageSize>)
You can also pass an optional parameter to filter, sort or order status changes. For this parameter, you can you use the helper class called StatusChangesParams
.
const {StatusChangesParams} = require('seatsio')
let parameter = new StatusChangesParams().withFilter('testFilter')
let parameter = new StatusChangesParams().sortByObjectLabel()
let parameter = new StatusChangesParams().sortByDate()
let parameter = new StatusChangesParams().sortByStatus()
let parameter = new StatusChangesParams().sortDescending()
let parameter = new StatusChangesParams().sortAscending()
A combination of filter, sorting order and sorting option is also possible.
let parameter = new StatusChangesParams().withFilter('testFilter').sortByStatus().sortAscending()
import { SeatsioClient, Region } from 'seatsio'
let client = new SeatsioClient(Region.EU(), <WORKSPACE SECRET KEY>)
let objectInfos = await client.events.retrieveObjectInfos(event.key, ['A-1', 'A-2'])
console.log(objectInfos['A-1'].categoryKey)
console.log(objectInfos['A-1'].categoryLabel)
console.log(objectInfos['A-1'].status)
console.log(objectInfos['A-2'].categoryKey)
console.log(objectInfos['A-2'].categoryLabel)
console.log(objectInfos['A-2'].status)
Want to know which seats of an event are booked, and which ones are free? That’s where reporting comes in handy.
The report types you can choose from are:
- byStatus
- byCategoryLabel
- byCategoryKey
- byLabel
- byOrderId
https://docs.seats.io/docs/api-event-reports
import { SeatsioClient, Region } from 'seatsio'
let client = new SeatsioClient(Region.EU(), <WORKSPACE SECRET KEY>)
await client.eventReports.byStatus(<AN EVENT KEY>, <OPTIONAL FILTER>)
You can list all charts using listAll()
method which returns an asynchronous iterator AsyncIterator
. You can use for await
loop to retrieve all charts.
import { SeatsioClient, Region } from 'seatsio'
let client = new SeatsioClient(Region.EU(), <WORKSPACE SECRET KEY>)
for await(let chart of client.charts.listAll()){
console.log(`Chart key: ${chart.key}`)
}
E.g. to show charts in a paginated list on a dashboard.
Each page contains an items
array of charts, and nextPageStartsAfter
and previousPageEndsBefore
properties. Those properties are the chart IDs after which the next page starts or the previous page ends.
// ... user initially opens the screen ...
let firstPage = client.charts.listFirstPage();
firstPage.items.forEach(chart => console.log(`Chart key: ${chart.key}`));
// ... user clicks on 'next page' button ...
let nextPage = client.charts.listPageAfter(firstPage.nextPageStartsAfter);
nextPage.items.forEach(chart => console.log(`Chart key: ${chart.key}`));
// ... user clicks on 'previous page' button ...
let previousPage = client.charts.listPageBefore(nextPage.previousPageEndsBefore);
previousPage.items.forEach(chart => console.log(`Chart key: ${chart.key}`));
import { SeatsioClient, Region } from 'seatsio'
let client = new SeatsioClient(Region.EU(), <COMPANY ADMIN KEY>)
await client.workspaces.create('a workspace');
import { SeatsioClient, Region } from 'seatsio'
let client = new SeatsioClient(Region.EU(), <COMPANY ADMIN KEY>, <WORKSPACE PUBLIC KEY>)
let chart = await client.charts.create()
let event = await client.events.create(chart.key)
console.log(`Created a chart with key ${chart.key} and an event with key: ${event.key}`)
import { SeatsioClient, Region } from 'seatsio'
let client = new SeatsioClient(Region.EU(), <COMPANY ADMIN KEY>, <WORKSPACE PUBLIC KEY>)
let categoryList = await client.charts.listCategories("the chart key")
for (const category of categoryList) {
console.log(category.label)
}
import { SeatsioClient, Region } from 'seatsio'
let client = new SeatsioClient(Region.EU(), <COMPANY ADMIN KEY>, <WORKSPACE PUBLIC KEY>)
await client.charts.updateCategory(chart.key, 1, new CategoryUpdateParams()
.withLabel('New label').withColor('#bbbbbb').withAccessible(true))```
When an API call results in an error, a rejected promise is returned with a value that looks like
{
"errors": [{ "code": "RATE_LIMIT_EXCEEDED", "message": "Rate limit exceeded" }],
"messages": ["Rate limit exceeded"],
"requestId": "123456",
"status": 429
}
This library supports exponential backoff.
When you send too many concurrent requests, the server returns an error 429 - Too Many Requests
. The client reacts to this by waiting for a while, and then retrying the request.
If the request still fails with an error 429
, it waits a little longer, and try again. By default this happens 5 times, before giving up (after approximately 15 seconds).
To change the maximum number of retries, create the SeatsioClient
as follows:
import { SeatsioClient, Region } from 'seatsio'
let client = new SeatsioClient(Region.EU(), <WORKSPACE SECRET KEY>).setMaxRetries(3)
Passing in 0 disables exponential backoff completely. In that case, the client will never retry a failed request.
Since v76, this package contains TypeScript definitions.