Last updated 8 minutes ago

NDC Exchange 2.0 (Aggregation Services) Migration Guide
Air Canada

Known Issues/Limitations

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.

orc debug true

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.

orc transaction id

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.

IATA NDC Message

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 02

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:

  1. As-is: AirShoppingRQ - AirShoppingRQ/Parameters/Languages/LanguageCode
  2. As-is: OfferPriceRQ - OfferPriceRQ/Parameters/Languages/LanguageCode
  3. As-is: SeatAvailabilityRQ (prime-sale/post-sales) - SeatAvailabilityRQ/Parameters/Languages/LanguageCode
  4. As-is: ServiceListRQ (prime-sale/post-sales) - ServiceListRQ/Parameters/Languages/LanguageCode
  5. Choice: OrderCreateRQ - OrderCreateRQ/@PrimaryLangID OR OrderCreateRQ/Parameters/Languages/LanguageCode (PrimaryLangID needs to be the primary one in case of conflicting language codes.)
  6. Choice: OrderRetrieveRQ - OrderRetrieveRQ/@PrimaryLangID OR OrderRetrieveRQ/Parameters/Languages/LanguageCode (PrimaryLangID needs to be the primary one in case of conflicting language codes.)
  7. New path: OrderReshopRQ-SHOP - OrderReshopRQ/@PrimaryLangID
  8. New path: OrderReshopRQ-PRICE - OrderReshopRQ/@PrimaryLangID
  9. New path: OrderChangeRQ - OrderChangeRQ/@PrimaryLangID
  10. 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 &amp;; 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

Special Instructions 03

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:

  1. The NDCMSG Header is changed as showcased below. The Sender node will have instead of . AC EIP image 001
  2. NDCMSG Payload will look like below: AC EIP image 002
  3. The Language can be set as per below node: AC EIP image 003 The Languages supported are French and English. If the user is not providing the Language parameters, then English is the default language.
  4. Qualifiers:

    • NTP and ACB Qualifiers to be given as below: AC EIP image 004
    • PN Qualifier to be given as below: AC EIP image 005
    • CCN Qualifier to be given as below: AC EIP image 006

AirShopping Response

  1. NDCMSG Header will NOT be visible on the Response. Below is the snippet of the current AC2U NDC AirShopping Response. AC EIP image 007
  2. The Document node will be displayed as below: AC EIP image 008
  3. The Warnings node will be displayed as below: AC EIP image 009
  4. The ShoppingResponseID is added as new node: AC EIP image 010
  5. Changes on FareComponent node as below: AC EIP image 011
  6. The TimeLimits node is new within the Offer node: AC EIP image 012
  7. The DisclosureList node after PassengerList already exists on NDC Response is no longer visible on AC EIP NDC Response.
  8. The OperatingCarrier node on FlightSegment is changed to showcase AC_Breakpoint and FareFamily values as below: AC EIP image 013
  9. The InstructionList is a new node on the Response as below. This is seen after the OriginDestinationList node. AC EIP image 014
  10. The Discount Qualifier is a new node displayed as below: AC EIP image 015

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

AC EIP image 016

OfferPrice Response

New ResponseID section as shown below: AC EIP image 017 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

AC EIP image 018

SeatAvailability Response

The following is new information returned in the SeatAvailability Response:

  • /SeatAvailabilityRS/ALaCarteOffer/ALaCarteOfferItem/Eligibility/PassengerRefs

AC EIP image 019

  • /SeatAvailabilityRS/DataLists/TermsList

AC EIP image 020

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

AC EIP image 021

ServiceList Response

The following is new information returned in the ServiceList Response:

  • /ServiceListRS/ALaCarteOffer/ALaCarteOfferItem/Eligibility/PassengerRefs
  • /ServiceListRS/ALaCarteOffer/ALaCarteOfferItem/Eligibility/SegmentRefs

AC EIP image 022

  • /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

AC EIP image 024

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:

  1. 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.)

AC EIP image 025

  1. 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.)

AC EIP image 026

  1. 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.)

AC EIP image 027

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)

AC EIP image 028

  • /OrderCreateRQ/DataLists/PassengerList/Passenger/LoyaltyProgramAccount (to pass FQTV information)

AC EIP image 029

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.

  1. Flight OrderItemID – for 2ADT
  2. Flight OrderItemID – for 2CHD
  3. Flight OrderItemID – for INF [Price may be only taxes as defined by carriers]
  4. Seat OrderItemID – for first ADT [Free Seat price maybe 0 amount as defined by carriers]
  5. Seat OrderItemID – for second ADT
  6. Seat OrderItemID – for first CHD
  7. Seat OrderItemID – for the second CHD
  8. NO SEAT for INF
  9. Meal OrderItemID – for first ADT
  10. Meal OrderItemID – for the second ADT
  11. Meal OrderItemID – for first CHD
  12. Meal OrderItemID – for second CHD
  13. NO MEAL for INF
  14. Lounge OrderItemID – for first ADT
  15. Lounge OrderItemID – for second ADT
  16. Lounge OrderItemID – for first CHD
  17. Lounge OrderItemID – for second CHD
  18. 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

AC EIP OrderViewRS image

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

AC EIP image 030

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:

  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.

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.)

AC EIP image 031

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.)

AC EIP image 032

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

AC EIP image 033

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

AC EIP image 034

XML Samples

The below samples cover a full one-way International Shop-Price-Order workflow.

Post-Sales Servicing for Air Canada

Post-Sales includes four areas of servicing:

  1. Itinerary Servicing—This includes adding segments, removing segments, and replacing segments.
  2. Seat Servicing—This includes adding or updating free and/or paid seats for the selected segments.
  3. Ancillary Servicing—This includes adding or updating free and/or paid ancillary services for the selected segments.
  4. 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.

AC Post Sales Servicing Matrix

The following link has detailed workflow information on Servicing and all of the use cases:

Post-Sales Servicing

User Acceptance Testing Details

User Acceptance Testing