NDC API Workflows

Flow of Data Between Messages

The following information is required throughout the NDC flow:

  • Ensure you use the correct ResponseID and OfferID throughout the flow. For example, if you receive a message similar to “OfferID not found”, go back and check your response and flow to ensure you have used the right ID’s.
  • For a specific account code, FQTV information, promotional code, or fare class you must carry this information from AirShopping through OderCreate
  • Include any references specific to a passenger's eligibility for a fare from AirShopping to OrderCreate to ServiceList to OrderCreate, etc. This is especially necessary if FQTV or corporate traveler is eligible for free seat assignment. Your request will fail if you do not provide the information.

The following flows will be updated as functionality becomes available for airlines.

Workflow Scenarios Details
1. AirShopping
2. OfferPrice
3. OrderCreate
The user should take every OfferID from AirShoppingRS when executing OfferPriceRQ.
The OfferPrice step is mandatory before executing the OrderCreateRQ.
The user should take all required IDs from OfferPriceRS when executing OrderCreateRQ.
1. AirShopping
2. SeatAvailability
3. OfferPrice
4. OrderCreate
The user should take every OfferID (flight-related offers) from AirShoppingRS when executing OfferPriceRQ.
The user should take every seat-related OfferID from SeatAvaialabilityRS when executing OfferPriceRQ to quote price for FLIGHTS+SEAT.
The OfferPrice request is mandatory before executing the OrderCreateRQ.
The user should take every flight-related OfferID from OfferPriceRS and seat-related OfferID from SeatAvaialabilityRS when executing OrderCreateRQ.
1. AirShopping
2. SeatAvailability for outbound
3. SeatAvailability for inbound
4. OfferPrice
5. OrderCreate
The user wants to select a seat for outbound and inbound itineraries. As per the IATA NDC 2017.2 schema standard, the multiple offers cannot be included in the same SeatAvailabilityRQ. The user needs to execute two SeatAavailabilityRQ.
The user should take every OfferID (flight-related offers) from AirShoppingRS when executing OfferPriceRQ.
The user should take every seat-related OfferID from SeatAvaialabilityRS when executing OfferPriceRQ to quote price for FLIGHTS+SEAT.
The OfferPrice request is mandatory before executing the OrderCreateRQ.
The user should take every flight-related OfferID from OfferPriceRS and seat-related OfferID from SeatAvaialabilityRS when executing OrderCreateRQ.
1. AirShopping
2. ServiceList
3. OfferPrice
4. OrderCreate
The user should take every OfferID (flight-related offers) from AirShoppingRS when executing OfferPriceRQ.
The user should take every service-related OfferID from ServiceListRS when executing OfferPriceRQ to quote price for FLIGHTS+ANCILLARIES.
The OfferPrice request is mandatory before executing the OrderCreateRQ.
The user should take every flight-related OfferID from OfferPriceRS and ancillary-relatedrelated OfferID from ServiceListRS when executing OrderCreateRQ.
1. AirShopping
2. SeatAvailability
3. ServiceList
4. OfferPrice
5. OrderCreate
The user should take every OfferID (flight-related offers) from AirShoppingRS when executing OfferPriceRQ.
The user should take every seat-related OfferID from SeatAvaialabilityRS and service-related OfferID from ServiceListRS when executing OfferPriceRQ to quote price for FLIGHTS+SEAT+ANCILLARIES.
The OfferPrice request is mandatory before executing the OrderCreateRQ.
The user should take every flight-related OfferID from OfferPriceRS, seat-related OfferID from SeatAvaialabilityRS, and ancillary-related OfferID from ServiceListRS when executing OrderCreateRQ.
1. AirShopping
2. SeatAvailability
3. ServiceList
4. OfferPrice
5. OrderCreate
6. OrderReshop
7. OrderCancel
The user will get the OrderID when the order is created successfully. The user can get the cancellation details and cancel the order by using the below two steps.
OrderReshopRQ/RS – It provides details about cancellation like forfeit and retains, refund, etc.
OrderCancelRQ/RS – It cancels the existing reservation.
OrderRetrieve The user can retrieve the order details using the OderRetrieve transaction in the various stages of the workflow when OrderID is available.
1. AirShopping
2. OfferPrice
3. OrderCreate
4. OfferPrice
Price Change during OrderCreate.
When the OrderCreateRQ is submitted, the carrier may return an intermittent error message in the OrderViewRS when the price that was initially quoted (Price from OfferPriceRS) is no longer available.
The user should execute the OfferPriceRQ again to get an updated price. Then the user needs to execute OrderCreateRQ again taking the updated OfferIDs and OfferItemIDs from the most current OfferPriceRS. Note that these are for Flights related Offer only. The Seat and ancillary-related OFFER should be taken from SeatAavailability and ServiceListRS.
OrderCancel Canceling an order is a two steps process in the NDC 2017.2
1. NDC 2017.2 OrderReshopRQ/RS – It provides details about cancellation like forfeit and retain, refund, etc.
2. NDC 2017.2 OrderCancelRQ/RS – It cancels the existing reservation.
OrderReshop NDC 2017.2 OrderReshopRQ/RS is only implemented for Cancel flow.

