Low Fare Shopping by Air Price Points
Low Fare Shopping functionality combines air availability and a fare quote request to return the lowest available fares for a specified itinerary, using origin/destination and date information. Fares are available for one-way, round-trip, and multi-city travel. Low Fare Shopping does not require a booked itinerary to return fare data.
A Low Fare Shopping response can contain either Air Pricing Solutions or Air Price Points, but not both. Air Price Points provide a price with a set of flight options for each leg of the journey, which in turn provides a more compact result for GDS providers Apollo and Galileo.
- For Galileo, Apollo, and Worldspan: AirPricePointList returns a price and a list of flights for each leg that can be combined to create a complete itinerary at that price.
- For ACH: AirPricePointList return prices and flights for the complete itinerary or for each leg of the itinerary separately, depending on the PreferCompleteItinerary and SolutionResults settings in the request.
Note: Because Universal API combines ACH flights for complete itineraries, some combinations are returned that may not be bookable, due to supplier restrictions.
Price Points and Pricing Solution specify how the pricing solution is returned. The prices in the response are the same, regardless of whether AirPricePointList or AirPricingSolution is returned.
Note: For additional information on the connection data returned, see Air Price Points Connection Logic (when using AirPricePoint) and Air Segment Connection Logic (when using AirPricingSolution). You can also download the Air Price Points Quick Guide.
Schema
Located in Air.xsd:
Request
- Enter the minimum required data for the LowFareSearchReq.
- Use @SolutionResult to request Air Pricing Solutions or Air Price Points in the response.
Set @SolutionResult="false" or leave blank to return Air Price Points in AirPricePointList. The default is "false".
If you choose to return Price Points, the Universal API takes all the qualifying flights for outbound and inbound and presents them as one price, which you then break out into the combination you want.
Important: The Price Points solution should not be confused with one way itineraries. Price Points is not the same as combining two one-way fares, which is not advised, as it may cause price differences.Set @SolutionResult="true" to return Air Pricing Solutions in AirPricingSolution, which works out each combination of flights and presents them individually as a solution.
If PreferCompleteItinerary="true", sectors are used to create a whole itinerary. If PreferCompleteItinerary="false", sectors are returned individually.
Searching for @PreferCompleteItinerary="true" may return both CompleteItinerary="false" and CompleteItinerary="true" solutions in LFS response when customer is configured for corporate and retails fares along with warning: <common_v50_0:ResponseMessage Code="701422" Type="Warning" ProviderCode="ACH">Corporate and Retail fares cannot be combined for Indigo (6E). Use CompleteItinerary="false" to combine fares and process a split booking.</common_v50_0:ResponseMessage>
Note: For ACH carrier Indigo (6E) corporate fares cannot be combined with retail fares. Whereas any Indigo retail fare brands can be combined with other retail fare brands. If corporate fares are combined with retail fares, then the follow on pricing and booking transactions will get failed. Hence PricePoints with CompleteItinerary="false" may return as these cannot be combined with any other fares.
Set @SolutionResult="false" and @PreferCompleteItinerary="false" to return AirPricePoint results that give Flight Options for each leg of the itinerary separately.
- Include AirSearchModifiers/MaxSolutions to specify the maximum number of Air Price Points to be returned.
- The Apollo (1V) and Galileo (1G) response separately. For 1G and 1V, valid values are 1 to 1000.
- Each ACH adapter separately. For ACH, valid values are 1 to 1000 (per carrier/adapter).
The value is applied to:
If the specified value exceeds the supported maximum, a warning is returned along with the maximum allowable results.
Response
A Low Fare Search response is returned in LowFareSearchRsp which includes AirPricePointList.
The response also includes the AirPricePointList/AirPricePoint element. HostToken information is provided in AirPricingInfo/FlightOptionsList/FlightOption/Option/BookingInfo for the air price point structure.
Note: The AirSegment/AirAvailInfo/FareTokenInfo is not returned for ACH responses with AirPricePoint elements.
The FeeInfo element returns the itinerary level booking fee for Airline Content Hub (ACH) providers. :
<air:FeeInfo Key="BB1dy8IKTmaDq9iKR6qDrg==" Amount="EUR5.00" Code="BKIN" ProviderCode="ACH" SupplierCode="HV"/>
@CompleteItinerary is returned and set to false if a carrier/adapter does not return adequate results to form a complete itinerary. If the result is a complete itinerary, the flag is not returned.
Note: At this time, Universal API only returns complete itinerary air price points using results from a single ACH adapter (generally equivalent to a carrier). Universal API does not combine flights from multiple ACH carriers to create multiple AirPricePoint results.

