Seat selection
Many FAB flight suppliers support seat selection via seat map.
This page provides examples and advice on how to use this.
Tip
This functionality is enabled by default.
Supported suppliers can be checked here (filter by feature).
Please note a supplier may have general support but not be able to offer seat selection for certain specific flights.
The seat map
Where supported and enabled FAB_BasketRS/CurrentBasket will list one or more SeatOptions elements.
Tip
Even a oneway flight basket may have multipleSeatOptions if the flight is indirect/multileg.Here is a snippet example:
<SeatOptions FlightNumber="DY1349" AircraftType="73H" NumberOfBlocks="2" Currency="GBP" Supplier="NOR" DeparturePoint="MAN">
<SeatBand Id="UNAVAILABLE" Description="Unavailable" Price="0"/>
<SeatBand Id="XST" Description="Seat reservation" Price="12.0"/>
<SeatBand Id="XST_ZONE1" Description="Front row" Price="19.0"/>
<SeatBand Id="XST_ZONE2" Description="Front of cabin" Price="14.0"/>
<SeatBand Id="XST_ZONE3" Description="Extra legroom" Price="17.0"/>
<SeatBand Id="XST_ZONE4" Description="Standard, back" Price="12.0"/>
<Seat Num="1A" Availabile="true" BandId="XST_ZONE1" Block="1" Row="1" AllowInfant="false" AllowChild="true" ExitRow="false" Position="Window" Access="Restricted"/>
<Seat Num="1B" Availabile="true" BandId="XST_ZONE1" Block="1" Row="1" AllowInfant="false" AllowChild="true" ExitRow="false" Position="Middle" Access="Restricted"/>
<Seat Num="1C" Availabile="true" BandId="XST_ZONE1" Block="1" Row="1" AllowInfant="false" AllowChild="true" ExitRow="false" Position="Aisle" Access="Restricted"/>
<Seat Num="1D" Availabile="true" BandId="XST_ZONE1" Block="2" Row="1" AllowInfant="false" AllowChild="true" ExitRow="false" Position="Aisle" Access="Restricted"/>
<Seat Num="1E" Availabile="true" BandId="XST_ZONE1" Block="2" Row="1" AllowInfant="false" AllowChild="true" ExitRow="false" Position="Middle" Access="Restricted"/>
<Seat Num="1F" Availabile="true" BandId="XST_ZONE1" Block="2" Row="1" AllowInfant="false" AllowChild="true" ExitRow="false" Position="Window" Access="Restricted"/>
<Seat Num="2A" Availabile="true" BandId="XST_ZONE2" Block="1" Row="2" AllowInfant="false" AllowChild="true" ExitRow="false" Position="Window" Access="Regular"/>
<Seat Num="2B" Availabile="true" BandId="XST_ZONE2" Block="1" Row="2" AllowInfant="false" AllowChild="true" ExitRow="false" Position="Middle" Access="Regular"/>
Initial things to note
- The mandatory
SeatOptions@FlightNumberallows you to identify which flight this map refers to. SeatOptions@SupplierandSeatOptions@DeparturePointare not mandatory but are often provided, particularly if the flight number is not unique within the basket.- You must reference
SeatBandto get the price and description of eachSeat.
Identifying unavailable seats
Note
Seats are not reserved until they have been booked, therefore availability will only change once a seat has been booked. Either by you or another party.The correct way of identifying if a Seat is unavailable is to use the attribute Seat@Availabile.
You may sometimes see a dummy SeatBand similar to this:
<SeatBand Id="UNAVAILABLE" Description="Unavailable" Price="0"/>
This dummy SeatBand is present if the airline does not provide normal band information for unavailable seats. It must not be relied on as a method for identifying unavailable seats.
Visualising
To help you construct a visualisation of the seat map there are a number of points to consider:
- If we take
Seat@Num="1A"as an example:- The “1” indicates that the seat is in the first row from the front of the plane. For ease of use the row number can and should be read from
Seat@Row - The “A” indicates that the seat is as far left as possible in that row. This being from a top down view of the plane, where the cockpit is north and the tail is south.
- The “1” indicates that the seat is in the first row from the front of the plane. For ease of use the row number can and should be read from
Seat@Positionis also useful as it has possible values ofAisleMiddleWindow.- Do not rely on Aisle to draw aisles because this will not work for layouts where a Window seat is adjacent to the aisle (common in business class). Instead use NumberOfBlocks & Blocks.
- You will need to warn or limit selection based off the following:
Seat@AllowInfant="false"indicates that an adult with infant cannot sit here- For parties with one infant the infant is assigned to the lead passenger by default.
Seat@AllowChild="false"indicates that a child cannot sit hereSeat@Access="Restricted"indicates that additional restrictions apply to what passengers can sit here beyond those restrictions already indicated by AllowInfant/AllowChild.- These additional restrictions will be described by the
TextofErrata@Code="Seat Selection - Restricted".
- These additional restrictions will be described by the
Seat@ExitRowindicates the seat is on an exit row- (though not shown in the snippet)
Seat@UpperDeckshould be used, if present, to split the map into two decks. SeatOptions@NumberOfBlocksindicates the number of divisions within a row of seats. For example, an aircraft with a single aisle seat configuration will have two ‘blocks’. You can then combine this withSeat@Blockto draw the aisle(s).- You may wish to use
SeatOptions@AircraftTypeto reference third party seat map tools, but please note that this attribute is optional.
Tip
Row numbering is often not consecutive. E.g some airlines skip row 13 as it may be considered unlucky.Tip
Seat lettering within a row can be non-consecutive. E.g seats may be missing entirely from the plane to provide space for amenities.Tip
In some cases the seat map will represent only a subset of the plane’s cabins.Selecting seats
To select seats adjust your FAB_BasketRQ/AmendBasketRequest or FAB_BasketRQ/CreateBasketRequest.
For each LeadCustomer/Customer element include a SeatOptions/Seat per flight.
Example snippet:
<LeadCustomer Surname="Example" Firstname="Jane" MiddleInitials="Rose" DOB="19870506" Title="Mrs" Nationality="GB" Gender="Female">
<SeatOptions FlightNumber="DY1349" Supplier="NOR" DeparturePoint="MAN">
<Seat Num="3A"/>
</SeatOptions>
<SeatOptions FlightNumber="DY1348" Supplier="NOR" DeparturePoint="OSL">
<Seat Num="3A"/>
</SeatOptions>
</LeadCustomer>
- Populate the required attributes based off the previous
FAB_BasketRS SeatOptions@SupplierandSeatOptions@DeparturePointare not mandatory but are highly encouraged, particularly if the flight number is not unique within the basket.- NOTE you must set
Seat@MeetsRestriction="true"if you wish to sit the pax in aSeat@Access="Restricted".
The resulting FAB_BasketRS will have one or more new ItineraryCost/Component/Detail elements for the selected seats. How many Detail elements are present will vary slightly depending on whether the airline provides a total cost, cost per pax, etc.