Seat data
There are typically two types of seating information that a client needs:
- The actual layout of the seats in a session including the area categories and the individual seats therein. This is used to render a seat map in a UI.
- The current status of the sesssion in terms of seat availability, from high-level seats remaining data on a session to the low-level sold status of individual seats
The Connect API provides this information though a mix of APIs which are described below.
OData session data
A session returns a number of seating-related properties.
Important Note:
This data, especially SeatsAvailable
data is NOT real-time data and may be out of date to varying degrees based on the back-end configuration and caching configuration of Connect.
{
"ID": "0000000001-51592",
"CinemaId": "0000000001",
"SessionId": "51592",
"AreaCategoryCodes": [
"0000000001",
"0000000002"
],
"Showtime": "2019-05-03T18:00:00",
"IsAllocatedSeating": true,
"SeatsAvailable": 251,
"ScreenName": "ABC Screen 1",
"ScreenNumber": 1,
"SoldoutStatus": 0,
}
Seat plan data
There are several ways of retrieving seat-plan data based on the specific client needs. Each returns essentially the same information but the subleties in their behaviour are worth understanding.
Important Note
The sophistication of the seat plan has evolved over the years and these APIs can be quite granular. It is important for modern clients to follow the best-practice in requesting seat plans:
- If available, specify the structured
SeatDataFormat
(examples below). The alternative is a legacy encoded string and not specifying either will return both resulting in a performance hit on the server. - If available, include all the
Include***
properties. These exist for certain compatibility reasons and all modern clients should deal with all data potentially configurable in a seat layout
Structured seat layout data
The following is an example of the a seat plan/layout data. It consists of a mix of:
- The physical seat layout (areas, rows, seats)
- Physical dimensions that can be used for drawing seat map UI*
- The
SeatStyle
of the individual seats (e.g. normal, sofa, wheelchair etc.) - The
Status
of the individual seats (e.g. sold, reserved etc.)
Please review the API reference documentation for SeatLayoutData
specifics.
{
"SeatLayoutData": {
"Areas": [
{
"Number": 1,
"AreaCategoryCode": "0000000001",
"Description": "Stalls",
"DescriptionAlt": "",
"NumberOfSeats": 2,
"IsAllocatedSeating": true,
"Left": 0.2,
"Top": 29.33,
"Height": 18.83,
"Width": 99.8,
"Rows": [
{
"PhysicalName": "A",
"Seats": [
{
"Position": {
"AreaNumber": 1,
"RowIndex": 0,
"ColumnIndex": 1
},
"Priority": 2,
"Id": "1",
"Status": 0,
"SeatStyle": 1,
"OriginalStatus": 0
},
{
"Position": {
"AreaNumber": 2,
"RowIndex": 0,
"ColumnIndex": 3
},
"Priority": 2,
"Id": "2",
"Status": 0,
"SeatStyle": 1,
"OriginalStatus": 0
}
]
}
],
"RowCount": 1,
"ColumnCount": 2
}
],
"AreaCategories": [
{
"AreaCategoryCode": "0000000001",
"SeatsToAllocate": 0,
"SeatsAllocatedCount": 0,
"SeatsNotAllocatedCount": 0,
"SelectedSeats": [],
"IsInSeatDeliveryEnabled": false
}
],
"BoundaryRight": 100,
"BoundaryLeft": 0,
"BoundaryTop": 29.33,
"ScreenStart": 0,
"ScreenWidth": 100
},
"ResponseCode": 0,
"ErrorDescription": null
}
GetSessionSeatPlan
This endpoint is unrelated to any order and can be used to display the current status of a session in map form or more commonly for seat-first style ticketing UIs where the customer must first select seats in a seat map before selecting their tickets
Important Note:
This endpoint (due to including current seat statuses) retrieves its data from the cinema and such adds load to both Connect and downstream applications at cinema. It is also an endpoint that is typically under high load. As such most instances of Connect will have a certain level of short-term caching behind the data. As such it cannot be considered real-time but should be close-to-real-time and more up-to-date than the session data.
GET: /restdata.svc/cinemas//sessions//seat-plan
Response:
{
"SeatLayoutData": {},
"ResponseCode": 0,
"ErrorDescription": null
}
GetSessionSeatData
This end-point returns the same response as GetSessionSeatPlan but is designed specifically for ticket-first seating scenarios where a customer has already selected tickets.
- This endpoint has NO caching and CAN be considered real-time as it gets the data directly from the cinema each time.
- This endpoint has a number of options for excluding certain seat properties as well as an option to return the order along-side the seat plan
- The
SeatDataFormat
is a key property and should always be set to 2 (structured) - This endpoint, since it is related to a specific order will return the seats assigned to the current order with the status of reserved, whereas they would be flagged as available in GetSessionSeatPlan
- This endpoint will fail if no tickets have been added to the order
POST: /restticketing.svc/order/seats/get
Request:
{
"CinemaId": "{{cinemaId}}",
"SessionId": "{{sessionId}}",
"UserSessionId": "{{userSessionId}}",
"ReturnOrder": true,
"ExcludeAreasWithoutTickets": false,
"IncludeBrokenSeats": true,
"IncludeHouseSpecialSeats": true,
"IncludeGreyAndSofaSeats": true,
"IncludeAllSeatPriorities": true,
"IncludeSeatNumbers": true,
"IncludeCompanionSeats": true,
"SeatDataFormat": true
}
Response:
{
"Result": 0,
"Order": {},
"SeatLayoutData": {},
"SeatsNotAllocated": false,
"ErrorDescription": null
}
AddTickets response
The AddTickets endpoint has an ReturnSeatData
property as well as related properties similar to GetSessionSeatData. Specifying this will return the same seat layout data as that endpoint.