The TravelTime attribute indicates the travel time, in duration, for the entire journey.
-
For a single segment with no connection, the travel time is equal to the flight time (FlightDetails @TravelTime and AirSegment @TravelTime).
-
For connecting segments, the travel time is determined by calculating the difference between the departure time of the first segment and the arrival time of the last segment for that particular entire set of connections. For example:
<Journey TravelTime="655">
<AirSegmentRef Key="1T"/>
<AirSegmentRef Key="3T"/>
</Journey>
<Journey TravelTime="685">
<AirSegmentRef Key="5T"/>
<AirSegmentRef Key="7T"/>
</Journey>

For a single segment with no connection, the travel time is equal to the flight time (FlightDetails @TravelTime and AirSegment @TravelTime).
The TravelTime element in LowFareSearchRsp/AirPricePointList/AirPricePoint/AirPricingInfo/FlightOptionsList/FlightOption/Option indicates the travel time, in duration, for the entire journey. The travel time is determined by calculating the difference between the departure time of the first segment and the arrival time of the last segment for that particular entire set of connections. For example:
<Journey TravelTime="655">
<AirSegmentRef Key="1T"/>
<AirSegmentRef Key="3T"/>
</Journey>
<Journey TravelTime="685">
<AirSegmentRef Key="5T"/>
<AirSegmentRef Key="7T"/>
</Journey>


Prior to Air v43.0, fare penalties were not included for any upsell fares. As a result, upsell fares were unused. Air 44.0 and later provides the same penalty and refund data for the upsell fares as related fares, returning the most restrictive fare penalty details (refundable, change, and cancel), so that agents and/or OTAs can display accurate penalty details when ReturnUpsellFare="true"
For example, if LowFareSearchReq/@SolutionResult="false" and LowFareSearchReq/@ReturnUpsellFare="true", details for Upsell / Price Points are returned in:
LowFareSearchRsp/AirPricePointList/AirPricePoint/AirPricingInfo
- @Refundable=”true”
- /ChangePenalty
- /CancelPenalty

With release 17.3 (Air v42.0 and higher), for Galileo (1G) and Apollo (1V) only, the optional Boolean attribute Cat35Indicator was added to LowFareSearchRsp/AirPricePointList/AirPricePoint/AirPricingInfo. A value of true indicates the fare is associated with a Cat35 rule. False indicates the fare does not have a Cat35 rule. The Cat35 indicator is not supported for providers other than Galileo (1G) and Apollo (1V).

