Full payload is not supported for NDC; use the reference payload instead. For GDS, you can send either a reference payload or a full payload.
Use the Add Offer full payload request to add an offer to the reservation workbench as part of the booking workflow. The full payload request sends full itinerary details instead of identifiers from the Search response as in the reference payload request.
Add Multiple Offers (GDS only; not supported for NDC): You can repeat the Add Offer request as needed to combine multiple offers into one reservation, either in the initial booking workflow or for an existing reservation. While there is no limit on the number of offers that can be combined, a reservation cannot have more than 16 flight segments. Also supported in the Add Offer reference payload request. Your PCC must be provisioned for multi-offers; contact your Travelport representative if necessary.
Add offer to expired booking (GDS only; not supported for NDC): You can use this or the reference payload request to add an offer to an existing reservation, such as when the previously added offer has expired and can no longer be booked. Start with a post-commit workbench.
Pricing modifiers and brand information: The full payload request supports optional pricing modifiers and/or brand information. You must send these modifiers during the initial booking workbench session - you cannot add them later.
Pricing modifiers:
If no pricing modifier is sent, the auto stored fare is added to the reservation. If a requested modifier does not have any fares associated with it, the Add Offer step returns a successful response but the Commit step will fail and return the error message No Fare Found.Brand information:
You can store fares with brand information at either or both the offer or segment level.To store brand information at the offer level, send PricingModifiersAir/Brand/tier with any valid brand tier value.
To store brand information at the segment level, send the brand tier with the flight segment in ProductCriteriaAir/SpecificFlightCriteria/brandtier. You can send brandTier for any or all segments.
There is no change in the response when brand information is requested. Brand details are returned after booking in the Reservation Retrieve.
Requests a fare based on the cabin class. Only one cabin preferenceType (Permitted, Preferred, PreferredWithUpgrade) is allowed per request, but there is no limit to the number of cabins that can be sent.
- Any CabinPreference in the initial Search request is applied to any subsequent Next Leg Search and reference Flight Specific Search requests.
- In AirPrice and AirReservation only one cabin preference type is allowed per request, but there is no limit to the number of cabins that can be sent. If CabinPreference was sent in the Search request, it is cached and sent with the AirPrice reference payload request. If you send CabinPreference in the AirPrice request, all cached modifiers are discarded and only the modifiers sent in the AirPrice request are used.
Can be combined with lowFareFinderInd=true to return lowest fare in the requested cabin or cabins. When using CabinPreference and lowFareFinderInd, if both CabinPreference and a class of service are sent, class of service is ignored. If CabinPreference is sent without a class of service, the response returns the lowest fare in the cabin requested. If that cabin is not available, the response may upgrade or downgrade to a different cabin. If a different cabin than requested is returned, the response returns the message that the cabin class may differ from the class requested. If lowFareFinderInd=false and CabinPreference are sent in the request, AirPrice ignores the preferred cabin and returns a message that the preferred cabin was ignored.
If CabinPreference is set to All, no cabin preference is applied.
Optional object to send the BIN/INN (IssuerIdentificationNumber) of the credit card to be used for payment; sending the BIN returns OB fees in the response
Required when using Air Canada flight pass.
Use not recommended; request fare rules using the Fare Rules API request instead.
Returns fare rules in the offer response.
Structured rules limit the rules returned to one or more of these categories: advance reservation/ticketing requirements, minimum/maximum stay, stopovers, penalties, voluntary exchanges and refunds.
GDS supports all categories; NDC supports only penalties. See the Fare Rules Guide for details. Note that even if fare rules are not requested, for GDS only, change and cancel penalties are returned unless suppressed by sending CustomResponseModifiersAir/excludePenaltiesInd set to true.
Not supported in BuildOptions (Flight Specific Search).
Not recommended to use. Invoke fare rule end points directly.
GDS only; not supported for NDC.
Provides pricing flexibility around class of service.
- If true: returns the lowest fares available in any class of service available, which may not be the same as the requested class.
- If false (default behavior): the response returns fares only in the requested class of service.
Notes for modifier interations:
- If lowFareFinderInd is sent with true and CabinPreference is sent, the only supported value for CabinPreference/type is Permitted.
- When lowFareFindInd=true and brand attributes are not disabled with inhibitBrandContentInd, AirPrice uses only the brand tier (and any other pricing modifiers) to find the lowest fare within a brand tier regardless of class of service.
Use to request the return of branded fares, which by default are not returned for the AirPrice Full Payload request.
- If true, returns branded fares. For AirPrice this is supported only in the full payload request.
- If false (default behavior): Does not return branded fares.
GDS only, not supported for NDC (NDC carriers always validate inventory at pricing).
Sets whether to validate inventory on the first flight in the itinerary in the requested class of service by booking and then releasing seats. Can help reduce sell failures at booking by alerting of insufficient availability.
- If true, verifies availability for the requested number of passengers in a specific class of service at the time of the price request by booking and releasing seats. If any or all segments are not bookable, AirPrice returns a message that the air segment/s are not bookable along with the dates and city pairs of the segments that are not bookable.
- If false (default behavior): Checks only for general seat availability on the flight, not a specific class of service.
Because this indicator temporarily affects seat availability, the recommended best practice is to use validateInventoryInd instead. Some airlines monitor for high volumes of sell/ignore transactions. Regardless of pricing results, air fares and inventory are only guaranteed by airlines when ticketed and paid.
To cause AirPrice to perform the same check for connecting flights, you can send both reCheckInventory=true and SpecificFlightCriteria/boundFlightsInd=true for each connecting flight.
GDS only; not supported for NDC, as NDC carriers already validate inventory at pricing.
Sets whether to validate inventory in the requested class of service.
- If true, checks for availability for the requested number of passengers in the requested class of service at the time of the price request. If there are fewer seats than requested passengers available in that class of service, AirPrice does not return any offers and instead returns an error message that the booking class or preference is not available. This reduces failures at the Add Offer and Workbench Commit steps.
- If false (default behavior): Checks only for general seat availability on the flight, not a specific class of service. AirPrice may return upsell offers with no availability in the requested class of service.
NDC only; not supported for GDS.
Supports values from 0 to 99 inclusive. Send to request upsell offers along with pricing for the requested class of service or cabin, returned in ascending price order. An upsell is the next highest fare in a different brand or cabin than requested.
Upsells are returned as follows:
- Upsells not requested: Only the requested offer is returned.
- One upsell requested: The lowest priced offer in the requested class of service or cabin plus one upsell offer are returned.
- Two upsells requested (and so on for x upsells requested): The lowest priced offer in the requested class of service or cabin plus two upsell offers are returned.
- Mock serverhttps://developer.travelport.com/_mock/apis/flights/air/book/airoffer/reservationworkbench/{ReservationResource_Identifier}/offers/buildfromproducts
- https://api.pp.travelport.net/11https://api.pp.travelport.net/11/air/book/airoffer/reservationworkbench/{ReservationResource_Identifier}/offers/buildfromproducts
- https://api.travelport.net/11https://api.travelport.net/11/air/book/airoffer/reservationworkbench/{ReservationResource_Identifier}/offers/buildfromproducts
- One way offer
- Round trip offer
- Book a passive segment
curl -i -X POST \
https://developer.travelport.com/_mock/apis/flights/air/book/airoffer/reservationworkbench/49f58f5f-c443-43b4-9f5d-be405fd00a01/offers/buildfromproducts \
-H 'Authorization: Bearer <YOUR_JWT_HERE>' \
-H 'Content-Type: application/json' \
-H 'TVP-PCC-Core: DU7_1G' \
-H 'TraceId: TraceID_123456789' \
-H 'XAUTH_TRAVELPORT_ACCESSGROUP: 19Y88702-C27A-4E5D-829A-89D7016688B1' \
-H 'travelportPlusSessionIdentifier: 49f58f5f-c443-43b4-9f5d-be405fd00a01' \
-d '{
"@type": "OfferQueryBuildFromProducts",
"BuildFromProductsRequest": {
"@type": "BuildFromProductsRequestAir",
"PassengerCriteria": [
{
"@type": "PassengerCriteria",
"number": 1,
"passengerTypeCode": "ADT"
}
],
"ProductCriteriaAir": [
{
"SpecificFlightCriteria": [
{
"flightNumber": "2833",
"carrier": "AA",
"departureDate": "2026-11-02",
"departureTime": "08:20:00",
"arrivalDate": "2026-11-02",
"arrivalTime": "10:08:00",
"from": "ORD",
"to": "DEN",
"classOfService": "Y",
"cabin": "Economy",
"segmentSequence": 1,
"brandTier": "4",
"AvailabilitySourceCode": "S",
"ContentSource": "GDS"
}
],
"sequence": 1
}
]
}
}'OK - Successful Response - 200
{ "OfferListResponse": { "OfferID": [ { … } ], "@type": "response", "transactionId": "49f58f5f-c443-43b4-9f5d-be405fd00a01", "traceId": "TraceID_123456", "correlationId": "48fb4cd3-2ef6-4479-bea1-7c92721b988c", "reservationStatus": "Success", "Result": { "@type": "Result", "status": "Complete", "Error": [ … ], "Warning": [ … ] }, "Identifier": { "value": "A0656EFF-FAF4-456F-B061-0161008D7C4E", "authority": "TVPT" }, "NextSteps": { "baseURI": "string", "id": "5", "NextStep": [ … ] }, "ReferenceList": [ { … } ], "CurrencyRateConversion": [ { … } ], "Pagination": { "@type": "Pagination", "page": 1, "pageSize": 20, "totalPages": 5, "totalItems": 100 } } }