Seat Maps and Booking
The Seats API supports the optional selection and booking of free seats for both GDS and NDC content.
A seat map request returns seat availability on a selected flight, while the seat book request adds a seat selection to the reservation workbench.
Seats for both GDS and NDC can be added as part of the AirReservation workflow after the Add Offer and Add Traveler steps. For NDC itineraries only, seats can also be added to an existing reservation before ticketing.
In this topic:
Seats Workflow
Note that for Seats in both flows:
- Request seat availability for one segment at a time.
- Send a separate seat book request for each segment. You can include multiple travelers in the same seat book request.
Seats Workflow at Booking
When selecting seats as part of the initial reservation workflow, for both GDS and NDC, the seat availability and seat booking steps happen after the Add Offer and Add Traveler steps and before Commit:
- Create a reservation workbench (this and following unlinked steps are part of the AirReservation workflow).
- Add offer.
- Add traveler.
- Send a seat availability request per below for one segment.
- Send a seat book request per below for one segment. This adds the seat offer to the workbench.
- Repeat seat availability and seat book steps as necessary for additional segments.
- Commit workbench.
Post-Reservation Seats Workflow (NDC only)
When adding seats to an existing PNR (supported only for NDC), take the following steps:
- Create a post-commit workbench (this and following unlinked steps are part of the AirReservation workflow).
- Send a seat availability request per below for one segment.
- Send a seat book request per below for one segment. This adds the seat offer to the workbench.
- Repeat seat availability and seat book steps as necessary for additional segments.
- Commit workbench.
Seat Map
After initiating a workbench per either workflow above, request seat availability for each segment on the itinerary as follows.
Seat Map Request
Request seat availability for one segment at a time. Send additional requests as necessary for additional segments.
See Seats API Reference for the endpoint. There is no message payload.
The following example shows the GET request with the placeholders populated:
...reservations/00cb3f3b-8a04-4d1d-89fd-113034dcb14d/offers/offer_1/productAirs/p0/segments/s3
Seat Map Response
The response returns basic flight and traveler details, and a list of all seats grouped by availability status (Available, Reserved, etc.). The response consolidates information across those seats into the ReferenceList object, which lists for each row in the cabin each seat number and the characteristics for that seat.