OrderCreate Flights Only Workflow

OrderCreate flights only workflow with Single or Multi-Passenger_ FLIGHTS ONLY (Any Itinerary- DOM, INTL, TB, MC, SUN).

Step 1: AirShopping

  • AirShoppingRQ – Submit ShoppingRQ for ADT, YTH, CHD, INF
  • AirShoppingRS
    • SINGLE /AirShoppingRS/ShoppingResponseID/ResponseID
    • MULTIPLE /AirShoppingRS/OffersGroup/AirlineOffers/Offer/@OfferID
    • Within these offers, you will see ONE of each of the following:
      • /AirShoppingRS/OffersGroup/AirlineOffers/Offer/OfferItem/@OfferItemID { for PTC Type: ADT }
      • /AirShoppingRS/OffersGroup/AirlineOffers/Offer/OfferItem/@OfferItemID { for PTC Type: YTH }
      • /AirShoppingRS/OffersGroup/AirlineOffers/Offer/OfferItem/@OfferItemID { for PTC Type: CHD }
      • /AirShoppingRS/OffersGroup/AirlineOffers/Offer/OfferItem/@OfferItemID { for PTC Type: INF }
Copy
Copied
<OffersGroup>
	<AirlineOffers>
		<Offer OfferID="VPMDQL-OfferID-1" Owner="YY">
			<Parameters>
				<PTC_Priced>
					<Priced Quantity="1">ADT</Priced>
					<Priced Quantity="1">YTH</Priced>
					<Priced Quantity="1">CHD</Priced>
					<Priced Quantity="1">INF</Priced>
				</PTC_Priced>
			</Parameters>
			<TotalPrice>
				<DetailCurrencyPrice>
					<Total Code="USD">400.00</Total>
					<Details>...</Details>
					<Taxes>...</Taxes>
				</DetailCurrencyPrice>
			</TotalPrice>
			<OfferItem OfferItemID="Z0CKGMK7O2-OfferItemID-ADT">...</OfferItem>
			<OfferItem OfferItemID="Z0CKGMK7O2-OfferItemID-YTH">...</OfferItem>
			<OfferItem OfferItemID="Z0CKGMK7O2-OfferItemID-CHD">...</OfferItem>
			<OfferItem OfferItemID="Z0CKGMK7O2-OfferItemID-INF">...</OfferItem>
			<TimeLimits>
				<OtherLimits>
					<OtherLimit>
						<TicketByTimeLimit>
							<TicketBy>2021-04-27T23:59:59</TicketBy>
						</TicketByTimeLimit>
					</OtherLimit>
				</OtherLimits>
			</TimeLimits>
		</Offer>

Step 2: OfferPrice

OfferPriceRQ

Select the offer of your choice and submit the keys only as shown in the below example.

Copy
Copied
<OfferPriceRQ Version="2017.2">
	<Document>...</Document>
	<Party>...</Party>
	<Parameters>...</Parameters>
	<Query>
		<Offer OfferID="N35XSL1QUY-OfferID-5" Owner="YY" ResponseID="YY-2985803686064207509">
			<OfferItem OfferItemID="A31J6D48JQ-OfferItemID-ADT">
				<PassengerRefs>Pax01</PassengerRefs>					
			</OfferItem>
			<OfferItem OfferItemID="NJWIHSRMSU-OfferItemID-YTH">
				<PassengerRefs>Pax02</PassengerRefs>
			</OfferItem>
			<OfferItem OfferItemID="NJWIHSRMSU-OfferItemID-CHD">
				<PassengerRefs>Pax03</PassengerRefs>
			</OfferItem>
			<OfferItem OfferItemID="NJWIHSRMSU-OfferItemID-INF">
				<PassengerRefs>Pax04</PassengerRefs>
			</OfferItem>
		</Offer>
	</Query>
	<DataLists>
		<PassengerList>
			<Passenger PassengerID="Pax01">
				<PTC>ADT</PTC>
			</Passenger>
			<Passenger PassengerID="Pax02">
				<PTC>YTH</PTC>
			</Passenger>
			<Passenger PassengerID="Pax03">
				<PTC>CHD</PTC>
			</Passenger>
			<Passenger PassengerID="Pax04">
				<PTC>INF</PTC>
			</Passenger>
		</PassengerList>
	</DataLists>
