# Air Canada > Air Canada is Canada's flag carrier and the sole source of its own seat inventory. Its only public API surface is the NDC distribution API at ndc.aircanada.com: ten IATA NDC 17.2 (EDIST) message services, XML over a SOAP envelope, reached through the ndcpartners.aircanada.com gateway. The documentation is fully public with no login; access is not - production credentials require a commercial agreement with Air Canada's distribution team, accredited IATA/ARC codes on every request, and passing Air Canada display certification. There is no consumer API (no public flight status, check-in, booking or Aeroplan endpoint), and no OpenAPI, WSDL or downloadable XSD anywhere on the surface. Generated by API Evangelist from the Air Canada NDC developer portal on 2026-07-28. Air Canada publishes no llms.txt of its own (probed: /llms.txt returns the portal SPA shell on ndc.aircanada.com and HTTP 404 on www.aircanada.com). ## What an agent must know first - Transport is SOAP 1.1 over HTTPS POST with an XML body. Not REST, not JSON. - Authentication is a single `apikey` HTTP header issued by Air Canada, plus an in-payload identity chain (SellerID in the envelope; accredited IATA_Number and AgencyID for agency flows). A missing key returns HTTP 400. - Business errors come back inside the NDC payload in an `Errors` element with a numeric code, at HTTP 200 - not as HTTP status codes and not as RFC 9457 problem details. - Message order is mandatory: OfferPrice must run before OrderCreate, and OfferIDs must be carried forward from AirShopping/SeatAvailability/ServiceList into OrderCreate or the request fails. - There is no idempotency key, no pagination, no rate-limit header, and no bulk export or order-list operation. - Cancelling is two calls: OrderReshop for the eligible cancellation methods, then OrderCancel. If no method is selected, OrderCancel retains for future use instead of refunding. ## APIs - [Air Canada NDC AirShopping API](https://ndc.aircanada.com/api/documentation/airshopping): Shop one-way, round-trip and North America multicity itineraries; returns branded fare-family offers. - [Air Canada NDC OfferPrice API](https://ndc.aircanada.com/api/documentation/offerprice): Price a selected offer; mandatory before OrderCreate. - [Air Canada NDC ServiceList API](https://ndc.aircanada.com/api/documentation/servicelist): Optional and ancillary services purchasable against an offer or order. - [Air Canada NDC SeatAvailability API](https://ndc.aircanada.com/api/documentation/seatavailability): Seat maps with advance and preferred seat pricing. - [Air Canada NDC OrderCreate API](https://ndc.aircanada.com/api/documentation/ordercreate): Creates the reservation; returns an OrderID and an Air Canada record locator. Routed through the PCI gateway. - [Air Canada NDC OrderRetrieve API](https://ndc.aircanada.com/api/documentation/orderretrieve): Retrieve one Order by mandatory OrderID and Owner. No filtering, no history, no cancelled/GDS/redemption orders. - [Air Canada NDC OrderChange API](https://ndc.aircanada.com/api/documentation/orderchange): Seat, ancillary and passenger servicing. Routed through the PCI gateway. - [Air Canada NDC OrderReshop API](https://ndc.aircanada.com/api/documentation/orderreshop): Change and cancellation offers, including partially flown itineraries. - [Air Canada NDC OrderCancel API](https://ndc.aircanada.com/api/documentation/ordercancel): Cancels an existing Order. - [Air Canada NDC OrderChangeNotification API](https://ndc.aircanada.com/api/documentation/orderchangenotification): Air Canada-initiated webhook for involuntary changes and disruptions. ## Endpoints - Production base: `https://ndcpartners.aircanada.com/` - Sandbox (GOLD) base: `https://gold-ndcpartners.aircanada.com/` - Shopping and servicing gateway: `ipg-gw/ndc/17.2/v1/{Service}` - Payment-bearing gateway (OrderCreate, OrderChange): `aps-gw/ndc/17.2/v1/{Service}` ## Docs - [Developer portal](https://ndc.aircanada.com/) - [API documentation index](https://ndc.aircanada.com/api/documentation/ndcapis) - [Getting started - the seven-step onboarding flow](https://ndc.aircanada.com/api/gettingstarted/gettingstarted) - [API setup - endpoints, headers, SOAP envelope, XML payload](https://ndc.aircanada.com/api/gettingstarted/apisetup) - [Seller setup](https://ndc.aircanada.com/api/gettingstarted/sellersetup) - [API orchestration - the mandatory message order](https://ndc.aircanada.com/api/gettingstarted/apisorchestration) - [Test data](https://ndc.aircanada.com/api/gettingstarted/testdata) - [Scenarios](https://ndc.aircanada.com/api/documentation/scenario) - [Release notes](https://ndc.aircanada.com/api/releasenotes/latestrelease) - [Roadmap](https://ndc.aircanada.com/api/roadmap) - [Webservice status](https://ndc.aircanada.com/support/statusMonitoring) - [Known issues](https://ndc.aircanada.com/support/knownissues) - [FAQ](https://ndc.aircanada.com/support/faq) - [NDC display requirements (PDF)](https://www.aircanada.com/content/dam/aircanada/portal/documents/PDF/ndc-displayRequirements-en.pdf) - [Air Canada NDC programme overview](https://www.aircanada.com/ca/en/aco/home/ndc.html) ## Access - [Seller registration form](https://ndc.aircanada.com/seller-registration-form) - collects business model, 8-digit IATA number, points of sale, expected timeouts and expected average/peak TPS. - [Connection options](https://ndc.aircanada.com/ndc-program/connection-options) - direct NDC, certified aggregators, GDS (Amadeus, Sabre, Travelport), or the Air Canada Connex web tool. - [Sandbox login](https://gold-ndc-sandbox.aircanada.com/login) - login wall, not self-serve. - [NDC Direct Connect Service Desk](https://aircanada-ndc-helpdesk.atlassian.net/servicedesk/customer/portals) ## Specs - No OpenAPI, WSDL or XSD is published. The interface standard is [IATA NDC](https://www.iata.org/en/programs/airline-distribution/retailing/ndc/) 17.2 (EDIST), namespace `http://www.iata.org/IATA/EDIST/2017.2`. - Sample request/response XML: (indexed in `examples/_index.yml`) ## API Evangelist artifacts - `apis.yml` - the APIs.json index for this provider - `review.yml` - switching-cost review: interface shape, second source, exit path, identifier portability, contractual lock-in, access gate - `authentication/air-canada-authentication.yml` - the apikey + in-payload identity model - `conventions/air-canada-conventions.yml` - transport, envelope, tracing, versioning, orchestration rules, and what does not exist - `errors/air-canada-error-codes.yml` - 156 published non-payment error codes - `errors/air-canada-decline-codes.yml` - 141 published payment-authorization codes - `asyncapi/air-canada-ocn-webhooks.yml` - the OrderChangeNotification webhook surface and its 19 published status codes - `sandbox/air-canada-sandbox.yml` - GOLD environment, test IATA numbers, test cards, promo codes, Flight Pass fixtures - `lifecycle/air-canada-lifecycle.yml` - versioning, release notes, roadmap, status, support, and the absent deprecation policy - `changelog/air-canada-changelog.yml` - the release-notes surface and its freshness - `conformance/air-canada-conformance.yml` - which standards this API does and does not conform to - `security/air-canada-domain-security.yml` - TLS/HSTS/DNSSEC/CAA/SPF/DMARC probe - `well-known/air-canada-well-known.yml` - the (empty) /.well-known/ discovery probe - `data-model/air-canada-data-model.yml` - the NDC entity graph (20 entities, 20 relationships) derived from the sample corpus, including which keys are session-scoped and which are durable - `vocabulary/air-canada-vocabulary.yml` - the PADIS/ISO code lists and the values observed on the wire, plus the Air Canada-specific vocabulary (branded fare families, ACNDC document names, Aeroplan/eUpgrade) - `agentic-access/air-canada-agentic-access.yml` - a recommended x-agentic-access contract per message service, and why the airline cannot enforce it - `packages/air-canada-packages.yml` - the SDK search: no first-party API client in any language - `examples/` - 67 committed sample XML messages plus a full index - `skills/` - packaged agent skills for the marquee flows ## Traps an agent must not fall into - Never retry OrderCreate blindly. No idempotency key exists; a retry is a second booking and a second charge. - Never call OrderCancel without OrderReshop first. Without a selected cancellation method the value is retained, not refunded, and a cancelled Order cannot be retrieved afterwards to verify the outcome. - Never pattern-match an identifier. NDC keys are opaque; the descriptive suffix (`-TravelerRefNumber-2`, `-Basic-T-311`) is not a contract, and OrderID has been observed in two different shapes. - Never trust an OrderChangeNotification payload on its own. No signature verification scheme is published; re-read state with OrderRetrieve before acting. - Never persist an OfferID across sessions. Offer keys expire; only OrderID, the record locator and the ticket number survive. - Always capture the `orc-transaction-id` response header (send `orc-debug: true`). It is the only trace identifier Air Canada support accepts.