{
"CatalogOfferingsResponse": {
"CatalogOfferings": {
"@type": "CatalogOfferings",
"CatalogOffering": [
{
"@type": "CatalogOfferingSupplierResponse",
"ProductOptions": [
{
"@type": "ProductOptions",
"Product": [
{
"@type": "ProductAir",
"FlightSegment": [
{
"Flight": {
"@type": "FlightStatus",
"carrier": "UA",
"number": "1093",
"id": "s3",
"Departure": {
"@type": "Departure",
"location": "DEN",
"date": "2020-05-06"
},
"Arrival": {
"@type": "Arrival",
"location": "LAX"
}
}
}
]
},
{
"@type": "ProductSeatAvailability",
"SeatAvailability": [
{
"seatAvailabilityStatus": "Available",
"value": [
"8D",
"8E",
"8F",
"9A",
"9B",
"9C",
"9D",
"9E",
"9F",
"10A",
"10B",
"10C",
"10D",
"10E",
"10F",
"11A",
"11B",
"11C",
"11D",
"11E",
"11F",
"22B",
"22E",
"23E",
"24B",
"24E",
"25E",
"27A",
"27B",
"27C",
"27E",
"27F",
"28D",
"28E",
"28F",
"29B",
"29C",
"29D",
"29E",
"29F",
"30A",
"30B",
"30C",
"30D",
"30E",
"30F",
"31A",
"31B",
"31C",
"31D",
"31E",
"31F",
"32A",
"32B",
"32C",
"32D",
"32E",
"32F",
"34A",
"34B",
"34C",
"34D",
"34E",
"34F",
"35A",
"35B",
"35C",
"35D",
"35E",
"35F",
"36A",
"36B",
"36C",
"36D",
"36E",
"36F",
"37A",
"37B",
"37C",
"37D",
"37E",
"37F",
"38A",
"38B",
"38C",
"38D",
"38E",
"38F"
]
},
{
"seatAvailabilityStatus": "NoSeat",
"value": [
"7A",
"7B",
"7C"
]
},
{
"seatAvailabilityStatus": "Blocked",
"value": [
"14A",
"14B",
"14C",
"14D",
"14E",
"14F",
"15A",
"15B",
"15D",
"15E",
"15F",
"22A",
"22C",
"22D",
"22F",
"23A",
"23D",
"23F",
"24A",
"24C",
"24D",
"24F",
"25A",
"25D",
"26F"
]
},
{
"seatAvailabilityStatus": "Reserved",
"value": [
"7D",
"7E",
"7F",
"8A",
"8B",
"8C",
"20A",
"20B",
"20C",
"20D",
"20E",
"20F",
"21A",
"21B",
"21C",
"21D",
"21E",
"21F",
"23B",
"23C",
"25B",
"25C"
]
}
],
"SeatingChartRef": "seatingChart_1"
}
]
}
],
"TermsAndConditions": {
"@type": "TermsAndConditionsAncillary",
"Traveler": {
"@type": "Traveler",
"passengerTypeCode": "ADT",
"id": "trav_1",
"Identifier": {
"value": "c729e4a1-21b4-44a9-a6c3-24c294c82227"
},
"PersonName": {
"@type": "PersonNameDetail",
"Prefix": "Dr",
"Given": "Gilbert",
"Middle": "NA",
"Surname": "Hintz",
"Suffix": "Jr"
},
"Telephone": [
{
"@type": "Telephone",
"countryAccessCode": "1",
"areaCityCode": "909",
"phoneNumber": "2124561",
"extension": "1234",
"id": "4",
"cityCode": "DEN",
"role": "Office"
}
]
}
}
}
]
},
"Identifier": {
"value": "cbe39247-e5c2-4285-b1e3-2d915dcb6553"
},
"ReferenceList": [
{
"@type": "ReferenceListSeatingChart",
"SeatingChart": [
{
"@type": "SeatingChart",
"id": "seatingChart_1",
"Cabin": [
{
"Row": [
{
"label": "7",
"Space": [
{
"location": "A",
"Characteristic": [
"N",
"W"
]
},
{
"location": "B",
"Characteristic": [
"N"
]
},
{
"location": "C",
"Characteristic": [
"A",
"N"
]
},
{
"location": "D",
"Characteristic": [
"BK"
]
},
{
"location": "E",
"Characteristic": [
"BK"
]
},
{
"location": "F",
"Characteristic": [
"BK"
]
}
]
},
{
"label": "8",
"Space": [
{
"location": "A",
"Characteristic": [
"BK"
]
},
{
"location": "B",
"Characteristic": [
"BK"
]
},
{
"location": "C",
"Characteristic": [
"BK"
]
},
{
"location": "D",
"Characteristic": [
"A",
"N",
"O"
]
},
{
"location": "E",
"Characteristic": [
"N",
"O"
]
},
{
"location": "F",
"Characteristic": [
"N",
"W",
"O"
]
}
]
},
{
"label": "9",
"Space": [
{
"location": "A",
"Characteristic": [
"N",
"W",
"O"
]
},
{
"location": "B",
"Characteristic": [
"N",
"O"
]
},
{
"location": "C",
"Characteristic": [
"A",
"N",
"O"
]
},
{
"location": "D",
"Characteristic": [
"A",
"N",
"O"
]
},
{
"location": "E",
"Characteristic": [
"N",
"O"
]
},
{
"location": "F",
"Characteristic": [
"N",
"W",
"O"
]
}
]
},
...
]
}
]
}
]
}
]
}
]
}
}
Seat Booking
After verifying seat availability, send a request to book a seat or seats.
Seat Book Request
After retrieving a list of available seats, you can send a seat book request for any available seat.
See Seats API Reference for the endpoint and all payload objects.

The example message payload below sends a request to select seat 36F for the single traveler specified.
{
"OfferQueryBuildAncillaryOffersFromCatalogOfferings": {
"BuildAncillaryOffersFromCatalogOfferings": [
{
"@type": "BuildAncillaryOffersFromCatalogOfferingsAirSeat",
"CatalogOfferingsIdentifier": {
"Identifier": {
"value": "cbe39247-e5c2-4285-b1e3-2d915dcb6553"
}
},
"TravelerIdentifier": {
"Identifier": {
"value": "c729e4a1-21b4-44a9-a6c3-24c294c82227"
}
},
"SeatAssignment": "36F"
}
]
}
}