</OfferPriceRQ>

OfferPriceRS

Returns:

  • /OfferPriceRS/PricedOffer/@OfferID
    OfferPriceRS/PricedOffer/TotalPrice/DetailCurrencyPrice/Total
  • /OfferPriceRS/PricedOffer/OfferItem/@OfferItemID with PassengerFare details for ADT
  • /OfferPriceRS/PricedOffer/OfferItem/@OfferItemID with PassengerFare details for YTH
  • /OfferPriceRS/PricedOffer/OfferItem/@OfferItemID with PassengerFare details for CHD
  • /OfferPriceRS/PricedOffer/OfferItem/@OfferItemID with PassengerFare details for INF
  • /OfferPriceRS/OtherOffers/ALaCarteOffer/@OfferID
  • /OfferPriceRS/OtherOffers/ALaCarteOffer/ALaCarteOfferItem/@OfferItemID
Copy
Copied
<OfferPriceRS Version="2017.2">
	<Document>
		<Name>NDC</Name>
		<ReferenceVersion>1.0</ReferenceVersion>
	</Document>
	<Success/>
	<PricedOffer OfferID="JNVEG9WUIC-OFFERID" Owner="YY">
		<TimeLimits>
			<OfferExpiration DateTime="2021-10-11T00:00:00"/>
		</TimeLimits>
		<TotalPrice>
			<DetailCurrencyPrice>
				<Total Code="USD">400.50</Total>
			</DetailCurrencyPrice>
		</TotalPrice>
		<OfferItem OfferItemID="CGR3VDGVQ4-OFFERITEMID-ADT">
		<OfferItem OfferItemID="CGR3VDGVQ4-OFFERITEMID-YTH">
		<OfferItem OfferItemID="CGR3VDGVQ4-OFFERITEMID-CHD">
		<OfferItem OfferItemID="CGR3VDGVQ4-OFFERITEMID-INF">
	</PricedOffer>
	<OtherOffers>
		<AlaCarteOffer OfferID="ZIH82BS2Z3-SRVC-OfferID-1" Owner="YY">
			<AlaCarteOfferItem OfferItemID="RYOAE5WM5Z-SRVR-OFFERITEMID-3">
				<!--this is the way to represent Baggage-->
				<Eligibility>
					<PassengerRefs>OP47XYAEM-T1</PassengerRefs>
					<PassengerRefs>DCWG20TR3A-SEG1</PassengerRefs>
				</Eligibility>
				<UnitPriceDetail>...</UnitPriceDetail>
				<Service ServiceID="QWS345RDE6ServiceID-003">
					<ServiceDefinitionRed>ZSXY70Z3TA-FareBaggageAllowance-001</ServiceDefinitionRed>
				</Service>
			</AlaCarteOfferItem>
		</AlaCarteOffer>
	</OtherOffers>

Step 3: OrderCreate

Take the OfferID, OfferItemID, ResponseID, and Total from OfferPriceRS and construct the OrderCreateRQ as shown in the below example.

Copy
Copied
<OrderCreateRQ Version="2017.2">
	<PointOfSale>...</PointOfSale>
	<Document>...</Document>
	<Party>...</Party>
	<Query>
		<Order>
			<Offer OfferID="JNVEG9WUIC-OFFERID" Owner="YY" ResponseID="YY-CP3OMSRG3GFDPQ-HS7A8L3">
				<TotalOfferPrice Code="USD">400.50</TotalOfferPrice>
				<OfferItem OfferItemID="CGR3VDGVQ4-OFFERITEMID-ADT">
					<PassengerRefs>Pax01</PassengerRefs>
				</OfferItem>
				<OfferItem OfferItemID="CGR3VDGVQ4-OFFERITEMID-YTH">
					<PassengerRefs>Pax02</PassengerRefs>
				</OfferItem>
				<OfferItem OfferItemID="CGR3VDGVQ4-OFFERITEMID-CHD">
					<PassengerRefs>Pax03</PassengerRefs>
				</OfferItem>
				<OfferItem OfferItemID="CGR3VDGVQ4-OFFERITEMID-INF">
					<PassengerRefs>Pax04</PassengerRefs>
				</OfferItem>
			</Offer>
		</Order>
		<Payments>
			<Payment>
				<Type>CC</Type>
				<Method>
					<PaymentCard>
						<CardType>1</CardType>
						<CardCode>VI</CardCode>
						<CardNumber>40000000000000000</CardNumber>
						<SeriesCode>123</SeriesCode>
						<CardHolderName>JOHN SMITH</CardHolderName>
						<CardHolderBillingAddress>...</CardHolderBillingAddress>
						<EffectiveExpireDate>
							<Expiration>1100</Expiration>
						</EffectiveExpireDate>
					</PaymentCard>
				</Method>
				<Amount Code="USD">400.50</Amount>
			</Payment>
		</Payments>
	</Query>	
	<DataLists>
		<PassengerList>
			<Passenger PassengerID="Pax01">...</Passenger>
			<Passenger PassengerID="Pax02">...</Passenger>
			<Passenger PassengerID="Pax03">...</Passenger>
			<Passenger PassengerID="Pax04">...</Passenger>
		</PassengerList>
		<ContactList>
			<ContactInformation ContactID="CONTACT_For_All_Pax">
				<ContactType>1.PTT</ContactType>
				<ContactProvided>

OrderCreate Flights Seat and Ancillaries Workflow

OrderCreate flights seat and ancillaries workflow for single or multi-passenger (any itinerary - DOM, INTL, TB, MC, SUN)

Step 1: AirShopping

  • AirShoppingRQ – Submit ShoppingRQ for ADT, YTH, CHD, INF
  • AirShoppingRS
    • SINGLE /AirShoppingRS/ShoppingResponseID/ResponseID
    • MULTIPLE /AirShoppingRS/OffersGroup/AirlineOffers/Offer [1] /@OfferID
    • Within these Offers, you will see ONE for each of the following:
      • /AirShoppingRS/OffersGroup/AirlineOffers/Offer/OfferItem/@OfferItemID { for PTC Type: ADT }
      • /AirShoppingRS/OffersGroup/AirlineOffers/Offer/OfferItem/@OfferItemID { for PTC Type: YTH }
      • /AirShoppingRS/OffersGroup/AirlineOffers/Offer/OfferItem/@OfferItemID { for PTC Type: CHD }
      • /AirShoppingRS/OffersGroup/AirlineOffers/Offer/OfferItem/@OfferItemID { for PTC Type: INF }
Copy
Copied
<OffersGroup>
	<AirlineOffers>
		<Offer OfferID="VPMDQL-OfferID-1" Owner="YY">
			<Parameters>
				<PTC_Priced>
					<Priced Quantity="1">ADT</Priced>
					<Priced Quantity="1">YTH</Priced>
					<Priced Quantity="1">CHD</Priced>
					<Priced Quantity="1">INF</Priced>
				</PTC_Priced>
			</Parameters>
			<TotalPrice>
				<DetailCurrencyPrice>
					<Total Code="USD">400.00</Total>
					<Details>...</Details>
					<Taxes>...</Taxes>
				</DetailCurrencyPrice>
			</TotalPrice>
			<OfferItem OfferItemID="Z0CKGMK7O2-OfferItemID-ADT">...</OfferItem>
			<OfferItem OfferItemID="Z0CKGMK7O2-OfferItemID-YTH">...</OfferItem>
			<OfferItem OfferItemID="Z0CKGMK7O2-OfferItemID-CHD">...</OfferItem>
			<OfferItem OfferItemID="Z0CKGMK7O2-OfferItemID-INF">...</OfferItem>
			<TimeLimits>
				<OtherLimits>
					<OtherLimit>
						<TicketByTimeLimit>
							<TicketBy>2021-04-27T23:59:59</TicketBy>
						</TicketByTimeLimit>
					</OtherLimit>
				</OtherLimits>
			</TimeLimits>
		</Offer>

Step 2: ServiceList

ServiceListRQ

Select the offer of your choice and submit the keys only as shown in the below example.

Copy
Copied
<ServiceListRQ Version="2017.2">
	<Document>...</Document>
	<Party>...</Party>
	<Parameters>...</Parameters>
	<ShoppingResponseID>
		<ResponseID>CP3OMSRG3GFDPQ-HS7A8L3</ResponseID>
	</ShoppingResponseID>
	<Query>
		<Offers>
			<Offer>
				<!-- OUTBOUND -->
				<OfferID Owner="YY">VPMDQL-OfferID-1</OfferID>
				<OfferItemIDs>
					<OfferItemID Owner="YY">Z0CKGMK7O2-OfferItemID-ADT</OfferItemID>
					<OfferItemID Owner="YY">Z0CKGMK7O2-OfferItemID-YTH</OfferItemID>
					<OfferItemID Owner="YY">Z0CKGMK7O2-OfferItemID-CHD</OfferItemID>
					<OfferItemID Owner="YY">Z0CKGMK7O2-OfferItemID-INF</OfferItemID>
				</OfferItemIDs>
			</Offer>
		</Offers>
	</Query>
	<DataLists>
		<PassengerList>
			<Passenger PassengerID="Pax01">
				<PTC>ADT</PTC>
				<!--InfantRef>Pax03</InfantRef-->
			</Passenger>
			<Passenger PassengerID="Pax02">
				<PTC>CHD</PTC>
			</Passenger>
			<Passenger PassengerID="Pax03">
				<PTC>YTH</PTC>
			</Passenger>
			<Passenger PassengerID="Pax04">
				<PTC>YTH</PTC>
			</Passenger>
		</PassengerList>
	</DataList>
