NDC Exchange 2.0 (Aggregation Services) Migration Guide
Introduction
NDC Exchange 2.0 (Aggregation Services) enables sellers to submit one request and receive content (that is, offers) for all applicable carriers. This provides a single workflow, allowing sellers to easily integrate new carriers that join the marketplace. Using ATPCO and other industry trusted data sources, the elements and data contained within a seller’s response is consistent.
Aggregation Services is a set of services that implement the role of NDC Aggregator. Its implementation can be more extensive than NDC, as there are other types of APIs supported. The NDC Aggregator is an entity that distributes a seller’s request to multiple airlines and aggregates subsequent responses.
Key Features
- Streamlines ability for sellers to access content for all NDC Exchange airlines (both current and new) by providing a single set of workflows and normalizing messages (still based on NDC 17.2)
- For many workflows, sellers can submit one request and receive content from all eligible airlines
- Reduces much of the complexity that exists today for sellers integrating to NDC Exchange
- Designed to minimize the overall effort required by current sellers to migrate to
- Establishes key framework for enabling future NDC-related services
- Carriers maintain complete control over who has access to their content
- Utilizes ATPCO AWS infrastructure for core processing of the transactions
Benefits
Further normalization of NDC workflows and messages enabling airlines and travel sellers to easily exchange content directly using a highly scalable and flexible platform.
This can be achieved by:
- Working within the IATA standard process to strengthen the standards
- Create industry utilities that can expedite delivery, reduce costs and ensure backwards compatibility
For Sellers
- Removes much of the complexity that exists today for integrating to NDC Exchange
- Streamlines ability to access content for all NDC Exchange airlines (both current and new) by utilizing a single set of workflows with normalized messages (based on NDC 17.2)
- Reduces number of requests by allowing one request to be sent while receiving content for all eligible airlines
- Designed to minimize effort required by current sellers to migrate to latest iteration
Working with NDC Exchange
Accessing the Sandbox Environment
Sellers will use one of two URL’s in your flow to access the sandbox for NDC Exchange 2.0 API and endpoints. Refer to the table below to the service and associated URL.
Service(s) | Sandbox Endpoint/URL |
---|---|
AirShopping, OfferPrice, ServiceList, SeatAvailability | https://gold.services.atpco.net/ndcexchange |
OrderCreate | https://gold.pcx.services.atpco.net/Tokenize/Proxy/OrderCreate |
OrderRetrieve, OrderReshop, OrderCancel | https://gold.services.atpco.net/ndcexchange |
OrderChange | https://gold.pcx.services.atpco.net/ |
Sandbox Service Endpoints
Service | Sandbox Endpoint/URL |
---|---|
Air Shopping | /agg/ndc/17.2/v1/AirShopping |
Offer Price (Short Sell) | /agg/ndc/17.2/v1/OfferPrice |
Service List | /agg/ndc/17.2/v1/ServiceList |
Seat Availability | /agg/ndc/17.2/v1/SeatAvailability |
Order Create (must reference PCI URL) | https://gold.pcx.services.atpco.net/Tokenize/Proxy/OrderCreate |
Order Retrieve | /agg/ndc/17.2/v1/OrderRetrieve |
Order Reshop | /agg/ndc/17.2/v1/OrderReshop |
Order Cancel | /agg/ndc/17.2/v1/OrderCancel |
Order Change | /Tokenize/Proxy/OrderChange |
API Key
To access the NDC Exchange 2.0 Platform API, each seller should provide the “apikey” in the HTTP header. For NDC Exchange 1.0, “X-apiKey” was the value used in the HTTP header; however, for NDC Exchange 2.0 this value is now “apikey”. Please be sure to make this important change or you will experience an Authentication Error (400 Bad Request).
NOTE: OrderCreateRQ requires two headers (see below).
The API key is a unique authorization key issued by ATPCO. Currently, API keys for sellers are manually generated by ATPCO.
POST https://gold.services.atpco.net/ndcexchange/agg/ndc/17.2/v1/AirShopping
Request Headers
apikey: XXXXXXXXXXXXXXXXXXXXXX
Content-Type: application/xml
Accept: */*
Host: gold.services.atpco.net
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
In addition to the above, when conducting an OrderCreateRQ, you must submit an additional two mandatory HTTP headers in OrderCreate Request.
First Mandatory HTTP Header:
- Name: TX-Proxy-Key
- Value: XXXXXXXXXXXXXXXXXXXXXXXX (value send to each seller)
Second Mandatory HTTP Header:
- Name: tx-http-timeout:
- Value: 120
TraceID
To enable us to follow up your transactions associated to your requests/responses, we need you to turn on trace and provide the transaction ID.
Ensure you have set orc-debug = “true” to pass in the header.
When retrieving the responses for tech support, you need to capture the value of “HTTP header orc-transaction-id” value and insert in the Transaction ID/Trace field in the ticket.
SOAP Message
Aggregation Message RQ (SOAP) | Sample Value | Remarks |
---|---|---|
Header | Empty, used for schema compatibility | |
Body | ||
NDCMSG_Envelope | ||
NDCMSG_Header | ||
SchemaType | NDC | Static, same for all messages |
SchemaVersion | YY.2017.2 | Static, same for all messages |
Sender | ||
SellerID | atpco.ndcx.key.SELLER_SPECIFIC_ID | Seller’s key |
Recipient | ||
Address.Company | Code for Offer OWNER for 1-1 services | |
NDCMSG_Body | ||
NDCMSG_Payload | ||
<![CDATA[ | ||
IATA_NDC_Message | AirShoppingRQ, OfferPriceRQ, SeatAvailabilityRQ, ServiceListRQ, OrderCreateRQ, OrderRetrieveRQ, OrderReshopRQ, OrderCancelRQ | MVP supported messages |
]]> |
Message Structure Example
This is the general structure of any messages accepted by ATPCO NDC Exchange 2.0 (Aggregation Service).
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:atpco="https://prod.services.atpco.net/ndcexchange/NDC/schema/v1">
<soapenv:Header/>
<soapenv:Body>
<atpco:NDCMSG_Envelope>
<NDCMSG_Header>
<Sender>
<SellerID>atpco.ndcx.key.SELLER-SPECIFIC-KEY</SellerID>
</Sender>
<Recipient>
<Address>
<Company>AC</Company>
</Address>
</Recipient>
<SchemaType>NDC</SchemaType>
<SchemaVersion>YY.2017.2</SchemaVersion>
</NDCMSG_Header>
<NDCMSG_Body>
<NDCMSG_Payload>
<![CDATA[
<IATA_NDC_Message>
[...]
</IATA_NDC_Message>
]]>
</NDCMSG_Payload>
</NDCMSG_Body>
</atpco:NDCMSG_Envelope>
</soapenv:Body>
</soapenv:Envelope>
IATA NDC Message
- CountryCode—Required for sellers who use consumer flow. “CountryCode” is not required for sellers who use agency driven flow.
- IATA_Number—Required for agency driven flow. The IATA number determines the location and currency to be applied.
Message Structure Example
This is the general structure for an IATA/ARC Accredited seller (see Special Instructions for Non-IATA/ARC Accredited sellers (ACO)). It’s important to note that “CounryCode” is mandatory for those who use consumer flow, but is not mandatory for agencies (agency driven flow).
Special Instructions
Ticket Advisories Are Not Available in the 01 September 2021 Release
Ticket Advisories are currently not returned in a response. NDC Exchange will return an error message when the cancel cannot be performed online. It is suggested that partners enable a Cancel option upon PNR retrieval for when the cancel flow is supported. In the odd case that cancel is not possible, an error will be returned and you will need to contact the Air Canada Call Center. While the flow is not optimal, it will improve once ticket advisories are implemented.
Primary Language Code
Air Canada offers switching response content between Canadian English (en-CA) and Canadian French (fr-CA). To accommodate this feature, NDC Exchange will continue supporting the XPath x/Parameters/Languages/LanguageCode in the messages AirShopping, OfferPrice, ServiceList, and SeatAvailability. While OrderRetrieve and OrderCreate will now have a choice between the root attribute /@PrimaryLangID and Parameters/Languages/LanguageCode, the new post-sales messages (i.e., OrderReshop-SHOP, OrderReshop-PRICE, and OrderChange) will only allow including language code at the root level (i.e., /@PrimaryLangID). Although OrderCancel is an existing message that’s supported today, it will also accept the language code at the root level via the attribute /@PrimaryLangID. The full list of XPaths w.r.t. language code is as below:
Primary Language Code to switch language in a response payload:
- As-is: AirShoppingRQ - AirShoppingRQ/Parameters/Languages/LanguageCode
- As-is: OfferPriceRQ - OfferPriceRQ/Parameters/Languages/LanguageCode
- As-is: SeatAvailabilityRQ (prime-sale/post-sales) - SeatAvailabilityRQ/Parameters/Languages/LanguageCode
- As-is: ServiceListRQ (prime-sale/post-sales) - ServiceListRQ/Parameters/Languages/LanguageCode
- Choice: OrderCreateRQ - OrderCreateRQ/@PrimaryLangID OR OrderCreateRQ/Parameters/Languages/LanguageCode (PrimaryLangID needs to be the primary one in case of conflicting language codes.)
- Choice: OrderRetrieveRQ - OrderRetrieveRQ/@PrimaryLangID OR OrderRetrieveRQ/Parameters/Languages/LanguageCode (PrimaryLangID needs to be the primary one in case of conflicting language codes.)
- New path: OrderReshopRQ-SHOP - OrderReshopRQ/@PrimaryLangID
- New path: OrderReshopRQ-PRICE - OrderReshopRQ/@PrimaryLangID
- New path: OrderChangeRQ - OrderChangeRQ/@PrimaryLangID
- New path: OrderCancelRQ - OrderCancelRQ/@PrimaryLangID
FareRule Text for Display to Shoppers
There has been a slight change to FareRule and it is currently abbreviated. The full FareRule extract will be available in a later release.
AirShoppingRS
<PriceClassList>
<PriceClass PriceClassID="CYIPATNYGE-Standard">
<Name>Standard</Name>
<Descriptions>
<Description>
<Text>Up to 50% Aeroplan points/SQM</Text>
</Description>
<Description>
<Text>No refund</Text>
</Description>
</Descriptions>
</PriceClass>
<PriceClass PriceClassID="FMFS2EP215-Flex">
<Name>Flex</Name>
<Descriptions>
<Description>
<Text>100% Aeroplan points/SQM</Text>
</Description>
<Description>
<Text>Free standard seat selection</Text>
</Description>
<Description>
<Text>No refund</Text>
</Description>
</Descriptions>
</PriceClass>
<PriceClass PriceClassID="CJYRCMYIRR-Comfort">
<Name>Comfort</Name>
<Descriptions>
<Description>
<Text>115% Aeroplan points/SQM</Text>
</Description>
<Description>
<Text>Free standard and Preferred seat selection</Text>
</Description>
<Description>
<Text>Fully refundable</Text>
</Description>
</Descriptions>
</PriceClass>
<PriceClass PriceClassID="LTHHQVMXUT-Latitude">
<Name>Latitude</Name>
<Descriptions>
<Description>
<Text>125% Aeroplan points/SQM</Text>
</Description>
<Description>
<Text>Free standard and Preferred seat selection</Text>
</Description>
<Description>
<Text>Fully refundable</Text>
</Description>
</Descriptions>
</PriceClass>
<PriceClass PriceClassID="MRIER50BWH-Premium-Economy-lowest-">
<Name>Premium Economy (lowest)</Name>
<Descriptions>
<Description>
<Text>125% Aeroplan points/SQM</Text>
</Description>
<Description>
<Text>Dedicated cabin, wider seat, more legroom</Text>
</Description>
<Description>
<Text>Free changes and cancellations</Text>
</Description>
</Descriptions>
</PriceClass>
<PriceClass PriceClassID="RYRKQ210US-Premium-Economy-flexible-">
<Name>Premium Economy (flexible)</Name>
<Descriptions>
<Description>
<Text>125% Aeroplan points/SQM</Text>
</Description>
<Description>
<Text>Dedicated cabin, wider seat, more legroom</Text>
</Description>
</Descriptions>
</PriceClass>
<PriceClass PriceClassID="NJ5RD87XYK-Business-Class-lowest-">
<Name>Business Class (lowest)</Name>
<Descriptions>
<Description>
<Text>150% Aeroplan points/SQM</Text>
</Description>
<Description>
<Text>Exclusive cabin, superior comfort and space</Text>
</Description>
</Descriptions>
</PriceClass>
<PriceClass PriceClassID="SIQNNSO867-Business-Class-flexible-">
<Name>Business Class (flexible)</Name>
<Descriptions>
<Description>
<Text>150% Aeroplan points/SQM</Text>
</Description>
<Description>
<Text>Exclusive cabin, superior comfort and space</Text>
</Description>
<Description>
<Text>Free changes and cancellations</Text>
</Description>
</Descriptions>
</PriceClass>
</PriceClassList>
OfferPriceRS
<PriceClass PriceClassID="BGPJKCAN8J-Standard">
<Name>Standard</Name>
<Descriptions>
<Description>
<Text>Changes:</Text>
</Description>
<Description>
<Text>Prior to day of departure - The Change fee per direction, per passenger is up to 80 USD for changes made within 60 days of departure. A lesser fee applies for changes made outside 60 days of departure. Change fees are plus applicable taxes and any fare difference. Changes can be made up to 2 hours before departure.</Text>
</Description>
<Description>
<Text>Airport same-day changes are subject to availability and are permitted only for same-day flights at a fee of 75 per direction, per passenger.</Text>
</Description>
<Description>
<Text>Same-day standby is available only to passengers travelling between Toronto Pearson (YYZ) and LaGuardia (LGA), John F. Kennedy (JFK) and Newark (EWR) airports.</Text>
</Description>
<Description>
<Text>Flights can only be used in sequence from the place of departure specified on the itinerary.</Text>
</Description>
<Description>
<Text>Cancellations:</Text>
</Description>
<Description>
<Text>Tickets are non-refundable and non-transferable.</Text>
</Description>
<Description>
<Text>Cancellations can be made up to 45 minutes prior to departure.</Text>
</Description>
<Description>
<Text>Provided the original booking is cancelled prior to the original flight departure, the value of unused ticket can be applied within a one year period from date of issue of the original tickets to the value of a new ticket subject to a change fee per direction, per passenger, plus applicable taxes and any additional fare difference, subject to availability and advance purchase requirements.</Text>
</Description>
<Description>
<Text>The new outbound travel date must commence within a one year period from the original date of ticket issuance.</Text>
</Description>
<Description>
<Text>If the fare for the new journey is lower, any residual amount will be forfeited.</Text>
</Description>
<Description>
<Text>Please notify us immediately if you do not plan on taking your scheduled flight(s). If you are unable to change or cancel your booking online, you can reach Air Canada Reservations at 1-888-247-2262 (for international and other numbers, visit www.aircanada.com/othernumbers). If you do not show up for your flight, the rest of your itinerary will automatically be cancelled.</Text>
</Description>
<Description>
<Text>Checked Baggage Allowance and Fee on Air Canada:</Text>
</Description>
<Description>
<Text>1st bag: $25.18 for Non-member, Air Canada Basic members; Complimentary for Air Canada Prestige or Star Alliance Gold members; Complimentary for Air Canada Super Elite, Elite members.</Text>
</Description>
<Description>
<Text>2nd bag: $41.96 for Non-member, Air Canada Basic or Star Alliance Silver &; Gold members; Complimentary for Air Canada Prestige members; Complimentary for Air Canada Super Elite, Elite members.</Text>
</Description>
<Description>
<Text>1 extra bag: Complimentary for Star Alliance Gold members.</Text>
</Description>
<Description>
<Text>Other fare rules:</Text>
</Description>
<Description>
<Text>Advance seat selection on Air Canada Rouge flights, Air Canada flights and Air Canada Express (operated by Jazz), subject to availability.</Text>
</Description>
<Description>
<Text>25% Aeroplan points on flights operated by Air Canada, Air Canada Rouge and Air Canada Express (Jazz)</Text>
</Description>
<Description>
<Text>Flights operated by Air Canada Rouge: earn 100 Air Canada Status Miles. </Text>
</Description>
<Description>
<Text>Read complete fare rules applicable to this fare.</Text>
</Description>
<Description>
<Text>Read complete fare rules applicable to this fare.</Text>
</Description>
</Descriptions>
<FareBasisCode>
<Code>KZ6NZCTG</Code>
</FareBasisCode>
<ClassOfService>
<Code>K</Code>
</ClassOfService>
</PriceClass>
</PriceClassList>
IATA Seller Information versus Non-IATA Seller
We find a common problem with many sellers who are not entering their credentials correctly or following through the entire NDC flow with the same information. So we are reiterating that which is required for IATA sellers (agency driven flow) versus non-IATA sellers (consumer driven flow).
Non-IATA/ARC Accredited sellers (consumer driven flow):
The information sent by non-accredited (consumer flow) is different to that of IATA-accredited.
CountryCode is REQUIRED and defines your currency. Permitted currencies are associated to your Air Canada credentials that are associated to your Seller ID.
- The ability to change the currency (override) is based on CountryCode. This must be the same in the header throughout the entire NDC flow, from AirShopping through CancelPNR.
- There is a limited number of currencies and country codes supported by the AC consumer flow. A currency or country code not included in the list below will return an error.
Country | Currency | Country | Currency | |
---|---|---|---|---|
AR | USD | IT | EUR | |
AU | AUD | JP | JPY | |
CA | CAD | KR | CAD | |
CH | CHF | MX | MXN | |
CL | USD | NL | EUR | |
CN | CNY | NO | NOK | |
CO | USD | PA | USD | |
DE | EUR | PE | USD | |
DK | DKK | SE | SEK | |
ES | EUR | TW | TWD | |
FR | EUR | UK | GBP | |
HK | HKD | US | USD | |
IE | EUR | NL | EUR | |
IL | USD |
IATA/ARC Accredited Sellers (agency driven flow)
<soapenv:Envelope xmlns:soapenv=http://schemas.xmlsoap.org/soap/envelope/ xmlns:v1=https://prod.services.atpco.net/ndcexchange/NDC/schema/v1>
<soapenv:Header/>
<soapenv:Body>
<v1:NDCMSG_Envelope>
<NDCMSG_Header>
<Sender>
<SellerID>THIS_IS_SELLER_ID</SellerID>
</Sender>
<SchemaType>NDC</SchemaType>
<SchemaVersion>YY.2017.2</SchemaVersion>
</NDCMSG_Header>
<NDCMSG_Body>
<NDCMSG_Payload>
<![CDATA[
<AirShoppingRQ Version="17.2" xmlns=http://www.iata.org/IATA/EDIST/2017.2>
<PointOfSale>
<Location>
<CountryCode>US</CountryCode>
</Location>
</PointOfSale>
<Document>
<Name>ATPCO AGG NDCx 2.0</Name>
<ReferenceVersion>IATA NDC 17.2</ReferenceVersion>
</Document>
<Party>
<Sender>
<TravelAgencySender>
<IATA_Number>000000</IATA_Number>
<AgencyID>000</AgencyID>
<AgentUser>
<AgentUserID>SAND</AgentUserID>
</AgentUser>
</TravelAgencySender>
</Sender>
</Party>
<Parameters>
<Languages>
<LanguageCode>fr-CA</LanguageCode>
</Languages>
<CurrCodes>
<FiledInCurrency>
<CurrCode>USD</CurrCode>
</FiledInCurrency>
</CurrCodes>
</Parameters>
<CoreQuery>
Air Canada EIP Highlighted Changes
AirShopping Request
Below are the changes for Air Canada EIP NDC 2.0 AirShopping Request:
- The NDCMSG Header is changed as showcased below. The Sender node will have
instead of . - NDCMSG Payload will look like below:
- The Language can be set as per below node:
The Languages supported are French and English. If the user is not providing the Language parameters, then English is the default language.
-
Qualifiers:
- NTP and ACB Qualifiers to be given as below:
- PN Qualifier to be given as below:
- CCN Qualifier to be given as below:
- NTP and ACB Qualifiers to be given as below:
AirShopping Response
- NDCMSG Header will NOT be visible on the Response. Below is the snippet of the current AC2U NDC AirShopping Response.
- The Document node will be displayed as below:
- The Warnings node will be displayed as below:
- The ShoppingResponseID is added as new node:
- Changes on FareComponent node as below:
- The TimeLimits node is new within the Offer node:
- The DisclosureList node after PassengerList already exists on NDC Response is no longer visible on AC EIP NDC Response.
- The OperatingCarrier node on FlightSegment is changed to showcase AC_Breakpoint and FareFamily values as below:
- The InstructionList is a new node on the Response as below. This is seen after the OriginDestinationList node.
- The Discount Qualifier is a new node displayed as below:
OfferPrice Request
Air Canada supports two types of Sellers:
- IATA sellers (agency-driven flow) – The seller must provide their IATA number and AgencyID in the request. The seller should not use the ATPCO test IATA number during their testing.
<Party>
<Sender>
<TravelAgencySender>
<IATA_Number>SELLER IATA NUMBER</IATA_Number>
<AgencyID>SELLER AGENCY ID</AgencyID>
</TravelAgencySender>
</Sender>
</Party>
- Non-IATA sellers (consumer-driven flow) - The seller should NOT provide the IATA number in the request, as they do not have an IATA number. The seller can pass seller name in the below field.
<Party>
<Sender>
<EnabledSystemSender>
<SystemID>SELLER NAME</SystemID>
</EnabledSystemSender>
</Sender>
</Party>
Additional information required to be passed in the Request:
- /OfferPriceRQ/Parameters/Languages/LanguageCode = “en-CA or fr-CA”
- /OfferPriceRQ/ShoppingResponseID/ResponseID (This value is retrieved from the previous response, for example, AirShoppingRS.)
- /OfferPriceRQ/Query/Offer/OfferID (This value is retrieved from the previous response, for example, AirShoppingRS.)
- /OfferPriceRQ/Query/Offer/OfferID/@Owner
- /OfferPriceRQ/Query/Offer/OfferItem/@OfferItemID
- /OfferPriceRQ/Query/Offer/OfferItem/PassengerRefs
The following optional information may be passed in the following XPaths depending on the use case:
- /OfferPriceRQ/DataLists/PassengerList/Passenger
- /OfferPriceRQ/DataLists/PassengerList/Passenger/LoyaltyProgramAccount
The following information is no longer required to be passed in the Request:
- “/OfferPriceRQ/Query/OriginDestination/Flight” information
OfferPrice Response
New ResponseID section as shown below:
The remaining sections are consistent with the earlier version.
SeatAvailibility Request
Air Canada supports two types of Sellers:
- IATA sellers (agency-driven flow) – The seller must provide their IATA number and AgencyID in the request. The seller should not use the ATPCO test IATA number during their testing.
<Party>
<Sender>
<TravelAgencySender>
<IATA_Number>SELLER IATA NUMBER</IATA_Number>
<AgencyID>SELLER AGENCY ID</AgencyID>
</TravelAgencySender>
</Sender>
</Party>
- Non-IATA sellers (consumer-driven flow) - The seller should NOT provide the IATA number in the request, as they do not have an IATA number. The seller can pass seller name in the below field.
<Party>
<Sender>
<EnabledSystemSender>
<SystemID>SELLER NAME</SystemID>
</EnabledSystemSender>
</Sender>
</Party>
Additional information required to be passed in the Request:
- /SeatMapRQ/Parameters/Languages/LanguageCode = “en-CA or fr-CA”
- /SeatMapRQ/ShoppingResponseID/ResponseID (This value is retrieved from the previous response, for example, AirShoppingRS.)
- /SeatMapRQ/Query/Offer/OfferID (This value is retrieved from the previous response, for example, AirShoppingRS.)
- /SeatMapRQ/Query//Offer/OfferID/@Owner
The following optional information may be passed in the following XPaths depending on the use case:
- /SeatMapRQ/DataLists/PassengerList/Passenger
- /SeatMapRQ/DataLists/PassengerList/Passenger/LoyaltyProgramAccount
The following information is no longer required to be passed in the Request:
- “/SeatMapRQ/Query/OriginDestination/Flight” information
SeatAvailability Response
The following is new information returned in the SeatAvailability Response:
- /SeatAvailabilityRS/ALaCarteOffer/ALaCarteOfferItem/Eligibility/PassengerRefs
- /SeatAvailabilityRS/DataLists/TermsList
The following information will no longer be returned in the SeatAvailability Response:
- /SeatAvailabilityRS/ALaCarteOffer/ALaCarteOfferItem/UnitPriceDetail/Taxes/Breakdown/Tax/Description
ServiceList Request
Air Canada supports two types of Sellers:
- IATA sellers (agency-driven flow) – The seller must provide their IATA number and AgencyID in the request. The seller should not use the ATPCO test IATA number during their testing.
<Party>
<Sender>
<TravelAgencySender>
<IATA_Number>SELLER IATA NUMBER</IATA_Number>
<AgencyID>SELLER AGENCY ID</AgencyID>
</TravelAgencySender>
</Sender>
</Party>
- Non-IATA sellers (consumer-driven flow) - The seller should NOT provide the IATA number in the request, as they do not have an IATA number. The seller can pass seller name in the below field.
<Party>
<Sender>
<EnabledSystemSender>
<SystemID>SELLER NAME</SystemID>
</EnabledSystemSender>
</Sender>
</Party>
Additional information required to be passed in the Request:
- /ServiceListRQ/Parameters/Languages/LanguageCode = “EN”
- /ServiceListRQ/ShoppingResponseID/ResponseID (This value is retrieved from the previous response, for example, AirShoppingRS.)
- /ServiceListRQ/Query/Offers/Offer/OfferID (This value is retrieved from the previous response, for example, AirShoppingRS.)
- /ServiceListRQ/Query/Offers/Offer/OfferID/@Owner
- /ServiceListRQ/Query/Offers/Offer/OfferItemIDs/OfferItemID (This value is retrieved from the previous response, for example, AirShoppingRS.)
- /ServiceListRQ/Query/Offers/Offer/OfferItemIDs/OfferItemID/@Owner
The following optional information may be passed in the following XPaths depending on the use case:
- /ServiceListRQ/DataLists/PassengerList/Passenger
- /ServiceListRQ/DataLists/PassengerList/Passenger/LoyaltyProgramAccount
The following information is no longer required to be passed in the Request:
- “/ServiceListRQ/Query/OriginDestination/Flight” information
ServiceList Response
The following is new information returned in the ServiceList Response:
- /ServiceListRS/ALaCarteOffer/ALaCarteOfferItem/Eligibility/PassengerRefs
- /ServiceListRS/ALaCarteOffer/ALaCarteOfferItem/Eligibility/SegmentRefs
- /ServiceListRS/DataLists/ServiceDefinitionList/ServiceDefinition/SeatDefinitionRefs
- /ServiceListRS/DataLists/SeatDefinitionList/SeatDefinition
- /ServiceListRS/DataLists/SeatDefinitionList/SeatDefinition/Description/Text
- /ServiceListRS/DataLists/SeatDefinitionList/SeatDefinition/Description/Text/@refs
- /ServiceListRS/DataLists/SeatDefinitionList/SeatDefinition/SeatCharacteristicCode
The following information will no longer be returned in the ServiceList Response:
- /ServiceListRS/ALaCarteOffer/ALaCarteOfferItem/UnitPriceDetail/Discount/Application
- /ServiceListRS/ALaCarteOffer/ALaCarteOfferItem/UnitPriceDetail/Discount/Description
- /ServiceListRS/ALaCarteOffer/ALaCarteOfferItem/UnitPriceDetail/Taxes/Breakdown/Tax/Description
OrderCreate Request
Air Canada supports two types of Sellers:
- IATA sellers (agency-driven flow) – The seller must provide their IATA number and AgencyID in the request. The seller should not use the ATPCO test IATA number during their testing.
<Party>
<Sender>
<TravelAgencySender>
<IATA_Number>SELLER IATA NUMBER</IATA_Number>
<AgencyID>SELLER AGENCY ID</AgencyID>
</TravelAgencySender>
</Sender>
</Party>
- Non-IATA sellers (consumer-driven flow) - The seller should NOT provide the IATA number in the request, as they do not have an IATA number. The seller can pass seller name in the below field.
<Party>
<Sender>
<EnabledSystemSender>
<SystemID>SELLER NAME</SystemID>
</EnabledSystemSender>
</Sender>
</Party>
Additional information required to be passed in the Request:
-
To submit flight booking request in OrderCreate Request:
- /OrderCreateRQ/Query/Offer/@OfferID (This value is retrieved from the previous response, for example, OfferPriceRS.)
- /OrderCreateRQ/Query/Offer/@Owner (This value is retrieved from the previous response, for example, OfferPriceRS.)
- /OrderCreateRQ/Query/Offer/@ResponseID (This value is retrieved from the previous response, for example, OfferPriceRS.)
- /OrderCreateRQ/Query/Offer/TotalOfferPrice (This value is retrieved from the previous response, for example, OfferPriceRS.)
- /OrderCreateRQ/Query/Offer/TotalOfferPrice/@Code (This value is retrieved from the previous response, for example, OfferPriceRS.)
- /OrderCreateRQ/Query/Offer/OfferItem/@OfferItemID (This value is retrieved from the previous response, for example, OfferPriceRS.)
- /OrderCreateRQ/Query/Offer/OfferItem/PassengerRefs (This value is retrieved from the previous response, for example, OfferPriceRS.)
-
To submit an ancillaries purchase request in OrderCreate Request:
- /OrderCreateRQ/Query/Offer/@OfferID (This value is retrieved from ServiceListRS.)
- /OrderCreateRQ/Query/Offer/@Owner (This value is retrieved from ServiceListRS.)
- /OrderCreateRQ/Query/Offer/@ResponseID (This value is retrieved from ServiceListRS.)
- /OrderCreateRQ/Query/Offer/OfferItem/@OfferItemID (This value is retrieved from ServiceListRS.)
- /OrderCreateRQ/Query/Offer/OfferItem/PassengerRefs (This value is retrieved from ServiceListRS.)
-
To submit a seat purchase request in OrderCreate Request:
- /OrderCreateRQ/Query/Offer/@OfferID (This value is retrieved from SeatAvailabilityRS.)
- /OrderCreateRQ/Query/Offer/@Owner (This value is retrieved from SeatAvailabilityRS.)
- /OrderCreateRQ/Query/Offer/@ResponseID (This value is retrieved from SeatAvailabilityRS.)
- /OrderCreateRQ/Query/Offer/OfferItem/@OfferItemID (This value is retrieved from SeatAvailabilityRS.)
- /OrderCreateRQ/Query/Offer/OfferItem/PassengerRefs (This value is retrieved from SeatAvailabilityRS.)
- /OrderCreateRQ/Query/Offer[3]/OfferItem/SeatSelection/Row (This value is retrieved from SeatAvailabilityRS.)
- /OrderCreateRQ/Query/Offer[3]/OfferItem/SeatSelection/Column (This value is retrieved from SeatAvailabilityRS.)
Additional mandatory information within the below XPaths:
- /OrderCreateRQ/Query/Payments/Payment
- /OrderCreateRQ/Query/DataLists/PassengerList/Passenger
- /OrderCreateRQ/Query/DataLists/ContactList/ContactInformation
The following optional information may be passed in the following XPaths depending on the use case:
- /OrderCreateRQ/DataLists/PassengerList/Passenger/IdentityDocument (to pass Passport, Redress Number, US Alien Card, CA Resident Card, Nexus, Identity Card, VISA, and KnownTraveler Number information)
- /OrderCreateRQ/DataLists/PassengerList/Passenger/LoyaltyProgramAccount (to pass FQTV information)
The following information is no longer required to be passed in the Request:
- /OrderCreateRQ/Party (Some elements as noted in the Credential Management document.)
- /OrderCreateRQ/Query/DataLists/FlightSegmentList/FlightSegment
- /OrderCreateRQ/Query/DataLists/OriginDestinationList/OriginDestination
OrderCreate—OrderView Response
The OrderViewRS service includes a complete detail about created order for the requested Offer:
- OrderViewRS/Response/Order/@OrderID
- OrderViewRS/Response/Order/BookingReferences/BookingReference/Type – Display Type like PNR.
- OrderViewRS/Response/Order/BookingReferences/BookingReference/ID – Display the carrier PNR number.
The OrderItemID is created for each PTC type. If there are 2 ADT, 2 CHD, and 1 INF in the created Order then there should be one OderItemID for 2 ADT PTC, one OderItemID for 2 CHD PTC, and one OderItemID for INF (not seat occupied, infant on lap category) PTC. The INF PTC is always associated with an ADT PTC type.
The separate OrderItemIDs are created for Flights, Seats, and other ancillaries.
Example: 2ADT, 2CHD, and 1INF on lap. Meal and lounge access for 2ADT and 2CHD. Seat assigned for 2ADT and 2 CHD but no seat for INF. The below OrderItemIds should be created for this example.
- Flight OrderItemID – for 2ADT
- Flight OrderItemID – for 2CHD
- Flight OrderItemID – for INF [Price may be only taxes as defined by carriers]
- Seat OrderItemID – for first ADT [Free Seat price maybe 0 amount as defined by carriers]
- Seat OrderItemID – for second ADT
- Seat OrderItemID – for first CHD
- Seat OrderItemID – for the second CHD
- NO SEAT for INF
- Meal OrderItemID – for first ADT
- Meal OrderItemID – for the second ADT
- Meal OrderItemID – for first CHD
- Meal OrderItemID – for second CHD
- NO MEAL for INF
- Lounge OrderItemID – for first ADT
- Lounge OrderItemID – for second ADT
- Lounge OrderItemID – for first CHD
- Lounge OrderItemID – for second CHD
- NO Lounge for INF
The total price for the Order and payment details displays in the below section:
- OrderViewRS/Response/Order/TotalOrderPrice
- OrderViewRS/Response/Order/Payments/Payment
The complete order details and ticket numbers display in the below section:
- OrderViewRS/Response/Order/OrderItems/OrderItem
- OrderViewRS/Response/TicketDocInfos
The DataLists section display other information which is linked to the order:
- OrderViewRS/Response/DataLists/PassengerList
- OrderViewRS/Response/DataLists/ContactList
- OrderViewRS/Response/DataLists/BaggageAllowanceList
- OrderViewRS/Response/DataLists/DisclosureList/Disclosures
- OrderViewRS/Response/DataLists/FlightSegmentList
- OrderViewRS/Response/DataLists/OriginDestinationList
- OrderViewRS/Response/DataLists/PriceClassList/PriceClass
- OrderViewRS/Response/DataLists/ServiceDefinitionList
- OrderViewRS/Response/DataLists/TermsList
- OrderViewRS/Response/Metadata/Other/OtherMetadata/CurrencyMetadatas/CurrencyMetadata
OrderRetrieve Request
Air Canada supports two types of Sellers:
- IATA sellers (agency-driven flow) – The seller must provide their IATA number and AgencyID in the request. The seller should not use the ATPCO test IATA number during their testing.
<Party>
<Sender>
<TravelAgencySender>
<IATA_Number>SELLER IATA NUMBER</IATA_Number>
<AgencyID>SELLER AGENCY ID</AgencyID>
</TravelAgencySender>
</Sender>
</Party>
- Non-IATA sellers (consumer-driven flow) - The seller should NOT provide the IATA number in the request, as they do not have an IATA number. The seller can pass seller name in the below field.
<Party>
<Sender>
<EnabledSystemSender>
<SystemID>SELLER NAME</SystemID>
</EnabledSystemSender>
</Sender>
</Party>
Additional information required to be passed in the Request:
- /OrderRetrieveRQ/Query/Filters/OrderID
- /OrderRetrieveRQ/Query/Filters/OrderID/@Owner
The following optional information may be passed in the following XPaths depending on the use case:
- None
The following information is no longer required to be passed in the Request:
- None
OrderRetrieve—OrderView Response
The OrderViewRS service includes a complete detail about created order for the requested Offer. The structure is the same as explained above (see OrderCreate—OrderView Response).
OrderReshop Request
The cancelling an order is a two-step process for Air Canada:
- NDC 2017.2 OrderReshopRQ/RS – It provides details about cancellation like forfeit and retain, refund etc.
- NDC 2017.2 OrderCancelRQ/RS – It cancels the existing reservation.
Request Node:
- /OrderReshopRQ/Party/Sender/TravelAgencySender/AgencyID (Can be passed as 001 or empty to be IATA NDC schema compliant.)
- /OrderReshopRQ/ReshopParameters/Notices/Localization/Languages/LanguageCode (Modifier to get response in the specific language.)
- /OrderReshopRQ/Query/OrderID (The user needs to provide this from earlier response, like OrderView Response.)
OrderReshop Response
The Response displays OrderID and recommendation about remove and retain as applicable.
- /OrderReshopRS/Response/ChangeFees/ApplicableFeeRemarks/Remark (Display OrederID.)
- /OrderReshopRS/Response/ChangeFees/Details (Display recommendation about remove and retain as applicable.)
- /OrderReshopRS/Warnings (Display if any warnings returned by the carrier.)
OrderCancel Request
The seller must provide their IATA number and AgencyID in the request. If the Seller is a non-IATA agency, they should not include /TravelAgencySender/IATA_Number. /TravelAgencySender/AgencyID can have an alpha or numeric value. You may want to default it to "001" or "N/A".
<Party>
<Sender>
<TravelAgencySender>
<IATA_Number>SELLER IATA NUMBER</IATA_Number>
<AgencyID>SELLER AGENCY ID</AgencyID>
</TravelAgencySender>
</Sender>
</Party>
Additional information required to be passed in the Request:
- /OrderCancelRQ/Party/Sender/TravelAgencySender/Contacts/Contact/EmailContact/Address
- /OrderCancelRQ/ExpectedRefundAmount/@RefundAllInd
- /OrderCancelRQ/Query/Order/@OrderID
- /OrderCancelRQ/Query/Order/@Owner
The following optional information may be passed in the following XPaths depending on the use case:
- None
The following information is no longer required to be passed in the Request:
- OrderCancelRQ/Query/BookingReferences/BookingReference/Type
- OrderCancelRQ/Query/BookingReferences/BookingReference/ID
- OrderCancelRQ/Query/BookingReferences/BookingReference/OtherID
- OrderCancelRQ/ExpectedRefundAmount/Equivalent
OrderCancel Response
XML Samples
The below samples cover a full one-way International Shop-Price-Order workflow.
- AirShopping RQ and RS Samples
- OfferPrice RQ and RS Samples
- OrderCreate RQ and OrderView RS Samples
- SeatAvailability RQ Sample
- ServiceList RQ Sample
Post-Sales Servicing for Air Canada
Post-Sales includes four areas of servicing:
- Itinerary Servicing—This includes adding segments, removing segments, and replacing segments.
- Seat Servicing—This includes adding or updating free and/or paid seats for the selected segments.
- Ancillary Servicing—This includes adding or updating free and/or paid ancillary services for the selected segments.
- Passenger Servicing—This includes adding FQTV (frequent traveler number, i.e., customer loyalty member number) for the respective passenger(s).
Post-Sales Servicing Matrix for Air Canada
OrderRetrieveRQ – OrderViewRS is the Prerequisite to all the use cases listed below.
The following link has detailed workflow information on Servicing and all of the use cases: