Skip to main content

Seat Status and Availability

The Spektrix API can retrieve availability status for event instances and events. For details on making queries for Events and Instances you can look through our guide to Filtering Events.

Availability is linked to instances and not whole events, so in order to determine the status of individual events you will need to evaluate the status of each instance. The event-level availability endpoint provides a convenient summary across all instances of an event. Note that the resource isOnSale which is revealed from GET api/v3/events does not represent availability.

note

Making a large number of client-side API requests at once can negatively impact the performance of your website. Calls related to overall Event and Instance availability should generally be cached and made server-side to avoid browser slow-down and rate limiting.

Locks

This guide on status and availability refers to ‘locks’. Spektrix allows clients to ‘lock’ certain seats on a seating plan in order to provide additional information about a given seat or to hold them back from general sale online.

Potential use cases for locks include:

  • Seats for a personal assistant for a customer who requires 1-1 support, with no customer eligibility criteria. The seats are available to anyone, but hold additional information.
  • Exclusive seats held back, with a customer eligibility criteria specific to members, while the seats remain unavailable to the general public.
  • ‘House seats’ which are held back and sold at the discretion of the Box Office Manager or released last minute (no longer locked) if not needed.

What this potentially results in is two separate sets of locked seats:

  • Locked seats that are accessible for the general public that will not change customer-to-customer. Generally, cached server-side calls should be used to access this information.
  • Locked seats that will change based on whether or not a customer has logged into their account. These locks are customer-specific and can be viewed by making client-side API calls using the custom domain instead of system.spektrix.com. In order to view the set of locked seats that are available to the specific customer requires successful authentication. Customers can log in via the loginlogout.aspx iframe or a client-side API call to v3/customer/authenticate, using the custom domain instead of system.spektrix.com in order to share the session.

Event-Level Availability

Get a summary of availability across all instances of an event within an optional date range. This is useful for displaying overall event status or to display instance status in a calendar / instance list without querying each instance individually.

Request

GET
https://system.spektrix.com/{{clientname}}/api/v3/events/{id}/availability

Parameters

ParameterTypeModeDescription
idstringWeb & System OwnerEvent API ID (required)
start_fromdatetimeWeb & System OwnerOptional. Filter instances starting on or after this date. YYYY-MM-DD format.
start_todatetimeWeb & System OwnerOptional. Filter instances starting on or before this date. YYYY-MM-DD format. Must be >= start_from.

Response

{
"data": [
{
"eventInstanceId": "3603ASVMHKBLJJJMNQJVSSTNNGTBKJMRS",
"start": "2026-07-15T19:30:00",
"startUtc": "2026-07-15T18:30:00Z",
"capacity": 500,
"availability": [
{
"priceBand": "2001APNNMRMBJQQPBSCNQGQHGKKCRPSSG",
"status": "Available",
"count": 150
},
{
"priceBand": "2001APNNMRMBJQQPBSCNQGQHGKKCRPSSG",
"status": "Unavailable",
"count": 350
}
]
}
]
}
FieldDescriptionWeb ModeSystem Owner Mode
eventInstanceIdThe API ID of the instanceYesYes
startInstance start time in the client's local timezone (unspecified kind)YesYes
startUtcInstance start time in UTC timezoneYesYes
capacityTotal seats in the instanceYesYes
availabilityArray grouped by price band and availability statusYesYes
priceBandThe API ID of the price bandYesYes
statusAvailability status of seats in this price band. Web mode: Available (takes into account the logged in customer eligibility to locked seats), Unavailable. Owner mode: Available, Unavailable, InOtherBasket, Reserved, Scanned, Sold, Locked, MaskedPartialFull
countNumber of seats in this status for this price bandYesYes

Error Responses

StatusScenarioNotes
400DateRangeValidationErrorstart_from is after start_to.
403ForbiddenCaller is in Agent mode (not Web or Owner).
404ResourceNotFoundEvent ID does not exist.

Use Cases

  • Display overall event availability ("Limited Availability" vs "Sold Out") on event listing pages.
  • Build event calendars or instances lists with visual availability indicators.

Context Parameters (Owner Mode)

Some System Owner mode endpoints on this page accept optional customerId or basketId query parameters, which simulate what a specific customer or basket owner would see, without needing to authenticate as that customer. These are not a separate API mode — they're optional parameters available only within System Owner mode, layered on top of it.