</ServiceListRQ>

ServiceListRS

The ServiceListRS returns the following:

  • /ServiceListRS/ALaCarteOffer/@OfferID
  • /ServiceListRS/ALaCarteOffer/ALaCarteOfferItem/@OfferItemID
Copy
Copied
<ServiceListRS Version="2017.2">
	<Document>
		<Name>NDC</Name>
		<ReferenceVersion>1.0</ReferenceVersion>
	</Document>
	<Success/>
	<ALaCarteOffer OfferID="AG2BOCDYC0-SLRS-OfferID-1" Owner="YY">
		<ALaCarteOfferItem OfferItemID="HVRTAH359H-SLRS-OfferItemID-1"> <!--this is the way to represent Meals or Lounge-->
			<Eligibility>
				<PassengerRefs>DGIQQVMTOU-T1 DGIQQVMTOU-T2 DGIQQVMTOU-T3 DGIQQVMTOU-T4</PassengerRefs>
				<SegmentRefs>ZSXY70Z3TA-SEG1</SegmentRefs>
			</Eligibility>
			<UnitPriceDetail>...</UnitPriceDetail>
			<Service ServiceID="QWS345RDE6ServiceID-001">
				<ServiceDefinitionRef>QWS345RDE6-ServiceDefinition-001</ServiceDefinitionRef>
			</Service>
		</ALaCarteOfferItem>
		<ALaCarteOfferItem OfferItemID="HVRTAH359H-SLRS-OfferItemID-2"> <!--this is the way to represent seats-->
			<Eligibility>
				<PassengerRefs>DGIQQVMTOU-T1 DGIQQVMTOU-T2 DGIQQVMTOU-T3 DGIQQVMTOU-T4</PassengerRefs>
				<SegmentRefs>ZSXY70Z3TA-SEG1</SegmentRefs>
			</Eligibility>
			<UnitPriceDetail>...</UnitPriceDetail>
			<Service ServiceID="QWS345RDE6ServiceID-002">
				<ServiceDefinitionRef>QWS345RDE6-ServiceDefinition-006</ServiceDefinitionRef>
			</Service>
		</ALaCarteOfferItem>
		<ALaCarteOfferItem OfferItemID="HVRTAH359H-SLRS-OfferItemID-3"><!--this is the way to represent baggage-->
			<Eligibility>
				<PassengerRefs>DGIQQVMTOU-T1 DGIQQVMTOU-T2 DGIQQVMTOU-T3 DGIQQVMTOU-T4</PassengerRefs>
				<SegmentRefs>ZSXY70Z3TA-SEG1</SegmentRefs>
			</Eligibility>
			<UnitPriceDetail>...</UnitPriceDetail>
			<Service ServiceID="QWS345RDE6ServiceID-003">
				<ServiceDefinitionRef>ZSXY70Z3TA-FareBaggageAllowance-001</ServiceDefinitionRef>
			</Service>
		</ALaCarteOfferItem>
	</ALaCarteOffer>

Step 3: SeatAvailability

SeatAvailabilityRQ

Submit the OfferID and ResponseID in SeatAvailabilityRQ.

Copy
Copied
<SeatAvailabilityRQ Version="2017.2">
	<Document>...</Document>
	<Party>...</Party>
	<Parameters>...</Parameters>
	<Query>
		<Offer OfferID="VPMDQL-OfferID-1" Owner="YY" ResponseID="c001b057-1a38-48f2-bb4a-ec1a6fd538a8-5075.931740140768"/>
	</Query>
</SeatAvailabilityRQ>

SeatAvailabilityRS

The SeatAvailabilityRS returns the following:

  • /SeatAvailabilityRS/ALaCarteOffer/@OfferID
  • /SeatAvailabilityRS/ALaCarteOffer/ALaCarteOfferItem/@OfferItemID
  • /SeatAvailabilityRS/ShoppingResponseID/ResponseID
