Add bags & extras (XML)
Ancillary services (a checked bag here) can be bought at two moments, with the same mechanics; ServiceList returns priced service offer items, and the chosen item is referenced in the committing call:
- On an existing order:
ServiceListwith anOrderRequest, thenOrderChange(below). - During the initial booking:
ServiceListwith anOfferRequestagainst the priced offer, then include the item inOrderCreate(further down).
The order flow continues from Make a test booking; you need a confirmed order and a valid token. Examples were captured live on v21.3; v25.4 is identical apart from the URL segment and the response <VersionNumber>.
Step 1: ServiceList (list the available services)
Section titled “Step 1: ServiceList (list the available services)”POST /ndc/v21.3/ServiceListSame shape as SeatAvailability; for an existing order, ServiceListCoreRequest takes an OrderRequest:
<?xml version="1.0" encoding="UTF-8"?><IATA_ServiceListRQ xmlns="http://www.iata.org/IATA/2015/EASD/00/IATA_OffersAndOrdersMessage"> <DistributionChain> <DistributionChainLink xmlns="http://www.iata.org/IATA/2015/EASD/00/IATA_OffersAndOrdersCommonTypes"> <Ordinal>1</Ordinal> <OrgRole>Seller</OrgRole> <ParticipatingOrg> <OrgID>BZ</OrgID> </ParticipatingOrg> </DistributionChainLink> <DistributionChainLink xmlns="http://www.iata.org/IATA/2015/EASD/00/IATA_OffersAndOrdersCommonTypes"> <Ordinal>2</Ordinal> <OrgRole>Carrier</OrgRole> <ParticipatingOrg> <OrgID>MX</OrgID> </ParticipatingOrg> </DistributionChainLink> </DistributionChain> <Request> <Pax xmlns="http://www.iata.org/IATA/2015/EASD/00/IATA_OffersAndOrdersCommonTypes"> <PaxID>ADT-1</PaxID> <PTC>ADT</PTC> </Pax> <ServiceListCoreRequest xmlns="http://www.iata.org/IATA/2015/EASD/00/IATA_OffersAndOrdersCommonTypes"> <OrderRequest> <Order> <OrderID>MXYTG780SE6I</OrderID> <OwnerCode>MX</OwnerCode> </Order> </OrderRequest> </ServiceListCoreRequest> </Request></IATA_ServiceListRQ>The response’s ALaCarteOffer lists one OfferItem per service, passenger, and journey/segment (OFI-SR- prefix), each priced via UnitPrice. DataLists.ServiceDefinitionList names each service; ServiceCode is the SSR code:
<?xml version="1.0" encoding="UTF-8"?><IATA_ServiceListRS xmlns="http://www.iata.org/IATA/2015/EASD/00/IATA_OffersAndOrdersMessage"> <Response> <ALaCarteOffer xmlns="http://www.iata.org/IATA/2015/EASD/00/IATA_OffersAndOrdersCommonTypes"> <OfferID>ALC-SR-T1J8TVhZVEc3ODBTRTZJ</OfferID> <OfferItem> <Eligibility> <OfferFlightAssociations> <PaxJourneyRef> <PaxJourneyRefID>JOU-UFZVU05BfDIwMjYwOTE1fE1YMTY0NA</PaxJourneyRefID> </PaxJourneyRef> </OfferFlightAssociations> <PaxRefID>ADT-1</PaxRefID> </Eligibility> <OfferItemID>OFI-SR-SnwxfFBWVVNOQXwyMDI2MDkxNXxNWDE2NDR8QmFnZ2FnZXxBRFQtMXxDQjE</OfferItemID> <Service> <ServiceDefinitionRefID>SD-SR-SnwxfFBWVVNOQXwyMDI2MDkxNXxNWDE2NDR8QmFnZ2FnZXxDQjE</ServiceDefinitionRefID> <ServiceID>SVC-SR-SnwxfFBWVVNOQXwyMDI2MDkxNXxNWDE2NDR8QmFnZ2FnZXxBRFQtMXxDQjE</ServiceID> </Service> <UnitPrice> <TotalAmount CurCode="USD">35.00</TotalAmount> </UnitPrice> </OfferItem> <!-- CB2, CB3, carry-on, Wi-Fi, priority boarding, wheelchair SSRs, … elided --> </ALaCarteOffer> <DataLists xmlns="http://www.iata.org/IATA/2015/EASD/00/IATA_OffersAndOrdersCommonTypes"> <ServiceDefinitionList> <ServiceDefinition> <Name>Checked Bag 1</Name> <OwnerCode>MX</OwnerCode> <ServiceCode>CB1</ServiceCode> <ServiceDefinitionAssociation> <BaggageAllowanceRef> <BaggageAllowanceRefID>BAG-Q0Ix</BaggageAllowanceRefID> </BaggageAllowanceRef> </ServiceDefinitionAssociation> <ServiceDefinitionID>SD-SR-SnwxfFBWVVNOQXwyMDI2MDkxNXxNWDE2NDR8QmFnZ2FnZXxDQjE</ServiceDefinitionID> </ServiceDefinition> <!-- remaining service definitions and BaggageAllowanceList elided --> </ServiceDefinitionList> </DataLists> </Response> <PayloadAttributes> <Timestamp xmlns="http://www.iata.org/IATA/2015/EASD/00/IATA_OffersAndOrdersCommonTypes">2026-08-17T15:28:35.118Z</Timestamp> <VersionNumber xmlns="http://www.iata.org/IATA/2015/EASD/00/IATA_OffersAndOrdersCommonTypes">21.3</VersionNumber> </PayloadAttributes></IATA_ServiceListRS>We’ll buy the first checked bag, CB1 at $35.
Step 2: OrderChange (accept the service offer)
Section titled “Step 2: OrderChange (accept the service offer)”POST /ndc/v21.3/OrderChangeSame AcceptSelectedQuotedOfferList as a seat, without SelectedSeat:
<?xml version="1.0" encoding="UTF-8"?><IATA_OrderChangeRQ xmlns="http://www.iata.org/IATA/2015/EASD/00/IATA_OffersAndOrdersMessage"> <DistributionChain> <DistributionChainLink xmlns="http://www.iata.org/IATA/2015/EASD/00/IATA_OffersAndOrdersCommonTypes"> <Ordinal>1</Ordinal> <OrgRole>Seller</OrgRole> <ParticipatingOrg> <OrgID>BZ</OrgID> </ParticipatingOrg> </DistributionChainLink> <DistributionChainLink xmlns="http://www.iata.org/IATA/2015/EASD/00/IATA_OffersAndOrdersCommonTypes"> <Ordinal>2</Ordinal> <OrgRole>Carrier</OrgRole> <ParticipatingOrg> <OrgID>MX</OrgID> </ParticipatingOrg> </DistributionChainLink> </DistributionChain> <Request> <ChangeOrderChoice xmlns="http://www.iata.org/IATA/2015/EASD/00/IATA_OffersAndOrdersCommonTypes"> <AcceptSelectedQuotedOfferList> <SelectedPricedOffer> <OfferRefID>ALC-SR-T1J8TVhZVEc3ODBTRTZJ</OfferRefID> <SelectedOfferItem> <OfferItemRefID>OFI-SR-SnwxfFBWVVNOQXwyMDI2MDkxNXxNWDE2NDR8QmFnZ2FnZXxBRFQtMXxDQjE</OfferItemRefID> <PaxRefID>ADT-1</PaxRefID> </SelectedOfferItem> </SelectedPricedOffer> </AcceptSelectedQuotedOfferList> </ChangeOrderChoice> <Order xmlns="http://www.iata.org/IATA/2015/EASD/00/IATA_OffersAndOrdersCommonTypes"> <OrderID>MXYTG780SE6I</OrderID> <OwnerCode>MX</OwnerCode> </Order> <PaymentFunctions xmlns="http://www.iata.org/IATA/2015/EASD/00/IATA_OffersAndOrdersCommonTypes"> <PaymentProcessingDetails> <Amount CurCode="USD">35.00</Amount> <Payer> <PayerName> <IndividualName> <GivenName>John</GivenName> <Surname>Doe</Surname> </IndividualName> </PayerName> <PaymentAddress> <PostalAddress> <CityName>Los Angeles</CityName> <CountryCode>US</CountryCode> <CountrySubDivisionName>California</CountrySubDivisionName> <PostalCode>90210</PostalCode> <StreetText>123 Main St</StreetText> </PostalAddress> </PaymentAddress> </Payer> <PaymentMethod> <PaymentCard> <CardBrandCode>VI</CardBrandCode> <CardNumber>4111111111111111</CardNumber> <CardSecurityCode>123</CardSecurityCode> <ExpirationDate>1227</ExpirationDate> </PaymentCard> </PaymentMethod> </PaymentProcessingDetails> </PaymentFunctions> </Request></IATA_OrderChangeRQ>The response is the updated IATA_OrderViewRS. The bag appears as its own OrderItem (OOI-SR- prefix); the order (which already had a $14 seat from the previous walkthrough) totals $108:
<OrderItem> <OrderItemID>OOI-SR-U3xQVlVTTkF8MjAyNjA5MTV8TVgxNjQ0fFBBWC1RVVJVTFRFfENCMQ</OrderItemID> <OwnerCode>MX</OwnerCode> <Price> <BaseAmount CurCode="USD">0</BaseAmount> <Fee> <Amount CurCode="USD">35</Amount> <DesigText>CB1</DesigText> </Fee> <TotalAmount CurCode="USD">35</TotalAmount> </Price> <Service> <BookingRef> <BookingEntity> <Carrier> <AirlineDesigCode>MX</AirlineDesigCode> </Carrier> </BookingEntity> <BookingID>JE88TR</BookingID> <BookingRefTypeCode>6</BookingRefTypeCode> </BookingRef> <DeliveryStatusCode>CONFIRMED</DeliveryStatusCode> <OrderServiceAssociation> <ServiceDefinitionRef> <OrderFlightAssociations> <PaxSegmentRef> <PaxSegmentRefID>SEG-UFZVU05BfDIwMjYwOTE1fE1YMTY0NA</PaxSegmentRefID> </PaxSegmentRef> </OrderFlightAssociations> <ServiceDefinitionRefID>SD-SR-QnxDQjE</ServiceDefinitionRefID> </ServiceDefinitionRef> </OrderServiceAssociation> <PaxRefID>ADT-1</PaxRefID> <ServiceID>SVC-SR-U3xQVlVTTkF8MjAyNjA5MTV8TVgxNjQ0fFBBWC1RVVJVTFRFfENCMQ</ServiceID> <StatusCode>CONFIRMED</StatusCode> </Service> <StatusCode>ACTIVE</StatusCode> </OrderItem>The full IATA_OrderViewRS also carries a BaggageAllowanceList in DataLists (the same shape as in the ServiceListRS above) and each bag ServiceDefinition entry includes a ServiceDefinitionAssociation with a BaggageAllowanceRef pointing to it.
A PaymentProcessingSummary may read PENDING right after the change; retrieve the order and it flips to SUCCESSFUL.
Adding a bag during the initial booking
Section titled “Adding a bag during the initial booking”The same service list exists for a priced offer, before any order, so a booking can be created with its bags in one shot.
1. List services for the priced offer (after OfferPrice, before OrderCreate). The request is the one from step 1 with OfferRequest in place of OrderRequest:
<ServiceListCoreRequest xmlns="http://www.iata.org/IATA/2015/EASD/00/IATA_OffersAndOrdersCommonTypes"> <OfferRequest> <Offer> <OfferID>OF-96a92874-fcbc-43bd-8c68-b1e95e88156d</OfferID> <OfferItem> <OfferItemID>OFI-96a92874-fcbc-43bd-8c68-b1e95e88156d-0-ADT</OfferItemID> <PaxRefID>ADT-1</PaxRefID> </OfferItem> <OwnerCode>MX</OwnerCode> </Offer> </OfferRequest> </ServiceListCoreRequest>The response is the same ALaCarteOffer + ServiceDefinitionList shape as the order-scoped call above; capture the chosen OfferItemID (OFI-SR-…).
2. Include the service item in OrderCreate. Add another SelectedOfferItem under the same SelectedPricedOffer, and pay the combined total. Seat and service items combine freely; this capture booked fare + seat + bag together for a $108 order:
<CreateOrder xmlns="http://www.iata.org/IATA/2015/EASD/00/IATA_OffersAndOrdersCommonTypes"> <AcceptSelectedQuotedOfferList> <SelectedPricedOffer> <OfferRefID>OF-96a92874-fcbc-43bd-8c68-b1e95e88156d</OfferRefID> <OwnerCode>MX</OwnerCode> <SelectedOfferItem> <OfferItemRefID>OFI-96a92874-fcbc-43bd-8c68-b1e95e88156d-0-ADT</OfferItemRefID> <PaxRefID>ADT-1</PaxRefID> </SelectedOfferItem> <SelectedOfferItem> <OfferItemRefID>OFI-ST-U3xQVlVTTkF8MjAyNjA5MTV8TVgxNjQ0fEFEVC0xfDI0RQ</OfferItemRefID> <PaxRefID>ADT-1</PaxRefID> </SelectedOfferItem> <SelectedOfferItem> <OfferItemRefID>OFI-SR-SnwxfFBWVVNOQXwyMDI2MDkxNXxNWDE2NDR8QmFnZ2FnZXxBRFQtMXxDQjE</OfferItemRefID> <PaxRefID>ADT-1</PaxRefID> </SelectedOfferItem> </SelectedPricedOffer> </AcceptSelectedQuotedOfferList> </CreateOrder>The PaxRefID on a service item must match the passenger the service was priced for; use the same PaxID values (ADT-1, ADT-2, …) from AirShopping through OrderCreate so they line up. The response is the usual IATA_OrderViewRS: the order arrives OPENED with the bag as its own OOI-SR- order item, everything CONFIRMED from the start.
- Several
SelectedOfferItementries can be submitted at once, which also allows a single payment transaction for multiple items. - Only BOO-generated
OFI-SR-*IDs are accepted; SSR codes or client-built IDs are rejected withERR-1004. - Duplicate services are rejected by the reservation system (one WIFI per passenger per journey, one CB1, and so on). Re-query ServiceList before retrying.
Full schema reference: ServiceList and OrderChange.