ParameterDescription
customerIdQuery availability as if the specified customer were browsing (no active basket). Applies that customer's lock eligibility. Returns a Web-mode response shape.
basketIdQuery availability as if the basket owner were shopping (includes promo codes and basket context). Returns a Web-mode response shape.

customerId and basketId are mutually exclusive, and both return 403 Forbidden if used in Web mode.

In the response tables and examples below, calls made with either parameter are labeled "Owner Mode (Context)" to distinguish them from a plain System Owner mode call.

Unreserved Instance Status / Reserved Instance Status Summary

These calls will retrieve the latest seat availability status for instances which can be used for unreserved instances or as a summary of reserved instances when you don't need the status information for each individual seat.

Information returned in the properties specialAvailable and lockInfoSpecialAvailable may differ depending on the logged in customer.

EndpointPurposeDescription
GET v3/instances/{id}/statusSummary by price bandReturns an overview of the current availability status for an instance
GET v3/instances/{id}/status/areas/{areaId}Single area summaryReturns an overview of the current availability status of a specific area for an instance
GET v3/instances/{id}/status/areas?areaIds={areaId},{areaId}Multiple areas summaryReturns an aggregate overview of the current availability status of a number of specific areas for an instance
GET v3/instances/{id}/status/areas/allSummary of all areas, broken down by areaReturns an overview of the current availability status of every area for an instance, one entry per area

Request

GET
https://system.spektrix.com/{{clientname}}/api/v3/instances/{id}/status?includeLockInformation=true&includeChildPlans=true

Parameters

ParameterTypeModeDescription
includeLockInformationstringWeb mode & System Owner"false" (default) = no lock data. "true" = include lock names and available counts.
includeChildPlansbooleanWeb mode & System OwnerDefault value is false. For events built with multi-area seating plans, it will be necessary to append the query to see details for all areas of the plan. It is generally advisable to include this parameter.
$expandstringWeb mode & System OwnerUse $expand=bands to see bands with available seats
customerIdstringSystem Owner onlySee Context Parameters above. Mutually exclusive with basketId.
basketIdstringSystem Owner onlySee Context Parameters above. Mutually exclusive with customerId.

Response

{
"name": "Unreserved Example",
"available": 175,
"wheelchairAvailable": 0,
"specialAvailable": 0,
"capacity": 200,
"inBasket": 0,
"unavailable": 25,
"lockInfoAvailable": [
{
"quantity": 3,
"lockType": {
"name": "Personal Assistant",
"id": "601APNNMRMBJQQPBSCNQGQHGKKCRPSSGN"
}
}
],
"lockInfoSpecialAvailable": [
{
"quantity": 2,
"lockType": {
"name": "Members Exclusive Seats",
"id": "1401AHPQBSMRKMCGHQKGHVQVKCQNVNBKN"
}
}
]
}
FieldDescriptionWeb ModeSystem Owner ModeOwner Mode (Context)
nameDisplay name of the instance or areaYesYesYes
availableUnreserved, purchasable seats (excludes locked seats, baskets, reserved, sold)YesYesYes
wheelchairAvailableWheelchair-accessible seats that are availableYesYesYes
specialAvailableSeats marked as "special" with lock eligibility appliedYesYesYes
capacityTotal seatsYesYesYes
bandsPrice band breakdown of availabilityYesYesYes
inBasketSeats in the customer's active basketNoYes (all baskets)Yes (specified basket)
inOtherBasketSeats in other customers' basketsNoYesNo
reservedSeats held by venue or systemNoYesNo
soldPurchased and delivered seatsNoYesNo
scannedSeats marked as scanned/usedNoYesNo
lockedUnavailableLocked seats with no available inventoryNoYesNo
maskedSeats hidden by venue configurationNoYesNo
unavailableGeneral unavailable state (sold, reserved, masked, in other baskets)NoNoYes
lockInformationAll locks on the instance (only if includeLockInformation=true)Web-eligible locksAll locksWeb-eligible locks
lockInfoAvailableLocks without customer eligibility criteriaYes (when requested)Yes (when requested)Yes (when requested)
lockInfoSpecialAvailableLocks with customer eligibility criteriaYes (customer's eligibility)Yes (all eligibilities)Yes (customer's eligibility)

Error Responses