Copy
Copied
<SeatAvailabilityRS Version="2017.2">
	<Document>...</Document>
	<Success/>
	<ShoppingResponseID>
		<ResponseID>72113252-ba0b-4afd-aab6-be659e41dee6-5324.083467145708</ResponseID>
	</ShoppingResponseID>
	<Processing>...</Processing>
	<ALaCarteOffer OfferID="PBFL96E2ZS-STRS-OfferID-1" Owner="YY">
		<ALaCarteOfferItem OfferItemID="NUETICOVOT-ASPW-OfferItemID-397">
			<Eligibility>
				<PassengerRefs>DGIQQVMTOU-T1 DGIQQVMTOU-T2 DGIQQVMTOU-T3 DGIQQVMTOU-T4</PassengerRefs>
				<SegmentRefs>ZSXY70Z3TA-SEG1</SegmentRefs>
			</Eligibility>
			<UnitPriceDetail>...</UnitPriceDetail>
			<Service ServiceID="Service397">
				<ServiceDefinitionRef>JPPMHTCM5A-ServiceDefinition-004</ServiceDefinitionRef>
			</Service>
		</ALaCarteOfferItem>
		<ALaCarteOfferItem OfferItemID="LEFZMDUPML-ASPM-OfferItemID-398">
			<Eligibility>
				<PassengerRefs>DGIQQVMTOU-T1 DGIQQVMTOU-T2 DGIQQVMTOU-T3 DGIQQVMTOU-T4</PassengerRefs>
				<SegmentRefs>ZSXY70Z3TA-SEG1</SegmentRefs>
			</Eligibility>
			<UnitPriceDetail>...</UnitPriceDetail>
			<Service ServiceID="Service398">
				<ServiceDefinitionRef>FVPGYOG8UC=ServiceDefinition-005</ServiceDefinitionRef>
			</Service>
		</ALaCarteOfferItem>

Step 4: OfferPrice

OfferPriceRQ

Select the offer of your choice and submit the keys only as shown in the below example.

  • The first OfferID , OfferItemID , and ResponseID were obtained from AirShoppingRS
  • The second OfferID , OfferItemID , and ResponseID were obtained from SeatAvaialabilityRS
  • The third OfferID , OfferItemID , and ResponseID were obtained from ServiceListRS
Copy
Copied
<OfferPriceRQ Version="2017.2">
	<Document>...</Document>
	<Party>...</Party>
	<Parameters>...</Parameters>
	<Query>
		<Offer OfferID="VPMDQL-OfferID-1" Owner="YY" ResponseID="928a7b5e-b0ca-4216-b5f9-b53db55c93b-3963.051903282645">
			<OfferItem OfferItemID="Z0CKGMK7O2-OfferItemID-ADT">
				<PassengerRefs>Pax01</PassengerRefs>					
			</OfferItem>
			<OfferItem OfferItemID="Z0CKGMK7O2-OfferItemID-YTH">
				<PassengerRefs>Pax02</PassengerRefs>
			</OfferItem>
			<OfferItem OfferItemID="Z0CKGMK7O2-OfferItemID-CHD">
				<PassengerRefs>Pax03</PassengerRefs>
			</OfferItem>
			<OfferItem OfferItemID="Z0CKGMK7O2-OfferItemID-INF">
				<PassengerRefs>Pax04</PassengerRefs>
			</OfferItem>
		</Offer>
<Offer OfferID="PBFL96E22S-STRS-OfferID-1" Owner="YY" ResponseID="72113252-ba0b-4afd-aab6-be659e41dee6-5324.083467145708">
			<OfferItem OfferItemID="NUETICOVOT-ASPW-OfferItemID-ADT">
				<PassengerRefs>Pax01</PassengerRefs>					
			</OfferItem>
			<OfferItem OfferItemID="NUETICOVOT-ASPW-OfferItemID-YTH">
				<PassengerRefs>Pax02</PassengerRefs>
			</OfferItem>
			<OfferItem OfferItemID="NUETICOVOT-ASPW-OfferItemID-CHD">
				<PassengerRefs>Pax03</PassengerRefs>
			</OfferItem>
			<OfferItem OfferItemID="NUETICOVOT-ASPW-OfferItemID-INF">
				<PassengerRefs>Pax04</PassengerRefs>
			</OfferItem>
		</Offer>
