Skip to main content

JSON & XML API differences

Why JSON?

JSON is Breeze's native offer/order API format. Our NDC/XML API supports partners that need IATA XML messages. Both surfaces use the same underlying offer/order capability layer, but their wire contracts are intentionally different.

We adhere to IATA's defined XML schemas. In some cases, schema compliance requires XML to omit data or use extra reference lists. Our JSON structure is designed for application developers to consume.

This page only documents differences between our JSON and NDC/XML APIs. Refer to specific endpoint documentation pages for detailed API definitions.

Supported versions

APIVersionsNotes
JSONv0, then v2Scheduled JSON major versions use even numbers.
IATA XML / NDCv25.4, then v26.2Version is selected by the route, not a payload Version attribute. v21.3 (the 21.3.5 schema) is unsupported.

Visit our dedicated page to learn about our release schedule and support policy.

Types of differences

AreaJSON behaviorXML behaviorIntegration impact
RoutesResource routes such as POST /json/{version}/offers, GET /json/{version}/orders/{orderId}, and PATCH /json/{version}/orders/{orderId}.Operation routes such as POST /ndc/{version}/AirShopping, OrderRetrieve, and OrderChange.Integrators may prefer narrow-scope XML operations.
Response envelopeEvery response uses { "data": ..., "error": ... }.Success responses are operation-specific IATA_*RS XML documents. Errors also return XML with Error elements.JSON clients can use one envelope parser. XML clients must parse each response root.
DocumentationJSON routes are exposed in Swagger/OpenAPI.NDC XML routes are excluded from Swagger because opaque XML bodies are not useful in OpenAPI.Use the JSON endpoint docs and Swagger for JSON; use our NDC/XML docs and IATA schemas for XML.
Data shapeReuses top-level collections such as pax, journeys, services, payments, and tickets; fields use JSON casing.Uses IATA structures such as Response, DataLists, OffersGroup, PaxList, namespaces, and schema element ordering.Do not expect XML wrappers, namespaces, or IATA element names in JSON.
IDs and referencesUses resource IDs and arrays such as paxRefIds, journeyRefIds, and segmentRefIds.Uses NDC references such as PaxRefID, ServiceDefinitionRefID, PaxJourneyRefID, PaxSegmentRefID, and generated NDC IDs.IDs are not guaranteed to be interchangeable across API versions and surfaces.
Error bodyerror.code, error.title, and error.description in the JSON envelope.IATA Error elements with the same Breeze ERR-* catalog code in XML form.Error codes are shared; error payload shape is not.

Endpoint coverage

CapabilityJSONXML / NDCDifference
Airline profileNo JSON endpoint yet.AirlineProfile is implemented.XML has this reference-data operation; JSON does not.
Offer searchPOST /offers and POST /offers/byJourney.AirShopping.JSON has two response layouts for the same cached offers; XML has the NDC response shape.
Offer pricePOST /offers/price.OfferPrice.Same pricing capability, different request and response shapes.
Order createPOST /orders.OrderCreate.Same booking capability, different payment and passenger/contact shapes.
Order retrieveGET /orders/{orderId}.OrderRetrieve.Same retrieve capability, different OrderView projection.
Order listGET /orders.OrderList.Same booking search capability, different pagination and arrival-data behavior.
Ancillaries/offers/{offerId}/seats, /offers/{offerId}/services, /orders/{orderId}/seats, /orders/{orderId}/services.SeatAvailability, ServiceList.Same underlying ancillary quote service, different quote IDs and response structures.
Order changePATCH /orders/{orderId}.OrderChange.Same change capability, but JSON uses typed change instructions while XML uses NDC order-change instructions.
Cancel orderPOST /orders/{orderId}/cancel.No dedicated OrderCancel route; cancellation rides OrderChange.JSON exposes a dedicated cancel route. XML cancellation follows the NDC OrderChangeRQ flow.
Reshop and quotePOST /orders/{orderId}/reshop, POST /orders/{orderId}/quote.OrderReshop, OrderQuote.Same new-itinerary and quote flow, different selected-offer and price-differential shapes.

Offers and OfferPrice

Offer search request

DifferenceJSON behaviorXML behaviorWhy they differ
Cabin codecabinTypeCode uses Breeze JSON cabin codes: Y, C, W, F.OriginDestCriteria.CabinType.CabinTypeCode uses PADIS numeric codes: 1, 2, 4, 5.JSON uses a compact app-facing vocabulary; XML follows the IATA wire vocabulary.
Currencycurrency is a top-level JSON field. USD only for now.Currency is read from ResponseParameters.CurParameter.CurCode. USD only for now.See payments.
Trip criteriaoriginDestinations[] contains origin, destination, and departureDate.FlightRequestOriginDestinationsCriteria.OriginDestCriteria contains OriginDepCriteria and DestArrivalCriteria.Same search criteria, different wire shape.
Passenger IDspaxId is optional and synthesized when omitted.PaxID is optional and synthesized when omitted.Behavior is similar, but field names and nesting differ.

Both surfaces reject invalid dates, past departure dates, out-of-order origin-destination dates, duplicate passenger IDs, and infant counts greater than adult counts.

Offer search response

JSON has two projections of the same offer:

  • POST /json/{version}/offers returns a flat data.offers[] list.
  • POST /json/{version}/offers/byJourney returns data.directions[] grouped for booking UIs.

XML AirShoppingRS returns the IATA shape: DataLists, OffersGroup, per-passenger-type OfferItem rows, baggage and service definitions, price classes, and IATA references.

JSON also includes app-facing fare display fields such as fare.bundleName and fare.benefits. XML exposes the underlying NDC offer, price class, baggage, and service-definition structures instead.

OfferPrice request

DifferenceJSON behaviorXML behaviorIntegration impact
Selected offersselections[] contains offerId and offerItemIds.SelectedOfferList.SelectedOffer contains OfferRefID, OwnerCode, and SelectedOfferItem.XML callers must include OwnerCode; JSON does not require it in the body.
Passengerspassengers[] is required.DataLists.PaxList is optional when passenger type can be derived from selected item references.JSON callers always send passengers. XML callers may omit PaxList only when the selected NDC offer item IDs carry enough passenger-type information.
Response layoutReturns data.offer plus top-level pax and journeys.Returns IATA_OfferPriceRS.Response.DataLists plus PricedOffer.JSON avoids XML DataLists wrappers and puts reusable collections at the top level.

OfferPrice is exclusively used for new orders. Existing orders must be priced through a Reshop and Quote flow.

Orders

OrderCreate payment

DifferenceJSON behaviorXML behaviorIntegration impact
Hold bookingpayment is required; use { "type": "Hold" } for a hold.Omitted PaymentFunctions is treated as a hold.JSON callers must be explicit. XML callers can create a hold by omitting payment functions.
Card paymentUses payment.type: "CreditCard".Uses NDC PaymentFunctions / PaymentProcessingDetails / PaymentCard.Same brands and sandbox test card; see payments.
CurrencyAmounts are always USD.Amount CurCode must be USD.See payments.
Booking contactsRequest contact (single primary); response contacts[] with contactTypeCode.Unreferenced ContactInfo = primary; Pax-referenced = per-passenger.See contacts.
PassengersJSON passengers[] with request gender Male/Female.XML PaxList with GenderCode M/F (also accepts Male/Female).See passengers.

OrderRetrieve response

JSON returns a flattened OrderView projection:

  • order
  • services
  • pax
  • contacts
  • journeys
  • payments
  • tickets

XML returns IATA_OrderViewRS with Response.DataLists, Response.Order, optional TicketDocInfo, root-level PaymentFunctions, warnings, PayloadAttributes, and optional DistributionChain echo.

GET /orders | OrderList

Destination airport code

  • IATA requirement: in IATA_OrderListRS, arrival data must include both arrival station and arrival date.
  • XML data object: IATA_OrderListRS.Response.MatchedOrder.Arrival.ArrivalDate
  • Applies to XML: v21.3, v24.1, v25.4, v26.2
  • Limitation: the reservation-system booking search returns the arrival station, but not the arrival date.
  • Decision: XML omits Arrival; JSON may return destination without arrival date.

Why we do not populate XML Arrival anyway:

  • Arrival station is useful in JSON even when arrival date is unknown.
  • Populating arrival date in XML would require retrieving individual orders, which is slow and expensive for list searches.
  • Guessing arrival date from departure date would be wrong for overnight flights and other schedule edge cases.
  • IATA Airline Retailing Maturity assessment requires strict XML compliance.

JSON example:

{
"data": {
"orders": [
{
"orderId": "P42SEA",
"recordLocator": "P42SEA",
"statusCode": "CONFIRMED",
"departureDate": "2026-08-07",
"flightNumber": "42",
"origin": "BRO",
"destination": "MCO",
"sourceOrganizationCode": "AGENCY",
"passengerName": {
"surname": "David",
"givenName": "Dieudonne"
}
}
],
"page": {
"pageSize": 1000,
"lastIndex": 1000,
"count": 1,
"hasMore": false
}
},
"error": null
}

Pagination

JSON behaviorXML behaviorIntegration impact
Uses explicit cursor pagination: pageSize, lastIndex, page.count, and page.hasMore.OrderListRS has no pagination contract, so the service walks upstream pages server-side up to a fixed cap and returns a warning when truncated.JSON callers control paging. XML callers should narrow search filters when Warning code OL1001 is returned.

Filter support

JSON query parameters and XML OrderSearchFilterCriteria support the same practical search fields: agency organization code, passenger name, departure date, origin, destination, and flight number. XML rejects unsupported NDC filter blocks instead of silently broadening the search.

Ancillaries

JSON exposes separate resource routes for offer-scoped and order-scoped seat and service quotes. XML exposes the NDC SeatAvailability and ServiceList operations.

DifferenceJSON behaviorXML behaviorIntegration impact
Request shapeOffer-scoped routes take offerItemIds; order-scoped routes take optional orderItemIds.RQs use NDC selected-offer or order references.Use the ID shape returned by the same surface.
Quote IDsJSON returns public ancillary offer item IDs in JSON service/seat structures.XML returns NDC a-la-carte offer and offer item IDs such as seat/service selections.Quote IDs encode identity only; price and availability are recomputed on commit.
Passenger scopeOffer-scoped JSON can synthesize passenger IDs; order-scoped JSON only uses supplied stable passenger refs.XML uses NDC passenger references from the request and order view.For post-booking ancillaries, use passenger refs from the retrieved order.

Reshop and quote

New sale and itinerary change use different pricing paths on both APIs:

IntentJSON flowXML flow
New salePOST /offers or /offers/byJourney -> POST /offers/price -> POST /ordersAirShopping -> OfferPrice -> OrderCreate
Itinerary changePOST /orders/{orderId}/reshop -> POST /orders/{orderId}/quote -> PATCH /orders/{orderId}OrderReshop -> OrderQuote -> OrderChange

JSON returns compact change amounts such as priceDifferential and itemChangeQuotes. XML returns the NDC IATA_OrderReshopRS shape with PriceDifferential.

Do not send reshop offer IDs to OfferPrice. The service rejects those IDs because reshop pricing accounts for changes to the existing order.