Spotnana Air API

APIs to perform search, checkout and book an air pnr

OpenAPI Specification

spotnana-air-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Air API
  version: v2
  description: APIs to perform search, checkout and book an air pnr
servers:
- url: https://api-ext-sboxmeta.partners.spotnana.com
  description: Sandbox URL
security:
- Bearer: []
tags:
- name: Air
  description: APIs to perform search, checkout and book an air pnr
paths:
  /v2/air/search-flights:
    post:
      tags:
      - Air
      summary: Get air itineraries
      description: Get Air Itineraries available for the given search parameters
      operationId: airSearch
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AirSearchRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AirSearchResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /v2/air/flight-attributes:
    post:
      tags:
      - Air
      summary: Get flight attributes
      description: "Get Flight attributes, amenities and fare rules for the given search response id. \nReturns the full air search response along with attribute details.\n"
      operationId: airAttributes
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AirAttributesRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AirSearchResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /v2/air/selected-itinerary:
    post:
      tags:
      - Air
      summary: Get selected itinerary
      description: Get the selected itinerary for the traveler in the search and checkout flow.
      operationId: airSelectedItinerary
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AirSelectedItineraryRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AirSelectedItineraryResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /v2/air/airlines-info:
    parameters:
    - name: includeInactive
      in: query
      description: Include Airlines with inactive status along with active.
      required: true
      schema:
        type: boolean
    get:
      tags:
      - Air
      summary: Get Airlines Information (Air)
      description: Returns airlines information for active marked airlines.
      operationId: getAirlinesInformation
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AirlineInfoResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /v2/air/flight-checkout:
    post:
      tags:
      - Air
      summary: Get flight checkout details
      description: Get the flight checkout details associated with the selected itinerary.
      operationId: airFlightCheckout
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AirCheckoutRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AirCheckoutResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /v2/air/seat-map:
    post:
      tags:
      - Air
      summary: Get flight seat map
      description: Get seat map for the flights in the given itinerary.
      operationId: airSeatMap
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AirSeatMapRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AirSeatMapResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /v2/air/initiate-booking:
    post:
      tags:
      - Air
      summary: Initiate booking
      description: "Initiates a new air booking for the trip. \nThe `identityDocs` field supports the following traveler identity documents: \nPassport, National ID, Known Traveler Number (KTN), redress number, and immigration documents. \nThe traveler can choose one among the list of identity documents available and provide its information during checkout.\n"
      operationId: airInitiateBooking
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AirInitiateBookingRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AirInitiateBookingResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /v2/air/revalidate-itinerary:
    post:
      tags:
      - Air
      summary: Validate air itinerary
      description: Validates the air itinerary for availability and pricing
      operationId: airRevalidateItinerary
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AirRevalidateItineraryRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AirRevalidateItineraryResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /v2/air/intermediate-revalidate-itinerary:
    post:
      tags:
      - Air
      summary: Validate air itinerary (interim)
      description: Validates an itinerary at any interim stage of air booking workflow and allows you to keep track of fare details before proceeding to checkout. Using this endpoint is optional. It requires a `searchId` and the `itineraryId` to obtain the latest fare details of the selected itinerary. The `travelerType` field in this endpoint response currently only accepts `ADULT`, `CHILD` and `INFANT`.
      operationId: airIntermediateRevalidateItinerary
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AirIntermediateRevalidateItineraryRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AirRevalidateItineraryResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /v2/air/create-pnr:
    post:
      tags:
      - Air
      summary: Create air pnr
      description: Creates a new air booking with the given itinerary
      operationId: airCreatePnr
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AirCreatePnrRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AirCreatePnrResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /v2/air/cancel-pnr:
    post:
      tags:
      - Air
      summary: Cancel Air Pnr
      description: Cancel the air pnr and issues applicable refunds
      operationId: airCancelPnr
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AirCancelPnrRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AirCancelPnrResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /v2/air/pnrs/{pnrId}/exchange-details:
    parameters:
    - name: pnrId
      in: path
      description: Spotnana PNR ID.
      required: true
      schema:
        type: string
        example: '6926658168'
    get:
      tags:
      - Air
      summary: Get PNR exchange details
      description: 'This endpoint gets exchange details of all the tickets present in the given PNR ID of the

        given trip ID.

        '
      operationId: getAirPnrExchangeDetails
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AirPnrExchangeDetailsResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /v2/air/modify-search:
    post:
      tags:
      - Air
      summary: Modify Search
      description: Get Air Itineraries available for exchange/modification/deletion against current pnr.
      operationId: airModifySearchV2
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AirModifySearchRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AirSearchResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /v2/air/modify-book:
    post:
      tags:
      - Air
      summary: Modify Book
      description: Book[cancel] new[existing] legs into an existing pnr using the selected rate option from airModifySearch operation.
      operationId: airModifyBookV2
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AirModifyBookingRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AirModifyBookingResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /v2/air/pnrs/{pnrId}/update:
    post:
      tags:
      - Air
      summary: Edit PNR
      description: "Edit specific traveler information in an existing PNR.\nThis API allows you to edit and modify Special Service Requests (SSR), \nseat selection, loyalty number, ancillaries, redress number, Known Traveler Number (KTN), \ncheck-in preferences, and Other Service Information (OSI).\n"
      operationId: airPnrEdit
      parameters:
      - in: path
        name: pnrId
        description: PNR ID created by Spotnana for the booking.
        required: true
        schema:
          type: string
        example: '1213124111'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AirEditPnrRequest'
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AirEditPnrResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /v2/air/special-service-requests:
    get:
      tags:
      - Air
      summary: Get Special Service Requests (SSR)
      description: "Returns the list of all Special Service Requests (SSR) supported by Spotnana.\nThis API doesn't require a request payload or a query parameter.\nYou can use this endpoint anytime during the air booking or exchange workflow \nto view the list of SSRs currently supported by Spotnana.\n"
      operationId: getSpecialServiceRequests
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SpecialServiceRequestsResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
  /v2/air/special-service-requests/categories:
    get:
      tags:
      - Air
      summary: Get Special Service Requests (SSR) for a Category
      description: "Returns the list of Special Service Requests (SSR) for a selected category.\nEvery `category` type can contain multiple service requests.\nFor example, the `category: MEAL` includes service requests such as a vegetarian meal, baby/infant meal, \ngluten free meal, and so on. These service requests are displayed as `subCategory` fields within the `category: MEAL`. \nTo learn more about a selected category such as its `subCategory` values, category code, and other relevant\ninformation, run this API using the `category` type as the query parameter.\n"
      operationId: getSpecialServiceRequestsFilterByCategory
      parameters:
      - name: category
        in: query
        description: The category type of a Special Service Request (SSR).
        required: true
        schema:
          type: string
          description: Category details of the Special Service Request (SSR).
          enum:
          - BASSINET
          - SPECIAL_ASSISTANCE_WHEELCHAIR
          - BAGGAGE
          - UNACCOMPANIED_MINOR
          - PETS
          - MEET_AND_ASSIST
          - OTHERS
          - MEAL
          - SPECIAL_ASSISTANCE_DISABILITY
          example: SPECIAL_ASSISTANCE_WHEELCHAIR
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SpecialServiceRequestsResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
  /v2/air/fare-rules/fetch:
    post:
      tags:
      - Air
      summary: Returns the Air Raw Fare Rules for a Segment or Pnr
      operationId: fetchAirFareRules
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FetchAirFareRuleRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FetchAirFareRuleResponse'
        '204':
          description: No Content
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
components:
  schemas:
    OfficeIdWrapper:
      type: object
      title: OfficeIdWrapper
      properties:
        officeId:
          $ref: '#/components/schemas/OfficeId'
    AdhocUserInfo:
      type: object
      title: AdhocUserInfo
      description: Basic information related to ad-hoc traveler profile.
      required:
      - profileOwner
      properties:
        profileOwner:
          $ref: '#/components/schemas/ProfileOwner'
        isSaved:
          type: boolean
          description: "A boolean flag to show if ad-hoc traveler is visible in search. While updating the user \nif client tries to update this field, it will throw exception.\n"
          default: false
    PaginationResponseParams:
      type: object
      title: PaginationResponseParams
      description: Pagination parameters for response.
      required:
      - numResults
      - numPages
      properties:
        numResults:
          type: integer
          format: int32
          description: Total number of results in the paginated list.
        numPages:
          type: integer
          format: int32
          description: Total number of pages in the paginated list.
    PolicyPreventBookingAction:
      type: object
      title: PolicyPreventBookingAction
      description: Whether to allow booking if a rule is violated.
      properties:
        prevent:
          type: boolean
          description: True if booking is to be blocked if rule is violated, else false
        reason:
          type: string
          description: Reason describing why was that specific itinerary not allowed to book.
    CustomFieldMatchConditions:
      type: object
      title: CustomFieldMatchConditions
      description: Conditions to select the custom field for given context.
      properties:
        travelerConditions:
          $ref: '#/components/schemas/TravelerMatchConditions'
        travelTypes:
          type: array
          description: Travel types to match.
          items:
            $ref: '#/components/schemas/TravelType'
        travelRegionTypes:
          type: array
          description: Travel region types to match.
          items:
            $ref: '#/components/schemas/TravelRegionType'
        tripUsageTypes:
          type: array
          description: Trip usage types to match. If empty, all trip usage types will be matched.
          items:
            $ref: '#/components/schemas/TripUsageType'
    BeverageAmenity:
      type: object
      title: BeverageAmenity
      description: Beverage amenity option properties.
      properties:
        displayText:
          type: string
          example: Premium alcohol beverages provided
        beverageType:
          type: string
          example: premium alcoholic
        alcoholCost:
          type: string
          example: free
    AirlineInfo:
      title: AirlineInfo
      type: object
      required:
      - airlineCode
      - airlineName
      properties:
        airlineCode:
          type: string
          description: IATA code for airline.
          example: AA
        airlineName:
          type: string
          description: Airline name
          example: American Airlines
    AdditionalInfo:
      type: object
      title: AdditionalInfo
      description: Additional data need to be sent along with the custom field response.
      discriminator:
        propertyName: type
        mapping:
          VARIABLE: '#/components/schemas/Variable'
          EXPRESSION: '#/components/schemas/Expression'
      oneOf:
      - $ref: '#/components/schemas/Variable'
      - $ref: '#/components/schemas/Expression'
    VendorProgramType:
      type: string
      description: The type of the vendor program
      enum:
      - UA_PASS_PLUS
      - GENERIC_PROGRAM_TYPE
    PreSearchAnswers:
      type: object
      properties:
        answers:
          type: array
          items:
            $ref: '#/components/schemas/EntityAnswer'
        userEntitiesResponseId:
          type: string
    DoubleRangeWrapper:
      type: object
      title: DoubleRangeWrapper
      properties:
        dRange:
          $ref: '#/components/schemas/DoubleRange'
    CarPref:
      type: object
      title: CarPref
      description: Travel preferences related to car.
      properties:
        vendors:
          type: array
          description: A list of car vendors.
          items:
            $ref: '#/components/schemas/CarVendor'
        carTypes:
          type: array
          description: A list of types of car.
          items:
            $ref: '#/components/schemas/CarType'
        engineTypes:
          type: array
          description: A list of types of engine.
          items:
            $ref: '#/components/schemas/EngineType'
        transmissionTypes:
          type: array
          description: A list of types of transmission.
          items:
            $ref: '#/components/schemas/TransmissionSearchFilter'
        conditionalRates:
          type: array
          description: A list of conditional rates for rail.
          items:
            $ref: '#/components/schemas/ConditionalRate'
    FareRules:
      type: object
      description: The rules and restrictions associated with the fare.
      properties:
        baggagePolicy:
          $ref: '#/components/schemas/BaggagePolicy'
        cancellationPolicy:
          $ref: '#/components/schemas/CancellationPolicy'
        postDepartureCancellationPolicy:
          description: Information about the post departure cancellation policy.
          $ref: '#/components/schemas/CancellationPolicy'
        exchangePolicy:
          $ref: '#/components/schemas/ExchangePolicy'
        postDepartureExchangePolicy:
          description: Information about the post departure exchange policy.
          $ref: '#/components/schemas/ExchangePolicy'
        seatSelectionPolicy:
          $ref: '#/components/schemas/SeatSelectionRule'
        boardingPolicy:
          $ref: '#/components/schemas/BoardingPolicy'
        checkInPolicy:
          $ref: '#/components/schemas/CheckInPolicy'
        loungePolicy:
          $ref: '#/components/schemas/LoungePolicy'
        seatType:
          $ref: '#/components/schemas/SeatTypeInfo'
    CovidTestingAmenity:
      type: object
      title: CovidTestingAmenity
      description: Covid testing amenity properties.
      properties:
        displayText:
          type: string
          example: No COVID-19 test required
        covidTestingDescription:
          type: string
          example: A negative COVID-19 test is not required for this flight; check with the airline for possible destination requirements or other restrictions.
        covidTestingAttrDescription:
          type: string
    RazorpayVerificationInfoWrapper:
      type: object
      title: RazorpayVerificationInfoWrapper
      description: Wrapper for Razorpay verification Info.
      properties:
        razorPayVerificationInfo:
          $ref: '#/components/schemas/RazorpayVerificationInfo'
    ExistingLeg:
      type: object
      title: ExistingLeg
      example:
        index: 1
        remove: true
      properties:
        index:
          type: integer
          example: 1
          format: int32
          description: The index of the leg in the existing PNR which needs to be kept or removed(see remove field) during the exchange process with the following origin-destination information. For new legs leave empty (null). Fields origin, destination and date are required only if this leg is a new leg to be added.
        remove:
          type: boolean
          description: This should be set to true, if this leg is to be cancelled.
          example: true
    TaxBreakdown:
      type: array
      items:
        $ref: '#/components/schemas/Tax'
    CorporateInfo:
      type: object
      description: Corporate data to be collected during the search request workflow.
      required:
      - preSearchAnswers
      properties:
        preSearchAnswers:
          $ref: '#/components/schemas/PreSearchAnswers'
    PercentageWrapper:
      type: object
      title: PercentageWrapper
      properties:
        percentage:
          type: number
          format: double
    CompanyConfigSourceWrapper:
      type: object
      title: CompanyConfigSourceWrapper
      description: Wrapper for option source company config.
      properties:
        companyConfig:
          $ref: '#/components/schemas/CompanyConfigSource'
    AirIntermediateRevalidateItineraryRequest:
      type: object
      required:
      - searchId
      - itineraryId
      properties:
        searchId:
          type: string
          description: The unique `searchId` corresponding to the selected itinerary.
        itineraryId:
          type: string
          description: The selected `itineraryId` which you would like to validate.
    MultiAirports:
      type: object
      title: MultiAirports
      description: List of airports. All airports should belong to the same country.
      required:
      - airports
      properties:
        airports:
          type: array
          description: List of 3-letter airport IATA codes.
          items:
            type: string
            description: The airport code identifying a specific airport. For example, JFK or EWR.
            example: JFK
            pattern: ^[A-Z]{3}$
    AirRevalidateItineraryResponse:
      type: object
      properties:
        bookingId:
          type: string
          description: The booking ID for the booking.
          example: bookingid
        fareBreakDown:
          $ref: '#/components/schemas/BookingFareBreakdown'
        legPrices:
          type: array
          items:
            $ref: '#/components/schemas/LegPrice'
        perTravelerPrices:
          type: array
          items:
            $ref: '#/components/schemas/PerTravelerPrice'
        policyDetails:
          $ref: '#/components/schemas/PnrPolicyInfo'
        mcoIssuanceEligibility:
          description: It indicates whether an MCO can be issued for this ticket. It is dependent on the validating airline of the ticket.
          $ref: '#/components/schemas/McoIssuanceEligibility'
    BoardingPolicy:
      type: object
      description: Priority boarding information.
      required:
      - description
      properties:
        description:
          type: string
          description: Text describing the priority boarding policy.
          example: Priority boarding provided for free
    KnownTravelerNumber:
      type: object
      title: KnownTravelerNumber
      description: Information about the Known Traveler Number (KTN).
      required:
      - number
      - issueCountry
      properties:
        number:
          type: string
          example: '12345'
          x-pii: IDENTIFIER
        issueCountry:
          type: string
          example: US
    CallbackUrlVerificationInfo:
      type: object
      title: CallbackUrlVerificationInfo
      description: Callback URL to the source post successful verification by the supplier.
      properties:
        sourceCallbackUrl:
          type: string
          description: The callback URL to redirect to after successful verification.
          example: https://app.spotnana.com/flights/check-pnr-status
    PassengerCapacityAmenity:
      type: object
      title: PassengerCapacityAmenity
      description: Passenger capacity amenity properties.
      properties:
        displayText:
          type: string
          example: Standard passenger capacity
        passengerCapacityDescription:
          type: string
          example: Ticket sales are not limited for this flight
        passengerCapacityAttrDescription:
          type: string
          example: 'no'
    Tax:
      type: object
      title: Tax
      description: Tax details
      required:
      - amount
      properties:
        amount:
          $ref: '#/components/schemas/Money'
          description: Tax amount
        taxCode:
          type: string
          description: Tax code
          example: VAT
        percentage:
          type: number
          format: double
          description: Tax amount to total amount
          example: 9
    AirRestrictedFaresParamsWrapper:
      type: object
      title: AirRestrictedFaresParamsWrapper
      properties:
        airRestrictedFaresParams:
          $ref: '#/components/schemas/AirRestrictedFaresParams'
    TotalAmountWrapper:
      description: Wrapper for the total amount of a baggage fare.
      type: object
      title: TotalAmountWrapper
      properties:
        totalAmount:
          description: The total amount of a baggage fare.
          $ref: '#/components/schemas/BagFareInfo'
    LegPrice:
      type: object
      description: The fare breakdown per leg (if the information is available).
      properties:
        legId:
          type: string
          description: The leg ID.
          example: leg-id
        amount:
          description: 'The price breakdown of leg. If the price breakdown of leg is not available, price will

            denote the price of entire itinerary.

            '
          $ref: '#/components/schemas/FareAmount'
        travelerPrices:
          type: array
          items:
            $ref: '#/components/schemas/PerTravelerPrice'
          description: Price breakdown for each traveler type, if available.
        airlineFee:
          description: 'Total OB Fees for this leg. OB fees are generally charged by airlines in addition to the base ticket price.

            These fees can include service or credit card fees charged by the airline.

            '
          $ref: '#/components/schemas/Money'
        changeFee:
          description: Total change penalty applicable for this booking.
          $ref: '#/components/schemas/FareAmount'
    AnswerPair:
      type: object
      properties:
        item:
          type: string
          description: The option selected from the list of available choices.
        value:
          type: string
          description: The additional input provided (by the user) while selecting one of the options.
        description:
          type: string
          description: Description of the selected option.
    Department:
      type: object
      title: Department
      description: Department details.
      required:
      - id
      - name
      properties:
        id:
          $ref: '#/components/schemas/DepartmentId'
        name:
          type: string
          example: IT Department
        externalId:
          type: string
          description: External id of the department
          example: department-ext-id
        employeeCount:
          type: integer
          format: int32
          description: Count of employees in the department
          example: 57
    ChangeableFilter:
      type: string
      enum:
      - NO_CHANGEABLE_FILTER
      - CHANGEABLE_FLEXIBLE_REFUNDABLE
      - REFUNDABLE_WITH_PENALTY
      - REFUNDABLE_WITHOUT_PENALTY
      default: NO_CHANGEABLE_FILTER
      description: List of filters related to refund and change options for flights.
    NumStopsPref:
      type: object
      title: NumStopsPref
      description: Preferred number of stops.
      required:
      - numOfStops
      properties:
        numOfStops:
          type: integer
          format: int64
          example: 34
    MaskAmenityWrapper:
      type: object
      title: MaskAmenityWrapper
      properties:
        maskAmenity:
          $ref: '#/components/schemas/MaskAmenity'
    PreferredLocationLabel:
      type: string
      title: PreferredLocationLabel
      description: The label of preferred airport or rail station.
      enum:
      - HOME
      - WORK
      - OTHER
      example: HOME
    POSInfo:
      type: object
      description: Point of sale information
      required:
      - source
      properties:
        source:
          description: The third party source for the point of sale
          $ref: '#/components/schemas/ThirdPartySource'
        posDescriptor:
          type: stri

# --- truncated at 32 KB (271 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/spotnana/refs/heads/main/openapi/spotnana-air-api-openapi.yml