openapi: 3.0.1
info:
  title: Facilities API
  description: >
    Manage facilities at both the property- and room-level.\n

    Booking.com supports adding or assigning a variety of different facilities
    at the property- or room-level.

    Specify the facility ID along with any required parameters to assign a
    facility.\n\nFacilities are of the following types:

    <ul><li>Single-instance facilities: You can assign these facilities only
    once to a property or a room.

    An example of a single-instance facility is: room service. There are two
    types of single-instance facilities:

    <ul><li>Single-instance facilities that can be toggled on or
    off.</li><li>Single-instance facilities supporting optional parameters:

    Allows you to specify more details about the
    facility</li></ul><li>Multi-instance facilities:

    You can assign multiple facilities of this type to a property.

    When adding multi-instance facilities you must provide additional details to
    add to a property or a room.

    Examples of multi-instance facilities are: Restaurant, Swimming pool and
    Parking.</li></ul>
  contact:
    name: Connectivity Team
    url: https://connect.booking.com
    email: connectivity@booking.com
  version: '1.0'
servers:
  - url: https://supply-xml.booking.com/facilities-api/
    description: Test using live endpoint
tags:
  - name: About Try it
    description: >-
      Learn how to effectively use the Try it feature in the Facilities API
      documentation.


      Use the **Try it** feature to send test request examples to the API
      endpoints directly from the developer portal and depending on the selected
      environment either see static, pre-built responses or dynamic responses
      from a test property.


      ## Environment


      You can select between two different environments (top right corner in the
      UI):


      **Test static response** (default):

      - Helps to understand the response data schema

      - Recommended for all write operations (POST, PUT, DELETE)

      - Environment for testing without affecting live/test data


      **Test live endpoint**:

      - Make sure to use only test properties.

      - Changes will affect your test property data

      - Requires valid credentials

      - Same API structure as production


      ## Request


      Using the UI, toggle between **Edit** and **Preview** tabs to see the
      values applied to the path or query placeholders (if there are any). You
      can also click on any unresolved placeholders to add a value or edit an
      existing placeholder value.


      The portal loads the default request body. Where the specification
      supports multiple request body examples (for example: Rooms API POST
      endpoint), you can choose a different request body from the drop-down
      list.


      Some helpful pointers before running a request:


      - **Authentication** (when using live endpoint): Configure your
      authentication headers
        - API Key or OAuth token as required. Use the **Environments** tab.
        - Make sure to manage separate machine accounts for test vs. properties in production.
        - Ensure credentials match your selected environment.

      - **Parameters**: Fill in required parameters
        - Path parameters (like `propertyId`)
        - Query parameters (like `language_code`)
        - Request body for `POST/PUT` operations

      - **Execute**: Click **Send** to send the request
        - The request is sent to the selected environment
        - When sending requests to the live endpoint, real HTTP request is made to the API

      ## Response


      The Try it feature provides comprehensive response information to the
      extent supported by the Open API specification:


      ### Status code

      - **2xx**: Success responses (200)

      - **4xx**: Client errors (400 Bad Request, 401 Unauthorized, 404 Not
      Found)

      - **5xx**: Server errors (500 Internal Server Error)


      ### Response body

      - JSON formatted response data


      If the returned response, by default, is unformatted, select the supported
      Response body format in the UI.


      ### Response headers

      - Content-Type, Content-Length.


      ## Environments


      The **Environments** tab allows you to create variables specific to the
      environment. For example, you can add a variable to hold the value of the
      `property-id` placeholder. The portal inserts the respective value
      depending on the environment at the time of sending the request.


      ### Variables


      Most of the endpoints (especially POST/PUT/DELETE) require you to add a
      path or query parameter before sending the request. The Open API
      specification marks these parameters with placeholder tags. For example,
      {{`property_id`}}. You can use the **Environments** tab to manage the
      values for these placeholders as variables.


      #### Path parameters

      - **Required**: Must be provided to make the request

      - **Type validation**: Ensures correct data types (integer, string, etc.)

      - **Example**: `propertyId` in `/facilities-api/properties/{propertyId}`


      #### Query parameters

      - **Optional**: Usually have default values

      - **Example**: `language_code` with `en-us` as the default value


      #### Request body

      - **Schema validation**: Follows OpenAPI schema definitions

      - **Example data**: Prepopulated with sample values


      ## Best practices


      This section provides some basic practice guidelines.


      ### Authentication


      - Always use separate machine accounts for test properties vs. properties
      in production.

      - When testing with production endpoint, make sure to use only test
      properties.


      ### For Read operations (GET)

      - Safe to test in any environment

      - Use valid IDs that exist in your system

      - Check response structure for integration planning


      ### For Write operations (POST, PUT)

      - **Always use static response first**

      - Verify request payload structure

      - Check response for success confirmation

      - Test error scenarios with invalid data


      ### For Delete operations (DELETE)

      - **Use static response environment only**

      - Understand the operation is irreversible

      - Have backup data when testing using test properties


      ## Troubleshooting


      ### Common issues


      **401 Unauthorized**

      - Check authentication credentials

      - Verify API key is valid and not expired

      - Ensure credentials match the selected environment


      **400 Bad Request**

      - Validate request payload against schema

      - Check required fields are provided

      - Verify data types match specification


      **404 Not Found**

      - Confirm the resource ID exists

      - Check the endpoint URL is correct

      - Verify you have access to the resource


      ### Getting help


      If you encounter issues:

      1. Check the response error message for details

      2. Verify your request matches the API specification

      3. Contact the Connectivity Team for support


      ---


      *This documentation applies to all endpoints in the Facilities API. The
      Try it feature provides a consistent testing experience across all
      operations.*
  - name: Manage property facilities
    description: >
      Use the GET and the PUT endpoints to:

      <ul><li>Retrieve property-level facilities details</li>

      <li>Add, modify or delete property-level facilities details<ul><li>Add
      single-instance facilities</li>

      <li>Add multi-instance facilities</li></ul></li></ul>
  - name: Manage room facilities
    description: >
      Use the GET and the PUT endpoints to:

      <ul><li>Retrieve room facilities set for a property.</li><li>Add, modify
      or delete room facilities.</li></ul>
  - name: Manage bathrooms
    description: |
      Use the GET and the PUT endpoints to:
      <ul><li>Retrieve room bathroom configuration</li>
      <li>Add, modify or delete room-level bathroom information</li></ul>
  - name: Meta data endpoint
    description: >
      <p>Retrieve the latest facility definitions.</p>

      <ul>

      <li>Get the list of all supported facilities<ul>

      <li>To get the details of a property-level facility: Look for a matching
      name under the facility_name in the response.

      To add this facility, you must specify the facility_id.

      Property-level facilities are listed under the property_facility_metas in
      the meta endpoint response.</li>

      <li>To get the details of the room-level facility: Look for a matching
      name under the room_facility_name in the response.

      To add the facility, you must specify the room_facility_id.

      Room-level facilities are listed under the room_facility_metas in the meta
      endpoint response.</li>

      </ul>

      </li>

      <li>Details of the facilities such as ID, OTA code and any optional
      parameters.</li>

      </ul>
