Seats & tickets

Ordering seats and tickets are inextricably linked. Before a ticket order can be completed two things must happen:

  1. Tickets must be added to the order.
  2. Each ticket must have the appropriate seats allocated/reserved (either manually or automatically).

While it is possible to make a single call to select both ticket and seat information, typical UI applications will require this to be done in multiple calls as the UI is usually split into a seat-selection portion and a ticket-selection portion.

Seat first ordering

This call flow describes the process whereby the customer selects a seat first (reserving it) and then a subsequent call is made to select the associated tickets.

Select a seat

The first action in seat-first ordering is to reserve the seats. This is done via the SetTickets call with only seats specified. In this case the customer has chosen 2 seats which can be assumed to be 2 tickets at this point.

POST: /orders/a53ac319775849499dd04fd23a6c867b/sessions/1234/set-tickets

{
    "tickets": [
        {
            "seats": [
                {
                    "areaNumber": 1,
                    "columnIndex": 2,
                    "rowIndex": 1
                }
            ]
        } ,
        {
            "seats": [
                {
                    "areaNumber": 1,
                    "columnIndex": 3,
                    "rowIndex": 1
                }
            ]
        }
	]
}

Select tickets

Once the seats are reserved the client can use SetTickets to provide the ticket details to go with the seats.

POST: /orders/a53ac319775849499dd04fd23a6c867b/sessions/1234/set-tickets

Request:

{
    "Tickets": [
        {
            "ticketDetails": {
            	"ticketTypeCode": "0022"
            },
            "seats": [
                {
                    "areaNumber": 1,
                    "columnIndex": 2,
                    "rowIndex": 1
                }
            ]
        },
        {
            "ticketDetails": {
            	"ticketTypeCode": "0033"
            },
            "seats": [
                {
                    "areaNumber": 1,
                    "columnIndex": 3,
                    "rowIndex": 1
                }
            ]
        }
	]
}

Amending choices in seat-first

Typical amendments are described below for the seat-first flow:

Action required SetTickets payload Result
Add more seats Existing seats + existing tickets + new seats Extra seats will be reserved, but not linked to tickets
Remove a seat Existing tickets + seats to keep Old seats will be de-allocated
Move seats Existing tickets + modified seats New seats will be reserved and linked to existing tickets, old seats will be de-allocated
Change ticket types Existing seats + modified tickets Existing tickets will be cancelled and old seats re-allocated to new tickets

Ticket first ordering

With ticket-first, the customer chooses the ticket types they wish to purchase and then selects the seats in the second step. This is a bit more natural for circuits containing package tickets or complicated area category setup.

Select tickets

The first action in ticket-first ordering is to select the ticket types desired. This is done via the SetTickets call with only ticket details specified.

POST: /orders/a53ac319775849499dd04fd23a6c867b/sessions/1234/set-tickets

Request:

{
    "tickets": [
        {
            "ticketDetails": {
            	"ticketTypeCode": "0022"
            }
        },
        {
            "ticketDetails": {
            	"ticketTypeCode": "0033"
            }
        }
	]
}

Select seats

Once the seats are reserved the client can use SetTickets to provide the seats to go along with the tickets.

POST: /orders/a53ac319775849499dd04fd23a6c867b/sessions/1234/set-tickets

Request:

{
    "tickets": [
        {
            "ticketDetails": {
            	"ticketTypeCode": "0022"
            },
            "seats": [
                {
                    "areaNumber": 1,
                    "columnIndex": 2,
                    "rowIndex": 1
                }
            ]
        },
        {
            "ticketDetails": {
            	"ticketTypeCode": "0033"
            },
            "seats": [
                {
                    "areaNumber": 1,
                    "columnIndex": 3,
                    "rowIndex": 1
                }
            ]
        }
	]
}

Amending choices in ticket-first

Typical amendments are described below for the ticket-first flow:

Action required SetTickets payload Result
Add more ticket Existing tickets + existing seats + new tickets Extra tickets will be added and auto-allocated seats
Remove a ticket Existing tickets to keep + existing seats to keep Old tickets will be removed and seats de-allocated
Change tickets Existing seats + modified tickets New tickets will be added and linked to existing seats, old tickets will be removed
Change seats Existing tickets + modified seats New seats will be reserved, old seats de-allocated, seates re-linked to tickets

Legacy ticketing api

The legacy ticketing API is much more granular offering individual adds, removes and seat-selection endpoints primarily designed for ticket-first style UI. The downside of this API is that it requires the client to keep track of what has been added/removed whereas SetTickets lets the server do that work.

AddTickets endpoint

The AddTickets endpoint simply adds tickets to the order, auto-allocating seats if none are provided.

POST: /RestTicketing.svc/order/tickets

{
    "UserSessionId": "a53ac319775849499dd04fd23a6c867b",
    "CinemaId": "00001",
    "SessionId": "1234",
    "BookingMode": 0,
    "TicketTypes": [
        {
            "TicketTypeCode": "0003",
            "Qty": 3
        }   
    ],
}

SetSelectedSeats endpoint

The SetSelectedSeats endpoint sets the seats for the tickets already added to the order. It expects to be assigning all tickets so the number of seats specified must match exactly the number required by the order's tickets.

POST: /RestTicketing.svc/orders/seats

{
    "UserSessionId": "a53ac319775849499dd04fd23a6c867b",
    "CinemaId": "00001",
    "SessionId": "1234",
    "SelectedSeats": [
        {
            "AreaCategoryCode": "0000000001",
            "AreaNumber": 1,
            "RowIndex": 3,
            "ColumnIndex": 11
        },
        {
            "AreaCategoryCode": "0000000001",
            "AreaNumber": 1,
            "RowIndex": 3,
            "ColumnIndex": 12
        },
        {
            "AreaCategoryCode": "0000000001",
            "AreaNumber": 1,
            "RowIndex": 3,
            "ColumnIndex": 13
        }
    ]
}

Removetickets endpoint

The RemoveTickets endpoint simply removes the specified tickets off the order (along with any associated seat)

DELETE: /RestTicketing.svc/orders/tickets

{
    "UserSessionId": "a53ac319775849499dd04fd23a6c867b",
    "TicketRemovals": [
        {
            "SessionId": "1234",
            "Tickets": [1,2,3]
        }   
    ]
}

Order limits on tickets

Connect enforces a limit on the maximum number of tickets, or reserved seats, that can be held on a single order.

This limit counts the number of tickets or reserved seats across all sessions. It's intended to be a back-end validation of ticket ordering limits enforced by the client. As such Connect will return a generic invalid request error (Result: 4 for V1 endpoints and HTTP 400 for V2) and it's not intended that this response is programmed against.