Spotnana Trip PNRs API

APIs to manage PNRs within trips.

OpenAPI Specification

spotnana-trip-pnrs-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Air Trip PNRs 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: Trip PNRs
  description: APIs to manage PNRs within trips.
  x-displayName: PNRs
paths:
  /v3/trips/{tripId}/pnrs:
    parameters:
    - name: tripId
      in: path
      description: Trip ID
      required: true
      schema:
        type: string
        example: '6926658168'
    post:
      tags:
      - Trip PNRs
      summary: Create PNR
      description: 'Create a new Passenger Name Record (PNR). A PNR represents a booking (air, hotel, rail, or car) made on the Spotnana platform.

        You can also use this endpoint to import bookings made from external sources into the Spotnana platform.

        '
      operationId: createPnrV3
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PnrData'
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EntityNonUUIDId'
                example:
                  id: 1234567890
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
  /v3/trips/{tripId}/pnrs/{pnrId}:
    parameters:
    - name: tripId
      in: path
      description: Trip ID
      required: true
      schema:
        type: string
        example: '6926658168'
    - name: pnrId
      in: path
      description: Pnr Id
      required: true
      schema:
        type: string
        example: '6926658168'
    get:
      tags:
      - Trip PNRs
      summary: Get PNR
      description: This endpoint gets PNR for a given trip ID and PNR ID.
      operationId: getPnrV3
      x-pii-supported: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PnrData'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
    put:
      tags:
      - Trip PNRs
      summary: Update PNR
      description: This endpoint updates PNR by ID.
      operationId: updatePnrV3
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PnrData'
      responses:
        '204':
          description: Updated Successfully
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /v3/trips/{tripId}/pnrs/{pnrId}/remarks:
    parameters:
    - name: tripId
      in: path
      description: Trip ID
      required: true
      schema:
        type: string
        example: 6926658168
    - name: pnrId
      in: path
      description: PNR ID
      required: true
      schema:
        type: string
        example: 6926658168
    post:
      tags:
      - Trip PNRs
      summary: Add Remark
      description: This endpoint provided adding third party remarks to the given PNR.
      operationId: addRemarkV3
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddRemarksRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AddRemarksResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /v3/trips/{tripId}/pnrs/{pnrId}/finalize:
    parameters:
    - name: tripId
      in: path
      description: Trip Id
      required: true
      schema:
        type: string
        example: '6926658168'
    - name: pnrId
      in: path
      description: Pnr Id
      required: true
      schema:
        type: string
        example: '6926658168'
    post:
      tags:
      - Trip PNRs
      summary: Finalize the given pnr.
      description: This endpoint changes the metadata of PNR to finalized and triggers supplier actions if required.
      operationId: finalizePnr
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FinalizeRequest'
      responses:
        '200':
          description: OK
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /v3/trips/{tripId}/pnrs/{pnrId}/suspend:
    parameters:
    - name: tripId
      in: path
      description: Trip Id
      required: true
      schema:
        type: string
        example: '6926658168'
    - name: pnrId
      in: path
      description: Pnr Id
      required: true
      schema:
        type: string
        example: '6926658168'
    post:
      tags:
      - Trip PNRs
      summary: Suspend the given pnr.
      description: 'This endpoint suspends the PNR, transitioning it into a read-only state.

        Once suspended, updates via OBT will be restricted.

        This API serves various use cases, such as price optimization and rebooking.

        '
      operationId: suspendPnr
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SuspendRequest'
      responses:
        '200':
          description: OK
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /v3/trips/{tripId}/pnrs/{pnrId}/cancel:
    parameters:
    - name: tripId
      in: path
      description: Trip ID
      required: true
      schema:
        type: string
        example: 6926658168
    - name: pnrId
      in: path
      description: PNR ID
      required: true
      schema:
        type: string
        example: 6926658168
    post:
      tags:
      - Trip PNRs
      summary: Cancel PNR
      description: This endpoint cancels PNR or part of PNR object.In case of partial PNR cancel we can cancel journey/ticket.
      operationId: cancelPnrV3
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PnrCancelRequest'
      responses:
        '200':
          description: OK
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /v2/trips/{tripId}/pnrs/{pnrId}/cancellation-details:
    parameters:
    - name: tripId
      in: path
      description: Trip ID.
      required: true
      schema:
        type: string
        example: '1234567890'
    - name: pnrId
      in: path
      description: PNR ID.
      required: true
      schema:
        type: string
        example: '6926658168'
    get:
      tags:
      - Trip PNRs
      summary: Get cancellation details
      description: This endpoint gets cancellation details for a given trip ID and PNR ID.
      operationId: getCancellationDetails
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PnrCancellationDetails'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /v2/trips/{tripId}/pnrs/{pnrId}/download-invoice:
    parameters:
    - name: tripId
      in: path
      description: Trip Id
      required: true
      schema:
        type: string
        example: '6926658168'
    - name: pnrId
      in: path
      description: Pnr Id
      required: true
      schema:
        type: string
        example: '2643222286'
    post:
      tags:
      - Trip PNRs
      summary: Download PNR invoice
      description: This endpoint downloads invoice on demand for a given trip ID and PNR ID.
      operationId: downloadInvoice
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DownloadInvoiceResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /v2/pnrs/{pnrId}/process-approval:
    parameters:
    - name: pnrId
      in: path
      description: Pnr Id
      required: true
      schema:
        type: string
      example: '6926658168'
    post:
      tags:
      - Trip PNRs
      summary: Process the PNR approval
      description: Approve or decline a PNR.
      operationId: processPnrApproval
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ProcessPnrApprovalRequest'
      responses:
        '200':
          description: OK
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
  /v2/pnrs:
    parameters:
    - name: externalId
      in: query
      description: External ID
      required: true
      schema:
        type: string
      example: external-pnr-id
    get:
      tags:
      - Trip PNRs
      summary: Get PNR by external Id
      description: This endpoint gets PNR Id and Trip Id for a given external Id.
      operationId: getPnrByExternalId
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PnrResponseOnExternalId'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /v2/pnrs/search:
    parameters:
    - name: searchText
      in: query
      description: The Source Pnr or Ticket Number or Vendor Confirmation to be searched
      required: true
      schema:
        type: string
        example: MDIB5C
    - name: inputType
      in: query
      description: The type of Search text,i.e, SOURCE_PNR or TICKET_NUMBER or VENDOR_CONFIRMATION
      required: true
      schema:
        type: string
        enum:
        - SOURCE_PNR
        - TICKET_NUMBER
        - VENDOR_CONFIRMATION
        example: SOURCE_PNR
    get:
      tags:
      - Trip PNRs
      summary: Find Pnr details like BookingId and TripId
      description: This API gets Pnr details for a given Source Pnr/ Ticket Number/ Vendor Confirmation.
      operationId: pnrSearch
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PnrSearchResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
components:
  schemas:
    RequestedByDetails:
      title: RequestedByDetails
      type: object
      description: Information about the requester of the trip.
      required:
      - pnrRequestedBy
      properties:
        pnrRequestedBy:
          type: string
          description: Name of the requester
          example: Peter
          x-pii: SENSITIVE
        requestedByUserOrgId:
          $ref: '#/components/schemas/UserOrgId'
    CancellationRequestStatus:
      type: string
      description: 'Status of in progress cancellation request

        CANCELLATION_IN_PROGRESS - Cancellation request is in progress via OBT

        CANCELLATION_BY_AGENT_REQUESTED - Cancellation request is in progress via agent

        '
      enum:
      - CANCELLATION_IN_PROGRESS
      - CANCELLATION_BY_AGENT_REQUESTED
      example: CANCELLATION_IN_PROGRESS
    OfficeIdWrapper:
      type: object
      title: OfficeIdWrapper
      properties:
        officeId:
          $ref: '#/components/schemas/OfficeId'
    AirConditioning:
      type: string
      title: AirConditioning
      description: Whether air conditioning is available.
      enum:
      - UNKNOWN_AC
      - AC_AVAILABLE
      - AC_NOT_AVAILABLE
      example: AC_AVAILABLE
    AncillaryLegIndex:
      type: integer
      description: 'Index of leg to which this ancillary belongs. If an ancillary belongs to all legs,

        this index should be set to -1

        '
      format: int32
      example: 0
      minimum: -1
    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
    RailRefundOption:
      type: object
      title: RailRefundOption
      description: Refund options for this rail booking.
      required:
      - refundId
      - refundRateInfo
      properties:
        refundId:
          type: string
          description: Refund option id.
          example: '1234567890'
        refundRateInfo:
          description: Rail refund fare info.
          $ref: '#/components/schemas/RailRefundRateInfo'
        legs:
          type: array
          description: List of leg indices for the refund option.
          items:
            type: integer
            format: int32
            example: 1
    AirCancellationOption:
      type: object
      title: AirCancellationOption
      description: Details like fare breakup for a cancellation option.
      required:
      - fareInfo
      properties:
        cancellationType:
          description: Cancellation type like VOID, REFUND, etc.
          $ref: '#/components/schemas/AirCancellationType'
        fareInfo:
          description: Fare breakup for cancellation option.
          $ref: '#/components/schemas/AirFareInfo'
        offerExpiryInfo:
          description: Cancellation offer expiry datetime in UTC.
          $ref: '#/components/schemas/OfferExpiryInfo'
        optionId:
          description: Unique id for this cancellation option.
          type: string
          example: '1'
    CancellationPolicy3:
      type: object
      title: CancellationPolicy
      description: Cancellation policy info.
      required:
      - policy
      properties:
        policy:
          type: string
          description: Indicates whether the booking is refundable or not.
          enum:
          - UNKNOWN
          - NON_REFUNDABLE
          - FREE_CANCELLATION_UNTIL
          - PARTIALLY_REFUNDABLE
          example: NON_REFUNDABLE
        deadline:
          $ref: '#/components/schemas/DateTimeLocal'
          description: 'The local date and time of the final deadline for cancellation, if policy type is

            FREE_CANCELLATION_UNTIL or PARTIALLY_REFUNDABLE.

            '
        deadlineUtc:
          $ref: '#/components/schemas/DateTimeOffset'
          description: 'The UTC date and time of the final deadline for cancellation, if policy type is

            FREE_CANCELLATION_UNTIL or PARTIALLY_REFUNDABLE.

            '
        durationBeforeArrivalDeadline:
          $ref: '#/components/schemas/Duration'
          description: 'The duration before arrival of the final deadline for cancellation, if policy type is

            `FREE_CANCELLATION_UNTIL` or `PARTIALLY_REFUNDABLE`.

            '
        amount:
          $ref: '#/components/schemas/Money'
        currentlyRefundable:
          type: string
          description: 'Refundable status that is currently applicable in the hotel timezone.

            FALSE even if it is partially refundable.

            '
          enum:
          - 'TRUE'
          - 'FALSE'
        cancellableStatus:
          type: string
          description: 'Whether the booking can be cancelled.

            UNSPECIFIED and CANCELLABLE are treated as cancellable.

            Some suppliers (e.g. Premier Inn) block cancellation on non-refundable rates.

            '
          enum:
          - CANCELLABLE_STATUS_UNSPECIFIED
          - CANCELLABLE
          - NOT_CANCELLABLE
    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
    LimoItem:
      type: object
      title: LimoItem
      description: This describes the limoItem related to a particular itemGroup.
      required:
      - itemType
      properties:
        itemType:
          type: string
        pickupDateTime:
          description: Check in date time.
          $ref: '#/components/schemas/DateTimeLocal'
        dropOffDateTime:
          description: Check out date time.
          $ref: '#/components/schemas/DateTimeLocal'
        pickupLocation:
          description: Pick up location.
          $ref: '#/components/schemas/CarLocation'
        dropOffLocation:
          description: Drop off location.
          $ref: '#/components/schemas/CarLocation'
        limoType:
          description: Car specific details.
          $ref: '#/components/schemas/LimoType'
    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'
    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
    TripMetadata:
      title: TripMetadata
      description: Metadata for the trip
      type: object
      properties:
        hasTripOverride:
          type: boolean
          description: Indicates if the trip has any profile overrides.
          example: true
        preferredCurrency:
          type: string
          description: The currency to be used for the trip.
          example: USD
        tripContacts:
          type: array
          items:
            $ref: '#/components/schemas/TripContact'
        tripCommunicationPreferences:
          $ref: '#/components/schemas/TripCommunicationPreferences'
    Summary:
      type: object
      title: Summary
      properties:
        headline:
          type: string
          description: Summary headline
        summaryDescription:
          type: string
          description: Summary description
    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'
    ThirdPartyHotelCode:
      title: ThirdPartyHotelCode
      type: object
      required:
      - hotelCode
      - hotelCodeType
      properties:
        hotelCode:
          type: string
          description: Third party hotel code.
        hotelCodeType:
          type: string
          description: Type of the third party.
          enum:
          - SABRE_CSL
          - SABRE_TN
          - EXPEDIA_RAPID
          - MARRIOTT
          - GIATA
          - BCD
    CarSearchInfo:
      title: CarSearchInfo
      type: object
      description: Car search information
      required:
      - pickup
      - dropOff
      properties:
        pickup:
          $ref: '#/components/schemas/SearchParams'
        dropOff:
          $ref: '#/components/schemas/SearchParams'
        renterAge:
          type: integer
          description: Age of the renter
          example: 30
        citizenCountryCode:
          type: string
          description: Citizen code of the renter
          example: US
        pickupCountryCode:
          type: string
          description: Country code of the pick up location
          example: US
        loyaltyCode:
          type: array
          description: Loyalty codes to be applied
          items:
            $ref: '#/components/schemas/CarLoyaltyCode'
    HotelRateType:
      type: string
      title: HotelRate Type
      enum:
      - PUBLISHED
      - CORPORATE
      - SPOTNANA
      - REGULAR
      - AAA
      - AARP
      - SENIOR_CITIZEN
      - GOVERNMENT
      - MILITARY
      - MEMBERSHIP
      - BEST_AVAILABLE_RATE
      - TMC
    HotelRoomMeal:
      type: object
      title: HotelRoomMeal
      description: Meal details for the room.
      required:
      - mealPlan
      properties:
        mealsIncluded:
          type: array
          items:
            $ref: '#/components/schemas/HotelRoomMealsIncluded'
        mealPlan:
          $ref: '#/components/schemas/HotelRoomMealType'
          description: Meal type added with the room booked.
    TicketIncompleteReason:
      type: string
      description: Reason for ticket being incomplete
      enum:
      - UNKNOWN_REASON
      - SYS_TICKET
      - MISSING_MARKUP_INFO
      - DISABLED_PCC
      - MISSING_REFUND_INFO
      example: SYS_TICKET
    UnusedCreditFop:
      type: object
      title: UnusedCreditFop
      description: Form of payment information associated with an unused credit.
      properties:
        paymentMethod:
          $ref: '#/components/schemas/PaymentMethod'
          description: Payment method used for the original booking.
        paymentSourceType:
          $ref: '#/components/schemas/PaymentSourceType'
          description: Type of payment source used.
        card:
          $ref: '#/components/schemas/Card'
          description: Card information if the payment source type is a card.
    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
    InvoiceDocumentType:
      title: InvoiceDocumentType
      description: Type of document generated for an invoice.
      type: string
      enum:
      - INVOICE
      - RECEIPT
      example: INVOICE
    BuyerInfo:
      type: object
      title: BuyerInfo
      description: Buyer of items mentioned in the invoice.
      required:
      - name
      - address
      properties:
        name:
          description: Name of buyer, usually a traveler.
          type: string
          example: John Doe
          x-pii: SENSITIVE
        address:
          description: Address of buyer. Could be office, legal entity or org address.
          type: string
          example: '115 Broadway Suite 04-101,

            New York, NY 10006'
          x-pii: SENSITIVE
        taxId:
          description: Tax number for the seller, for ex GSTN in India
          type: string
          example: TXG239023092
          deprecated: true
          x-sunset: '2026-07-01'
        idInfo:
          type: array
          description: The seller ID information.
          items:
            $ref: '#/components/schemas/IdInfo'
    LimoVendorInfo:
      type: object
      title: LimoVendorInfo
      description: Information about limo vendor.
      required:
      - name
      properties:
        code:
          type: string
          description: Vendor code
          example: ZE
        name:
          type: string
          description: Vendor name
          example: HERTZ
        email:
          type: string
          description: Vendor Email
          example: mail@mail.com
    FlightSeatStatus:
      type: string
      description: Status of assigned seat.
      enum:
      - CONFIRMED
      - PENDING
      - UNKNOWN
      - CANCELLED
      example: CONFIRMED
    TaxBreakdown:
      type: array
      items:
        $ref: '#/components/schemas/Tax'
    SuspendReason:
      type: string
      description: Reason for suspending the pnr
      enum:
      - AIR_PRICE_OPTIMIZATION
      - EXCHANGE
      - GDS_EXCHANGE
      example: AIR_PRICE_OPTIMIZATION
    ScheduleChangeRefundInfo:
      type: object
      title: ScheduleChangeRefundInfo
      description: Refund information if applicable for this ticket
      properties:
        isRefundAllowed:
          type: boolean
          description: Whether refund is allowed if user denies schedule change/cancels the flight
        refundWaiverCode:
          type: string
          description: Waiver code for refund if applicable
        exchangeWaiverCode:
          type: string
          description: Waiver code for exchange if available
    CancellationPolicy1:
      type: object
      title: CancellationPolicy
      properties:
        cancellationPolicy:
          $ref: '#/components/schemas/AirPolicy'
    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'
    TravelerInfo:
      title: TravelerInfo
      type: object
      description: Traveler air booking info
      required:
      - travelerIdx
      - booking
      properties:
        airVendorCancellationInfo:
          $ref: '#/components/schemas/AirVendorCancellationInfo'
        createdMcos:
          type: array
          description: Created Mcos
          items:
            $ref: '#/components/schemas/CreatedMco'
        travelerIdx:
          type: integer
          description: Index of traveler in travelers list to which this info belongs
          format: int32
          example: 0
          minimum: 0
        userId:
          $ref: '#/components/schemas/UserId'
          description: User ID of traveler to which this TravelerInfo object belongs
        paxType:
          $ref: '#/components/schemas/PassengerType'
        paxCurrentAge:
          $ref: '#/components/schemas/PassengerAge'
          description: Current age of the passenger.
          x-pii: SENSITIVE
        tickets:
          type: array
          description: Tickets belonging to this traveler
          items:
            $ref: '#/components/schemas/Ticket'
        boardingPass:
          type: array
          description: Boarding pass details.
          items:
            $ref: '#/components/schemas/BoardingPass'
        booking:
          description: Info about items booked for this traveler eg. flights, seats, etc.
          $ref: '#/components/schemas/Booking'
        appliedCredits:
          type: array
          description: Information about credit redeemed in booking.
          items:
            $ref: '#/components/schemas/AppliedCreditInfo'
        specialServiceRequestInfos:
          type: array
          description: List of all the Special Service Requests associated with the traveler.
          items:
            $ref: '#/components/schemas/SpecialServiceRequestInfoDetail'
        lastConfirmedTickets:
          type: array
          description: List of tickets from last confirmed version. These will only be set for cancelled PNRs.
          items:
            $ref: '#/components/schemas/Ticket'
        nameNumber:
          type: string
          description: Name number associated to the traveler like 1.1, 2.1 from Sabre
          example: 1.1
    TravelerLegalEntity:
      type: object
      title: TravelerLegalEntity
      description: Legal entity of the traveler
      properties:
        id:
          type: string
          description: Legal entity ID
        name:
          type: string
          description: Name of the legal entity
          example: Spotnana India
        ein:
          type: string
          description: EIN of the traveler
        externalId:
          type: string
          description: External Id of the legal entity
          example: abcd
        companySpecifiedAttributes:
          type: array
          items:
            $ref: '#/components/schemas/CompanySpecifiedAttributeLegalEntity'
        countryCode:
          type: string
          description: 2-letter ISO country code of the legal entity
          example: IN
        billingCurrency:
          type: string
          description: Billing currency for the legal entity.
          example: USD
        registeredName:
          type: string
          description: 'The official name of this legal entity as registered with local tax authorities.

            '
          example: Spotnana India Private Limited
        registeredEmail:
          type: string
          description: 'The primary email (or alias) u

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