Spotnana Hotel API

These endpoints provide comprehensive functionality for managing hotel bookings. They enable users to search for hotels, check room rates and availability, create and modify bookings, and handle cancellations and rebooking.

OpenAPI Specification

spotnana-hotel-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Air Hotel 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: Hotel
  description: "These endpoints provide comprehensive functionality for managing hotel bookings. They enable users to search for hotels, check room rates and availability, create and modify bookings, and handle cancellations and rebooking. \n"
paths:
  /v2/hotel/search:
    post:
      tags:
      - Hotel
      summary: Get hotel search results
      description: Get all available hotels for the requested search parameters.
      operationId: hotelSearch
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/HotelSearchRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HotelSearchResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /v2/hotel/details:
    post:
      tags:
      - Hotel
      summary: Get hotel details
      description: Get details for a specific hotel.
      operationId: hotelDetails
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/HotelDetailsRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HotelDetailsResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /v2/hotel/price-check:
    post:
      tags:
      - Hotel
      summary: Verify hotel price
      description: 'Checks if the previously selected hotel price has been modified. To indicate the change in hotel price, the `priceChange` field in the response will be set to `true` and the `price`  object will contain the latest hotel price. If the price remains unchanged, the `priceChange` field will be set as `false` and the `price` object will contain the original price.

        '
      operationId: hotelPriceCheck
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/HotelPriceCheckRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HotelPriceCheckResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /v2/hotel/validate-rebooking:
    post:
      tags:
      - Hotel
      summary: Validate rebooking for price optimization
      description: "Validates if a hotel rebooking can be performed for price optimization purpose.\nThe Source PNR ID provided in the request will be checked if it's eligible for rebooking. \nIn the response, if `isValid` is `true` then users can proceed to checkout flow, which cancels the existing Source PNR \nand creates a new PNR to save booking cost.\n"
      operationId: hotelValidateRebooking
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/HotelValidateRebookingRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HotelValidateRebookingResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /v2/hotel/create-pnr:
    post:
      tags:
      - Hotel
      summary: Create a new hotel booking
      description: Creates a new hotel booking for the given request parameters.
      operationId: hotelCreatePnr
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/HotelCreatePnrRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HotelCreatePnrResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /v2/hotel/pnrs/{pnrId}/cancel-pnr:
    parameters:
    - name: pnrId
      in: path
      description: Pnr Id of the Pnr to be cancelled.
      required: true
      schema:
        type: string
      example: 4974a66b
    post:
      tags:
      - Hotel
      summary: Cancel hotel pnr
      description: This endpoint deletes a pnr by pnrID.
      operationId: hotelCancelPnr
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/HotelCancelPnrRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HotelCancelPnrResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /v2/hotel/pnrs/{pnrId}/modify-details:
    parameters:
    - name: pnrId
      in: path
      description: PNR ID of the hotel booking for which the details need to be modified.
      required: true
      schema:
        type: string
      example: 4974a66b
    post:
      tags:
      - Hotel
      summary: Modify hotel details
      description: "Modify the details of an existing hotel booking. \nThis API displays the list of modifications available for the same hotel. \nCurrently, the details such as occupancy date and room type can be modified. \nTo confirm the selected changes, use the **Modify hotel booking** API.\n"
      operationId: hotelModifyDetails
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/HotelModifyDetailsRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HotelDetailsResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /v2/hotel/pnrs/{pnrId}/modify-book:
    parameters:
    - name: pnrId
      in: path
      description: PNR ID of the hotel booking that needs to be modified.
      required: true
      schema:
        type: string
      example: 4974a66b
    post:
      tags:
      - Hotel
      summary: Modify hotel booking
      description: 'Modify an existing hotel booking based on the request parameters.

        This API is used to confirm the requested changes for the booking.

        '
      operationId: hotelModifyBooking
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/HotelModifyBookingRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HotelModifyBookingResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /v2/hotel/ancillaries:
    post:
      tags:
      - Hotel
      summary: Get hotel ancillaries
      description: 'Retrieves available ancillaries (add-ons, extras, services) for a selected hotel booking. Ancillaries may include breakfast, parking, early check-in, late checkout, spa services, and other optional services.

        '
      operationId: hotelAncillaries
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/HotelAncillariesRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HotelAncillariesResponse'
        '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
    HotelCancelPnrRequest:
      type: object
      title: Hotel Cancel Pnr Request
      description: Request object for cancelling a hotel pnr.
      properties:
        customFieldV3Responses:
          type: array
          description: Custom field responses for the booking.
          items:
            $ref: '#/components/schemas/CustomFieldV3Response'
        postPaymentVerificationInfo:
          $ref: '#/components/schemas/PostPaymentVerificationInfo'
        bookingPaymentDetails:
          $ref: '#/components/schemas/BookingPaymentDetails'
    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'
    RewardPointsEarned:
      type: object
      title: Reward Points Earned
      description: Details reward points earned.
      required:
      - rewardPointsType
      - totalPointsEarned
      - conversionMultiplier
      properties:
        rewardPointsType:
          type: string
          enum:
          - QBR
          - QFF
          description: Type of reward points.
        totalPointsEarned:
          type: number
          format: double
          description: Total points that will be credited.
        conversionMultiplier:
          type: number
          format: double
          description: Multiplier for converting points.
    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
    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'
    HotelRateType:
      type: string
      title: HotelRate Type
      enum:
      - PUBLISHED
      - CORPORATE
      - SPOTNANA
      - REGULAR
      - AAA
      - AARP
      - SENIOR_CITIZEN
      - GOVERNMENT
      - MILITARY
      - MEMBERSHIP
      - BEST_AVAILABLE_RATE
      - TMC
    HotelDetailsResponse:
      type: object
      title: Hotel Details Response
      description: Response object for hotel details.
      required:
      - hotelSpec
      - rooms
      - occupancyDates
      properties:
        hotelSpec:
          $ref: '#/components/schemas/HotelSpec'
          description: Specification of the hotel.
        rooms:
          type: array
          description: List of available rooms in the hotel.
          items:
            $ref: '#/components/schemas/HotelRoomData'
        bookedRooms:
          type: array
          description: List of booked rooms in the hotel, present only as part of modification details response.
          items:
            $ref: '#/components/schemas/HotelRoomData'
        occupancyDates:
          $ref: '#/components/schemas/OccupancyDates'
          description: Occupancy values and dates for the hotel details.
        rateStatistics:
          $ref: '#/components/schemas/HotelRateStatistics'
          description: Statistical information about the hotel rates.
        showOnlyBaseFare:
          type: boolean
          description: Flag to indicate if only the base fare should be shown.
        preferences:
          type: array
          description: List of user preferences.
          items:
            $ref: '#/components/schemas/Preference'
        termsAndConditions:
          type: array
          description: List of terms and conditions applicable to the booking.
          items:
            $ref: '#/components/schemas/TermsAndConditions'
        ancillaries:
          type: array
          description: List of available ancillaries that can be booked along with the hotel room.
          items:
            $ref: '#/components/schemas/HotelAncillary'
    RazorpayVerificationInfoWrapper:
      type: object
      title: RazorpayVerificationInfoWrapper
      description: Wrapper for Razorpay verification Info.
      properties:
        razorPayVerificationInfo:
          $ref: '#/components/schemas/RazorpayVerificationInfo'
    TaxBreakdown:
      type: array
      items:
        $ref: '#/components/schemas/Tax'
    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'
    HotelPropertyEnum:
      type: string
      enum:
      - ALL_SUITE
      - ALL_INCLUSIVE_RESORT
      - APARTMENT
      - BED_AND_BREAKFAST
      - CABIN_OR_BUNGALOW
      - CAMPGROUND
      - CHALET
      - CONDOMINIUM
      - CONFERENCE_CENTER
      - CORPORATE_BUSINESS_TRANSIENT
      - CRUISE
      - EXTENDED_STAY
      - GUEST_FARM
      - GUEST_HOUSE_LIMITED_SERVICE
      - HEALTH_SPA
      - HOLIDAY_RESORT
      - HOSTEL
      - HOTEL
      - INN
      - LODGE
      - MONASTERY
      - MOTEL
      - RANCH
      - RESIDENTIAL_APARTMENT
      - RESORT
      - TENT
      - VACATION_HOME
      - VILLA
      - WILDLIFE_RESERVE
      - CASTLE
      - GOLF
      - PENSION
      - SKI
      - SPA
      - BOATEL
      - HISTORICAL
      - RECREATIONAL_VEHICLE_PARK
      - CHARM_HOTEL
      - OTHER
    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
    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'
    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
    NumStopsPref:
      type: object
      title: NumStopsPref
      description: Preferred number of stops.
      required:
      - numOfStops
      properties:
        numOfStops:
          type: integer
          format: int64
          example: 34
    PreferredLocationLabel:
      type: string
      title: PreferredLocationLabel
      description: The label of preferred airport or rail station.
      enum:
      - HOME
      - WORK
      - OTHER
      example: HOME
    ItemType:
      type: string
      description: Type of payment item eligible for this fop rule
      enum:
      - SERVICE_FEE
      - TRAVEL_TICKET
      - SEAT
      - BAGGAGE
      - EARLY_BIRD
      example: SEAT
    CommonPolicyInfo:
      type: object
      title: Policy Information
      description: 'Includes detailed information about a policy, such as its unique identifier, type, name, rules, version, and approval type.

        '
      required:
      - id
      - policyType
      - policyName
      - version
      - approvalType
      properties:
        id:
          $ref: '#/components/schemas/EntityId'
          description: Unique identifier for the policy.
        policyType:
          $ref: '#/components/schemas/PolicyType'
          description: Type of policy.
        policyName:
          type: string
          description: Name of the policy.
        ruleResultInfos:
          type: array
          description: Information about the policy rules.
          items:
            $ref: '#/components/schemas/PolicyRuleResultInfo'
        version:
          type: integer
          description: Version of the policy.
        approvalType:
          $ref: '#/components/schemas/ApprovalType'
          description: Type of approval for the policy.
    HotelSearchMetadata:
      type: object
      title: Hotel Search Metadata
      description: Includes metadata for a hotel search.
      required:
      - availableHotelChains
      - showOnlyBaseFare
      properties:
        availableHotelChains:
          type: array
          description: A list of available hotel chains.
          items:
            $ref: '#/components/schemas/HotelChain'
        rateStatistics:
          $ref: '#/components/schemas/HotelRateStatistics'
        showOnlyBaseFare:
          type: boolean
          example: false
          description: Indicates if only base fare should be shown.
        sessionId:
          type: string
          description: Unique session identifier for the search.
    PreferredRailStation:
      type: object
      title: PreferredRailStation
      description: Rail station preferred by traveler.
      required:
      - stationCode
      - label
      properties:
        stationName:
          type: string
          description: Rail station name.
          example: Chicago Union Station
        stationCode:
          type: string
          description: Rail station code.
          example: CHI
        cityName:
          type: string
          description: Name of city where the rail station is located.
          example: Chicago
        countryCode:
          type: string
          description: Alpha-2 country code where the rail station is located.
        label:
          $ref: '#/components/schemas/PreferredLocationLabel'
    HotelAdditionalDetailType:
      title: HotelAdditionalDetailType
      type: string
      enum:
      - ADDITIONAL_DETAIL_TYPE_UNKNOWN
      - RATE_DESCRIPTION
      - PROPERTY_DESCRIPTION
      - PROPERTY_LOCATION
      - ROOM_INFORMATION
      - GUARANTEE_INFORMATION
      - DEPOSIT_INFORMATION
      - CANCELLATION_INFORMATION
      - CHECK_IN_CHECK_OUT_INFORMATION
      - EXTRA_CHARGE_INFORMATION
      - TAX_INFORMATION
      - SERVICE_CHARGE_INFORMATION
      - PACKAGE_INFORMATION
      - COMMISSION_INFORMATION
      - MISCELLANEOUS_INFORMATION
      - PROMOTIONAL_INFORMATION
      - INCLUSION_INFORMATION
      - AMENITY_INFORMATION
      - LATE_ARRIVAL_INFORMATION
      - LATE_DEPARTURE_INFORMATION
      - ADVANCED_BOOKING_INFORMATION
      - EXTRA_PERSON_INFORMATION
      - AREAS_SERVED
      - ONSITE_FACILITIES_INFORMATION
      - OFFSITE_FACILITIES_INFORMATION
      - ONSITE_SERVICES_INFORMATION
      - OFFSITE_SERVICES_INFORMATION
      - EXTENDED_STAY_INFORMATION
      - CORPORATE_BOOKING_INFORMATION
      - BOOKING_GUIDELINES
      - GOVERNMENT_BOOKING_POLICY
      - GROUP_BOOKING_INFORMATION
      - RATE_DISCLAIMER_INFORMATION
      - VISA_TRAVEL_REQUIREMENT_INFORMATION
      - SECURITY_INFORMATION
      - ONSITE_RECREATIONAL_ACTIVITIES_INFORMATION
      - OFFSITE_RECREATIONAL_ACTIVITIES_INFORMATION
      - GENERAL_MEETING_PLANNING_INFORMATION
      - GROUP_MEETING_PLANNING_INFORMATION
      - CONTRACT_NEGOTIATED_BOOKING_INFORMATION
      - TRAVEL_INDUSTRY_BOOKING_INFORMATION
      - MEETING_ROOM_DESCRIPTION
      - PET_POLICY_DESCRIPTION
      - MEAL_PLAN_DESCRIPTION
      - FAMILY_PLAN_DESCRIPTION
      - CHILDREN_INFORMATION
      - EARLY_CHECKOUT_DESCRIPTION
      - SPECIAL_OFFERS_DESCRIPTION
      - CATERING_DESCRIPTION
      - ROOM_DECOR_DESCRIPTION
      - OVERSOLD_POLICY_DESCRIPTION
      - LAST_ROOM_AVAILABILITY_DESCRIPTION
      - ROOM_TYPE_UPGRADE_DESCRIPTION
      - DRIVING_DIRECTIONS
      - DRIVING_DIRECTIONS_FROM_THE_NORTH
      - DRIVING_DIRECTIONS_FROM_THE_SOUTH
      - DRIVING_DIRECTIONS_FROM_THE_EAST
      - DRIVING_DIRECTIONS_FROM_THE_WEST
      - SURCHARGE_INFORMATION
      - MINIMUM_STAY_INFORMATION
      - MAXIMUM_STAY_INFORMATION
      - CHECK_IN_POLICY
      - CHECK_OUT_POLICY
      - EXPRESS_CHECK_IN_POLICY
      - EXPRESS_CHECK_OUT_POLICY
      - FACILITY_RESTRICTIONS
      - CUSTOMS_INFORMATION_FOR_MATERIAL
      - SEASONS
      - FOOD_AND_BEVERAGE_MINIMUMS_FOR_GROUPS
      - DEPOSIT_POLICY_FOR_MASTER_ACCOUNT
      - DEPOSIT_POLICY_FOR_RESERVATIONS
      - RESTAURANT_SERVICES
      - SPECIAL_EVENTS
      - CUISINE_DESCRIPTION
      - KEY_COLLECTION_INFO
      - IMPORTANT_INFO
    LegalEntityId:
      type: object
      title: LegalEntityId
      description: The ID of the legal entity.
      required:
      - id
      properties:
        id:
          type: string
          example: fc1ccbce-8413-4fe9-b233-a324dfbe7421
    Variable:
      type: object
      title: Variable
      description: Variable defining the additional value to be sent along with custom field response.
      required:
      - type
      - name
      properties:
        type:
          type: string
          example: VARIABLE
          default: VARIABLE
        name:
          $ref: '#/components/schemas/VariableName'
    Int32RangeWrapper:
      type: object
      title: Int32RangeWrapper
      properties:
        iRange:
          $ref: '#/components/schemas/Int32Range'
    HotelCancellationPolicy:
      type: object
      title: HotelCancellationPolicy
      description: Cancellation policy for the PNR
      properties:
        refundable:
          type: string
          description: Is refundable or not
          enum:
          - UNKNOWN
          - 'TRUE'
          - 'FALSE'
          example: 'TRUE'
        terms:
          type: array
          items:
            $ref: '#/components/schemas/CancellationPolicyTerm'
        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
    HotelBrand:
      type: object
      title: HotelBrand
      description: The brand of hotel.
      properties:
        brandCode:
          type: string
          description: The code of hotel brand.
          example: HY
        brandName:
          type: string
          description: The name of hotel brand.
          example: Global Hytt Corp.
    FareComponent:
      type: string
      description: Fare component eligible for this fop rule
      enum:
      - BASE
      - TAX
      example: BASE
    PolicyTakeApprovalActionWrapper:
      type: object
      title: PolicyTakeApprovalActionWrapper
      properties:
        takeApproval:
          $ref: '#/components/schemas/PolicyTakeApprovalAction'
    Credit:
      type: object
      title: Credit
      required:
      - ticketNumber
      - ticketType
      - sourcePnr
      - totalFare
      - passengerName
      - segmentsAvailable
      - type
      - airlineInfo
      - traveler
      - source
      - unusedCreditPcc
      - pnrOwningPcc
      properties:
        type:
          type: string
          description: Payment source type. Should be set to CREDIT for unused credit details.
        pnrOwningPcc:
          type: string
          description: PCC the PNR was created on.
        unusedCreditPcc:
          type: string
          description: PCC the credit was issued on.
        departureCountry:
          type: string
          description: 3 letter country code of the departure country associated with the original ticket.
          example: USA
        arrivalCountry:
          type: string
          description: 3 letter country code of the arrival country associated with the original ticket.
          example: USA
        ticketType:
          type: string
          description: Type of credit.
          enum:
          - TICKET_TYPE_UNKNOWN
          - ETICKET
          - MCO
        departureDate:
          description: Date for the departure of the first flight associated with the unused credit.
          $ref: '#/components/schemas/DateTimeOffset'
        segmentsAvailable:
          type: string
          description: Whether all segments are unused or some have already been used.
          enum:
          - UNKNOWN
          - ALL_OPEN
          - PARTIAL
          - OTHER
        traveler:
          description: Information about the traveler for which the credit should be redeemed.
          $ref: '#/components/schemas/AirRequestTravelerInfo'
        passengerName:
          description: Name of the passenger associated with the credit.
          $ref: '#/components/schemas/Name'
        airlineInfo:
          description: Airline info with airline name and code
          $ref: '#/components/schemas/AirlineInfo'
        totalFare:
          description: Total airfare associated with the original ticket.
          $ref: '#/components/schemas/Money'
        issueDate:
          description: Issue date for the unused credit.
          $ref: '#/components/schemas/DateTimeOffset'
        expiryDate:
          description: Expiry date for the unused credit.
          $ref: '#/components/schemas/DateTimeOffset'
        source:
          $ref: '#/components/schemas/ThirdPartySource'
          default: SABRE
          description: Source of unused credit e.g. Sabre, NDC etc.
        sourcePnr:
          type: string
          description: PNR number corresponding to third party through which booking was made.
          example: MC5ONS
        flightIds:
          type: array
          description: ID of the flights on which this credit applies.
          minItems: 1
          items:
            type: string
        ticketNumber:
          type: string
          description: Ticket number for the ticket that was converted into an unused credit.
          example: '5267779139217'
      x-ignoreBreakingChanges:
      - Credit->pnrOwningPcc
      - Credit->unusedCreditPcc
      - Credit->source
    TokenizedExpiry:
      title: TokenizedExpiry
      type: object
      description: Contains the tokenized expiry of a Card.
      required:
      - expiryMonth
      - expiryYear
      properties:
        expiryMonth:
          type: string
          description: Tokenized Expiry month
          example: KvAuPANQWCpjwRQxcC8EXg==
        expiryYear:
          type: string
          description: Tokenized Expiry year
          example: fPBm0OWrKwPyIrCVcbg4cA==
    RazorpayVerificationInfo:
      type: object
      title: RazorpayVerificationInfo
      description: Verification information required when card is tokenized via Razorpay for Indian markets.
      required:
      - paymentProcessor
      properties:
        paymentProcessor:
          type: string
          description: Payment processor involved.
          example: RAZORPAY
        paymentAuthUrl:
          description: URL for authorizing the payment on the card.
          type: string
    Office:
      type: object
      title: Office
      description: Office

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