<Offer OfferID="VAT60D64E3-OfferID-1" Owner="YY" ResponseID="f965c0a0-1b7a-41f2-a1a1-62e52027be3-4020.23978474768">
			<OfferItem OfferItemID="IXSPNKR9BE-SLRS-OfferItemID-ADT">
				<PassengerRefs>Pax01</PassengerRefs>					
			</OfferItem>
			<OfferItem OfferItemID="IXSPNKR9BE-SLRS-OfferItemID-YTH">
				<PassengerRefs>Pax02</PassengerRefs>
			</OfferItem>
			<OfferItem OfferItemID="IXSPNKR9BE-SLRS-OfferItemID-CHD">
				<PassengerRefs>Pax03</PassengerRefs>
			</OfferItem>
			<OfferItem OfferItemID="IXSPNKR9BE-SLRS-OfferItemID-INF">
				<PassengerRefs>Pax04</PassengerRefs>
			</OfferItem>
		</Offer>		
	</Query>

OfferPriceRS

In the example below <Total Code="USD>400.50</Total>" is PricedItineraries/AirItineraryPricingInfo/ItinTotalFare/TotalFare/Amount minus YY_Discounts.

There will be a unique ALaCarteOfferItem that has UnitPriceDetail for every PricedItineraries/AirItineraryPricingInfo/ItinTotalFare/YY_Discounts/ID in the JSON RS.

Copy
Copied
<OfferPriceRS Version="2017.2">
	<Document id="OneWay">
		<Name>NDC</Name>
		<ReferenceVersion>1.0</ReferenceVersion>
	</Document>
	<Success/>
	<PricedOffer OfferID="HXM4HSEXG3-OFFERID" Owner="YY">
		<TimeLimits>
			<OfferExpiration DateTime="2021-10-11T00:00:00"/>
		</TimeLimits>
		<TotalPrice>
			<DetailCurrencyPrice>
				<Total Code="USD">400.50</Total>
			</DetailCurrencyPrice>
		</TotalPrice>
		<OfferItem OfferItemID="CGR3VDGVQ4-OFFERITEMID-ADT">
		<OfferItem OfferItemID="CGR3VDGVQ4-OFFERITEMID-YTH">
		<OfferItem OfferItemID="CGR3VDGVQ4-OFFERITEMID-CHD">
		<OfferItem OfferItemID="CGR3VDGVQ4-OFFERITEMID-INF">
	</PricedOffer>
	<OtherOffers>
		<AlaCarteOffer OfferID="ZIH82BS2Z3-SRVC-OfferID-1" Owner="YY">
			<AlaCarteOfferItem OfferItemID="RYOAE5WM5Z-SRVC-OFFERITEMID-3">...</AlaCarteOfferItem>
			<AlaCarteOfferItem OfferItemID="RYOAE5WM5Z-SRVC-OFFERITEMID-3">...</AlaCarteOfferItem>
			<AlaCarteOfferItem OfferItemID="RYOAE5WM5Z-SRVC-OFFERITEMID-3">...</AlaCarteOfferItem>
			<AlaCarteOfferItem OfferItemID="RYOAE5WM5Z-SRVC-OFFERITEMID-3">...</AlaCarteOfferItem>
			<AlaCarteOfferItem OfferItemID="RYOAE5WM5Z-SRVC-OFFERITEMID-3">...</AlaCarteOfferItem>
			<AlaCarteOfferItem OfferItemID="RYOAE5WM5Z-SRVC-OFFERITEMID-3">...</AlaCarteOfferItem>
		</AlaCarteOffer>
	</OtherOffers>

Step 5: OrderCreate

OrderCreateRQ

Select the IDs from the earlier response and submit the IDs with other details as shown in the below example.

In the below example, the seller manually calculates the total amount for all the ancillaries, adds it with the /OfferPriceRS/PricedOffer/TotalPrice/DetailCurrencyPrice/Total and then submits the grand total in /OrderCreateRQ/Query/Payments/Payment/Amount.

