Seat Map API Reference
POST |
search/seat/catalogofferingsancillaries/seatavailabilities Base path: Pre-production https://api.pp.travelport.com/11/air/ Production https://api.travelport.com/11/air/ |
Related Content: Seats Guide, Seat Book API Reference
The Seat Map request returns seat availability for both free and paid seats. You can request seat availability at several places in the JSON APIs workflow. The Seat Map request uses the same endpoint but a different message payload depending on when it is sent. See the workflow options in the Seats Guide.
All Seat Map requests allow you to request seat maps for any of the following:
- all flights within an offer (all flights on the itinerary)
- all flights within a product (all flights on one leg of an itinerary)
- one or more individual flights
To book a seat, you must send a Seat Book request as part of a workbench session.
Request
Also see Authorization and Common Headers.
Query Parameters
None.
Request Body – Seat Map after Search request
When sent after a Search request and prior to pricing or initiating a workbench session, the Seat Map request sends identifiers from the Search response. You can request seat maps for a flight, product, or segment returned in any Search, Next Leg Search, or Flight Specific Search response.
Object | Description | Required/Optional |
---|---|---|
CatalogOfferingsQuerySeatAvailability |
Top level object. |
Required |
SeatAvailabilityOfferings |
Top level object. |
Required |
BuildFromCatalogProductOfferingsRequest |
Top level object. Includes CatalogProductOfferingsIdentifier. |
Required |
CatalogProductOfferingsIdentifier |
Top level object. Key value pairs:
Includes Identifier. |
Required |
Identifier |
Transaction identifier for the preceding Search response. Key value pairs:
Send the values from value and authority in CatalogProductOfferings/Identifier from the response for the Search, Next Leg Search, or Flight Specific Search as applicable.
|
Required |
CatalogProductOfferingSelection |
Top level object. Includes CatalogProductOfferingIdentifier. May include ProductIdentifier and SegmentSequence. |
Required |
CatalogProductOfferingIdentifier |
The identifier value for the offer. Key value pairs:
Send the value in CatalogProductOfferings/CatalogProductOffering/id from the applicable search response.
If only the offer ID is sent (no product identifier or segment sequence per below), the response returns seat maps for all segments in the offer.
|
|
ProductIdentifier |
Top level object for the product ID. Key value pairs:
Send the value in CatalogProductOfferings/CatalogProductOffering/ProductBrandOptions/ProductBrandOffering/Product/productRef from the applicable search response.
Optional. If ProductIdentifier is sent, response returns seat maps for all flights in that product. If not sent, response returns seat maps for all flights in the offer.
|
Optional |
SegmentSequence |
The segment for which to retrieve the seat map. If sent, ProductIdentifier must also be sent. Can send multiple sequence numbers to return all specified segments. Note that the segmentSequence value for connecting flights is the same; for example, for two connecting flights on the outbound or first leg of the itinerary, both flights have the segmentSequence value 1. Send the value in CatalogProductOfferings/ReferenceListProduct/Product/FlightSegment/sequence from the applicable search response.
Optional. If SegmentSequence is sent, response returns seat maps for only the flight on that segment. If not sent, response returns seat maps for all flights on the product.
|
Optional |
Request Body – Seat Map after AirPrice request
When sent after an AirPrice request and prior to initiating a workbench session, the Seat Map request sends identifiers from the AirPrice response.
Object | Description | Required/Optional |
---|---|---|
CatalogOfferingsQuerySeatAvailability |
Top level object. |
Required |
SeatAvailabilityOfferings |
Top level object. |
Required |
BuildFromOfferList |
Top level object. Includes OfferListIdentifier and OfferIdentifier. |
Required |
OfferListIdentifier |
String. Transaction identifier. Send the value in OfferListResponse/Identifier/value from the AirPrice response.
|
Required |
OfferIdentifier |
The identifier value for the offer. Key value pairs:
Send the value in OfferID/id from the AirPrice response.
If only the offer ID is sent (no product identifier or segment sequence per below), response returns seat maps for all flights in the offer.
|
Required |
ProductIdentifier |
Top level object for the product ID. Key value pairs:
Send the value in OfferID/Product/id from the AirPrice response.
Optional. If product ID is sent, response returns seat maps for all segments in that product. If a product ID is not sent, response returns seat maps for all flights in the offer.
|
Optional |
SegmentSequence |
The segment number of the flight for which to retrieve the seat map. If sent, ProductIdentifier must also be sent. Can send multiple sequence numbers to return all specified segments. Note that the segmentSequence value for connecting flights is the same; for example, for two connecting flights on the outbound or first leg of the itinerary, both flights have the segmentSequence value 1. Send the value in OfferID/Product/FlightSegment/sequence from the AirPrice response.
Optional. If segment sequence is sent, response returns seat maps for only the flight on that segment. If not sent, response returns seat maps for all flights in the product.
|
Optional |
Request Body – Seat Map during workbench session
When sent during a workbench session, the Seat Map request sends identifiers from the Search response.
Object | Description | Required/Optional |
---|---|---|
CatalogOfferingsQuerySeatAvailability |
Top level object. |
Required |
SeatAvailabilityOfferings |
Top level object. |
Required |
BuildFromReservationWorkbench |
Top level object. |
Required |
ReservationIdentifier |
Top level object for the workbench ID. |
Required |
ReservationIdentifier/Identifier |
The reservation workbench ID. Key value pairs:
|
Required |
OfferIdentifier |
Top level object for the offer ID. |
Required |
OfferIdentifier/Identifier |
The identifier value for the offer. For both the offer and product identifiers, source the identifiers as follows in the booking and post-booking workflows as appropriate:
If you send only the offer ID (no product identifier or segment sequence per below), response returns seat maps for all segments in the offer.
|
Required |
ProductIdentifier |
Top level object for the product ID. Optional. If product ID is sent, response returns seat maps for all segments in that product. If product ID is not sent, response returns seat maps for all segments in the offer.
|
Optional |
ProductIdentifier/Identifier |
The identifier value for the product. Send the product ID sourced as per note above in OfferIdentifier. |
Optional |
SegmentSequence |
The segment to retrieve the seat map for. If sent, ProductIdentifier must also be sent. Can send multiple sequence numbers to return flights on multiple segments. Note that the segmentSequence value for connecting flights is the same; for example, for two connecting flights on the outbound or first leg of the itinerary, both flights have the segmentSequence value 1. Optional. If segment sequence is sent, response returns seat maps for only that segment and product. If not sent, response returns seat maps for all flights on the product.
|
Optional |
Response
The seat map response is similar for all Seat Map requests, regardless of where sent in the workflow. Exceptions:
-
Outside a workbench session, TravelerIdentifierRef returns only the PTC, as there are no traveler details at this point in the workflow.
-
HeldAncillary is returned only in a workbench session and only when seat/s have already been assigned. It returns the current seat assignment/s for all travelers on the booking. These will be held while modifying seats until the new seat book request is confirmed at commit.
Object |
Description |
---|---|
CatalogOfferingsAncillaryListResponse |
Top level object for response. Key value pairs:
Includes CatalogOfferingsID, Result, Identifier, and ReferenceList objects. |
CatalogOfferingsAncillaryListResponse/Identifier |
Includes the following attribute:
This value must be sent in any subsequent seat book request in CatalogOfferingsIdentifier/Identifier (note the s in CatalogOfferingsIdentifier).
|
CatalogOfferingsID |
Each instance of CatalogOfferingsID returns seat details for one requested flight. Contains the following attribute:
Contains Identifier, AncillaryOffering, Traveler, and Flight objects. |
CatalogOfferingsID/Identifier |
Includes the following attribute:
Send this value in any subsequent seat book request in CatalogOfferingIdentifier/Identifier (note nos in CatalogOfferingIdentifier).
|
CatalogOffering |
Top level object. One instance returned for each price point of seats on this flight, including free seats. Includes the following attribute:
Contains ProductOptions and Price objects. |
ProductOptions |
Top level object. Contains Product object. |
Product |
Includes the following:
Contains SeatAvailability, Brand, and SeatingChartRef objects. |
SeatAvailability |
Array. Each instance has a different seatAvailabilityStatus. Includes the following key value pairs seatAvailabilityStatus: The status of all seats in this instance of SeatAvailability. Possible values are:
value: A list of all seat numbers on that flight with that seatAvailabilityStatus. |
Brand |
Any brand information for seats in this Product. Includes the following:
|
SeatingChartRef |
A reference identifier for the seating chart for this Product. Maps to corresponding information in ReferenceList per below. |
Price |
Price details for the seats in this CatalogOffering. All seats in this instance have the same Price details. Includes CurrencyCode, Base, and TotalPrice. |
CurrencyCode |
The currency in which the price is returned. Unless changed in the request, the currency is the default associated with your provisioned PCC from Travelport. Key value pairs:
|
Base |
Base price for the seat. |
TotalPrice |
Total price for the seat; value of 0 indicates a free seat. |
TravelerIdentierRef |
Traveler details. If seat maps are requested in a workbench session, returns one instance for each traveler on the booking. If requested outside a workbench, returns one instance per PTC, and only passengerTypeCode is returned because there are no other traveler details at this point. Key value pairs:
|
HeldAncillary |
Ancillaries 24.11.32 and later. GDS only; not supported for NDC.
Returned when the Seat Map request is sent for flight/s that already have seat assignments. Returns an instance for each existing seat assignment. These will be held while modifying seats until the new seat book request is confirmed at commit. Includes the Ancillary object. |
Ancillary |
Top-level object for current seat assignment on a specific flight. Includes FlightRef and Seat Assignment. |
FlightRef |
String. Returns the internal reference ID for the flight with a current seat assignment. |
SeatAssignment |
Top-level object for current seat assignment. Includes Seat. |
Seat |
String. Current seat assignment value including row and seat number. |
Flight |
One instance per flight. Key value pairs:
Includes Identifier, Departure, and Arrival objects. |
Flight/Identifier |
Internal identifier for the flight. Key value pairs:
|
Departure |
Departure details. Key value pairs are the location, date, time, and terminal of departure. |
Arrival |
Arrival details. Key value pairs are the location, date, time, and terminal of arrival. |
Result |
Returns any errors or warnings. |
ReferenceList |
Top level object with @typeReferenceListSeatingChart to consolidate seating chart information. |
SeatingChart |
One instance of SeatingChart is returned for each flight requested. Key value pair:
Includes the Cabin object. |
Cabin |
Array. One instance per cabin class. Includes:
Includes Layout and Row objects. |
Layout |
Defines the general layout for this cabin class in the following key value pairs:
In the following example Layout object, startRow and endRow indicate that this cabin class begins with row 4, and the last row in this class is row 30. It returns six paired instances of position and value, indicating that this cabin class has seat columns A through F (each of six values in value), in which A and F are window seats (position=W), B and E are center seats (position=C), and C and D are aisle seats (position=A). Show Example Layout object
|
Row |
One instance for each row in this cabin class; returns details for each seat in that row. Key value pair:
Includes Space object. |
Space |
One instance for each seat in the row. Includes the following:
Includes the Characteristic object. |
Characteristic |
Array. String. A list of Characteristic values for that seat. Codes are set by IATA; for a list of codes and values see IATA PADIS 9825 for EDIFACT Standards for Seat Characteristics. |
Example Request
Example Request after Search, no workbench
You can request seat maps after any Search, Next Leg Search, or Flight Specific Search response without establishing a workbench. You can request seat maps for the entire itinerary (the offer), all flights on one leg (the product), or a single flight (the segment). The following example requests seat maps for all flights on product p0, which is one leg of the itinerary.
{
"CatalogOfferingsQuerySeatAvailability": {
"SeatAvailabilityOfferings": {
"@type": "SeatAvailabilityOfferingsBuildFromCatalogProductOfferings",
"BuildFromCatalogProductOfferingsRequest": {
"@type": "BuildFromCatalogProductOfferingsRequest",
"CatalogProductOfferingsIdentifier": {
"id": "catalogProductOfferings_1",
"Identifier": {
"value": "024596a4-b121-4c25-bc3e-72475f42969c",
"authority": "Travelport"
}
},
"CatalogProductOfferingSelection": [
{
"@type": "CatalogProductOfferingSelection",
"CatalogProductOfferingIdentifier": {
"id": "o1"
},
"ProductIdentifier": [
{
"id": "p0"
}
}
}
]
}
Example Request after AirPrice, no workbench
A seat map request following an AirPrice request also supports requesting seat maps for all flights either in the offer, the product, or segment. The following example requests a seat map for only segment 1 in product p0.
{
"CatalogOfferingsQuerySeatAvailability": {
"SeatAvailabilityOfferings": {
"@type": "SeatAvailabilityOfferingsBuildFromOfferList",
"BuildFromOfferList": {
"OfferListIdentifier": "9219fb8f-3081-401a-80a4-b8195001f16a",
"OfferIdentifier": [
{
"id": "o0"
}
],
"ProductIdentifier": [
{
"id": "p0"
}
],
"SegmentSequence": 1
}
}
}
}
Example Request in workbench
When sent during either an initial or post-commit workbench session, the Seat Map request can return seat maps for either all flights in the offer, the product (one leg), or by segment (one flight) for both GDS and NDC.
The following example sends only the offer identifier. This returns seat maps for all flights in the itinerary.
{
"CatalogOfferingsQuerySeatAvailability": {
"SeatAvailabilityOfferings": {
"@type": "SeatAvailabilityOfferingsBuildFromReservationWorkbench",
"BuildFromReservationWorkbench": {
"ReservationIdentifier": {
"Identifier": {
"value": "bc3df585-1194-4e39-83a6-e9c721c175a5"
}
},
"OfferIdentifier": {
"Identifier": {
"authority": "Travelport",
"value": "5f476fac-f5a8-439f-9c54-61249cd311dc"
}
}
}
}
}
}
The following example requests a seat map for two products. This returns seat maps for all flights on those products. In the JSON APIs, a product is one leg of an itinerary.
{
"CatalogOfferingsQuerySeatAvailability": {
"SeatAvailabilityOfferings": {
"@type": "SeatAvailabilityOfferingsBuildFromReservationWorkbench",
"BuildFromReservationWorkbench": {
"ReservationIdentifier": {
"Identifier": {
"value": "363cddbf-cb91-4864-b3f2-757e71a23a3e"
}
},
"OfferIdentifier": {
"Identifier": {
"authority": "Travelport",
"value": "73c39631-7208-4f74-abb2-1d4c7dd65a59"
}
},
"ProductIdentifier": [
{
"Identifier": {
"authority": "Travelport",
"value": "2bcb6bc7-656b-4dbc-bacf-b0d80748d314"
}
},
{
"Identifier": {
"authority": "Travelport",
"value": "9835b084-0b18-4d1c-bc61-062842cb73b7"
}
}
]
}
}
}
}
The following example requests a seat map for the first segment in the requested product on an NDC itinerary (you can tell this is NDC because Identifier/authority sends the carrier code instead of the value Travelport). This returns seat maps for the first flight on the leg specified by that product ID.
{
"CatalogOfferingsQuerySeatAvailability": {
"SeatAvailabilityOfferings": {
"@type": "SeatAvailabilityOfferingsBuildFromReservationWorkbench",
"BuildFromReservationWorkbench": {
"ReservationIdentifier": {
"Identifier": {
"authority": "Travelport",
"value": "3132f9aa-03d1-4286-b38a-c82cf2a1e001"
}
},
"OfferIdentifier": {
"Identifier": {
"authority": "SQ",
"value": "U1AxRi02NzMwMzAyMDM1NTgwOTkyNjg1LTN8U1AxRi02NzMwMzAyMDM1NTgwOTkyNjg1fG51bGx8QURUOlNQMUYtNjczMDMwMjAzNTU4MDk5MjY4NS0zLTF8U1F8cDBfczE0ODctU0VHMnxBRFQ6UEFYMSxBRFQ6UEFYMg=="
}
},
"ProductIdentifier": [
{
"Identifier": {
"value": "285e5459-3f21-4123-aa2d-ff685294ff70"
}
}
],
"SegmentSequenceList": [
"1"
]
}
}
}
}
Example Response
The seat map response is nearly identical whether the request was sent after Search, after AirPrice, or in a workbench session. The only difference is that outside a workbench session, TravelerIdentifierRef returns only passengerTypeCode, as there are no traveler details at this point in the workflow. For brevity, all instances of Row after the first two rows have been edited out.
{
"CatalogOfferingsAncillaryListResponse": {
"@type": "CatalogOfferingsAncillaryListResponse",
"transactionId": "72e79c69-f55d-564a-c2f8-0e8a2d16ac35",
"CatalogOfferingsID": [
{
"@type": "CatalogOfferingsTravelerFlight",
"id": "travflight_1_0",
"Identifier": {
"value": "43b4fda6-5b3c-4f5d-981b-c43121f27978"
},
"CatalogOffering": [
{
"@type": "CatalogOffering",
"id": "ancillaryID_1_0_1",
"Identifier": {
"authority": "Travelport",
"value": "6fd4aa88-94c5-4375-b05a-a9d992216b55"
},
"ProductOptions": [
{
"@type": "ProductOptions",
"Product": [
{
"@type": "ProductSeatAvailability",
"id": "productSeatID_1",
"SeatAvailability": [
{
"seatAvailabilityStatus": "Available",
"value": [
"15A",
"15B",
"15C",
"15D",
"15E",
"15F",
"16A",
"16B",
"16C",
"16D",
"16E",
"16F",
"17A",
"17B",
"17C",
"17D",
"17E",
"17F",
"18C",
"18D",
"18E",
"18F",
"19A",
"19B",
"19C",
"19D",
"19E",
"19F",
"20C",
"20D",
"20E",
"20F",
"22A",
"22B",
"22C",
"25A",
"25B",
"25C",
"25D",
"25E",
"25F",
"26A",
"26B",
"26C",
"26D",
"26E",
"26F",
"27A",
"27B",
"27C",
"27D",
"27E",
"27F"
]
},
{
"seatAvailabilityStatus": "Reserved",
"value": [
"4A",
"4B",
"4C",
"4D",
"4E",
"4F",
"5A",
"5B",
"5C",
"5D",
"5E",
"5F",
"6A",
"6B",
"6C",
"6D",
"6E",
"6F",
"7A",
"7B",
"7C",
"7D",
"7E",
"7F",
"8A",
"8B",
"8C",
"8D",
"8E",
"8F",
"10A",
"10B",
"10C",
"10D",
"10E",
"10F",
"11A",
"11B",
"11C",
"11D",
"11E",
"11F",
"12A",
"12B",
"12C",
"12D",
"12E",
"12F",
"18A",
"18B",
"20A",
"20B",
"21A",
"21B",
"21C",
"21D",
"21E",
"21F",
"22D",
"22E",
"22F",
"23A",
"23B",
"23C",
"23D",
"23E",
"23F",
"24A",
"24B",
"24C",
"24D",
"24E",
"24F",
"29A",
"29B",
"29C",
"29D",
"29E",
"29F",
"30A",
"30B",
"30C",
"30D",
"30E",
"30F"
]
}
],
"Brand": {
"@type": "Brand",
"name": "SEAT ASSIGNMENT"
},
"SeatingChartRef": "seatingChart_1"
}
]
}
],
"Price": {
"@type": "PriceDetail",
"CurrencyCode": {
"decimalPlace": 2,
"value": "AUD"
},
"Base": 0,
"TotalPrice": 0
}
},
{
"@type": "CatalogOffering",
"id": "ancillaryID_1_0_2",
"Identifier": {
"authority": "Travelport",
"value": "7cabe058-1c65-4011-ab16-221adef7fdb9"
},
"ProductOptions": [
{
"@type": "ProductOptions",
"Product": [
{
"@type": "ProductSeatAvailability",
"id": "productSeatID_2",
"SeatAvailability": [
{
"seatAvailabilityStatus": "Available",
"value": [
"9A",
"9B",
"9C",
"9E",
"9F"
]
}
],
"Brand": {
"@type": "Brand",
"name": "PREFERRED SEAT"
},
"SeatingChartRef": "seatingChart_1"
}
]
}
],
"Price": {
"@type": "PriceDetail",
"CurrencyCode": {
"decimalPlace": 2,
"value": "AUD"
},
"Base": 8.18,
"TotalTaxes": 0.82,
"TotalPrice": 9,
"PriceBreakdown": [
{
"@type": "PriceBreakdownAncillaryAir",
"Amount": {
"@type": "Amount",
"Taxes": {
"@type": "TaxesDetail",
"Tax": [
{
"taxCode": "UO",
"value": 0.82
}
]
}
}
}
]
}
}
],
"TravelerIdentifierRef": [
{
"passengerTypeCode": "ADT"
}
],
"Flight": [
{
"@type": "Flight",
"distance": 456,
"duration": "PT1H35M",
"carrier": "QF",
"number": "0409",
"equipment": "73H",
"id": "s1",
"Departure": {
"@type": "DepartureDetail",
"terminal": "3",
"location": "SYD",
"date": "2024-09-01",
"time": "07:00:00"
},
"Arrival": {
"@type": "ArrivalDetail",
"terminal": "1",
"location": "MEL",
"date": "2024-09-01",
"time": "08:35:00"
}
}
]
}
],
"Result": {
"@type": "Result"
},
"Identifier": {
"value": "05bf30d6-6394-4679-9566-fa0ccd448373"
},
"ReferenceList": [
{
"@type": "ReferenceListSeatingChart",
"SeatingChart": [
{
"@type": "SeatingChart",
"id": "seatingChart_1",
"Cabin": [
{
"@type": "Cabin",
"name": "ECONOMY",
"Layout": [
{
"startRow": 4,
"endRow": 30
},
{
"position": [
"W"
],
"value": "A"
},
{
"position": [
"C"
],
"value": "B"
},
{
"position": [
"A"
],
"value": "C"
},
{
"position": [
"A"
],
"value": "D"
},
{
"position": [
"C"
],
"value": "E"
},
{
"position": [
"W"
],
"value": "F"
}
],
"Row": [
{
"@type": "Row",
"label": "4",
"Space": [
{
"@type": "Space",
"location": "A",
"Characteristic": [
"BK"
]
},
{
"@type": "Space",
"location": "B",
"Characteristic": [
"BK"
]
},
{
"@type": "Space",
"location": "C",
"Characteristic": [
"BK"
]
},
{
"@type": "Space",
"location": "D",
"Characteristic": [
"BK"
]
},
{
"@type": "Space",
"location": "E",
"Characteristic": [
"BK"
]
},
{
"@type": "Space",
"location": "F",
"Characteristic": [
"BK"
]
}
]
},
{
"@type": "Row",
"label": "5",
"Space": [
{
"@type": "Space",
"location": "A",
"Characteristic": [
"BK"
]
},
{
"@type": "Space",
"location": "B",
"Characteristic": [
"BK"
]
},
{
"@type": "Space",
"location": "C",
"Characteristic": [
"BK"
]
},
{
"@type": "Space",
"location": "D",
"Characteristic": [
"BK"
]
},
{
"@type": "Space",
"location": "E",
"Characteristic": [
"BK"
]
},
{
"@type": "Space",
"location": "F",
"Characteristic": [
"BK"
]
}
]
}
]
}
]
}
]
}
]
}
}
The following example returns the seat map for a single flight, which offers only free seats, indicated by the single instance of CatalogOffering with a Price/TotalPrice value of 0. For brevity, all instances of Row after the first two rows have been edited out.
{
"CatalogOfferingsAncillaryListResponse": {
"transactionId": "775bac8c-e9f4-2d0a-6322-3cd191d52a77",
"CatalogOfferingsID": [
{
"@type": "CatalogOfferingsTravelerFlight",
"Identifier": {
"value": "6832ba78-cb06-4b80-866d-c44ebba780bb"
},
"CatalogOffering": [
{
"@type": "CatalogOffering",
"id": "ancillaryID_1",
"ProductOptions": [
{
"@type": "ProductOptions",
"Product": [
{
"@type": "ProductSeatAvailability",
"id": "productSeatID_1",
"SeatAvailability": [
{
"seatAvailabilityStatus": "Available",
"value": [
"8A",
"8B",
"8C",
"8D",
"9A",
"9B",
"9C",
"9D",
"10A",
"10B",
"10C",
"10D",
"20A",
"20B",
"20C",
"20D",
"21A",
"21B",
"21C",
"21D",
"22B",
"22C",
"22D",
"24D"
]
},
{
"seatAvailabilityStatus": "Reserved",
"value": [
"7C",
"7D",
"19C",
"19D"
]
},
{
"seatAvailabilityStatus": "Blocked",
"value": [
"7B",
"11A",
"11B",
"11C",
"11D",
"12A",
"12B",
"12C",
"12D",
"15A",
"15B",
"15C",
"15D",
"16A",
"16B",
"16C",
"16D",
"17A",
"17B",
"17C",
"17D",
"18A",
"18B",
"18C",
"18D"
]
}
],
"Brand": {
"@type": "Brand",
"name": "SEAT ASSIGNMENT"
},
"SeatingChartRef": "seatingChart_1"
}
]
}
],
"Price": {
"@type": "PriceDetail",
"CurrencyCode": {
"decimalPlace": 2,
"value": "AUD"
},
"Base": 0,
"TotalPrice": 0
}
}
],
"TravelerIdentifierRef": [
{
"name": "TestFirst TestLast",
"passengerTypeCode": "ADT",
"id": "trav_1",
"value": "b6cf8a88-53c7-4f97-8ebf-e1541fc16e77"
}
],
"Flight": [
{
"@type": "Flight",
"distance": 327,
"duration": "PT1H29M",
"carrier": "UA",
"number": "4795",
"equipment": "E7W",
"id": "f1",
"Identifier": {
"authority": "Travelport",
"value": "8d13fdd8-092e-4310-a2c3-db5f89c7eb58"
},
"Departure": {
"@type": "DepartureDetail",
"location": "BUR",
"date": "2022-09-09",
"time": "07:24:00"
},
"Arrival": {
"@type": "ArrivalDetail",
"location": "SFO",
"date": "2022-09-09",
"time": "08:53:00"
}
}
]
}
],
"Result": {
"@type": "Result"
},
"Identifier": {
"value": "9ea0dd41-aed7-4cbf-b2c1-283a81a1cbb1"
},
"ReferenceList": [
{
"@type": "ReferenceListSeatingChart",
"SeatingChart": [
{
"@type": "SeatingChart",
"id": "seatingChart_1",
"Cabin": [
{
"@type": "Cabin",
"name": "ECONOMY",
"Layout": [
{
"startRow": 7,
"endRow": 24
},
{
"position": [
"W"
],
"value": "A"
},
{
"position": [
"A"
],
"value": "B"
},
{
"position": [
"A"
],
"value": "C"
},
{
"position": [
"W"
],
"value": "D"
}
],
"Row": [
{
"@type": "Row",
"label": "7",
"Space": [
{
"@type": "Space",
"location": "B",
"Characteristic": [
"A",
"N",
"CH"
]
},
{
"@type": "Space",
"location": "C",
"Characteristic": [
"BK"
]
},
{
"@type": "Space",
"location": "D",
"Characteristic": [
"BK"
]
}
]
},
{
"@type": "Row",
"label": "8",
"Space": [
{
"@type": "Space",
"location": "A",
"Characteristic": [
"N",
"W",
"O"
]
},
{
"@type": "Space",
"location": "B",
"Characteristic": [
"A",
"N",
"O"
]
},
{
"@type": "Space",
"location": "C",
"Characteristic": [
"A",
"N",
"O"
]
},
{
"@type": "Space",
"location": "D",
"Characteristic": [
"N",
"W",
"O"
]
}
]
]
}
]
}
]
}
]
}
}
The following seat map response for NDC (CatalogOffering/Identifier/authority returns a carrier code instead of the value Travelport) returns both free seats (price of 0) and paid seats (price of 60), each in a separate instance of CatalogOffering. For brevity, all instances of Row after the first two rows have been edited out.
{
"CatalogOfferingsAncillaryListResponse": {
"@type": "CatalogOfferingsAncillaryListResponse",
"CatalogOfferingsID": [
{
"@type": "CatalogOfferingsTravelerFlight",
"Identifier": {
"authority": "Travelport",
"value": "0aa46b7b-1f05-42e1-8cd8-6d2796e3fb71"
},
"CatalogOffering": [
{
"@type": "CatalogOffering",
"Identifier": {
"authority": "SQ",
"value": "UFJJQ0UyLVNFRzR8UEFYMXxTRUc0fHRyYXZfMQ=="
},
"ProductOptions": [
{
"@type": "ProductOptions",
"Product": [
{
"@type": "ProductSeatAvailability",
"SeatAvailability": [
{
"seatAvailabilityStatus": "Available",
"value": [
"32C",
"32H",
"32K",
"33A",
"33C",
"33E",
"33F",
"33H",
"33K",
"34A",
"34C",
"34D",
"34E",
"34F",
"34G",
"34H",
"34K",
"35A",
"35C",
"35D",
"35E",
"35F",
"35G",
"35H",
"35K",
"36A",
"36C",
"36D",
"36E",
"36F",
"36G",
"36H",
"36K",
"37A",
"37C",
"37H",
"37K"
]
},
{
"seatAvailabilityStatus": "Unavailable",
"value": [
"32A",
"33D",
"33G"
]
}
],
"Brand": {
"@type": "Brand",
"name": "FREE SEAT",
"id": "brand_2"
},
"SeatingChartRef": "seatingChart_p0s1108"
}
]
}
],
"Price": {
"@type": "PriceDetail",
"id": "UFJJQ0UyLVNFRzQ=",
"CurrencyCode": {
"value": "USD"
},
"Base": 0,
"TotalPrice": 0
}
},
{
"@type": "CatalogOffering",
"Identifier": {
"authority": "SQ",
"value": "UFJJQ0UxLVNFRzR8UEFYMXxTRUc0fHRyYXZfMQ=="
},
"ProductOptions": [
{
"@type": "ProductOptions",
"Product": [
{
"@type": "ProductSeatAvailability",
"SeatAvailability": [
{
"seatAvailabilityStatus": "Available",
"value": [
"31A",
"31C",
"31H",
"31K"
]
}
],
"Brand": {
"@type": "Brand",
"name": "PREMIUM SEAT",
"id": "brand_1"
},
"SeatingChartRef": "seatingChart_p0s1108"
}
]
}
],
"Price": {
"@type": "PriceDetail",
"id": "UFJJQ0UxLVNFRzQ=",
"CurrencyCode": {
"value": "USD"
},
"Base": 60,
"TotalPrice": 60
}
}
],
"TravelerIdentifierRef": [
{
"name": " TestFirst TestLast",
"passengerTypeCode": "ADT",
"id": "trav_1",
"value": "231b07de-5c98-4656-a9e1-0072697fbcca"
}
],
"Flight": [
{
"@type": "Flight",
"stops": 0,
"duration": "PT4H",
"carrier": "SQ",
"number": "893",
"operatingCarrier": "SQ",
"operatingCarrierName": "SINGAPORE AIRLINES",
"equipment": "388",
"id": "s1108",
"Identifier": {
"value": "SEG4"
},
"Departure": {
"@type": "DepartureDetail",
"terminal": "1",
"location": "HKG",
"date": "2024-01-21",
"time": "15:45:00"
},
"Arrival": {
"@type": "ArrivalDetail",
"terminal": "0",
"location": "SIN",
"date": "2024-01-21",
"time": "19:45:00"
}
}
]
}
],
"Identifier": {
"authority": "Travelport",
"value": "16f35ce4-9b14-4c34-af3e-9979116cca1a"
},
"ReferenceList": [
{
"@type": "ReferenceListSeatingChart",
"SeatingChart": [
{
"@type": "SeatingChart",
"id": "seatingChart_p0s1108",
"Cabin": [
{
"@type": "Cabin",
"name": "S",
"Layout": [
{
"position": [
"W"
],
"value": "A"
},
{
"position": [
"A"
],
"value": "C"
},
{
"position": [
"A"
],
"value": "H"
},
{
"position": [
"W"
],
"value": "K"
},
{
"position": [
"A"
],
"value": "D"
},
{
"position": [
"C"
],
"value": "E"
},
{
"position": [
"C"
],
"value": "F"
},
{
"position": [
"A"
],
"value": "G"
},
{
"startRow": 31,
"endRow": 37
}
],
"Row": [
{
"@type": "Row",
"label": "31",
"Space": [
{
"@type": "Space",
"location": "A",
"Characteristic": [
"CH",
"L",
"W"
]
},
{
"@type": "Space",
"location": "C",
"Characteristic": [
"A",
"CH",
"I",
"L"
]
},
{
"@type": "Space",
"location": "H",
"Characteristic": [
"A",
"CH",
"I",
"L"
]
},
{
"@type": "Space",
"location": "K",
"Characteristic": [
"CH",
"L",
"W"
]
}
]
},
{
"@type": "Row",
"label": "32",
"Space": [
{
"@type": "Space",
"location": "A",
"Characteristic": [
"W"
]
},
{
"@type": "Space",
"location": "C",
"Characteristic": [
"A",
"H"
]
},
{
"@type": "Space",
"location": "H",
"Characteristic": [
"A",
"H"
]
},
{
"@type": "Space",
"location": "K",
"Characteristic": [
"W"
]
}
]
},
{
"@type": "Row",
"label": "33",
"Space": [
{
"@type": "Space",
"location": "A",
"Characteristic": [
"W"
]
},
{
"@type": "Space",
"location": "C",
"Characteristic": [
"A",
"H",
"I"
]
},
{
"@type": "Space",
"location": "D",
"Characteristic": [
"1",
"A",
"B",
"I"
]
},
{
"@type": "Space",
"location": "E",
"Characteristic": [
"9"
]
},
{
"@type": "Space",
"location": "F",
"Characteristic": [
"9",
"I"
]
},
{
"@type": "Space",
"location": "G",
"Characteristic": [
"1",
"A",
"B",
"I"
]
},
{
"@type": "Space",
"location": "H",
"Characteristic": [
"A",
"H",
"I"
]
},
{
"@type": "Space",
"location": "K",
"Characteristic": [
"W"
]
}
]
}
]
}
]
}
]
}
]
}
}
When Seat Map is sent for flight/s in a booking that already have seat assignments, HeldAncillary is returned, listing the current SeatAssignment for all travelers on the flight/s. This supports modifying seats by holding the current seats until the new seats are successfully booked at workbench commit, ensuring those seats remain available in case of a booking failure. For brevity, the objects in Cabin/Layout and Cabin/Row have been removed from this example.
{
"CatalogOfferingsAncillaryListResponse": {
"@type": "CatalogOfferingsAncillaryListResponse",
"transactionId": "7a8308c5-3341-4066-ab0a-61aab0b09321",
"traceId": "f5a9dc78-3a77-4b0b-8fa9-4a49d489df76",
"CatalogOfferingsID": [
{
"@type": "CatalogOfferingsTravelerFlight",
"id": "travflight_1_0",
"Identifier": {
"value": "ac32d92c-64fd-4820-83b7-7fe86ba5e7a0"
},
"CatalogOffering": [
{
"@type": "CatalogOffering",
"id": "ancillaryID_1_0_1",
"Identifier": {
"authority": "Travelport",
"value": "07d250e7-f015-447d-989e-d47e455ee335"
},
"ProductOptions": [
{
"@type": "ProductOptions",
"Product": [
{
"@type": "ProductSeatAvailability",
"id": "productSeatID_1",
"SeatAvailability": [
{
"seatAvailabilityStatus": "Available",
"value": [
"5A",
"5B",
"5C",
"5E",
"5F",
"6A",
"6B",
"6C",
"6E",
"6F",
"7A",
"7B",
"7C",
"7E",
"7F",
"8A",
"8B",
"8C",
"8E",
"8F",
"15A",
"15B",
"15C",
"15D",
"15E",
"15F",
"16A",
"16B",
"16C",
"16D",
"16E",
"16F",
"17A",
"17B",
"17C",
"17D",
"17E",
"17F",
"18A",
"18B",
"18C",
"18D",
"18E",
"18F",
"19A",
"19B",
"19C",
"19D",
"19E",
"19F",
"20A",
"20B",
"20C",
"20D",
"20E",
"20F",
"21A",
"21B",
"21C",
"21D",
"21E",
"21F",
"22A",
"22B",
"22C",
"22D",
"22E",
"22F",
"23A",
"23B",
"23C",
"23D",
"23E",
"23F",
"24A",
"24B",
"24C",
"24D",
"24E",
"24F",
"25A",
"25B",
"25C",
"25D",
"25E",
"25F",
"26A",
"26B",
"26D",
"26E",
"26F",
"27A",
"27B",
"27C",
"27D",
"27E",
"27F"
]
},
{
"seatAvailabilityStatus": "Reserved",
"value": [
"9A",
"9F",
"10A",
"10B",
"10C",
"10D",
"10E",
"10F",
"11A",
"11B",
"11C",
"11D",
"11E",
"11F",
"12A",
"12B",
"12C",
"12D",
"12E",
"12F",
"13D",
"26C",
"29A",
"29B",
"29C",
"29D",
"29E",
"29F",
"30A",
"30B",
"30C",
"30D",
"30E",
"30F"
]
}
],
"Brand": {
"@type": "Brand",
"name": "SEAT ASSIGNMENT"
},
"SeatingChartRef": "seatingChart_1"
}
]
}
],
"Price": {
"@type": "PriceDetail",
"CurrencyCode": {
"decimalPlace": 2,
"value": "GBP"
},
"Base": 0,
"TotalPrice": 0
}
},
{
"@type": "CatalogOffering",
"id": "ancillaryID_1_0_2",
"Identifier": {
"authority": "Travelport",
"value": "b9e0100a-a5e4-4134-be87-e4e4dbb48953"
},
"ProductOptions": [
{
"@type": "ProductOptions",
"Product": [
{
"@type": "ProductSeatAvailability",
"id": "productSeatID_2",
"SeatAvailability": [
{
"seatAvailabilityStatus": "Reserved",
"value": [
"4A",
"4B",
"4C",
"4D",
"4E",
"4F"
]
}
],
"Brand": {
"@type": "Brand",
"name": "EXTRA LEGROOM"
},
"SeatingChartRef": "seatingChart_1"
}
]
}
],
"Price": {
"@type": "PriceDetail",
"CurrencyCode": {
"decimalPlace": 2,
"value": "GBP"
},
"Base": 45,
"TotalTaxes": 0,
"TotalPrice": 45,
"PriceBreakdown": [
{
"@type": "PriceBreakdownAncillaryAir",
"Amount": {
"@type": "Amount",
"Taxes": {
"@type": "TaxesDetail",
"Tax": [
{
"value": 0
}
]
}
}
}
]
}
},
{
"@type": "CatalogOffering",
"id": "ancillaryID_1_0_3",
"Identifier": {
"authority": "Travelport",
"value": "cce684c1-a193-47b7-ac38-413c20a44d40"
},
"ProductOptions": [
{
"@type": "ProductOptions",
"Product": [
{
"@type": "ProductSeatAvailability",
"id": "productSeatID_3",
"SeatAvailability": [
{
"seatAvailabilityStatus": "Available",
"value": [
"9B",
"9C",
"9E"
]
}
],
"Brand": {
"@type": "Brand",
"name": "PREFERRED SEAT"
},
"SeatingChartRef": "seatingChart_1"
}
]
}
],
"Price": {
"@type": "PriceDetail",
"CurrencyCode": {
"decimalPlace": 2,
"value": "GBP"
},
"Base": 10,
"TotalTaxes": 0,
"TotalPrice": 10,
"PriceBreakdown": [
{
"@type": "PriceBreakdownAncillaryAir",
"Amount": {
"@type": "Amount",
"Taxes": {
"@type": "TaxesDetail",
"Tax": [
{
"value": 0
}
]
}
}
}
]
}
}
],
"TravelerIdentifierRef": [
{
"name": "RAMESH KK",
"passengerTypeCode": "ADT",
"id": "travelerRefId_1",
"value": "70243488-bcfa-458c-9c3f-604a9d769c57"
},
{
"name": "SARAN KUMAR",
"passengerTypeCode": "CHD",
"id": "travelerRefId_2",
"value": "c89cdd15-0410-4dfe-b85b-df95fbb6b099"
}
],
"HeldAncillary": [
{
"@type": "HeldAncillary",
"travelerRef": "travelerRefId_1",
"Ancillary": {
"@type": "AncillaryAirSeat",
"FlightRef": [
"Flight_01"
],
"SeatAssignment": {
"@type": "SeatAssignment",
"Seat": "009A"
}
}
},
{
"@type": "HeldAncillary",
"travelerRef": "travelerRefId_2",
"Ancillary": {
"@type": "AncillaryAirSeat",
"FlightRef": [
"Flight_01"
],
"SeatAssignment": {
"@type": "SeatAssignment",
"Seat": "009F"
}
}
}
],
"Flight": [
{
"@type": "Flight",
"duration": "PT4H30M",
"carrier": "QF",
"number": "0932",
"equipment": "73H",
"id": "Flight_01",
"Identifier": {
"authority": "Travelport",
"value": "42612123-43e4-4452-91e5-ee2dea0dc5eb"
},
"Departure": {
"@type": "DepartureDetail",
"location": "PER",
"date": "2024-11-23",
"time": "06:00:00"
},
"Arrival": {
"@type": "ArrivalDetail",
"location": "BNE",
"date": "2024-11-23",
"time": "12:30:00"
}
}
]
}
],
"Result": {
"@type": "Result"
},
"Identifier": {
"value": "a53cf939-9491-4128-8790-af963dc8d505"
},
"ReferenceList": [
{
"@type": "ReferenceListSeatingChart",
"SeatingChart": [
{
"@type": "SeatingChart",
"id": "seatingChart_1",
"Cabin": [
{
"@type": "Cabin",
"name": "ECONOMY",
"Layout": [...],
"Row": [...]
}
]
}
]
}
]
}
}