StatusScenarioNotes
400Both customerId and basketId providedCannot use both parameters simultaneously
403customerId or basketId used in Web modeForbidden: Context parameters require Owner mode
404Instance not foundInstance ID does not exist

Use Cases

  • The information on availability can be used to build conditional booking links to instances that show 'limited availability' and 'sold out' messages, dynamic calendar listings, and other similar use cases. Generally, cached server-side calls should be used to access this information.
  • The information on locked seats can be used:
    • by venues that use locks without eligibility criteria, so instances don’t appear sold out if 'locked' seats (available for purchase) are the only ones available. Generally, cached server-side calls should be used to access this information.
    • to display different messaging to logged in customers based on their individual eligibility criteria, for example to indicate additional availability to a logged in Member. In order to view this information in the API, these calls would need to be made client-side and only after the customer has logged in. For optimal performance, you can combine cached server-side calls to display availability for the general public, and client-side calls to display the specific availability for the logged in customer.

Detailed Reserved Seat Status

For reserved seating plans, it is possible to get the status of each individual seat. The response uses a compressed text format for efficiency.

EndpointPurposeDescription
GET v3/instances/{id}/status/detailAll seats with individual status codesReturns status for every seat in the instance
GET v3/instances/{id}/status/areas/{areaId}/detailSeats within a specific areaReturns status for seats in a specific area only

Request

GET
https://system.spektrix.com/{{clientname}}/api/v3/instances/{instanceId}/status/detail?includeLockInformation=true&includeChildPlans=true

Parameters

ParameterTypeModeDescription
includeLockInformationstringWeb mode & System Owner"false" (default) = no lock data. "true" = include lock IDs and names. "truewithicon" = include lock IDs, names, and icon information.
includeChildPlansbooleanWeb mode & System OwnerDefault value is false. For events built with multi-area seating plans, it will be necessary to append the query to see details for all areas of the plan. It is generally advisable to include this parameter.
customerIdstringSystem Owner onlySee Context Parameters above. Mutually exclusive with basketId.
basketIdstringSystem Owner onlySee Context Parameters above. Mutually exclusive with customerId.

Response

The response uses a compressed text format with one line per seat status group:

Without lock information:

seatstatus:pricebandid:seatid,seatid,seatid ...

With includeLockInformation=true:

seatstatus:pricebandid:{lockid:"lock name"}:seatid,seatid,seatid ...

With includeLockInformation=truewithicon:

seatstatus:pricebandid:{lockid:"lock name":"description of icon"}:seatid,seatid,seatid ...
A:12345ABCDEF:33,34,35,36,37,38
A:12345ABCDEF:{56789ASDFGH:"Personal Assistant"}:32
U:12345ABCDEF:23,24,25,26,27,28,29,30
W:31234ABCDEF:11,12,13
X:31234ABCDEF:{345678POIUYTR:"Members Exclusive Seats"}:46,47,48

Seat Status Code Reference

CodeLabelWeb ModeSystem Owner ModeSystem Owner Mode (Context)AgentDescription
AAvailableYesYesYesYesAvailable for purchase (general public or customer-eligible)
BIn BasketYesYes (all)Yes (specified)YesSeats in an active basket
UUnavailableYesYesYesYesSold, reserved, masked, or in another basket
IInfo LabelYesYesYesYesSeats with attached information (e.g., "Restricted View"); appears as separate entry
WWheelchair-Locked AvailableYesNoYesYesWheelchair-accessible; available for purchase if eligible
XLocked AvailableYesNoYesYesRestricted by eligibility; available if customer qualifies
EIn Other BasketNoYesNoNoIn another customer's active basket
RReservedNoYesNoNoReserved tickets
SOSoldNoYesNoNoPurchased
SCScannedNoYesNoNoTicket already scanned at entry
LLocked UnavailableNoYesNoNoLocked with no available inventory
MMaskedNoYesNoNoHidden by venue configuration

Note on customerId / basketId: When using these Context Parameters, responses use Web-mode seat codes only (A, B, U, W, X). Owner-mode-only codes (E, R, L, M, SC, SO, I) are not returned.

Error Responses

StatusScenarioNotes
400Both customerId and basketId providedCannot use both parameters simultaneously
403customerId or basketId used in Web modeForbidden: Context parameters require Owner mode
404Instance not foundInstance ID does not exist

Use Cases

  • Build custom reserved seating selectors or interactive seat maps