Impala Hotels API

Accessing hotel content, available rooms and rates.

OpenAPI Specification

impala-hotels-api-openapi.yml Raw ↑
openapi: 3.0.0
info:
  contact:
    email: support@impala.travel
    name: Impala Developer Support
    url: https://docs.impala.travel/
  description: 'Add room selling to your app with ease, or expand your existing hotel portfolio. Access all the marketing material you need to sell a room, from hotel amenities to images. Constantly updated, ever expanding and always correct. Impala allows you to start selling hotel rooms and earn a commission with every booking in hours.


    Getting started is easy:


    > **1. Sign-up within seconds**: Head to the [Impala website](https://impala.travel), enter your details and receive your sandbox API key immediately (no credit card needed).


    > **2. Start building within minutes**: Build against a sandbox API with realistic test data. Use a [step-by-step walkthrough](https://impala.travel) to see what''s possible. Check for available hotels and their rates. Make and manage fake bookings without any risk. Add room booking to your existing website or app, or start an online travel agency from scratch. [![Run in Postman](https://run.pstmn.io/button.svg)](https://god.gw.postman.com/run-collection/11303451-9b241872-9961-424d-9ef4-9d949534567d?action=collection%2Ffork&collection-url=entityId%3D11303451-9b241872-9961-424d-9ef4-9d949534567d%26entityType%3Dcollection%26workspaceId%3D5ae55f12-332c-4e7d-8acc-3e75df3b2ee2)


    > **3. Go live within hours**: Once your app or integration is ready for prime time, move to production within your Impala dashboard and start making real hotel bookings for your customers right away.


    Want to see how it all works? Watch [a 5-minute walkthrough](https://www.youtube.com/watch?v=7B3evCL3nrY) of the two API requests you need to make a booking, and a demo of one of our customer''s apps.'
  termsOfService: https://impala.travel/terms-and-conditions/
  title: Impala Hotel Booking Bookings Hotels API
  version: '1.003'
  x-apisguru-categories:
  - ecommerce
  x-logo:
    url: https://api.apis.guru/v2/cache/logo/https_images.prismic.io_impala-v2_8d1fd8ad-ef74-46e6-99b8-a8dca8265c60_IM_LI_POST_LAUNCH.jpg
  x-origin:
  - format: openapi
    url: https://docs.impala.travel/api/v1/projects/impala/booking-api/nodes/spec/openapi.seller.yaml?branch=v1.003
    version: '3.0'
  x-providerName: impala.travel
  x-serviceName: hotels
servers:
- description: Hotel Booking API Sandbox
  url: https://sandbox.impala.travel/v1
- description: Hotel Booking API Production
  url: https://api.impala.travel/v1
security:
- API_Key_Authentication: []
tags:
- description: Accessing hotel content, available rooms and rates.
  name: Hotels
paths:
  /hotels:
    get:
      description: 'Returns a list of all hotels worldwide that can be booked through Impala.


        You can **filter** the results:


        * Adding `longitude`, `latitude` and a `radius` (in meters) query parameters will filter the results to hotels around this location.

        * Adding `start` and `end` dates (in ISO 8601 notation, e.g. `2021-12-31`) for the expected arrival and departure dates of your guests will limit the results to hotels that have at least one room bookable for this timeframe.

        * Adding `starRating`, `name` or `country` allows you to filter to hotels based on these values (e.g. `?starRating[gte]=4&name[like]=palace` for hotels with a rating of 4 or up with a name containing "palace")

        * Adding `hotelIds` allows you to limit the results to include only hotels with the ids listed. Its value should be a comma-separated list of hotel ids (e.g. `?hotelIds[]=hotelIdA,hotelIdB`)


        * Adding `contractable` allows you to filter to hotels that you can directly negotiate with through our [deals feature](https://docs.impala.travel/docs/booking-api/ZG9jOjcyNjgzMTA-contracting-with-hotels). (e.g `?contractable=true` or `?contractable=false`)


        You can specify the **sorting order** in which hotels are returned:

        * This is done by using the `sortBy` query parameter.

        * Results can be sorted by `name` alphabetically, star `rating` and `distance_m` (in meters from the specified latitude/longitude location).

        * The parameter allows for a comma-separated list of arguments with optional `:asc` (ascending, the default if the modifier is omitted) and `:desc` (descending) modifiers.


        If no hotels match your filter criteria, an empty array will be returned.'
      operationId: listHotels
      parameters:
      - description: 'Allows for filtering based on the property name. Available modifiers include equal to (`eq`) or case insensitive search (`like`). Usage example: `?name[like]=palace`'
        example:
          eq: Minimalist Palace
          like: palace
        explode: true
        in: query
        name: name
        schema:
          type: object
        style: deepObject
      - description: 'Allows for filtering based on the starRating of a property. Available modifiers include less than (`lt`), greater than (`gt`), less than or equal to (`lte`), greater than or equal to (`gte`) and equal to (`eq`). Usage example: `?starRating[gt]=3&starRating[lt]=5`'
        example:
          eq: 4
          gt: 3
          gte: 4
          lt: 4
          lte: 3
        explode: true
        in: query
        name: starRating
        schema:
          type: object
        style: deepObject
      - description: 'Allows for filtering based on the country of a property. The only available modifier for this parameter is equal to (`eq`). Usage example: `?country[eq]=GBR`'
        example:
          eq: GBR
        explode: true
        in: query
        name: country
        schema:
          type: object
        style: deepObject
      - description: The arrival day of the desired stay range in ISO 8601 format (`YYYY-MM-DD`).
        in: query
        name: start
        schema:
          example: '2021-05-20'
          type: string
      - description: The departure day of the desired stay range in ISO 8601 format (`YYYY-MM-DD`).
        in: query
        name: end
        schema:
          example: '2021-05-22'
          type: string
      - description: The WGS 84 latitude of the location to search around (e.g. `58.386186`).
        in: query
        name: latitude
        schema:
          example: 58.386186
          format: double
          maximum: 90
          minimum: -90
          type: number
      - description: The WGS 84 longitude of the location to search around (e.g. `-9.952549`).
        in: query
        name: longitude
        schema:
          example: -9.952549
          format: double
          maximum: 180
          minimum: -180
          type: number
      - description: The distance (in meters) to search around the specified location (e.g. `10000` for 10 km).
        in: query
        name: radius
        schema:
          example: 25000
          format: int32
          minimum: 0
          type: integer
      - description: A comma-separated list of hotel ids you wish to filter by (e.g. `60a06628-2c71-44bf-9685-efbd2df4179e,60a06628-2c71-44bf-9685-efbd2df4179e`).
        explode: false
        in: query
        name: hotelIds
        schema:
          example:
          - 0e25533a-2db2-4894-9db1-4c1ff92d798c,77c272b6-18e6-4036-b9c3-7fc5454e3f6a
          items:
            example: 8a39290a-bcd0-461e-92c6-38e71a06d2f7
            type: string
          type: array
        style: form
      - description: 'Allows for filtering based on the date and time when this hotel was first added to the Impala platform, in ISO 8601 format (e.g. `2020-11-04T17:37:37Z`) and UTC timezone. Available modifiers include less than (`lt`), greater than (`gt`), lower than or equal to (`lte`), greater than or equal to (`gte`) and equal to (`eq`). Usage example: `?created[lte]=2020-11-04T19:37:37Z&created[gte]=2020-11-04T15:56:37.000Z`'
        example:
          eq: '2020-11-04T15:56:37.000Z'
          gt: '2020-11-04T15:56:37.000Z'
          gte: '2020-11-04T15:56:37.000Z'
          lt: '2020-11-04T15:56:37.000Z'
          lte: '2020-11-04T15:56:37.000Z'
        explode: true
        in: query
        name: created
        schema:
          type: object
        style: deepObject
      - description: 'Allows for filtering based on the date and time the content of this hotel was last updated, in ISO 8601 format (e.g. `2020-11-04T17:37:37Z`) and UTC timezone. Available modifiers include less than (`lt`), greater than (`gt`), lower than or equal to (`lte`), greater than or equal to (`gte`) and equal to (`eq`). Usage example: `?updated[lte]=2020-11-04T19:37:37Z&updated[gte]=2020-11-04T15:56:37.000Z`'
        example:
          eq: '2020-11-04T15:56:37.000Z'
          gt: '2020-11-04T15:56:37.000Z'
          gte: '2020-11-04T15:56:37.000Z'
          lt: '2020-11-04T15:56:37.000Z'
          lte: '2020-11-04T15:56:37.000Z'
        explode: true
        in: query
        name: updated
        schema:
          type: object
        style: deepObject
      - description: Number of hotels returned on a given page (pagination).
        in: query
        name: size
        schema:
          default: 25
          example: 40
          format: int32
          maximum: 300
          minimum: 1
          type: number
      - description: Offset from the first hotel in the result (for pagination).
        in: query
        name: offset
        schema:
          default: 0
          example: 25
          format: int32
          type: number
      - description: Order in which the results should be sorted. Currently allows you to sort by `name` (alphabetical), star `rating`, and `distance_m` in meters from the specified latitude/longitude. Allows for a comma-separated list of of arguments with modifiers for `:asc` (ascending) and `:desc` (descending) ordering.
        in: query
        name: sortBy
        schema:
          default: createdAt:desc
          example: name:asc,distance_m:desc
          type: string
      responses:
        '200':
          content:
            application/json:
              examples:
                List of available hotels:
                  $ref: '#/components/examples/ExampleHotels'
                No hotels available:
                  $ref: '#/components/examples/NoHotelsAvailable'
              schema:
                properties:
                  data:
                    items:
                      $ref: '#/components/schemas/hotelFullDetail'
                    type: array
                  pagination:
                    $ref: '#/components/schemas/pagination'
                type: object
          description: Returns a paginated list of hotels.
        '400':
          content:
            application/json:
              examples:
                Validation error:
                  summary: Bad request
                  value:
                    code: VALIDATION_ERROR
                    message: '"start" must be in YYYY-MM-DD format. "foo" is not allowed. "lorem" missing required peer "ipsum"'
                    validations:
                    - code: DATE_FORMAT
                      message: '"start" must be in YYYY-MM-DD format'
                      property: start
                    - code: OBJECT_UNKNOWN
                      message: '"foo" is not allowed'
                      property: foo
                    - code: OBJECT_WITH
                      message: '"lorem" missing required peer "ipsum"'
                      property: lorem
              schema:
                $ref: '#/components/schemas/validationError'
          description: Your request wasn't formatted correctly and therefore couldn't be processed. This most frequently happens when query parameters or request body values are missing, incorrectly formatted or added where they don't exist (e.g. due to typos). We're including a list of `validations` to point out where things are going wrong and should be fixed.
        '401':
          content:
            application/json:
              examples:
                API key invalid:
                  value:
                    message: Invalid authentication credentials
                API key missing:
                  value:
                    message: No API key found in request
              schema:
                $ref: '#/components/schemas/genericError'
          description: Your request was sent without or with an incorrect API key. This most frequently happens when the `x-api-key` header wasn't added or contains an incorrect value. This might also happen if you're trying to access the production API endpoints with a sandbox API key or vice versa.
        '500':
          content:
            application/json:
              examples:
                Internal Server Error:
                  summary: Server has encountered an internal error.
                  value:
                    message: InternalServerError
              schema:
                $ref: '#/components/schemas/genericError'
          description: 'An internal server error within the Impala platform has occurred. Our team will investigate the error.

            We recommend that you contact us at support@impala.travel with the x-correlation-id value contained

            within the response headers. Sending us this value will allow us to identify the precise error you encountered.'
      summary: List all hotels
      tags:
      - Hotels
  /hotels/{hotelId}:
    get:
      description: 'Returns the full content, room types and rates for the specified hotel.


        When querying the hotels API you can query with or without dates. Where querying with dates requires providing valid values for the `start` and `end` parameters. Requests without these values will be considered a query without dates.


        **Querying without dates:**


        When you query without dates, the search result will include all properties that match your request. Including all content that is associated with those properties. However you will find that the `rates` attribute for each room will always be empty.


        **Querying with dates:**


        When you query with dates, the search result will include all properties that match your request, including all content that is associated with those properties. Rooms which do not have available prices for the provided dates will appear with an empty `rates` array.


        For rooms where there are available prices the `rates` array will include both the public rates of the hotel, along with prices that come from deals in which you are participating. This would include private deals which you have negotiated with a hotel, along with Impala deals which you have been verified for.


        Using the `rateId` of any of those rates, you can use the [Create a booking](https://docs.impala.travel/docs/booking-api/spec/openapi.seller.yaml/paths/~1bookings/post) endpoint to make a booking.'
      operationId: retrieveHotel
      parameters:
      - description: The unique identifier of this hotel on the Impala platform.
        in: path
        name: hotelId
        required: true
        schema:
          format: uuid
          type: string
      - description: The arrival day of the desired stay range in ISO 8601 format (`YYYY-MM-DD`).
        in: query
        name: start
        schema:
          example: '2021-05-20'
          type: string
      - description: The departure day of the desired stay range in ISO 8601 format (`YYYY-MM-DD`).
        in: query
        name: end
        schema:
          example: '2021-05-22'
          type: string
      responses:
        '200':
          content:
            application/json:
              examples:
                List Single Hotel:
                  $ref: '#/components/examples/ExampleHotel'
              schema:
                $ref: '#/components/schemas/hotelFullDetail'
          description: Returns the requested hotel.
        '400':
          content:
            application/json:
              examples:
                Validation error:
                  summary: Bad request
                  value:
                    code: VALIDATION_ERROR
                    message: '"start" must be in YYYY-MM-DD format. "foo" is not allowed. "lorem" missing required peer "ipsum"'
                    validations:
                    - code: DATE_FORMAT
                      message: '"start" must be in YYYY-MM-DD format'
                      property: start
                    - code: OBJECT_UNKNOWN
                      message: '"foo" is not allowed'
                      property: foo
                    - code: OBJECT_WITH
                      message: '"lorem" missing required peer "ipsum"'
                      property: lorem
              schema:
                $ref: '#/components/schemas/validationError'
          description: Your request wasn't formatted correctly and therefore couldn't be processed. This most frequently happens when query parameters or request body values are missing, incorrectly formatted or added where they don't exist (e.g. due to typos). We're including a list of `validations` to point out where things are going wrong and should be fixed.
        '401':
          content:
            application/json:
              examples:
                API key invalid:
                  value:
                    message: Invalid authentication credentials
                API key missing:
                  value:
                    message: No API key found in request
              schema:
                $ref: '#/components/schemas/genericError'
          description: Your request was sent without or with an incorrect API key. This most frequently happens when the `x-api-key` header wasn't added or contains an incorrect value. This might also happen if you're trying to access the production API endpoints with a sandbox API key or vice versa.
        '403':
          content:
            application/json:
              examples:
                fail:
                  summary: No access
                  value:
                    message: Forbidden resource
              schema:
                $ref: '#/components/schemas/genericError'
          description: Forbidden
        '500':
          content:
            application/json:
              examples:
                Internal Server Error:
                  summary: Server has encountered an internal error.
                  value:
                    message: Internal Server Error
              schema:
                $ref: '#/components/schemas/genericError'
          description: 'An internal server error within the Impala platform has occurred. Our team will investigate the error.

            We recommend that you contact us at support@impala.travel with the x-correlation-id value contained

            within the response headers. Sending us this value will allow us to identify the precise error you encountered.'
      summary: Retrieve a hotel
      tags:
      - Hotels
components:
  schemas:
    money:
      description: An amount of money in the specified currency (used in the context of prices, fees, refunds etc.)
      properties:
        amount:
          description: Amount in the smallest unit of the currency. E.g. 234.56 € is expressed as 23456 (in Euro cents to avoid rounding errors in calculations).
          example: 9500
          type: integer
        currency:
          description: Details of the currency.
          properties:
            code:
              description: Three-character currency code in ISO 4217 notation.
              example: EUR
              type: string
          required:
          - code
          title: CurrencyDetails
          type: object
      required:
      - amount
      - currency
      title: Money
      type: object
      x-examples:
        Double-decimal currency (EUR):
          amount: 9500
          currency:
            code: EUR
        Zero-decimal currency (JPY):
          amount: 37747
          currency:
            code: JPY
    rate:
      description: Information on the price of the room, other components of the room (such as breakfast, lunch or a welcome drink) and the cancellation policies that apply.
      properties:
        cancellationPolicies:
          items:
            $ref: '#/components/schemas/cancellationPolicy'
          minItems: 1
          type: array
          uniqueItems: true
        components:
          items:
            $ref: '#/components/schemas/rateComponent'
          minItems: 0
          type: array
          uniqueItems: true
        end:
          example: '2021-11-23'
          format: date
          minLength: 1
          type: string
        hotelAgreement:
          $ref: '#/components/schemas/hotelAgreementStub'
        maxOccupancy:
          description: Maximum number of adults included in the rate.
          example: 2
          type: integer
        rateId:
          example: 3rX3IaqkpJaPlttxoFoM3uDcHJEZCAuByqfBSLUPMvkBGyu7IAlhbxl3rZ7cVmVj6TbXL4EfiHlTA
          minLength: 1
          type: string
        ratePlanId:
          description: The rate plan ID that is attached to this rate. Each rate plan ID can specify a unique combination of a cancellation policy and a meal plan.
          example: 1
          type: integer
        retailRate:
          description: The public retail rate you should quote and charge your guest. You're not allowed to quote or charge an amount lower than this if your website or app is publicly accessible.
          properties:
            taxesAndFees:
              description: Breakdown of taxes (e.g. VAT, city tax) and fees (e.g. cleaning or resort fees).
              properties:
                includedInRate:
                  description: Taxes and fees that are included in the `retailRate.total` price paid at the time of booking.
                  items:
                    $ref: '#/components/schemas/taxOrFee'
                  minItems: 0
                  type: array
                payAtHotel:
                  description: Taxes and fees that need to be payed at the hotel (often upon arrival or departure). This frequently happens for fees that only need to be collected based on certain conditions (e.g. a guest coming from abroad or being older than a certain age).
                  items:
                    $ref: '#/components/schemas/taxOrFee'
                  minItems: 0
                  type: array
              type: object
            total:
              $ref: '#/components/schemas/money'
          required:
          - total
          - taxesAndFees
          type: object
        roomsSellable:
          description: Amount of rooms which can be sold for this occupancy level and room type at this rate price.
          type: number
        sellerCommissionPercentage:
          description: The commission percentage you as a seller will earn from this booking, based on `retailRate.total`.
          example: 9.5
          format: float
          type: number
        sellerToImpalaPayment:
          allOf:
          - $ref: '#/components/schemas/money'
          description: This is the amount payable to the hotel, which Impala will collect from you on the hotel's behalf. The Impala fee will be requested in addition to this, and also documented in a VAT invoice.
        start:
          example: '2021-11-20'
          format: date
          minLength: 1
          type: string
      required:
      - rateId
      - start
      - end
      - hotelAgreement
      - maxOccupancy
      - retailRate
      - sellerCommissionPercentage
      - components
      - cancellationPolicies
      title: Room rate
      type: object
      x-examples:
        Example:
          cancellationPolicies:
          - end: '2020-12-17 23:59:59.999'
            fee:
              count: 100
              price:
                amount: 9500
                currency:
                  code: EUR
              type: PERCENTAGE
            formatted: Non-refundable after October 19, 2021 00:00
            start: '2020-12-15 23:59:59.999'
          components:
          - formatted: Breakfast
            includedInRate: true
            type: BREAKFAST
          end: '2021-11-23'
          rateId: dBFo
          ratePlanId: 1
          retailRate:
            total:
              amount: 9500
              currency:
                code: EUR
          roomsSellable: 100
          sellerCommissionPercentage: 9.5
          sellerToImpalaPayment:
            amount: 8598
            currency:
              code: EUR
          start: '2021-11-20'
    roomType:
      description: Bookable category of bookable rooms within a hotel
      properties:
        amenities:
          items:
            $ref: '#/components/schemas/amenity'
          type: array
        description:
          description: Description
          example: Modern room with plenty of natural light and modern furniture.
          type: string
        images:
          description: Lists photos of this room type
          items:
            $ref: '#/components/schemas/image'
          type: array
        maxOccupancy:
          description: Maximum number of adults that can occupy the room.
          example: 4
          type: integer
        name:
          description: Name
          example: Standard Room
          type: string
        rates:
          description: Bookable rates for this room type and the start and end dates of your availability search.
          items:
            $ref: '#/components/schemas/rate'
          type: array
        roomTypeId:
          description: Unique identifier of the room type within the Impala platform.
          example: d5b192ce-c45f-46da-abf5-3880b429b7cc
          format: uuid
          type: string
      required:
      - roomTypeId
      - name
      - description
      - maxOccupancy
      - amenities
      - images
      title: Room type
      type: object
    address:
      description: Physical address
      properties:
        city:
          example: Impalaland
          type: string
        country:
          description: Three-character country code in ISO alpha-3 format.
          example: GBR
          type: string
        countryName:
          description: English name of the country.
          example: United Kingdom
          type: string
        line1:
          description: First line of the address.
          example: 12 Sample Avenue
          type: string
        line2:
          description: Second line of the address.
          nullable: true
          type: string
        postalCode:
          example: '12345'
          type: string
        region:
          nullable: true
          type: string
      required:
      - line1
      - city
      - country
      - countryName
      - postalCode
      title: Address
      type: object
    amenity:
      description: "<!--\ntype: tab\ntitle: Description\n-->\nFeature or facility available in the hotel or room type. For the full list of property and room amenity codes, you can click on the \"Room Amenities\" and \"Property Amenities\" tab.\n\n<!--\ntype: tab\ntitle: Room Amenities\n-->\nBelow you will find a list of all room amenities in JSON format.\n```json\n{\n  \"2\": \"Air conditioning\",\n  \"3\": \"Alarm clock\",\n  \"5\": \"AM/FM radio\",\n  \"8\": \"Barbeque grills\",\n  \"9\": \"Bath tub with spray jets\",\n  \"10\": \"Bathrobe\",\n  \"11\": \"Bathroom amenities (free toiletries)\",\n  \"13\": \"Bathtub\",\n  \"14\": \"Bathtub only\",\n  \"15\": \"Bath or Shower\",\n  \"16\": \"Bidet\",\n  \"18\": \"Cable television\",\n  \"19\": \"Coffee/Tea maker\",\n  \"20\": \"Color television\",\n  \"21\": \"Computer\",\n  \"22\": \"Connecting rooms\",\n  \"25\": \"Cordless phone\",\n  \"28\": \"Desk\",\n  \"29\": \"Desk with lamp\",\n  \"32\": \"Dishwasher\",\n  \"38\": \"Fax machine\",\n  \"41\": \"Fireplace\",\n  \"46\": \"Free movies/video\",\n  \"47\": \"Full kitchen\",\n  \"49\": \"Grecian tub\",\n  \"50\": \"Hairdryer\",\n  \"54\": \"Internet access\",\n  \"55\": \"Iron (ironing facilities)\",\n  \"56\": \"Ironing board\",\n  \"57\": \"Whirpool\",\n  \"59\": \"Kitchen\",\n  \"60\": \"Kitchen supplies\",\n  \"61\": \"Kitchenette\",\n  \"63\": \"Laptop\",\n  \"64\": \"Large desk\",\n  \"68\": \"Microwave\",\n  \"69\": \"Minibar\",\n  \"72\": \"Multi-line phone\",\n  \"77\": \"Oven\",\n  \"78\": \"Pay per view movies on TV\",\n  \"80\": \"Phone in bathroom\",\n  \"81\": \"Plates and bowls\",\n  \"85\": \"Private bathroom\",\n  \"88\": \"Refrigerator\",\n  \"89\": \"Refrigerator with ice maker\",\n  \"92\": \"Safe\",\n  \"94\": \"Separate closet\",\n  \"97\": \"Shower only\",\n  \"98\": \"Silverware/utensils\",\n  \"99\": \"Sitting area\",\n  \"103\": \"Speaker phone\",\n  \"105\": \"Stove\",\n  \"108\": \"Telephone for hearing impaired\",\n  \"115\": \"VCR movies\",\n  \"117\": \"Video games\",\n  \"119\": \"Wake-up calls\",\n  \"123\": \"Wireless internet connection\",\n  \"126\": \"Air conditioning individually controlled in room\",\n  \"127\": \"Bathtub & whirlpool separate\",\n  \"129\": \"CD  player\",\n  \"133\": \"Desk with electrical outlet\",\n  \"138\": \"Marble bathroom\",\n  \"139\": \"List of movie channels available\",\n  \"141\": \"Oversized bathtub\",\n  \"142\": \"Shower\",\n  \"144\": \"Soundproofed room\",\n  \"146\": \"Tables and chairs\",\n  \"147\": \"Two-line phone\",\n  \"149\": \"Washer/dryer\",\n  \"155\": \"Separate tub and shower\",\n  \"157\": \"Ceiling fan\",\n  \"158\": \"CNN available\",\n  \"162\": \"Closets in room\",\n  \"163\": \"DVD player\",\n  \"164\": \"Mini-refrigerator\",\n  \"166\": \"Self-controlled heating/cooling system\",\n  \"167\": \"Toaster\",\n  \"193\": \"Shared bathroom\",\n  \"194\": \"Telephone TDD/Textphone\",\n  \"210\": \"Satellite television\",\n  \"214\": \"iPod docking station\",\n  \"217\": \"Satellite radio\",\n  \"218\": \"Video on demand\",\n  \"220\": \"Gulf view\",\n  \"223\": \"Mountain view\",\n  \"224\": \"Ocean view\",\n  \"228\": \"Slippers\",\n  \"230\": \"Chair provided with desk\",\n  \"234\": \"Luxury linen type\",\n  \"245\": \"Private pool\",\n  \"246\": \"High Definition (HD) Flat Panel Television  - 32 inches or greater\",\n  \"251\": \"TV\",\n  \"254\": \"Video game player:\",\n  \"256\": \"Dining room seats\",\n  \"258\": \"Mobile/cellular phones\",\n  \"259\": \"Movies\",\n  \"260\": \"Multiple closets\",\n  \"262\": \"Safe large enough to accommodate a laptop\",\n  \"265\": \"Bluray player\",\n  \"268\": \"Non-allergenic room\",\n  \"270\": \"Seating area with sofa/chair\",\n  \"271\": \"Separate toilet area\",\n  \"273\": \"Widescreen TV\",\n  \"276\": \"Separate tub or shower\",\n  \"249\": \"Double (Bed)\",\n  \"200\": \"Futon Mat\",\n  \"58\": \"Extra large Double\",\n  \"86\": \"Large Double\",\n  \"102\": \"Sofa Bed\",\n  \"113\": \"Twin (bed)\",\n  \"203\": \"Single (bed)\",\n  \"4001\": \"Bunk bed\",\n  \"5001\": \"Coffee/Tea maker\",\n  \"5002\": \"Internet facilities\",\n  \"5003\": \"Mini-bar\",\n  \"5004\": \"Shower\",\n  \"5005\": \"Bath\",\n  \"5006\": \"Safe Deposit Box\",\n  \"5007\": \"Pay-per-view Channels\",\n  \"5008\": \"TV\",\n  \"5009\": \"Telephone\",\n  \"5010\": \"Fax\",\n  \"5011\": \"Airconditioning\",\n  \"5012\": \"Hair Dryer\",\n  \"5013\": \"Wake Up Service/Alarm-clock\",\n  \"5014\": \"Hot Tub\",\n  \"5015\": \"Clothing Iron\",\n  \"5016\": \"Kitchenette\",\n  \"5017\": \"Balcony\",\n  \"5018\": \"Trouser Press\",\n  \"5019\": \"Bath-robe\",\n  \"5020\": \"Spa Bath\",\n  \"5021\": \"Radio\",\n  \"5022\": \"Refrigerator\",\n  \"5023\": \"Desk\",\n  \"5024\": \"Shared Bathroom\",\n  \"5025\": \"Ironing facilities\",\n  \"5026\": \"Seating area\",\n  \"5027\": \"Free Toiletries\",\n  \"5028\": \"DVD-Player\",\n  \"5029\": \"CD-Player\",\n  \"5030\": \"Fan\",\n  \"5031\": \"Toilet\",\n  \"5032\": \"Microwave\",\n  \"5033\": \"Dishwasher\",\n  \"5034\": \"Washing machine\",\n  \"5035\": \"Video\",\n  \"5036\": \"Video Games\",\n  \"5037\": \"Patio\",\n  \"5038\": \"Bathroom\",\n  \"5039\": \"Extra long beds (> 2 meter)\",\n  \"5040\": \"Heating\",\n  \"5041\": \"Dressing room\",\n  \"5042\": \"Guest toilet\",\n  \"5043\": \"Slippers\",\n  \"5044\": \"Satellite Channels\",\n  \"5045\": \"Kitchen\",\n  \"5046\": \"Wireless internet\",\n  \"5068\": \"Cable channels\",\n  \"5069\": \"Bath or Shower\",\n  \"5070\": \"Carpeted Floor\",\n  \"5071\": \"Fireplace\",\n  \"5072\": \"Additional Toilet\",\n  \"5073\": \"Interconnecting Room(s) available\",\n  \"5074\": \"Laptop Safe Box\",\n  \"5075\": \"Flat-screen TV\",\n  \"5076\": \"Private Entrance\",\n  \"5077\": \"Sofa\",\n  \"5079\": \"Soundproofing\",\n  \"5080\": \"Tiled / Marble floor\",\n  \"5081\": \"View\",\n  

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