Prior to Air v45.0, Galileo (1G) returned the Category 16 (CAT-16) penalty rules from the fare that had the most restrictive penalty. The first two penalties were used from the most restrictive fare component; however, the highest penalties may exist across multiple fare components. Therefore, false penalty information could have been returned.
With Air v45.0, Universal API examines all fare components and sends the most restrictive conditions across all fare components within a pricing solution. The response contains the most restrictive penalty information in CAT-16.
The LowFareSearchRsp, LowFareSearchAsynchRsp (v49.0 and earlier), AirPriceRsp, and RetrieveLowFareSearchRsp (v49.0 and earlier) schema is enhanced to return the optional attribute @PenaltyApplies in the CancelPenalty and ChangePenalty elements that identifies the penalty as “Anytime”, “Before Departure”, or “After Departure”.
Notes:
- If the airline files "cancel penalty" and "change penalty" along with "NoShow," then NoShow="true" attribute displays in CancelPenalty and ChangePenalty in the response. For example:
REQUEST
<PenFee>
<TkNonRef>N </TkNonRef>
<Cancellation>Y </Cancellation>
<FailConfirmSpace>Y </FailConfirmSpace>
<ItinChg>Y </ItinChg>
<AnytimePenalty>Y </AnytimePenalty>
<BeforeDeparturePenalty>N </BeforeDeparturePenalty>
<AfterDeparturePenalty>N </AfterDeparturePenalty>
<Spares15>NNN </Spares15>
<Amt>38.00 </Amt>
<Type>D </Type>
<Currency>USD </Currency>
</PenFee>
</PenFeeAry>
RESPONSE
<air:ChangePenalty NoShow="true" PenaltyApplies="Anytime">
<air:Amount>USD38.00</air:Amount>
</air:ChangePenalty>
<air:CancelPenalty NoShow="true" PenaltyApplies="Anytime">
<air:Amount>USD38.00</air:Amount>
</air:CancelPenalty>
- If the airline files "cancel" penalty along with "NoShow," then the NoShow="true" attribute displays only in the CancelPenalty attribute the response. For example:
Request
<PenFee>
<TkNonRef>N </TkNonRef>
<Cancellation>Y </Cancellation>
<FailConfirmSpace>Y </FailConfirmSpace>
<ItinChg>N</ItinChg>
<AnytimePenalty>Y</AnytimePenalty>
<BeforeDeparturePenalty>N </BeforeDeparturePenalty>
<AfterDeparturePenalty>N </AfterDeparturePenalty>
<Spares15>NNN </Spares15>
<Amt>38.00 </Amt>
<Type>D </Type>
<Currency>USD </Currency>
</PenFee>
</PenFeeAry>
Response
<air:CancelPenalty NoShow="true" PenaltyApplies="Anytime">
<air:Amount>USD38.00</air:Amount>
</air:CancelPenalty>
- If the airline files stand a lone NoShow amount, then NoShowPenalty attribute displays along with corresponding value (amount or percentage) in the response. For example:
Request
<PenFee>
<TkNonRef>N </TkNonRef>
<Cancellation>N</Cancellation>
<FailConfirmSpace>Y </FailConfirmSpace>
<ItinChg>N</ItinChg>
<AnytimePenalty>Y</AnytimePenalty>
<BeforeDeparturePenalty>N </BeforeDeparturePenalty>
<AfterDeparturePenalty>N </AfterDeparturePenalty>
<Spares15>NNN </Spares15>
<Amt>38.00 </Amt>
<Type>D </Type>
<Currency>USD </Currency>
</PenFee>
</PenFeeAry>
Response
<air:NoShowPenalty PenaltyApplies="Anytime">
<air:Amount>USD38.00</air:Amount>
</air:NoShowPenalty>
- If the airline files a change penalty along with NoShow, then NoShow="true" attribute displays in ChangePenalty only in the response.
Request
<PenFee>
<TkNonRef>N </TkNonRef>
<Cancellation>N</Cancellation>
<FailConfirmSpace>Y </FailConfirmSpace>
<ItinChg>Y</ItinChg>
<AnytimePenalty>Y</AnytimePenalty>
<BeforeDeparturePenalty>N </BeforeDeparturePenalty>
<AfterDeparturePenalty>N </AfterDeparturePenalty>
<Spares15>NNN </Spares15>
<Amt>38.00 </Amt>
<Type>D </Type>
<Currency>USD </Currency>
</PenFee>
</PenFeeAry>
Response
<air:ChangePenalty NoShow="true" PenaltyApplies="Anytime">
<air:Amount>USD38.00</air:Amount>
</air:ChangePenalty>
Errors and Warnings
Depending on your provisioning, Worldspan customers may receive an error when SolutionResult="false". Please contact your support representative for details.
ACH: The following warning: "There are too many search solutions; Please retry your search with more restrictive criteria. - Request generated too many solutions. Without filter, number of solutions would have been XXXX ; instead filtered to 2025." may be sent.
-
The maximum number of results for an ACH round trip request is calculated and returned based on Maximum solution configuration / formula. In a round trip (Two-leg) search, the maximum number of solutions that can return is 2025. If ACH returns more than 2025, the full amount may not return in the response.
-
Returning all solution options increases payload and response time on the customer side.
-
Some customers may find handling huge payloads difficult.