Seat selection

Many FAB flight suppliers support seat selection via seat map.

This page provides examples and advice on how to use this.

The seat map

Where supported and enabled FAB_BasketRS/CurrentBasket will list one or more SeatOptions elements.

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@FlightNumber allows you to identify which flight this map refers to.
  • SeatOptions@Supplier and SeatOptions@DeparturePoint are not mandatory but are often provided, particularly if the flight number is not unique within the basket.
  • You must reference SeatBand to get the price and description of each Seat.

Identifying unavailable seats

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 takeSeat@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.
  • Seat@Position is also useful as it has possible values of Aisle Middle Window.
    • 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 here
    • Seat@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 Text of Errata@Code="Seat Selection - Restricted".
  • Seat@ExitRow indicates the seat is on an exit row
  • (though not shown in the snippet) Seat@UpperDeck should be used, if present, to split the map into two decks.
  • SeatOptions@NumberOfBlocks indicates 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 with Seat@Block to draw the aisle(s).
  • You may wish to use SeatOptions@AircraftType to reference third party seat map tools, but please note that this attribute is optional.

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@Supplier and SeatOptions@DeparturePoint are 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 a Seat@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.


Last modified September 19, 2025