NDC API Workflows
Flow of Data Between Messages
The following information is required throughout the NDC flow:
-
Ensure you use the correct
ResponseID
andOfferID
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. AirShopping2. OfferPrice3. 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. AirShopping2. SeatAvailability3. OfferPrice4. 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. AirShopping2. SeatAvailability for outbound3. SeatAvailability for inbound4. OfferPrice5. 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. AirShopping2. ServiceList3. OfferPrice4. 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. AirShopping2. SeatAvailability3. ServiceList4. OfferPrice5. 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. AirShopping2. SeatAvailability3. ServiceList4. OfferPrice5. OrderCreate6. OrderReshop7. 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. AirShopping2. OfferPrice3. OrderCreate4. 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 OfferID s and OfferItemID s 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.21. 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 }
<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.
<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
<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.
<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 }
<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.
<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
<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.
<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
<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
, andResponseID
were obtained from AirShoppingRS -
The second
OfferID
,OfferItemID
, andResponseID
were obtained from SeatAvaialabilityRS -
The third
OfferID
,OfferItemID
, andResponseID
were obtained from ServiceListRS
<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.
<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.
<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.
<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>
<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 OfferID
s and OfferItemID
s 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:
- NDC 2017.2 OrderReshopRQ/RS provides details about cancellation like forfeit and retain, refund, etc.
- 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.