x-tagGroups:
  - name: API Endpoints
    tags:
      - Manage property facilities
      - Manage room facilities
      - Manage bathrooms
      - Meta data endpoint
  - name: Documentation
    tags:
      - About Try it
paths:
  /properties/{propertyId}:
    get:
      tags:
        - Manage property facilities
      summary: Retrieve property-level facilities
      description: >-
        Retrieve facility instance IDs along with the facility details for all
        the facility instances added to the property.
      operationId: getFacilities
      parameters:
        - name: propertyId
          in: path
          required: true
          schema:
            type: integer
            format: int32
        - name: debugInfo
          in: query
          required: false
          schema:
            type: string
            default: 'false'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiResponseListPropertyFacility'
    put:
      tags:
        - Manage property facilities
      summary: Add, update or remove property-level facilities
      description: >
        Add or update single or multi-instances facilities using this endpoint.
        Try any of the three request examples in the specification.



        To delete a facility or all instances of a multi-instance facility (for
        example: all parking facility), you can change the facility state to
        `MISSING`.
      operationId: setFacilities
      parameters:
        - name: propertyId
          in: path
          required: true
          schema:
            type: integer
            format: int32
      requestBody:
        content:
          application/json:
            schema:
              type: array
              items:
                $ref: '#/components/schemas/PropertyFacility'
            examples:
              Add single-instance facilities:
                description: Add/update single-instance facilities
                value:
                  - facility_id: 418
                    state: PRESENT
                  - facility_id: 419
                    state: MISSING
              Add single-instance facilities with additional details:
                description: >-
                  Add/update multiple single-instance facilities with surcharge
                  details
                value:
                  - facility_id: 70
                    instances:
                      - on_site_details:
                          onsite_type: OFFSITE
                        surcharge_details:
                          surcharge_type: FREE
                    state: PRESENT
              Add multi-instance facilities:
                description: Add/update facility with multiple parking details
                value:
                  - facility_id: 2
                    instances:
                      - parking_details:
                          name: Diamond Parking
                          parking_location: NEARBY
                          parking_access: ONLY_GUESTS
                          parking_reservation: NEEDED
                        payment_details:
                          charge_mode: FREE
                      - parking_details:
                          name: Q-Park
                          parking_location: ON_SITE
                          parking_access: GENERAL_PUBLIC
                          parking_reservation: NOT_NEEDED
                        payment_details:
                          charge_mode: FREE
                    state: PRESENT
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiResponseSuccessObject'
  /properties/{propertyId}/rooms/{roomId}:
    get:
      tags:
        - Manage room facilities
      summary: Retrieve room facilities set for a property.
      description: >-
        Retrieve the facility details for all the facility instances added to
        the rooms
      operationId: getRoomFacilities
      parameters:
        - name: roomId
          in: path
          required: true
          schema:
            type: integer
            format: int64
        - name: debugInfo
          in: query
          required: false
          schema:
            type: string
            default: 'false'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiResponseListRoomFacility'
    put:
      tags:
        - Manage room facilities
      summary: Manage room-level facilities
      description: Add, modify or delete room-level facilities details for a property
      operationId: setRoomFacilities
      parameters:
        - name: propertyId
          in: path
          required: true
          schema:
            type: integer
            format: int32
        - name: roomId
          in: path
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              type: array
              items:
                $ref: '#/components/schemas/RoomFacility'
            examples:
              Room facilities without additional details:
                description: Room facilities without additional details
                value:
                  - room_facility_id: 1
                    state: PRESENT
                  - room_facility_id: 3
                    state: MISSING
              Room facilities with additional details:
                description: Room facilities with additional details
                value:
                  - room_facility_id: 175
                    state: PRESENT
                    room_facility_instances:
                      - crib_details:
                          is_foldable: true
                          is_standalone: false
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiResponseSuccessObject'
  /properties/{propertyId}/rooms/{roomId}/bathrooms:
    get:
      tags:
        - Manage bathrooms
      summary: Retrieve room bathroom configuration
      description: Retrieve room bathroom configuration. Bathroom attached to rooms.
      operationId: getBathroomDetails
      parameters:
        - name: propertyId
          in: path
          required: true
          schema:
            type: integer
            format: int32
        - name: roomId
          in: path
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiResponseBathroomDetails'
    put:
      tags:
        - Manage bathrooms
      summary: Manage bathrooms
      description: Add, modify or delete room-level bathroom information
      operationId: setBathroomDetails
      parameters:
        - name: propertyId
          in: path
          required: true
          schema:
            type: integer
            format: int32
        - name: roomId
          in: path
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BathroomDetails'
            examples:
              Enable hotel group bathrooms:
                description: Enable hotel group bathrooms
                value:
                  hotel_bathroom_details:
                    shared_bathroom_state: PRESENT
                    private_bathroom_state: PRESENT
                    number_of_bathrooms: 3
              Add hotel group bathroom details:
                description: Add hotel group bathroom details
                value:
                  hotel_bathroom_details:
                    shared_bathroom_state: MISSING
                    private_bathroom_state: PRESENT
                    private_bathroom_details:
                      type: EXTERNAL_BATHROOM
                      location_type: OTHER
                      location_other: outside of the room
                    number_of_bathrooms: 2
              Add homes group bathroom details:
                description: Add homes group bathroom details
                value:
                  property_bathroom_details:
                    bathrooms:
                      - bathroom_type: PRIVATE
                      - bathroom_type: SHARED
              Add homes group bathroom details with location:
                description: Add homes group bathroom details with location
                value:
                  property_bathroom_details:
                    bathrooms:
                      - bathroom_type: PRIVATE
                        bathroom_location: ENSUITE
                      - bathroom_type: SHARED
                        bathroom_location: OPPOSITE_THE_ROOM
              Add hostel bathroom details:
                description: Add hostel bathroom details
                value:
                  property_bathroom_details:
                    bathrooms:
                      - bathroom_type: PRIVATE
                        bathroom_location: DOWN_THE_HALL
                        hostel_bathroom_details:
                          bathroom_facilities:
                            - type: SHOWER
                              count: 98
                            - type: TOILET
                              count: 21
                            - type: SINK
                              count: 68
                            - type: BATH
                              count: 16
                            - type: TOILET_PAPER
                            - type: HAIR_DRYER
                            - type: SLIPPERS
                              is_paid: true
                            - type: BIDET
                            - type: TOOTHBRUSH
                              is_paid: true
                            - type: SHAMPOO
                              is_paid: false
                            - type: CONDITIONER
                              is_paid: false
                            - type: BODY_SOAP
                              is_paid: true
                            - type: TOWEL
                              is_paid: false
                            - type: HOT_WATER
                      - bathroom_type: SHARED
                        bathroom_location: DOWN_THE_HALL
                        hostel_bathroom_details:
                          gender: MIXED
                          num_guests_with_access_type: NUMBER_LESS_THAN_5
                          bathroom_facilities:
                            - type: SHOWER
                              count: 98
                            - type: TOILET
                              count: 21
                            - type: SINK
                              count: 68
                            - type: BATH
                              count: 16
                            - type: TOILET_PAPER
                            - type: HAIR_DRYER
                            - type: SLIPPERS
                              is_paid: true
                            - type: BIDET
                            - type: TOOTHBRUSH
                              is_paid: true
                            - type: SHAMPOO
                              is_paid: false
                            - type: CONDITIONER
                              is_paid: false
                            - type: BODY_SOAP
                              is_paid: true
                            - type: TOWEL
                              is_paid: true
                            - type: HOT_WATER
              Disable hotel group bathroom details:
                description: Disable hotel group bathroom details
                value:
                  hotel_bathroom_details:
                    shared_bathroom_state: MISSING
                    private_bathroom_state: MISSING
                    number_of_bathrooms: 0
              Remove bathroom details for homes and hostel group:
                description: Remove bathroom details for homes and hostel group
                value:
                  property_bathroom_details:
                    bathrooms: []
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiResponseSuccessObject'
  /meta:
    get:
      tags:
        - Meta data endpoint
      summary: Retrieving facilities metadata
      description: Explore available facilities, facility IDs and applicable details.
      operationId: meta
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiResponseFacilityMeta'
components:
  schemas:
    AgeLimitDetails:
      type: object
      properties:
        age_limit:
          type: string
          description: Minimum age allowed
          enum:
            - AGE_1
            - AGE_2
            - AGE_3
            - AGE_4
            - AGE_5
            - AGE_6
            - AGE_7
            - AGE_8
            - AGE_9
            - AGE_10
            - AGE_11
            - AGE_12
            - NO_RESTRICTION
    ChargeDetails:
      type: object
      properties:
        price:
          type: number
          description: Price, in property's currency
          format: double
        frequency:
          type: string
          description: Charging frequency
          enum:
            - UNKNOWN_FREQUENCY
            - PER_STAY
            - PER_MINUTE
            - PER_HALF_HOUR
            - PER_HOUR
            - PER_DAY
            - PER_WEEK
      description: Charge details
    Daytime:
      type: object
      properties:
        hours:
          maximum: 23
          minimum: 0
          type: integer
          description: Hours, in 24h format
          format: int32
        minutes:
          maximum: 59
          minimum: 0
          type: integer
          description: Minutes
          format: int32
      description: Definition of a time in the day
    Instance:
      type: object
      properties:
        instance_id:
          type: integer
          description: Instance ID
          format: int32
        restaurant_details:
          $ref: '#/components/schemas/RestaurantDetails'
        parking_details:
          $ref: '#/components/schemas/ParkingDetails'
        payment_details:
          $ref: '#/components/schemas/PaymentDetails'
        swimming_pool_details:
          $ref: '#/components/schemas/SwimmingPoolDetails'
        internet_details:
          $ref: '#/components/schemas/InternetDetails'
        kids_pool_details:
          $ref: '#/components/schemas/KidsPoolDetails'
        on_site_details:
          $ref: '#/components/schemas/OnSiteDetails'
        age_limit_details:
          $ref: '#/components/schemas/AgeLimitDetails'
        schedule_details:
          $ref: '#/components/schemas/ScheduleDetails'
        temporarily_closed_details:
          $ref: '#/components/schemas/TemporarilyClosedDetails'
        surcharge_details:
          $ref: '#/components/schemas/SurchargeDetails'
        meal_details:
          $ref: '#/components/schemas/MealDetails'
      description: Property Facility Instance
    InternetDetails:
      required:
        - area
        - type
      type: object
      properties:
        area:
          type: string
          description: Connection location
          default: PUBLIC_AREAS
          enum:
            - UNKNOWN_COVERAGE
            - ALL_ROOMS
            - SOME_ROOMS
            - PUBLIC_AREAS
            - BUSINESS_CENTER
            - ENTIRE_PROPERTY
        type:
          type: string
          description: Connection type
          default: WIFI
          enum:
            - NONE
            - WIRED
            - WIFI
        wifi_info:
          $ref: '#/components/schemas/WifiInfo'
      description: Defines details of the Internet connection
    KidsPoolDetails:
      type: object
      properties:
        swimming_pool_dimensions:
          $ref: '#/components/schemas/SwimmingPoolDimensions'
        has_shallow_end:
          type: boolean
          description: Is there a shallow end?
          default: false
    MealDetails:
      required:
        - price
      type: object
      properties:
        breakfast_types:
          type: array
          items:
            type: string
            enum:
              - CONTINENTAL
              - ITALIAN
              - FULL_ENGLISH
              - VEGETARIAN
              - VEGAN
              - HALAL
              - GLUTEN_FREE
              - KOSHER
              - ASIAN
              - AMERICAN
              - BUFFET
              - A_LA_CARTE
              - BREAKFAST_TO_GO
        breakfast_food_item_types:
          type: array
          items:
            type: string
            enum:
              - BREAD
              - PASTRIES
              - PANCAKES
              - BUTTER
              - CHEESE
              - COLD_MEAT
              - EGGS
              - YOGURT
              - FRUITS
              - COFFEE
              - TEA
              - HOT_CHOCOLATE
              - CHAMPAGNE
              - A_LA_CARTE
              - LOCAL_SPECIALITY
              - COOKED_MEAL
              - JUICE
              - JAM
              - CEREAL
        price:
          maximum: 99999999999999.98
          minimum: 0.1
          type: number
    OnSiteDetails:
      type: object
      properties:
        onsite_type:
          type: string
          description: Facility location
          enum:
            - DEFAULT
            - ONSITE
            - OFFSITE
      description: Facility location details
    ParkingDetails:
      required:
        - name
        - parking_access
        - parking_location
        - parking_reservation
      type: object
      properties:
        name:
          type: string
          description: Name
        parking_type:
          type: string
          description: >-
            Type of parking. Corresponding legacy object in HDCN:
            ParkingFeePolicy/@ParkingType
          default: UNKNOWN_PARKING_TYPE
          enum:
            - UNKNOWN_PARKING_TYPE
            - PARKING_GARAGE
            - PARKING_LOT
            - STREET_PARKING
        parking_location:
          type: string
          description: Where is this parking located?
          enum:
            - ON_SITE
            - NEARBY
        parking_access:
          type: string
          description: >-
            Who can park here? Corresponding legacy object in HDCN:
            ParkingFeePolicy/@ParkingProperty
          enum:
            - ONLY_GUESTS
            - GENERAL_PUBLIC
        parking_reservation:
          type: string
          description: Is reservation possible/required?
          enum:
            - NEEDED
            - NOT_NEEDED
            - NOT_POSSIBLE
        max_height_m:
          maximum: 200
          minimum: 0
          type: number
          description: >-
            Height limit for cars. Corresponding legacy object in HDCN:
            ParkingFeePolicy/@ParkingReservation
          format: double
        has_valet_service:
          type: string
          description: Valet service available
          default: NOT_SPECIFIED
          enum:
            - NOT_SPECIFIED
            - PRESENT
            - MISSING
        has_onsite_staff:
          type: string
          description: Staff at the parking area
          default: NOT_SPECIFIED
          enum:
            - NOT_SPECIFIED
            - PRESENT
            - MISSING
        has_gated_parking:
          type: string
          description: Gate at the entrance / exit
          default: NOT_SPECIFIED
          enum:
            - NOT_SPECIFIED
            - PRESENT
            - MISSING
        has_security_cameras:
          type: string
          description: Security camera
          default: NOT_SPECIFIED
          enum:
            - NOT_SPECIFIED
            - PRESENT
            - MISSING
        has_ev_charging_station:
          type: string
          description: Electric vehicle charging station
          default: NOT_SPECIFIED
          enum:
            - NOT_SPECIFIED
            - PRESENT
            - MISSING
        has_accessible_parking_spots:
          type: string
          description: Accessible parking
          default: NOT_SPECIFIED
          enum:
            - NOT_SPECIFIED
            - PRESENT
            - MISSING
      description: Parking Details
    PaymentDetails:
      required:
        - charge_mode
      type: object
      properties:
        charge_mode:
          type: string
          description: Charge mode
          enum:
            - UNKNOWN_CHARGE_MODE
            - FREE
            - PAID
            - CHARGES_MAY_APPLY
        charge_details:
          $ref: '#/components/schemas/ChargeDetails'
      description: Payment Details
    PropertyFacility:
      required:
        - facility_id
        - state
      type: object
      properties:
        facility_id:
          type: integer
          description: Property Facility ID
          format: int32
        instances:
          type: array
          description: Array of instances
          items:
            $ref: '#/components/schemas/Instance'
        state:
          type: string
          description: Is facility Present/Missing?
          enum:
            - MISSING
            - PRESENT
        property_facility_meta:
          $ref: '#/components/schemas/PropertyFacilityMeta'
        facilityMetaType:
          $ref: '#/components/schemas/PropertyFacilityMeta'
      description: Property Facility object
    DetailsType:
      type: string
      description: Name of a details object that can be used in facility instances
      enum:
        - AgeLimitDetails
        - ChargeDetails
        - InternetDetails
        - KidsPoolDetails
        - OnSiteDetails
        - ParkingDetails
        - PaymentDetails
        - RestaurantDetails
        - ScheduleDetails
        - SurchargeDetails
        - SwimmingPoolDetails
        - TemporarilyClosedDetails
    PropertyFacilityMeta:
      type: object
      properties:
        facility_id:
          type: integer
          description: Booking.com Facility ID
          format: int32
        ota_hotel_amenity_type:
          type: integer
          description: OTA HAC (HotelAmenityCode)
          format: int32
        booking_extended_legacy_code:
          type: integer
          description: '[Legacy] Booking.com Extended HAC Facility Code'
          format: int32
        facility_name:
          type: string
          description: Name
        allowed_details_list:
          type: array
          description: >-
            List of applicable details types for this facility. Each item is the
            name of a details object that may be used in facility instances (for
            example: 'ScheduleDetails', 'SurchargeDetails').
          items:
            $ref: '#/components/schemas/DetailsType'
        required_details_list:
          type: array
          description: >-
            List of required details types for this facility. Each item is the
            name of a details object that must be provided in facility
            instances.
          items:
            $ref: '#/components/schemas/DetailsType'
      description: DEBUG ONLY. Contains Property Facility meta
    RestaurantDetails:
      required:
        - name
      type: object
      properties:
        name:
          type: string
          description: Name
        guests_only:
          type: boolean
          description: Open only to guests staying at the property
        accept_reservations:
          type: boolean
          description: Reservations welcomed
        outdoor_seating:
          type: boolean
          description: Outdoor seating
        meal_types_list:
          type: array
          description: >-
            Dietary options. Corresponding legacy object in HDCN:
            Restaurant/TPA_Extensions/@DietaryOption
          items:
            type: string
            enum:
              - UNKNOWN_MEAL_TYPE
              - HALAL
              - KOSHER
              - VEGETARIAN
              - VEGAN
              - GLUTEN_FREE
              - DAIRY_FREE
        ambiances_list:
          type: array
          description: >-
            Ambiance types. Corresponding legacy object in HDCN:
            Restaurant/TPA_Extensions/@Ambiance
          items:
            type: string
            enum:
              - UNKNOWN_AMBIANCE
              - FAMILY_KIDS_FRIENDLY
              - TRADITIONAL
              - MODERN
              - ROMANTIC
        open_for_meals_list:
          type: array
          description: >-
            Open for which meals? Corresponding legacy object in HDCN:
            Restaurant/ @OfferBreakfast,  @OfferBrunch, @OfferLunch,
            @OfferDinner
          items:
            type: string
            enum:
              - UNKNOWN_OPEN_FOR_MEALS
              - BREAKFAST
              - BRUNCH
              - LUNCH
              - DINNER
              - HIGH_TEA
              - COCKTAIL_HOUR
        cuisines_list:
          type: array
          description: >-
            Cuisine. Corresponding legacy object in HDCN:
            Restaurant/CuisineCodes
          items:
            type: string
            enum:
              - UNKNOWN_CUISINE
              - AFRICAN
              - AMERICAN
              - ARGENTINIAN
              - BELGIAN
              - BRAZILIAN
              - CAJUN_CREOLE
              - CAMBODIAN
              - CANTONESE
              - CARIBBEAN
              - CATALAN
              - CHINESE
              - DUTCH
              - BRITISH
              - ETHIOPIAN
              - FRENCH
              - GREEK
              - INDIAN
              - INDONESIAN
              - IRISH
              - ITALIAN
              - JAPANESE
              - KOREAN
              - MALAYSIAN
              - MEDITERRANEAN
              - MEXICAN
              - MIDDLE_EASTERN
              - MOROCCAN
              - NEPALESE
              - PERUVIAN
              - PIZZA
              - POLISH
              - PORTUGUESE
              - SCOTTISH
              - SEAFOOD
              - SICHUAN
              - SINGAPOREAN
              - SPANISH
              - STEAKHOUSE
              - SUSHI
              - TEXMEX
              - THAI
              - TURKISH
              - VIETNAMESE
              - AUSTRIAN
              - AUSTRALIAN
              - GERMAN
              - RUSSIAN
              - LOCAL
              - ASIAN
              - INTERNATIONAL
              - LATIN_AMERICAN
              - EUROPEAN
              - CROATIAN
              - HUNGARIAN
              - GRILL_BBQ
              - SOUTH_AFRICAN
        is_buffet:
          type: boolean
          description: Buffet menu
        is_alacarte:
          type: boolean
          description: A la carte menu
    ScheduleDetails:
      type: object
      properties:
        schedule:
          type: array
          items:
            $ref: '#/components/schemas/WeekTimeEntry'
      description: >-
        Defines a schedule for a Facility. Corresponding legacy object in HDCN:
        OperationTimes
    SurchargeDetails:
      type: object
      properties:
        surcharge_type:
          type: string
          description: Surcharge type (free/paid)
          enum:
            - DEFAULT
            - FREE
            - PAID
      description: Surcharge Details
    SwimmingPoolDetails:
      required:
        - name
        - swimming_pool_type
      type: object
      properties:
        name:
          type: string
        swimming_pool_type:
          type: string
          description: Swimming Pool Type
          default: UNKNOWN_AVAILABILITY
          enum:
            - UNKNOWN_POOL_TYPE
            - INDOOR
            - OUTDOOR
            - INDOOR_AND_OUTDOOR
        availability_type:
          type: string
          description: Availability
          default: UNKNOWN_AVAILABILITY
          enum:
            - UNKNOWN_AVAILABILITY
            - ALL_SEASON
            - SEASONABLE
        allowed_age_type:
          type: string
          description: Age restrictions
          default: UNKNOWN_AGE_TYPE
          enum:
            - UNKNOWN_AGE_TYPE
            - ADULTS_ONLY
            - KIDS_ONLY
            - ALL_AGES
        has_loungers:
          type: boolean
          description: Loungers available
        has_water_slide:
          type: boolean
          description: Water slide
        has_pool_bar:
          type: boolean
          description: Pool bar
        has_pool_cover:
          type: boolean
          description: Pool cover
        has_free_towels:
          type: boolean
          description: Free towels
        has_pool_toys:
          type: boolean
          description: Pool toys
        has_sun_umbrellas:
          type: boolean
          description: Sun umbrellas
        has_fence_around_pool:
          type: boolean
          description: Safety fence
        has_snake_trap:
          type: boolean
          description: Has a snake trap
        is_shared:
          type: boolean
          description: Is the swimming pool shared?
        is_rooftop:
          type: boolean
          description: Is a rooftop pool?
        is_shallow_end:
          type: boolean
          description: Is there a shallow end?
        is_infinity:
          type: boolean
          description: Is an infinity pool?
        is_heated:
          type: boolean
          description: Is a heated pool?
        is_salt_water:
          type: boolean
          description: Is a salt water pool?
        is_pool_with_view:
          type: boolean
          description: Scenic view
        is_plunge_pool:
          type: boolean
          description: Is a plunge pool?
    SwimmingPoolDimensions:
      type: object
      properties:
        length:
          type: number
          description: Pool length
          format: double
        width:
          type: number
          description: Pool width
          format: double
        depth_min:
          type: number
          description: Pool minimal depth
          format: double
        depth_max:
          type: number
          description: Pool maximal depth
          format: double
        unit:
          type: string
          description: Measurement unit
          enum:
            - METER
    TemporarilyClosedDetails:
      type: object
      properties:
        closed:
          type: array
          items:
            $ref: '#/components/schemas/TemporarilyClosedEntry'
      description: Temporarily Closed Facility Details
    TemporarilyClosedEntry:
      type: object
      properties:
        start_date:
          $ref: '#/components/schemas/StartTimestamp'
        end_date:
          $ref: '#/components/schemas/EndTimestamp'
      description: A range of dates
    StartTimestamp:
      type: object
      properties:
        epoch_seconds:
          type: integer
          format: int64
      description: Start date
    EndTimestamp:
      type: object
      properties:
        epoch_seconds:
          type: integer
          format: int64
      description: End date
    WeekTimeEntry:
      required:
        - day_of_week
        - from
        - to
      type: object
      properties:
        from:
          $ref: '#/components/schemas/Daytime'
        to:
          $ref: '#/components/schemas/Daytime'
        day_of_week:
          type: string
          description: >-
            Day of the week. Corresponding legacy object in HDCN:
            OperationTimes/OperationTime/
          enum:
            - UNKNOWN_DAY
            - MONDAY
            - TUESDAY
            - WEDNESDAY
            - THURSDAY
            - FRIDAY
            - SATURDAY
            - SUNDAY
      description: Describes opening times on a certain day of week
    WifiInfo:
      type: object
      properties:
        network_name:
          type: string
          description: Wi-fi network name (SSID)
        speed_download:
          type: number
          description: Download speed, mbps
          format: double
        speed_upload:
          type: number
          description: Upload speed, mbps
          format: double
      description: Provides information about Wi-Fi connection
    ApiError:
      type: object
      properties:
        message:
          type: string
        code:
          type: string
        details:
          type: object
    ApiResponseSuccessObject:
      type: object
      properties:
        data:
          $ref: '#/components/schemas/SuccessObject'
        warnings:
          type: array
          items:
            $ref: '#/components/schemas/ApiError'
        errors:
          type: array
          items:
            $ref: '#/components/schemas/ApiError'
        meta:
          $ref: '#/components/schemas/ResponseMeta'
    ResponseMeta:
      type: object
      properties:
        ruid:
          type: string
    SuccessObject:
      type: object
      properties:
        success:
          type: boolean
    CribDetails:
      type: object
      properties:
        is_foldable:
          type: boolean
          description: Foldable
          default: false
        is_standalone:
          type: boolean
          description: Standalone
          default: false
      description: Crib Details
    LinenDetails:
      type: object
      properties:
        has_crib_linen:
          type: boolean
          description: Crib (cot) linen
          default: false
        has_fitted_sheet:
          type: boolean
          description: Fitted sheet
          default: false
        has_top_sheet:
          type: boolean
          description: Top sheet
          default: false
        has_blanket:
          type: boolean
          description: Blanket
          default: false
        has_extra_blankets:
          type: boolean
          description: Extra blankets
          default: false
        has_pillow:
          type: boolean
          description: Pillow
          default: false
        has_mattress_protector:
          type: boolean
          description: Mattress protector
          default: false
      description: Linen Details
    RoomFacility:
      required:
        - room_facility_id
        - state
      type: object
      properties:
        room_facility_id:
          type: integer
          description: Room Facility ID
          format: int32
        state:
          type: string
          description: Is facility Present/Missing?
          enum:
            - MISSING
            - PRESENT
        room_facility_instances:
          type: array
          description: List of Room Facility Instances
          items:
            $ref: '#/components/schemas/RoomFacilityInstance'
        room_facility_meta:
          $ref: '#/components/schemas/RoomFacilityMeta'
        facilityMetaType:
          $ref: '#/components/schemas/RoomFacilityMeta'
    RoomFacilityInstance:
      type: object
      properties:
        linen_details:
          $ref: '#/components/schemas/LinenDetails'
        crib_details:
          $ref: '#/components/schemas/CribDetails'
      description: List of Room Facility Instances
    RoomFacilityMeta:
      type: object
      properties:
        room_facility_id:
          type: integer
          description: Booking.com Room Facility ID
          format: int32
        ota_room_amenity_type:
          type: integer
          description: OTA RMA (Room Amenity Type Code)
          format: int32
        booking_extended_legacy_code:
          type: integer
          description: '[Legacy] Booking.com Extended RMA Room Facility Code'
          format: int32
        room_facility_name:
          type: string
          description: Name
        allowed_details_list:
          type: array
          description: List of applicable Details Objects
          items:
            type: object
            description: List of applicable Details Objects
            anyOf:
              - $ref: '#/components/schemas/CribDetails'
              - $ref: '#/components/schemas/LinenDetails'
      description: DEBUG ONLY. Contains Room Facility meta
    Bathroom:
      required:
        - bathroom_type
      type: object
      properties:
        id:
          type: integer
          format: int32
        bathroom_type:
          type: string
          enum:
            - PRIVATE
            - SHARED
        bathroom_location:
          type: string
          enum:
            - ENSUITE
            - NEXT_DOOR
            - DOWN_THE_HALL
            - OPPOSITE_THE_ROOM
            - IN_THE_HALLWAY
            - OTHER
            - INSIDE_THE_UNIT
        hostel_bathroom_details:
          $ref: '#/components/schemas/HostelBathroomDetails'
    BathroomDetails:
      type: object
      properties:
        property_bathroom_details:
          $ref: '#/components/schemas/PropertyBathroomDetails'
        hotel_bathroom_details:
          $ref: '#/components/schemas/HotelBathroomDetails'
    HostelBathroomDetails:
      required:
        - bathroom_facilities
      type: object
      properties:
        gender:
          type: string
          enum:
            - FEMALE
            - MALE
            - MIXED
        num_guests_with_access_type:
          type: string
          enum:
            - NUMBER_LESS_THAN_5
            - NUMBER_5_TO_10
            - NUMBER_11_TO_20
            - NUMBER_21_TO_30
            - NUMBER_31_TO_40
            - NUMBER_41_TO_50
            - NUMBER_MORE_THAN_50
        bathroom_facilities:
          type: array
          items:
            $ref: '#/components/schemas/HostelBathroomFacility'
    HostelBathroomFacility:
      required:
        - type
      type: object
      properties:
        type:
          type: string
          enum:
            - SHOWER
            - TOILET
            - SINK
            - BATH
            - TOILET_PAPER
            - HAIR_DRYER
            - SLIPPERS
            - BIDET
            - TOOTHBRUSH
            - SHAMPOO
            - CONDITIONER
            - BODY_SOAP
            - TOWEL
            - HOT_WATER
        count:
          maximum: 100
          minimum: 1
          type: integer
          format: int32
        is_paid:
          type: boolean
    HotelBathroomDetails:
      required:
        - number_of_bathrooms
        - private_bathroom_state
        - shared_bathroom_state
      type: object
      properties:
        private_bathroom_state:
          type: string
          enum:
            - MISSING
            - PRESENT
        shared_bathroom_state:
          type: string
          enum:
            - MISSING
            - PRESENT
        private_bathroom_details:
          $ref: '#/components/schemas/PrivateBathroomDetails'
        number_of_bathrooms:
          maximum: 20
          minimum: 0
          type: integer
          format: int32
    PrivateBathroomDetails:
      type: object
      properties:
        type:
          type: string
          enum:
            - DEFAULT
            - EXTERNAL_BATHROOM
            - ATTACHED_BATHROOM
        location_type:
          type: string
          enum:
            - DEFAULT
            - NEXT_DOOR
            - DOWN_THE_HALL
            - ACROSS_FROM_THE_ROOM
            - IN_THE_LOBBY
            - OTHER
        location_other:
          type: string
    PropertyBathroomDetails:
      required:
        - bathrooms
      type: object
      properties:
        bathrooms:
          maxItems: 20
          minItems: 0
          type: array
          items:
            $ref: '#/components/schemas/Bathroom'
    ApiResponseListPropertyFacility:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/PropertyFacility'
        warnings:
          type: array
          items:
            $ref: '#/components/schemas/ApiError'
        errors:
          type: array
          items:
            $ref: '#/components/schemas/ApiError'
        meta:
          $ref: '#/components/schemas/ResponseMeta'
    ApiResponseListRoomFacility:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/RoomFacility'
        warnings:
          type: array
          items:
            $ref: '#/components/schemas/ApiError'
        errors:
          type: array
          items:
            $ref: '#/components/schemas/ApiError'
        meta:
          $ref: '#/components/schemas/ResponseMeta'
    ApiResponseBathroomDetails:
      type: object
      properties:
        data:
          $ref: '#/components/schemas/BathroomDetails'
        warnings:
          type: array
          items:
            $ref: '#/components/schemas/ApiError'
        errors:
          type: array
          items:
            $ref: '#/components/schemas/ApiError'
        meta:
          $ref: '#/components/schemas/ResponseMeta'
    ApiResponseFacilityMeta:
      type: object
      properties:
        data:
          $ref: '#/components/schemas/FacilityMeta'
        warnings:
          type: array
          items:
            $ref: '#/components/schemas/ApiError'
        errors:
          type: array
          items:
            $ref: '#/components/schemas/ApiError'
        meta:
          $ref: '#/components/schemas/ResponseMeta'
    BathroomConfiguration:
      type: object
      properties:
        unit_type_id:
          type: integer
          format: int32
        unit_type_name:
          type: string
        allowed_options:
          type: array
          items:
            $ref: '#/components/schemas/BathroomOptions'
    BathroomOptions:
      type: object
      properties:
        bathroom_type:
          type: string
          enum:
            - PRIVATE
            - SHARED
        bathroom_locations:
          type: array
          items:
            type: string
            enum:
              - ENSUITE
              - NEXT_DOOR
              - DOWN_THE_HALL
              - OPPOSITE_THE_ROOM
              - IN_THE_HALLWAY
              - OTHER
              - INSIDE_THE_UNIT
    FacilityMeta:
      type: object
      properties:
        property_facility_metas:
          type: array
          items:
            $ref: '#/components/schemas/PropertyFacilityMeta'
        room_facility_metas:
          type: array
          items:
            $ref: '#/components/schemas/RoomFacilityMeta'
        bathroom_configurations:
          type: array
          items:
            $ref: '#/components/schemas/BathroomConfiguration'
      description: Contains meta data about property & room facilities
