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, Agent & System OwnerEvent API ID (required)
start_fromdatetimeWeb, Agent & System OwnerOptional. Filter instances starting on or after this date. YYYY-MM-DD format.
start_todatetimeWeb, Agent & System OwnerOptional. Filter instances starting on or before this date. YYYY-MM-DD format. Must be >= start_from.
customerIdstringSystem Owner onlyOptional. Calculate each instance's start-selling time for the specified customer. Mutually exclusive with basketId.
basketIdstringSystem Owner & AgentOptional. Calculate each instance's start-selling time using the basket owner's eligibility and basket context, including qualifying promotion codes. Mutually exclusive with customerId.
price-listbooleanWeb, Agent & System OwnerOptional. Set to true to include ticket types, prices, commissions, and ticket donations for each price band. Defaults to false.

Response​

Each instance includes startSellingForCustomer and startSellingForCustomerUtc. These are the earliest times that the relevant customer can book, taking eligible priority booking periods into account. If no earlier priority booking period applies, the fields contain the instance's general web start-selling time.

If no web start-selling time is configured, both fields are null. This indicates that no start-selling restriction applies and the instance is already available.

In Web mode, the values use the current session's customer and basket context. In Agent mode, pass basketId to use a specific basket's context. In System Owner mode, pass customerId or basketId to calculate customer-specific values; without either parameter, the general web start-selling time is returned.

{
"data": [
{
"eventInstanceId": "3603ASVMHKBLJJJMNQJVSSTNNGTBKJMRS",
"start": "2026-07-15T19:30:00",
"startUtc": "2026-07-15T18:30:00Z",
"startSellingForCustomer": "2026-06-15T10:00:00",
"startSellingForCustomerUtc": "2026-06-15T09:00:00Z",
"capacity": 500,
"availability": [
{
"priceBand": "2001APNNMRMBJQQPBSCNQGQHGKKCRPSSG",
"status": "Available",
"count": 150
},
{
"priceBand": "2001APNNMRMBJQQPBSCNQGQHGKKCRPSSG",
"status": "Unavailable",
"count": 350
}
]
}
]
}
FieldDescriptionWeb & Agent ModesSystem 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
startSellingForCustomerEarliest time the relevant customer can book, in the client's local timezone. Includes eligible priority booking periods; otherwise returns the general web start-selling time. null means no web start-selling time is configured, so the instance is already available.YesYes
startSellingForCustomerUtcThe same customer-specific start-selling time in UTC, or null when no web start-selling time is configured.YesYes
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 and Agent modes: Available (takes into account the 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
ticketTypesTicket types and prices for the price band. Only included when price-list=true.OptionalOptional

Including Price Lists​

Set price-list=true to add a ticketTypes array to each price-band availability entry:

GET
https://system.spektrix.com/{{clientname}}/api/v3/events/{id}/availability?price-list=true
{
"priceBand": "2001APNNMRMBJQQPBSCNQGQHGKKCRPSSG",
"status": "Available",
"count": 150,
"ticketTypes": [
{
"ticketTypeId": "3001APNNMRMBJQQPBSCNQGQHGKKCRPSSG",
"isBandDefault": true,
"amount": 26,
"customItems": [
{
"name": "Commission",
"amount": 1,
"displayMode": "IncludedInPriceButDisplayed"
},
{
"name": "Donation",
"amount": 2,
"displayMode": "IncludedInPriceButDisplayed"
}
]
}
]
}

amount includes any ticket commission but does not include a ticket donation. customItems identifies the commission and donation amounts separately when applicable.

Error Responses​

StatusScenarioNotes
400DateRangeValidationErrorstart_from is after start_to.
400BadRequestcustomerId and basketId are both provided.
403ForbiddencustomerId is used outside System Owner mode, or basketId is used in Web mode.
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 context parameters layered on top of System Owner mode.

For Event-Level Availability, basketId is also available in Agent mode and is used to calculate startSellingForCustomer from the basket's context.

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. Both return 403 Forbidden if used in Web mode, and customerId also returns 403 Forbidden in Agent 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