{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://raw.githubusercontent.com/api-evangelist/amadeus/refs/heads/main/json-schema/branded-fares-upsell-flight-offer-schema.json", "title": "FlightOffer", "description": "FlightOffer schema from Branded Fares Upsell", "type": "object", "properties": { "type": { "type": "string", "description": "the resource name", "example": "flight-offer" }, "id": { "description": "Id of the flight offer", "type": "string", "example": "1" }, "source": { "description": "source of the flight offer", "type": "string", "enum": [ "GDS" ], "example": "GDS" }, "instantTicketingRequired": { "description": "If true, inform that a ticketing will be required at booking step.", "type": "boolean", "example": false }, "disablePricing": { "description": "BOOK step ONLY - If true, allows to book a PNR without pricing. Only for the source \"GDS\"", "type": "boolean", "example": false }, "nonHomogeneous": { "description": "If true, upon completion of the booking, this pricing solution is expected to yield multiple records (a record contains booking information confirmed and stored, typically a Passenger Name Record (PNR), in the provider GDS or system)", "type": "boolean", "example": false }, "oneWay": { "description": "If true, the flight offer can be combined with other oneWays flight-offers to complete the whole journey (one-Way combinable feature).", "type": "boolean", "example": false }, "paymentCardRequired": { "description": "If true, a payment card is mandatory to book this flight offer", "type": "boolean", "example": false }, "lastTicketingDate": { "description": "If booked on the same day as the search (with respect to timezone), this flight offer is guaranteed to be thereafter valid for ticketing until this date (included). Unspecified when it does not make sense for this flight offer (e.g. no control over ticketing once booked). YYYY-MM-DD format, e.g. 2019-06-07", "type": "string", "example": "2018-06-19" }, "lastTicketingDateTime": { "description": "If booked on the same day as the search (with respect to timezone), this flight offer is guaranteed to be thereafter valid for ticketing until this date/time (included). Unspecified when it does not make sense for this flight offer (e.g. no control over ticketing once booked). Information only this attribute is not used in input of pricing request. Local date and time in YYYY-MM-ddThh:mm:ss format, e.g. 2017-02-10T20:40:00", "type": "string", "format": "date-time", "example": "2018-06-19T15:00:00" }, "numberOfBookableSeats": { "description": "Number of seats bookable in a single request. Can not be higher than 9.", "type": "number", "example": 9, "minimum": 1, "maximum": 9 }, "itineraries": { "type": "array", "minItems": 1, "maxItems": 250, "items": { "title": "Itineraries", "type": "object", "properties": { "duration": { "description": "duration in [ISO8601](https://en.wikipedia.org/wiki/ISO_8601) PnYnMnDTnHnMnS format, e.g. PT2H10M for a duration of 2h10m", "type": "string", "example": "PT2H10M" }, "segments": { "title": "Segments", "type": "array", "minItems": 1, "maxItems": 9, "items": { "$ref": "#/definitions/Segment" } } }, "required": [ "segments" ] } }, "price": { "type": "object", "title": "Price", "description": "price information", "allOf": [ { "type": "object", "properties": { "margin": { "description": "BOOK step ONLY - The price margin percentage (plus or minus) that the booking can tolerate. When set to 0, then no price magin is tolerated.", "type": "string", "example": "1.00" }, "grandTotal": { "description": "Total amount paid by the user (including fees and selected additional services).", "type": "string", "example": "987.00" }, "billingCurrency": { "description": "Currency of the payment. It may be different than the requested currency", "type": "string", "example": "EUR" }, "additionalServices": { "type": "array", "title": "AdditionalServices", "items": { "title": "AdditionalService", "type": "object", "properties": { "amount": { "type": "string", "example": "332.70" }, "type": { "$ref": "#/definitions/AdditionalServiceType" } } } } } }, { "properties": { "currency": { "type": "string", "example": "USD" }, "total": { "description": "Total amount paid by the user", "type": "string", "example": "932.70" }, "base": { "description": "Amount without taxes", "type": "string", "example": "632.70" }, "fees": { "description": "List of applicable fees", "type": "array", "items": { "$ref": "#/definitions/Fee" } }, "taxes": { "type": "array", "items": { "$ref": "#/definitions/Tax" } }, "refundableTaxes": { "description": "The amount of taxes which are refundable", "type": "string", "example": "200.00" } } } ] }, "pricingOptions": { "title": "PricingOptions", "type": "object", "properties": { "fareType": { "type": "array", "description": "type of fare of the flight-offer", "items": { "type": "string", "enum": [ "PUBLISHED", "NEGOTIATED", "CORPORATE" ] }, "example": [ "PUBLISHED" ] }, "includedCheckedBagsOnly": { "type": "boolean", "description": "If true, returns the flight-offers with included checked bags only", "example": true }, "refundableFare": { "type": "boolean", "description": "If true, returns the flight-offers with refundable fares only", "example": true }, "noRestrictionFare": { "type": "boolean", "description": "If true, returns the flight-offers with no restriction fares only", "example": true }, "noPenaltyFare": { "type": "boolean", "description": "If true, returns the flight-offers with no penalty fares only", "example": true } } }, "validatingAirlineCodes": { "description": "This option ensures that the system will only consider offers with these airlines as validating carrier.", "type": "array", "minItems": 1, "maxItems": 9, "items": { "type": "string" }, "example": [ "AF" ] }, "travelerPricings": { "title": "TravelerPricings", "description": "Fare information for each traveler/segment", "type": "array", "minItems": 1, "maxItems": 18, "items": { "title": "TravelerPricing", "required": [ "travelerId", "fareOption", "travelerType", "fareDetailsBySegment" ], "properties": { "travelerId": { "type": "string", "example": "1", "description": "Id of the traveler" }, "fareOption": { "description": "option specifying a group of fares, which may be valid under certain conditons\nCan be used to specify special fare discount for a passenger\n", "type": "string", "enum": [ "STANDARD", "INCLUSIVE_TOUR", "SPANISH_MELILLA_RESIDENT", "SPANISH_CEUTA_RESIDENT", "SPANISH_CANARY_RESIDENT", "SPANISH_BALEARIC_RESIDENT", "AIR_FRANCE_METROPOLITAN_DISCOUNT_PASS", "AIR_FRANCE_DOM_DISCOUNT_PASS", "AIR_FRANCE_COMBINED_DISCOUNT_PASS", "AIR_FRANCE_FAMILY", "ADULT_WITH_COMPANION", "COMPANION" ], "example": "STANDARD" }, "travelerType": { "type": "string", "description": "traveler type\nage restrictions : CHILD < 12y, HELD_INFANT < 2y, SEATED_INFANT < 2y, SENIOR >=60y\n", "enum": [ "ADULT", "CHILD", "SENIOR", "YOUNG", "HELD_INFANT", "SEATED_INFANT", "STUDENT" ], "example": "ADULT" }, "associatedAdultId": { "type": "string", "description": "if type=\"HELD_INFANT\", corresponds to the adult traveler's id who will share the seat", "example": "12345" }, "price": { "properties": { "currency": { "type": "string", "example": "USD" }, "total": { "description": "Total amount paid by the user", "type": "string", "example": "932.70" }, "base": { "description": "Amount without taxes", "type": "string", "example": "632.70" }, "fees": { "description": "List of applicable fees", "type": "array", "items": { "$ref": "#/definitions/Fee" } }, "taxes": { "type": "array", "items": { "$ref": "#/definitions/Tax" } }, "refundableTaxes": { "description": "The amount of taxes which are refundable", "type": "string", "example": "200.00" } } }, "fareDetailsBySegment": { "type": "array", "minItems": 1, "maxItems": 18, "items": { "title": "FareDetailsBySegment", "description": "Fare details of the segment", "required": [ "segmentId" ], "properties": { "segmentId": { "type": "string", "example": "1", "description": "Id of the segment" }, "cabin": { "$ref": "#/definitions/TravelClass" }, "fareBasis": { "description": "Fare basis specifying the rules of a fare. Usually, though not always, is composed of the booking class code followed by a set of letters and digits representing other characteristics of the ticket, such as refundability, minimum stay requirements, discounts or special promotional elements.", "type": "string", "example": "ANNNNF4K", "pattern": "[[A-Z0-9]{1,18}" }, "brandedFare": { "description": "The name of the Fare Family corresponding to the fares. Only for the GDS provider and if the airline has fare families filled", "type": "string", "example": "LIGHTONE" }, "class": { "description": "The code of the booking class, a.k.a. class of service or Reservations/Booking Designator (RBD)", "type": "string", "example": "A", "pattern": "[A-Z]{1}" }, "isAllotment": { "description": "True if the corresponding booking class is in an allotment", "type": "boolean", "example": true }, "allotmentDetails": { "$ref": "#/definitions/AllotmentDetails" }, "sliceDiceIndicator": { "$ref": "#/definitions/SliceDiceIndicator" }, "includedCheckedBags": { "title": "includedCheckedBags", "$ref": "#/definitions/BaggageAllowance", "description": "Details of the included checked bags" }, "additionalServices": { "type": "object", "title": "AdditionalServicesRequest", "properties": { "chargeableCheckedBags": { "title": "chargeableCheckedBags", "description": "Details of chargeable checked bags", "$ref": "#/definitions/ChargeableCheckdBags" }, "chargeableSeat": { "title": "chargeableSeat", "description": "Details of chargeable seat", "$ref": "#/definitions/ChargeableSeat" }, "chargeableSeatNumber": { "type": "string", "description": "DEPRECATED - use the chargeableSeat attribute - seat number", "example": "33D", "pattern": "[1-9][0-9]{0,2}[A-Z]?" }, "otherServices": { "type": "array", "description": "Other services to add", "items": { "$ref": "#/definitions/ServiceName" }, "example": [ "PRIORITY_BOARDING" ] } } } } } } } } } }, "required": [ "type", "id" ] }