
Security News
Axios Maintainer Confirms Social Engineering Attack Behind npm Compromise
Axios compromise traced to social engineering, showing how attacks on maintainers can bypass controls and expose the broader software supply chain.
This is the official JavaScript client library for the Seats.io V2 REST API.
[!IMPORTANT] ❗️ Read This First!
seatsio-jsrequires 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(): OceaniaIf 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'])
HOLDimport { 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:
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.
FAQs
Official JavaScript and Node.JS client library for the Seats.io REST API
The npm package seatsio receives a total of 9,674 weekly downloads. As such, seatsio popularity was classified as popular.
We found that seatsio demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 5 open source maintainers collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
Axios compromise traced to social engineering, showing how attacks on maintainers can bypass controls and expose the broader software supply chain.

Security News
Node.js has paused its bug bounty program after funding ended, removing payouts for vulnerability reports but keeping its security process unchanged.

Security News
The Axios compromise shows how time-dependent dependency resolution makes exposure harder to detect and contain.