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 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 |
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 |
Response
The seat map response is the same for all Seat Map requests, regardless of where sent in the workflow.
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. |
HeldAncillary |
Ancillaries 24.11.32 and later. GDS only; not supported for NDC.
Returned if the Seat Map request is sent for a flight that already has a seat assignment. 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. |
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 information sent in the previous Add Traveler step, if sent in a booking workbench. Common object in the model. |
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. Includes:
Includes the Cabin object. |
Cabin |
Array. One instance per cabin class. Includes:
Includes Layout and Row objects. |
Layout |
Layout for this cabin class, including tyhe following pairs:
|
Row |
One instance of Row is returned for each row in the seat map. Returns seats information by row. Includes the following attribute:
Includes Space object. |
Space |
One instance of Space is returned for each seat in the row. Includes the following:
Includes the Characteristic object. |
Characteristic |
List of characteristics for that row or seat. For codes refer to IATA PADIS 9825 for EDIFACT Standards for Seat Characteristics and IATA PADIS 9864 for EDIFACT Standards for Row 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. 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 the same regardless of whether the request was sent after Search, after AirPrice, or in a workbench session.
The following complete example of a GDS seat map response 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.
{
"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"
]
}
]
},
{
"@type": "Row",
"label": "9",
"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"
]
}
]
},
{
"@type": "Row",
"label": "10",
"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"
]
}
]
},
{
"@type": "Row",
"label": "11",
"Space": [
{
"@type": "Space",
"location": "A",
"Characteristic": [
"N",
"W",
"CH"
]
},
{
"@type": "Space",
"location": "B",
"Characteristic": [
"A",
"N",
"CH"
]
},
{
"@type": "Space",
"location": "C",
"Characteristic": [
"A",
"N",
"CH"
]
},
{
"@type": "Space",
"location": "D",
"Characteristic": [
"N",
"W",
"CH"
]
}
]
},
{
"@type": "Row",
"label": "12",
"Space": [
{
"@type": "Space",
"location": "A",
"Characteristic": [
"N",
"OW",
"W",
"CH"
]
},
{
"@type": "Space",
"location": "B",
"Characteristic": [
"A",
"N",
"OW",
"CH"
]
},
{
"@type": "Space",
"location": "C",
"Characteristic": [
"A",
"N",
"OW",
"CH"
]
},
{
"@type": "Space",
"location": "D",
"Characteristic": [
"N",
"OW",
"W",
"CH"
]
}
],
"Characteristic": [
"K"
]
},
{
"@type": "Row",
"label": "15",
"Space": [
{
"@type": "Space",
"location": "A",
"Characteristic": [
"N",
"OW",
"W",
"CH"
]
},
{
"@type": "Space",
"location": "B",
"Characteristic": [
"A",
"N",
"OW",
"CH"
]
},
{
"@type": "Space",
"location": "C",
"Characteristic": [
"A",
"N",
"OW",
"CH"
]
},
{
"@type": "Space",
"location": "D",
"Characteristic": [
"N",
"OW",
"W",
"CH"
]
}
],
"Characteristic": [
"K"
]
},
{
"@type": "Row",
"label": "16",
"Space": [
{
"@type": "Space",
"location": "A",
"Characteristic": [
"N",
"OW",
"W",
"CH"
]
},
{
"@type": "Space",
"location": "B",
"Characteristic": [
"A",
"N",
"OW",
"CH"
]
},
{
"@type": "Space",
"location": "C",
"Characteristic": [
"A",
"N",
"OW",
"CH"
]
},
{
"@type": "Space",
"location": "D",
"Characteristic": [
"N",
"OW",
"W",
"CH"
]
}
],
"Characteristic": [
"K"
]
},
{
"@type": "Row",
"label": "17",
"Space": [
{
"@type": "Space",
"location": "A",
"Characteristic": [
"N",
"OW",
"W",
"CH"
]
},
{
"@type": "Space",
"location": "B",
"Characteristic": [
"A",
"N",
"OW",
"CH"
]
},
{
"@type": "Space",
"location": "C",
"Characteristic": [
"A",
"N",
"OW",
"CH"
]
},
{
"@type": "Space",
"location": "D",
"Characteristic": [
"N",
"OW",
"W",
"CH"
]
}
],
"Characteristic": [
"K"
]
},
{
"@type": "Row",
"label": "18",
"Space": [
{
"@type": "Space",
"location": "A",
"Characteristic": [
"N",
"OW",
"W",
"CH"
]
},
{
"@type": "Space",
"location": "B",
"Characteristic": [
"A",
"N",
"OW",
"CH"
]
},
{
"@type": "Space",
"location": "C",
"Characteristic": [
"A",
"N",
"OW",
"CH"
]
},
{
"@type": "Space",
"location": "D",
"Characteristic": [
"N",
"OW",
"W",
"CH"
]
}
],
"Characteristic": [
"K"
]
},
{
"@type": "Row",
"label": "19",
"Space": [
{
"@type": "Space",
"location": "C",
"Characteristic": [
"BK"
]
},
{
"@type": "Space",
"location": "D",
"Characteristic": [
"BK"
]
}
],
"Characteristic": [
"K"
]
},
{
"@type": "Row",
"label": "20",
"Space": [
{
"@type": "Space",
"location": "A",
"Characteristic": [
"N",
"W"
]
},
{
"@type": "Space",
"location": "B",
"Characteristic": [
"A",
"N"
]
},
{
"@type": "Space",
"location": "C",
"Characteristic": [
"A",
"N"
]
},
{
"@type": "Space",
"location": "D",
"Characteristic": [
"N",
"W"
]
}
]
},
{
"@type": "Row",
"label": "21",
"Space": [
{
"@type": "Space",
"location": "A",
"Characteristic": [
"N",
"W"
]
},
{
"@type": "Space",
"location": "B",
"Characteristic": [
"A",
"N"
]
},
{
"@type": "Space",
"location": "C",
"Characteristic": [
"A",
"N"
]
},
{
"@type": "Space",
"location": "D",
"Characteristic": [
"N",
"W"
]
}
]
},
{
"@type": "Row",
"label": "22",
"Space": [
{
"@type": "Space",
"location": "B",
"Characteristic": [
"A",
"N"
]
},
{
"@type": "Space",
"location": "C",
"Characteristic": [
"A",
"N"
]
},
{
"@type": "Space",
"location": "D",
"Characteristic": [
"N",
"W"
]
}
]
},
{
"@type": "Row",
"label": "23"
},
{
"@type": "Row",
"label": "24",
"Space": [
{
"@type": "Space",
"location": "D",
"Characteristic": [
"N",
"W"
]
}
]
}
]
}
]
}
]
}
]
}
}
The following seat map response for NDC returns both free seats (price of 0) and paid seats (price of 60), each in a separate instance of CatalogOffering.
{
"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"
]
}
]
},
{
"@type": "Row",
"label": "34",
"Space": [
{
"@type": "Space",
"location": "A",
"Characteristic": [
"W"
]
},
{
"@type": "Space",
"location": "C",
"Characteristic": [
"A",
"H"
]
},
{
"@type": "Space",
"location": "D",
"Characteristic": [
"A",
"H"
]
},
{
"@type": "Space",
"location": "E",
"Characteristic": [
"9"
]
},
{
"@type": "Space",
"location": "F",
"Characteristic": [
"9"
]
},
{
"@type": "Space",
"location": "G",
"Characteristic": [
"A",
"H"
]
},
{
"@type": "Space",
"location": "H",
"Characteristic": [
"A",
"H"
]
},
{
"@type": "Space",
"location": "K",
"Characteristic": [
"W"
]
}
]
},
{
"@type": "Row",
"label": "35",
"Space": [
{
"@type": "Space",
"location": "A",
"Characteristic": [
"W"
]
},
{
"@type": "Space",
"location": "C",
"Characteristic": [
"A",
"H",
"I"
]
},
{
"@type": "Space",
"location": "D",
"Characteristic": [
"A",
"H"
]
},
{
"@type": "Space",
"location": "E",
"Characteristic": [
"9"
]
},
{
"@type": "Space",
"location": "F",
"Characteristic": [
"9"
]
},
{
"@type": "Space",
"location": "G",
"Characteristic": [
"A",
"H",
"I"
]
},
{
"@type": "Space",
"location": "H",
"Characteristic": [
"A",
"H",
"I"
]
},
{
"@type": "Space",
"location": "K",
"Characteristic": [
"W"
]
}
]
},
{
"@type": "Row",
"label": "36",
"Space": [
{
"@type": "Space",
"location": "A",
"Characteristic": [
"W"
]
},
{
"@type": "Space",
"location": "C",
"Characteristic": [
"A",
"H"
]
},
{
"@type": "Space",
"location": "D",
"Characteristic": [
"A",
"H"
]
},
{
"@type": "Space",
"location": "E",
"Characteristic": [
"9"
]
},
{
"@type": "Space",
"location": "F",
"Characteristic": [
"9"
]
},
{
"@type": "Space",
"location": "G",
"Characteristic": [
"A",
"H"
]
},
{
"@type": "Space",
"location": "H",
"Characteristic": [
"A",
"H"
]
},
{
"@type": "Space",
"location": "K",
"Characteristic": [
"W"
]
}
]
},
{
"@type": "Row",
"label": "37",
"Space": [
{
"@type": "Space",
"location": "A",
"Characteristic": [
"W"
]
},
{
"@type": "Space",
"location": "C",
"Characteristic": [
"A",
"H",
"I"
]
},
{
"@type": "Space",
"location": "H",
"Characteristic": [
"A",
"H",
"I"
]
},
{
"@type": "Space",
"location": "K",
"Characteristic": [
"W"
]
}
]
}
]
}
]
}
]
}
]
}
}