Air Pricing with Fare Basis Codes (Forced Fares)
A Fare Basis is a unique identifier (within an airline) for the fare used to issue to the ticket. Fare Basis Codes can be used to create a specific fare to price, which overrides Universal API's system-generated fare responses. A Fare Basis Code can be provided for each segment in an itinerary.
Note: Fare Basis Codes are also used during Air Booking and can be added to an existing air segment.
Request
Fare Basis Codes can be added in the FareBasisCode attribute AirPriceReq/AirPricingCommand/AirSegmentPricingModifiers.
If forced fares are used, a Fare Basis Code must be included for each Air segment in an itinerary. If a Fare Basis Code is included for some, but not all, segments in an a itinerary, stored fares are returned only for the segments with a Fare Basis Code. A combination of forced fares and automatic fares are not supported within the same PNR.
Fare Basis Code and Fare Break modifiers can be used in combination for a fare pricing request.
The following rules apply to a forced fare, depending on the presence of a Booking Code/Class of Service and/or Fare Basis Code in the Air Pricing request:
-
If PermittedBookingCodes and FareBasisCode are present in the request, Booking Code must be specified for all segments. If not, a validation message is returned.
-
If PermittedBookingCodes and FareBasisCode are present in the request, and Booking Codes are specified for all the segments, Class is populated by the Booking Code.
-
If PermittedBookingCodes is present and FareBasisCode is not present in the request, Universal API validates if the Booking Code is specified for each segment or not.
-
If PermittedBookingCodes is not present and FareBasisCode is present in the request, Universal API validates if air segment has the ClassOfService specified. If neither ClassOfService or PermittedBookingCode are present in the request, an error is returned.
-
If PermittedBookingCodes is not present, but ClassOfService is present with segment for the forced fare, Class is populated by ClassOfService of the segment.
If you have to force the fare basis codes in AirPrice, always look for @PricingMethod in AirPrice response.
-
xPath = /AirPriceRsp/AirPriceResult/AirPricingSolution/AirPricingInfo/@PricingMethod
-
If PricingMethod="Manual" it indicates the fare is not guaranteed
To see the reason why the fare is not guaranteed, review the <FareRuleFailureInfo> element in the AirPrice response. The <Reason> tags contain information about the violated fare rules. For example:
<FareRuleFailureInfo>
<Reason>DateSeasonalityFailure</Reason>
<Reason>RoutingFailure</Reason>
<Reason>DayTimeFailure</Reason>
<Reason>BookingClassFailure</Reason>
</FareRuleFailureInfo>
Response
The response includes Air Pricing data with the FareBasis attribute included in AirPriceRsp/AirPriceResult/AirPricingSolution/AirPricingInfo/FareInfo.
Errors
For host consistency some providers need to internally duplicate SegmentRef data in AirSegmentPricingModifiers and Booking. If the SegmentRef sent in AirSegmentPricingModifiers is not the same as SegmentRef sent in AirPricingInfo/BookingInfo, an error is returned.
Exceptions
Worldspan
AirSegmentPricingModifiers @FareBasisCode is not supported for Worldspan (1P).