Air Merchandising Fulfillment
UniversalRecordReqRsp.xsd
Air Merchandising Offer Availability > Air Merchandising Fulfillment OR
Seat Map > Air Merchandising Fulfillment
The Air Merchandising Fulfillment request can include optional services for multiple carriers and multiple providers. The request is made post-booking, and the response returns the confirmed optional services.
For example, Air Merchandising Fulfillment can be used to confirm seat options selected from the Seat Map response and bags selected from the Air Merchandising Offer Availability response.
Schema
Located in AirReqRsp.xsd:
Request
The AirMerchandisingFulfillmentReq supports the fulfillment of Optional Services.
- Enter the minimum data required for all carriers and providers in the Air Merchandising Fulfillment request:
-
SearchTraveler, which provides the first and last name of each traveler in the itinerary, so that identifications can be matched against the supplier's PNR data.
-
AirSegment data including attributes for Carrier, FlightNumber, DepartureTime, Origin and Destination, Group, and Key.
-
HostReservation data is required to identify the supplier's PNR. The ProviderCode, Carrier, ProviderLocatorCode, and CarrierLocatorCode attributes are required.
-
OptionalService elements for the selected data.
-
@Type must be “PreReservedSeatAssignment” for a paid seat as of Air v28.0 and later. See ATPCO Carriers for differences.
-
ServiceData @BookingTravelerRef and @AirSegmentRef. Only one Booking Traveler can be referenced in one OptionalService/ServiceData element. If two Booking Travelers request the same optional service, two OptionalService elements must be created, each with an OptionalService/ServiceData element referencing one Booking Traveler.
-
Enter additional request data as required by the supplier or provider.
-
A HostToken from the last air segment in the SeatMapRsp may also be required depending on the supplier.
-
The CreditCard form of payment information. The credit card or debit card used to purchase Optional Services may or may not be the same form of payment used to purchase the airline tickets. This payment includes the amount charged for the Merchandising transaction. The form of payment is charged at the time of seat purchase.
-
A CreditCard/BillingAddress may be required by some suppliers.
-
CreditCard @ThirdPartyPayment information may be required by some suppliers to indicate if the billing credit card uses the traveler's name or is associated with a third-party individual or organization.
-
ConfirmationEmail must contain a valid email address, so that an email with a Confirmation of Purchase can be sent to the customer. Not all carriers send confirmation emails.
-
A valid segment status (AirSolution/AirSegment @Status) may be required. Passive segments are not considered valid in the context of the Merchandising process.
- OptionalService
-
Optional Services that are not a paid seat (that is, @Type is not "PreReservedSeatAssignment") can be sent with a @Quantity greater than 1.
-
/ServiceData @Data must be sent with the seat number in the ServiceData element that contains the BookingTravelerRef and AirSegmentRef, if the Optional Service @Type is "PreReservedSeatAssignment".
-
/OptionalService @SSRFreeText: Universal API adds the mandatory @SSRFreeText for the ancillary in the booking so that the ancillary is booked successfully. This results in a reduced risk of ancillary book requests from being rejected. For example, if an Air Create Reservation request contains an ancillary (e.g. baggage) with an Airline Code and Service Sub-Code, but no SSR Free Text, Universal API automatically appends the mandatory SSR to the booking. Release 20.3
When @SSRFreeText is included or not included:- If the request contains SSRFreeText, it passes the value.
- If the request is missing SSR text:
- For booking and fulfillment, if the request contains AirlineCode and ServiceSubCode values, but no SSR free text, Universal API adds text from cached data.
- If SSR free text is null, and Universal API does not have an associated value in cached data that correlates with AirlineCode, ServiceSubcode the request passes blank (null) data.
- The response populates missing SSR text from the request to add in the fee text field in the response (if text is available) to accompany the explanation.
- If Universal API appends an SSRFreeText value to a request, the appended SSRFreeText returns in the booking or fulfilment response.
- As of this release, an appended SSR Free Text value is sent in the response in the OptionalService @SSRFreeText
- /SSR @FreeText also returns in secondary SSRs like XBAG, in /UniversalRecord/BookingTraveler.
- XPath: In Universal.xsd
OptionalServices/OptionalService @SSRFreeText is automatically appended in:
- AirCreateReservationReq/AirPricingSolution/
- AirMerchandisingFulfillmentReq/
And returns in UniversalRecord/AirReservation/OptionalServices/OptionalService @SSRFreeText in:
- AirCreateReservationRsp/
- AirMerchandisingFulfillmentRsp/
/SSR @FreeText also returns in secondary SSRs like XBAG. For example,
- AirCreateReservationRsp/UniversalRecord/BookingTraveler/SSR @FreeText
- AirMerchandisingFulfillmentRsp/UniversalRecord/BookingTraveler/SSR @FreeText
- ASVC SSR(s) are not created.
- The Optional Services are not sold or saved in the Universal Record.
- An error is returned: ViewableOnly Services cannot be sold.
- Optional Services that have ViewableOnly="false" are fulfilled as normal.
- Optional Services that have ViewableOnly="true" are ignored.
- ASVC SSR(s) are not created for Optional Services which are viewable only.
- The Optional Services that are viewable only are not sold or saved in the Universal Record.
- A warning is returned: ViewableOnly Service <service type> <description> for AirSegment <air seg ref> and BookingTraveler <traveler ref> cannot be sold. This warning message is returned for each OptionalService that has ViewableOnly="true".
- <service type> = OptionalService @Type
- <air seg ref> = OptionalService/ServiceData @AirSegmentRef
- <traveler ref> = OptionalService/ServiceData @BookingTravelerRef
- <description> = OptionalService/Description (if present in the request)
In the message:
For example: ViewableOnly service Baggage BAGGAGE BETWEEN 51 AND 70 LBS for AirSegment (VbVzfleySiKayTIj2/y4Ew==) and BookingTraveler (vA+WEeORQS2pUsrTiZo9tQ==) cannot be sold.
- If a warning is returned for an Optional Service with multiple AirSegmentRef attributes in OptionalService, the warning lists each AirSegmentRef separated by a comma.
When @ViewableOnly="true" for ALL Optional Services, Universal API ignores the OptionalService elements.When @ViewableOnly="true" for at least one Optional Service...For example: ViewableOnly service Baggage BAGGAGE BETWEEN 51 AND 70 LBS for AirSegment (VbVzfleySiKayTIj2/y4Ew==), AirSegment (Ngov0tT9SfGcQ5J/XQ7h5Q==) and BookingTraveler (vA+WEeORQS2pUsrTiZo9tQ==) cannot be sold.
Note: The attributes WeightInExcess, TotalWeight, and BaggageUnitPrice are not currently returned in the response.
-
OptionalService/@IsRepriceRequired / C Type Baggage
Prior to Universal API release 21.2.2, customers were limited to viewing prices and purchasing F type filed bags only. Release 21.2
Release 21.2.2 and later allows customers to receive baggage data and purchase bags for itineraries where C type data has been filed by the carrier.
C type baggage data is shopped and sold via the following:
-
C type baggage including max quantity and price information is viewable in the AirPrice and AirMerchandisingOfferAvailability responses.
-
C type baggage is sellable in the AirCreateReservation and AirMerchandisingFulfillment requests.
While workflows should not change, it is important to ensure the @IsRepriceRequired element is not omitted from @OptionalServices in the AirCreateReservation and AirMerchandisingFulfillment requests because that information is used to ensure accurate pricing returns for the selected option.
xPath:
OptionalServices/OptionalService/@IsRepriceRequired
-
AirPriceRsp/AirPriceResult/AirPricingSolution/
-
AirMerchandisingOfferAvailabilityRsp/
-
AirCreateReservationReq/AirPricingSolution/
-
AirCreateReservationRsp/UniversalRecord/AirReservation/
-
AirMerchandisingFulfillmentReq/
-
AirMerchandisingFulfillmentRsp/UniversalRecord/AirReservation/
Notes:
-
See DA 901 for further details and examples.
-
-
-
MerchandisingPricingModifiers can be used to specify the type of Merchandising and Pricing Services desired:
-
Users can send /AccountCode element, for corporate rewards discounts on paid seat ancillaries, in the Air Merchandising Fulfillment Request, as well as the Price, Seat Map, and Air Merchandising Offer Availability requests.
-
The Account Code is not returned in the shop or price responses, but is recorded to the Universal Record History (including the @Code @SupplierCode and @Type attributes): AirPricingInfo/AirPricingModifiers/AccountCodes/AccountCode.
-
-
SpecificSeatAssignment must be sent for a standard seat in Air v28.0 and later.
- If the seat, traveler, and flight are the same, SpecificSeatAssignment is ignored and an error or warning is returned: SpecificSeatAssignment <seat> has been ignored because of duplicate seat in OptionalService.
If no Optional Services can be fulfilled, an error is returned.
If some Optional Services can be fulfilled, a warning is returned.
-
If the seat, traveler, and flight are different, the SpecificSeatAssignment is a standard back of plane seat and the OptionalService is a paid seat.
- If the seat is different but the traveler and flight are the same, an error or warning is returned: A BookingTraveler can’t have more than one seat assignment for each AirSegment.
Correct the OptionalService with the paid seat and the SpecificSeatAssignment with the standard seat, each referencing a unique BookingTraveler and AirSegment.
If no Optional Services can be fulfilled, an error is returned.
If some Optional Services can be fulfilled, a warning is returned.
-
The following values are compared against the SeatMap response:
-
Type="PreReservedSeatAssignment"
-
TotalPrice="INR0"
-
Minimum request data
Important! As of Air v28.0, OptionalService was made an optional element.
In Air v28.0 and later, a standard seat is booked using SpecificSeatAssignment. See Additional Request Data for details. Paid seats are booked using OptionalService @Type. Standard seats are not longer assumed if a Remark and/or Description is not included in OptionalService.
Additional request data
Note: Suppliers, such as KLM, that use an EMD for payment, do not support payment information via the CreditCard element.
AirMerchandisingFulfillmentReq can be sent with a combination of paid and standard seats. In Universal v28.0 and later, if OptionalService is present in the request and SpecificSeatAssignment is also present, Universal API compares OptionalService/ServiceData @AirSegmentRef and @BookingTravelerRef with the SpecificSeatAssignment @SegmentRef and @BookingTravelerRef to determine if they are the same.
Note: The duplicate seat check only occurs between SpecificSeatAssignment and OptionalService. There is no check within multiple SpecificSeatAssignment elements or multiple OptionalService elements.
AirMerchandisingFulfillementReq validates paid seat pricing against the fare quote saved in the booking. When reserving a seat, if the seat price is not applicable to the fare quote saved in the booking, the error, "One or more optional services can’t be sold due to seat price mismatch," returns as part of the Air Merchandising Fulfillment response. This functionality reduces the risk of paid seats being booked for a value other than what is applicable to the fare sold. Release 24.2
Response
The AirMerchandisingFulfillmentRsp contains the entire Universal Record including new or updated Optional Service information. The response either:
- Updates an existing UniversalRecord and PNR with the Merchandising data.
- Creates a new UniversalRecord by importing the supplier's PNR, if no UR existed previously. If an itinerary was booked and ticketed outside of Universal API, a UR is not created until the supplier's booking is imported into Universal API.
If multiple Optional Services were requested, Universal API tries to fulfill all Optional Services, regardless of mixed providers. For example if a booking is DL (ACH) and KL (ATPCO), Universal API sends a request to fulfill the DL Optional Service, and also sends a request to fulfill the KL Optional Service, even if the DL Optional Service fails. Successfully booked Optional Services and a success message, as well as warnings for Optional Service bookings that failed, are returned in the response.
The success message “One or more ancillary services saved successfully.” is returned in ResponseMessage (Type=”Info” and Code “4436”).
Warning messages are similar to the following, where XX is the carrier code:
-
Some or all merchandising requests for carrier XX were unsuccessful.The price has changed to [Currency] 0.00 for the optional service PreReservedSeatAssignment [Seat Number] on flight XX ####.
-
Some or all merchandising requests for carrier XX were unsuccessful.
-
Miscellaneous errors returned from the carrier.
Click an element/attribute in UniversalRecord for details.
BookingTravelerA BookingTraveler element is returned in UniversalRecord for each passenger, which contains all seat assignments and loyalty card information for that passenger.
FormOfPaymentallows the ability to show credit/debit card information when retrieving e-ticket and EMD information through Universal API to reconcile data with BSP. For example, in an AirDocumentRetrieve request, when credit/debit card information is present in the booking and the customer opts in for unmask functionality, Universal API returns credit/debit card information unmasked ONLY if the agency or signon settings allow. Otherwise, credit/debit card information returns masked. This functionality is applicable in Air Retrieve Document, Air Merchandising Fulfillment, and EMD Issuance / Retrieve Release 20.4
Notes:
xPath = AirMerchandisingFulfillmentRsp/FormOfPayment
For EMDIssuance and EMDRetrieve, Universal API will continue to show masked credit/debit card information until an enhancement is completed in the EMD application.
The EMD enhancement is scheduled for Q1, 2021.
This is limited release functionality . Please contact your Travelport representative to activate this enhancement.
AirReservation/OptionalServices
/OptionalServiceThe confirmed Optional Services are returned in an OptionalService element in which identifies the Optional Services that have been fulfilled in the associated PNR.
If a supplier has filed Optional Services with base price, tax, and total price, these values are saved with the Universal Record and displayed in the response.
TaxInfo is used to specify a tax breakdown with a category code, if a tax breakdown is provided by the carrier. A TaxInfo element is returned for each tax returned by the carrier. If more than one Tax is returned, the total of all taxes is returned in OptionalService @Taxes.
Universal API 24.2.1 and later returns a breakdown of the price for a booked optional service in the Seat Map and Air Merchandising Fulfillment booking responses so that taxes can be properly reported, as required by the airlines. The fulfillment response and the associated EMD issuance shows the base price, taxes, and total information. For example: Release 24.2
Breakdown of price for optional servicesCopyAirMerchandisingOfferAvailability request/response showing the OptionalService response payload.
Note: Response is truncated to save space in this advisory.
Example request
<air:AirMerchandisingOfferAvailabilityReq TargetBranch="XXXXXX"
<com:BillingPointOfSaleInfo OriginApplication="uAPI"/>
<air:HostReservation Carrier="UK" CarrierLocatorCode="XXXXXX" ProviderCode="1G" ProviderLocatorCode="XXXXXX"/>
</air:AirMerchandisingOfferAvailabilityReq >
Example response
<air:AirMerchandisingOfferAvailabilityRsp>
<common_v50_0:Remark>Ancillary Services</common_v50_0:Remark>
<air:OptionalServices>
<air:OptionalServicesTotal/>
<air:OptionalService Type="Baggage" TotalPrice="INR7200" SupplierCode="UK" CreateDate="2024-01-25T03:05:17.067+00:00" ServiceStatus="Offered" SequenceNumber="70002" ServiceSubCode="0C1" SSRCode="XBAG" IssuanceReason="C" Key="XXXXXXXXXX" AssessIndicator="MileageOrCurrency" Private="true" InclusiveOfTax="true" InterlineSettlementAllowed="true" GeographySpecification="Portion" Source="MCE" ViewableOnly="false" TotalWeight="15KG" ProviderCode="1G" Quantity="1" BasePrice="INR6857" ApproximateTotalPrice="INR7200" ApproximateBasePrice="INR6857" Taxes="INR343" IsRepriceRequired="false">
<common_v50_0:ServiceData BookingTravelerRef="XXXXXXXXX" AirSegmentRef="XXXXXXXX" TravelerType="ADT"/>
<common_v50_0:ServiceInfo>
<common_v50_0:Description>EXCESS BAGGAGE 11 TO 15 KG</common_v50_0:Description>
</common_v50_0:ServiceInfo>
<air:TaxInfo Category="K3" Amount="INR343" Key="XXXXXXXXX"/>
<air:EMD FulfillmentType="2" AssociatedItem="Flight" RefundReissueIndicator="Refundable" Commissionable="false" Booking="SSR" FulfillmentTypeDescription="Associated to a flight coupon of a ticket"/>
<air:FeeApplication Code="4">Per travel</air:FeeApplication>
</air:OptionalService>
<air:OptionalService Type="Lounge" TotalPrice="INR1000" SupplierCode="UK" CreateDate="2024-01-25T03:05:17.070+00:00" ServiceStatus="Offered" SequenceNumber="40031" ServiceSubCode="0BX" SSRCode="LOUG" IssuanceReason="E" Key="XXXXXXXXX" AssessIndicator="MileageOrCurrency" Private="true" InclusiveOfTax="true" InterlineSettlementAllowed="true" GeographySpecification="Sector" Source="MCE" ViewableOnly="false" ProviderCode="1G" Quantity="1" BasePrice="INR847" ApproximateTotalPrice="INR1000" ApproximateBasePrice="INR847" Taxes="INR153" IsRepriceRequired="false">
<common_v50_0:ServiceData BookingTravelerRef="XXXXXXXXXX" AirSegmentRef="XXXXXXXXXX" TravelerType="ADT"/>
<common_v50_0:ServiceInfo>
<common_v50_0:Description>LOUNGE ACCESS</common_v50_0:Description>
</common_v50_0:ServiceInfo>
<air:TaxInfo Category="K3" Amount="INR153" Key="XXXXXXXXXX"/>
<air:EMD FulfillmentType="2" AssociatedItem="Flight" RefundReissueIndicator="Refundable" Commissionable="false" Booking="SSR" FulfillmentTypeDescription="Associated to a flight coupon of a ticket"/>
<air:FeeApplication Code="4">Per travel</air:FeeApplication>
</air:OptionalService>
</air:OptionalServices>
</air:AirMerchandisingOfferAvailabilityRsp>CopyAirMerchandisingFulfillment request/response showing the OptionalService payload included in the request and response
Example Request
<universal:AirMerchandisingFulfillmentReq xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<common:BillingPointOfSaleInfo OriginApplication="uAPI"/>
<air:HostReservation Carrier="UK" CarrierLocatorCode="XXXXXX" ProviderCode="1G" ProviderLocatorCode="XXXXXX"/>
<air:AirSolution xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/">
<air:SearchTraveler Key="XXXXXXXXXX" Code="ADT">
<common_v50_0:Name Prefix=" MR" First="Test" Last="Test"/>
</air:SearchTraveler>
<air:AirSegment Key="ThfxZ0VqWDKARJLFUAAAAA==" Group="0" Carrier="UK" CabinClass="Economy" FlightNumber="753" ProviderCode="1G" Origin="DEL" Destination="IXR" DepartureTime="2024-02-26T18:00:00.000+05:30" ArrivalTime="2024-02-26T19:40:00.000+05:30" TravelTime="100" Distance="626" ClassOfService="Q" ETicketability="Yes" Equipment="320" Status="HK" ChangeOfPlane="false" GuaranteedPaymentCarrier="No" ProviderReservationInfoRef="XXXXXXXXX" ProviderSegmentOrder="1" OptionalServicesIndicator="true" AvailabilitySource="S" PolledAvailabilityOption="O and D cache or polled status used with different local status">
<air:FlightDetails Key="ThfxZ0VqWDKASJLFUAAAAA==" Origin="DEL" Destination="IXR" DepartureTime="2024-02-26T18:00:00.000+05:30" ArrivalTime="2024-02-26T19:40:00.000+05:30" FlightTime="110" TravelTime="100" Equipment="320" OriginTerminal="3" AutomatedCheckin="false"/>
<common_v50_0:SellMessage>DEPARTS DEL TERMINAL 3</common_v50_0:SellMessage>
</air:AirSegment>
</air:AirSolution>
<air:OptionalServices>
<air:OptionalServicesTotal/>
<air:OptionalService Type="Baggage" SSRFreeText="TTL15KG1PC" TotalPrice="INR7200" SupplierCode="UK" CreateDate="2024-01-25T03:05:17.067+00:00" ServiceStatus="Offered" SequenceNumber="70002" ServiceSubCode="0C1" SSRCode="XBAG" IssuanceReason="C" Key="XXXXXXXXX" AssessIndicator="MileageOrCurrency" Private="true" InclusiveOfTax="true" InterlineSettlementAllowed="true" GeographySpecification="Portion" Source="MCE" ViewableOnly="false" TotalWeight="15KG" ProviderCode="1G" Quantity="1" BasePrice="INR6857" ApproximateTotalPrice="INR7200" ApproximateBasePrice="INR6857" Taxes="INR343" IsRepriceRequired="false">
<common_v50_0:ServiceData BookingTravelerRef="XXXXXXXXXX" AirSegmentRef="XXXXXXXXXX" TravelerType="ADT"/>
<common_v50_0:ServiceInfo>
<common_v50_0:Description>EXCESS BAGGAGE 11 TO 15 KG</common_v50_0:Description>
</common_v50_0:ServiceInfo>
<air:TaxInfo Category="K3" Amount="INR343" Key="XXXXXXXXXX"/>
<air:EMD FulfillmentType="2" AssociatedItem="Flight" RefundReissueIndicator="Refundable" Commissionable="false" Booking="SSR" FulfillmentTypeDescription="Associated to a flight coupon of a ticket"/>
<air:FeeApplication Code="4">Per travel</air:FeeApplication>
</air:OptionalService>
</air:OptionalServices>
</universal:AirMerchandisingFulfillmentReq >
Example Response
<universal:AirMerchandisingFulfillmentRsp>
<common_v50_0:ResponseMessage Code="0" Type="Warning">PLEASE ENSURE THAT SSR FREE TEXT CONTAINS THE FOLLOWING:DIMENSIONS AND WEIGHT OF ITEMCONTENTS (FRAGILE)>SI.XBAG@*</common_v50_0:ResponseMessage>
<common_v50_0:ResponseMessage Code="4436" Type="Info">One or more ancillary services saved successfully.</common_v50_0:ResponseMessage>
<universal:UniversalRecord LocatorCode="XXXXXX" Version="7" Status="Active">
<air:AirReservation LocatorCode="XXXXXX" CreateDate="2024-01-25T02:45:42.484+00:00" ModifiedDate="2024-01-25T03:10:20.968+00:00">
<air:OptionalServices>
<air:OptionalServicesTotal TotalPrice="INR7550" BasePrice="INR7190" ApproximateTotalPrice="INR7550" ApproximateBasePrice="INR7190" Taxes="INR360">
<air:TaxInfo Category="K3" Amount="INR17" Key="XXXXXXXXXX"/>
<air:TaxInfo Category="K3" Amount="INR343" Key="XXXXXXXXXX"/>
</air:OptionalServicesTotal>
<air:OptionalService Type="PreReservedSeatAssignment" TotalPrice="INR350" SupplierCode="UK" PerTraveler="false" CreateDate="2024-01-25T02:54:19.284+00:00" ServiceStatus="Confirmed" SequenceNumber="237" ServiceSubCode="0B5" SSRCode="SEAT" IssuanceReason="A" Key="QEhxZ0TqWDKAwIJ8TAAAAA==" InclusiveOfTax="true" InterlineSettlementAllowed="true" GeographySpecification="Sector" Source="MCE" Quantity="1" BasePrice="INR333" ApproximateTotalPrice="INR350" ApproximateBasePrice="INR333" Taxes="INR17" PseudoCityCode="XXXX">
<common_v50_0:ServiceData Data="7C" BookingTravelerRef="XXXXXXXXXX" AirSegmentRef="XXXXXXXXXX" TravelerType="ADT">
<common_v50_0:SeatAttributes>
<common_v50_0:SeatAttribute Value="O"/>
</common_v50_0:SeatAttributes>
<common_v50_0:CabinClass Type="Economy"/>
<common_v50_0:SSRRef Key="XXXXXXXXXX"/>
</common_v50_0:ServiceData>
<common_v50_0:ServiceInfo>
<common_v50_0:Description>VISTARA SELECT</common_v50_0:Description>
</common_v50_0:ServiceInfo>
<air:TaxInfo Category="K3" Amount="INR17" Key="XXXXXXXXXX"/>
<air:EMD FulfillmentType="2" AssociatedItem="Flight" RefundReissueIndicator="Refundable" Commissionable="false" Booking="SSR" FulfillmentTypeDescription="Associated to a flight coupon of a ticket"/>
</air:OptionalService>
<air:OptionalService Type="Baggage" TotalPrice="INR7200" SupplierCode="UK" PerTraveler="true" CreateDate="2024-01-25T03:10:19.036+00:00" ServiceStatus="Offered" SequenceNumber="70002" ElStat="A" ServiceSubCode="0C1" SSRCode="XBAG" IssuanceReason="C" Key="XXXXXXXXXX" AssessIndicator="MileageOrCurrency" Private="true" SSRFreeText="TTL15KG1PC" InclusiveOfTax="true" InterlineSettlementAllowed="true" GeographySpecification="Portion" Source="MCE" ViewableOnly="false" TotalWeight="15KG" ProviderCode="1G" Quantity="1" BasePrice="INR6857" Taxes="INR343" IsRepriceRequired="false" PseudoCityCode="XXXX">
<common_v50_0:ServiceData BookingTravelerRef="XXXXXXXXXX" AirSegmentRef="XXXXXXXXXX" TravelerType="ADT">
<common_v50_0:SSRRef Key="XXXXXXXXXX"/>
</common_v50_0:ServiceData>
<common_v50_0:ServiceInfo>
<common_v50_0:Description>EXCESS BAGGAGE 11 TO 15 KG</common_v50_0:Description>
</common_v50_0:ServiceInfo>
<air:TaxInfo Category="K3" Amount="INR343" Key="XXXXXXXXXX"/>
<air:EMD FulfillmentType="2" AssociatedItem="Flight" RefundReissueIndicator="Refundable" Commissionable="false" Booking="SSR" FulfillmentTypeDescription="Associated to a flight coupon of a ticket"/>
</air:OptionalService>
</air:OptionalServices>
</air:AirReservation>
</universal:UniversalRecord>
</universal:AirMerchandisingFulfillmentRsp>Confirmation information may also be included, if it is available from the supplier.
Baggage: Optional service baggage information returns in a structured format so that customers can easily parse relevant information for travelers to make educated decisions on cost of checked bags. When baggage information returns: Release 20.2
- @FirstPiece and @LastPiece identifies which of the paid baggage options available (for a given air element) is the first paid bag and which one the second, regardless of being from a no-bag fare or a bag-included fare in a structured format in the optional services.
- @TotalWeight indicates the maximum allowed weight, and the value returns in a structured attribute in optional services, when returned in the response
- The response clearly identifies price and currency of the bag in the optional services.
- When number of pieces exists, keeps the current attribute @Quantity enabled and includes the maximum weight allowed in the optional services.
For example,
<air:OptionalServices><air:OptionalServicesTotal/><air:OptionalService Type="Baggage" TotalPrice="AUD27.70" SupplierCode="AR" PerTraveler="false" CreateDate="2020-02-04T16:47:19.178+00:00" ServiceStatus="Offered" SequenceNumber="100000" ServiceSubCode="02U" SSRCode="ASVC" Key="zhXJNACJ3BKA0HAAAAAAAA==" AssessIndicator="MileageOrCurrency" InclusiveOfTax="true" InterlineSettlementAllowed="false" GeographySpecification="Portion" Source="MCE" ViewableOnly="true" TotalWeight="46" ProviderCode="1G" Quantity="1" BasePrice="AUD27.70" ApproximateTotalPrice="AUD27.70" ApproximateBasePrice="AUD27.70" Taxes="AUD0.00" OptionalServicesRuleRef="zhXJNACJ3BKA1HAAAAAAAA==" FirstPiece="2" LastPiece="2">/OptionalServicesTotal
- Universal API returns the total for the Optional Services, including taxes.
- For ATPCO-filed Optional Services, the total of all Optional Services is added by Universal API and returned in OptionalServicesTotal.
- When ACH LCC and API carrier Optional Services are returned from multiple carriers and the currency codes are the same, Universal API returns BasePrice, Taxes, Fees, and TotalPrice in OptionalServices/OptionalServicesTotal.
- When ACH LCC and API carrier Optional Services are returned from multiple carriers and the currency codes are the different, Universal API does not return BasePrice, Taxes, or TotalPrice in OptionalServices/OptionalServicesTotal. Instead, the ApproximateTotalPrice and ApproximateBasePrice are returned in OptionalServicesTotal based on the default currency code of the TargetBranch (WAB).
- If Optional Services are returned from multiple providers in the response, Universal API returns OptionalServices/OptionalServicesTotal with the combined price.
- If Optional Services are returned from multiple providers in the response and the currency codes are different, the ApproximateTotalPrice and ApproximateBasePrice are returned in OptionalServicesTotal based on the default currency code of the TargetBranch (WAB).
Errors and Warnings
Only successful merchandising transactions result in a saved Universal Record. If the Fulfillment transaction as a whole fails at any point, the Universal Record that has been created or updated is rolled back and an error is returned:
- When the request is sent and multiple Universal Records exist.
- When the request is sent and a PNR cannot be retrieved.
- When the request is sent and a Universal Record cannot be imported.
- When the request is sent without OptionalSerivce @SSRFreeText and free text is required by the carrier for the optional service.
Multiple Universal Records present. All air segments must be in one Universal Record for Merchandising optional services to be returned.
Unable to retrieve reservation for Provider [Provider Code].
Unable to Import PNR for Provider [Provider Code].
Merchandising request unsuccessful - please retrieve UR/PNR, check status and report issue immediately [Carrier Code] - Free text is required for this type of SSR [SSR Code]
Users can send the AirMerchandisingFulfillment with a combination of paid and standard seats.
Action | Error |
---|---|
AirMerchandisingFulfillmentReq is sent with one or more Optional Services that are invalid. |
Merchandising request unsuccessful - please retrieve UR/PNR, check status and report issue immediately.
Note: If the same error message applies to multiple optional services, the error message displays only once. |
When OptionalService @Type=”PreReservedSeatAssignment”, and:
|
The error message Merchandising request unsuccessful - please retrieve UR/PNR, check status and report issue immediately. is returned. The error One OptionalService/ServiceData is required for seat optional service and must reference one air segment and one booking traveler to fulfill optional service. is appended. Correct OptionalService/ServiceData element
|
When OptionalService @Type does not equal “PreReservedSeatAssignment”, and:
|
The error message Merchandising request unsuccessful - please retrieve UR/PNR, check status and report issue immediately. is returned. The error At least one OptionalService/ServiceData is required for non-seat optional service and must reference one air segment and one booking traveler to fulfill optional service. is appended. Correct OptionalService/ServiceData element
|
When OptionalService @Type does not equal “PreReservedSeatAssignment”, and:
|
The error message Merchandising request unsuccessful - please retrieve UR/PNR, check status and report issue immediately. is returned. The error Multiple booking traveler references not allowed within one OptionalService. is appended. Correct OptionalService/ServiceData element
<com:ServiceData AirSegmentRef="TWPiNzWTQROEwSGKTr9ztw==" BookingTravelerRef="pLz6JCp3TY6uUL+WZl7DAQ=="/> <com:ServiceData AirSegmentRef=”zy3g8mFKQiipTilS2b7C3Q==" BookingTravelerRef="pLz6JCp3TY6uUL+WZl7DAQ=="/> |
For example:
AirMerchandisingFulfillmentReq is sent with:
- One OptionalService Type=”PreReservedSeatAssignment” with two ServiceData elements
- One OptionalService Type=”Baggage” with one ServiceData element that has AirSegmentRef and another ServiceData element that has BookingTravelerRef
- One OptionalService Type=”MealOrBeverage” that references two booking travelers
- One OptionalService Type=”Toy” with no ServiceData element
- One OptionalService Type=”TravelInsurance” with one ServiceData element that has AirSegmentRef and BookingTravelerRef
Universal API returns one main error and appends three error messages.
Merchandising request unsuccessful - please retrieve UR/PNR, check status and report issue immediately. One OptionalService/ServiceData is required for seat optional service and must reference one air segment and one booking traveler to fulfill optional service. At least one OptionalService/ServiceData is required for non-seat optional service and must reference one air segment and one booking traveler to fulfill optional service. Multiple booking traveler references not allowed within one OptionalService.
Additionally, an Optional Service with multiple OptionalService/ServiceData that has a ServiceData that is mapped correctly and a ServiceData that is not mapped correctly is considered an invalid Optional Service. For example:
AirMerchandisingFulfillmentReq is sent with one OptionalService Type=”Baggage” and:
- One ServiceData that has AirSegmentRef and BookingTravelerRef.
- One ServiceData that has AirSegmentRef
Universal API returns one main error and appends one error message.
Merchandising request unsuccessful - please retrieve UR/PNR, check status and report issue immediately. At least one OptionalService/ServiceData is required for non-seat optional service and must reference one air segment and one booking traveler to fulfill optional service.
Review specifics for Air Merchandising Fulfillment:
Optional Services may be canceled or modified, depending on the supplier and type of change.