Copy
Copied
<OrderCreateRQ Version="2017.2" PrimaryLangID="en">
	<Query>
		<Offer OfferID="HXM4HSEXG3-OFFERID" Owner="YY" ResponseID="YY-2985803686064207509">
			<TotalOfferPrice Code="USD">600.50</TotalOfferPrice>
			<OfferItem OfferItemID="CGR3VDGVQ4-OFFERITEMID-ADT">
				<PassengerRefs>Pax01</PassengerRefs>
			</OfferItem>
			<OfferItem OfferItemID="CGR3VDGVQ4-OFFERITEMID-YTH">
				<PassengerRefs>Pax02</PassengerRefs>
			</OfferItem>
			<OfferItem OfferItemID="CGR3VDGVQ4-OFFERITEMID-CHD">
				<PassengerRefs>Pax03</PassengerRefs>
			</OfferItem>
			<OfferItem OfferItemID="CGR3VDGVQ4-OFFERITEMID-INF">
				<PassengerRefs>Pax04</PassengerRefs>
			</OfferItem>
		</Offer>
		<Offer OfferID="J71R8KXGT4-OFFERID-23" Owner="YY" ResponseID="YY-2985803686064207509">
			<!--This is only for Ancillaries. This offer details are from ServiceListRS.-->
			<OfferItem OfferItemID="RISJQRR3QP-OfferItemID-45">
				<PassengerRefs>Pax01 Pax02</PassengerRefs>
			</OfferItem>
			<OfferItem OfferItemID="H3Q6S4Y6PE-OfferItemID-46">
				<PassengerRefs>Pax03</PassengerRefs>
			</OfferItem>
			<OfferItem OfferItemID="RISJQRR3QP-OfferItemID-45">
				<PassengerRefs>Pax01 Pax02</PassengerRefs>
			</OfferItem>
			<OfferItem OfferItemID="H3Q6S4Y6PE-OfferItemID-46">
				<PassengerRefs>Pax03</PassengerRefs>
			</OfferItem>
		</Offer>
		<Offer OfferID="J71R8KXGT4-OFFERID-23" Owner="YY" ResponseID="YY-2985803686064207509">
			<!--Outbound Seat. This is only for Seat Request. This offer details are from SeatAvailabilityRS.-->
			<OfferItem OfferItemID="RISJQRR3QP-OfferItemID-45">
				<PassengerRefs>Pax01</PassengerRefs>
					<SeatSelection>
						<Row>12</Row>
						<Column>A</Column>
					</SeatSelection>
			</OfferItem>
			<OfferItem OfferItemID="H3Q6S4Y6PE-OfferItemID-46">
				<PassengerRefs>Pax03</PassengerRefs>
					<SeatSelection>
						<Row>12</Row>
						<Column>B</Column>
					</SeatSelection>
			</OfferItem>
		</Offer>
		<Payments>
			<Payment>
				<Type>CC</Type>
				<Method>
					<PaymentCard>
						<CardType>1</CardType>
						<CardCode>VI</CardCode>
						<CardNumber>4444333322221111</CardNumber>
						<SeriesCode>123</SeriesCode>
						<CardHolderName>JOHN SMITH</CardHolderName>
						<CardHolderBillingAddress>...</CardHolderBillingAddress>
						<EffectiveExpireDate>
							<Expiration>1122</Expiration>
						</EffectiveExpireDate>
					</PaymentCard>
				</Method>
				<Amount Code="USD">600.50</Amount>
			</Payment>
		</Payments>

OrderCreate Price Change Workflow

When OrderCreateRQ is submitted, the carrier may return an intermittent error message in the OrderViewRS when the price that was initially quoted (from OfferPriceRS) is no longer available. The user should execute the OfferPriceRQ again to get an updated price.

OrderCreate

The user receives one of the below error messages in the OrderViewRS when there is any price change from the earlier OfferPriceRS price.

Itinerary Pricing Change ErrorAncillary Pricing Change Error
Copy
Copied
<OTA_AirBookRS xmlns="http://www.iata.org/IATA/EDIST/2017.2" EchoToken="ET" SequenceNmbr="1" TimeStamp="2021-09-15T09:55:23.678-04:00" TransactionIdentifier="1" Version="2017.2">
   <Errors>
      <Error Language="en-US" ShortText="Itinerary pricing change(increase or decrease).New itinerary total:370.78" Status="99944"/>
   </Errors>
</OTA_AirBookRS>
Copy
Copied
<OrderViewRS xmlns="http://www.iata.org/IATA/EDIST/2017.2" EchoToken="ET" SequenceNmbr="1" TimeStamp="2021-09-15T11:00:51.467-04:00" TransactionIdentifier="1" Version="2017.2">
   <Errors>
      <Error Language="en-US" ShortText="Ancillary pricing change(increase or decrease).New Ancillary total:21.00" Status="99943"/>
   </Errors>
</OrderViewRS>

The user should execute the OfferPriceRQ again to get an updated price. Then the user needs to execute OrderCreateRQ again taking the updated OfferIDs and OfferItemIDs from the most current OfferPriceRS.

attention

Note that these are for flights-related offers only. The seat and ancillary-related offers should be taken from SeatAavailability and ServiceListRS.

OrderCancel Workflow

Canceling an order is a two step process in the NDC 2017.2:

  1. NDC 2017.2 OrderReshopRQ/RS provides details about cancellation like forfeit and retain, refund, etc.
  2. NDC 2017.2 OrderCancelRQ/RS cancels the existing reservation

Step 1: OrderReshop

Currently, OrderReshopRQ is only used for the first step of cancellation.

Step 2: OrderCancel

The OrderCancel service provides the ability to cancel the booking. The service cancels the booking and refunds the refundable amount to the original form of payment if applicable.