The next example sends two instances of BuildAncillaryOffersFromCatalogOfferings, one for each of two travelers.
{
"OfferQueryBuildAncillaryOffersFromCatalogOfferings": {
"BuildAncillaryOffersFromCatalogOfferings": [
{
"@type": "BuildAncillaryOffersFromCatalogOfferingsAirSeat",
"CatalogOfferingsIdentifier": {
"Identifier": {
"value": "31c4237a-3a69-4613-8d39-158045e0f24b"
}
},
"TravelerIdentifier": {
"Identifier": {
"value": "51ab9037-0b06-4064-a92d-2fdc026cf64e"
}
},
"SeatAssignment": "28B"
},
{
"@type": "BuildAncillaryOffersFromCatalogOfferingsAirSeat",
"CatalogOfferingsIdentifier": {
"Identifier": {
"value": "31c4237a-3a69-4613-8d39-158045e0f24b"
}
},
"TravelerIdentifier": {
"Identifier": {
"value": "d0259303-cf63-4131-892b-eb331c446265"
}
},
"SeatAssignment": "28A"
}
]
}
}
Seat Book Response
The response returns an identifier for the transaction.
{
"ReservationResponse": {
"Identifier": {
"authority": "Travelport",
"value": "13e6ea95-2f56-4fb2-99ec-ce664f8e9530"
}
}
}
Commit
If you are selecting seats as part of a new reservation, complete any remaining steps in the reservation workflow.
The last step in either workflow is to commit the workbench; see the commit step in the AirReservation Workflow for details.
Commit Response Example with Seat
When you commit the workbench with a seat selection, the response returns a second instance of Offer with the seat offer and selected seat. The Offer object in the example below has the id of seatOffer_1.

{
"ReservationResponse": {
"Reservation": {
"@type": "Reservation",
"Identifier": {
"authority": "Travelport",
"value": "00cb3f3b-8a04-4d1d-89fd-113034dcb14d"
},
"Offer": [
{
"@type": "Offer",
"Product": [
{
"@type": "ProductAir",
"totalDuration": "PT2H33M",
"id": "p0",
"Quantity": "9",
"FlightSegment": [
{
"sequence": 1,
"Flight": {
"@type": "Flight",
"distance": 827,
"duration": "PT2H33M",
"carrier": "UA",
"number": "1093",
"equipment": "739",
"id": "s3",
"Departure": {
"@type": "Departure",
"location": "DEN",
"date": "2020-05-06",
"time": "07:52:00"
},
"Arrival": {
"@type": "ArrivalDetail",
"terminal": "7",
"location": "LAX",
"date": "2020-05-06",
"time": "09:25:00"
}
}
}
],
"PassengerFlight": [
{
"passengerQuantity": 1,
"passengerTypeCode": "ADT",
"FlightProduct": [
{
"segmentSequence": [
1
],
"classOfService": "G",
"cabin": "Economy",
"fareBasisCode": "GAA4TWDN",
"fareType": "PublicFare",
"Brand": {
"@type": "Brand",
"name": "ECONOMY",
"tier": 2,
"Identifier": {
"authority": "Travelport",
"value": "169914"
}
}
}
]
}
]
}
],
"Price": {
"@type": "PriceDetail",
"Base": "93.00",
"TotalTaxes": "28.10",
"TotalFees": "0.00",
"TotalPrice": "121.10",
"PriceBreakdown": [
{
"@type": "PriceBreakdownAir",
"quantity": 1,
"requestedPassengerType": "ADT",
"Amount": {
"Base": "93.00",
"Taxes": {
"@type": "TaxesDetail",
"TotalTaxes": "28.10",
"Tax": [
{
"taxCode": "AY",
"value": 8.2
},
{
"taxCode": "US",
"value": 7
},
{
"taxCode": "XF",
"value": 6.6
},
{
"taxCode": "ZP",
"value": 6.3
}
]
},
"Fees": {
"@type": "FeesDetail",
"TotalFees": "0.00"
},
"Total": "121.10"
}
}
]
}
},
{
"@type": "Offer",
"id": "seatOffer_1",
"Product": [
{
"@type": "ProductAncillary",
"Ancillary": {
"@type": "AncillaryAirSeat",
"FlightRef": [
"s3"
],
"SeatAssignment": {
"Seat": "036F"
}
}
}
]
}
],
"Traveler": [
{
"@type": "Traveler",
"passengerTypeCode": "ADT",
"id": "trav_null",
"Identifier": {
"value": "c729e4a1-21b4-44a9-a6c3-24c294c82227"
},
"PersonName": {
"@type": "PersonNameDetail",
"Prefix": "Dr",
"Given": "Gilbert",
"Middle": "NA",
"Surname": "Hintz",
"Suffix": "Jr"
},
"Telephone": [
{
"@type": "Telephone",
"countryAccessCode": "1",
"areaCityCode": "909",
"phoneNumber": "2124561",
"extension": "1234",
"id": "4",
"cityCode": "DEN",
"role": "Office"
}
]
}
],
"TravelerProduct": [
{
"@type": "TravelerProduct",
"OfferRef": "seatOffer_1"
}
],
"Receipt": [
{
"@type": "ReceiptConfirmation",
"Confirmation": {
"@type": "ConfirmationHold",
"Locator": {
"source": "1G",
"value": "A11138"
}
}
}
]
}
}
}