{
  "openapi": "3.0.1",
  "info": {
    "title": "Facilities API",
    "description": "Manage facilities at both the property- and room-level.<br>\nBooking.com supports adding or assigning a variety of different facilities at the property- or room-level.\nSpecify the facility ID along with any required parameters to assign a facility.<br><br>Facilities are of the following types:\n<ul><li>Single-instance facilities: You can assign these facilities only once to a property or a room.\nAn example of a single-instance facility is: room service. There are two types of single-instance facilities:\n<ul><li>Single-instance facilities that can be toggled on or off.</li><li>Single-instance facilities supporting optional parameters:\nAllows you to specify more details about the facility</li></ul><li>Multi-instance facilities:\nYou can assign multiple facilities of this type to a property.\nWhen adding multi-instance facilities you must provide additional details to add to a property or a room.\nExamples of multi-instance facilities are: Restaurant, Swimming pool and Parking.</li></ul>\n",
    "contact": {
      "name": "Connectivity Team",
      "url": "https://connect.booking.com",
      "email": "connectivity@booking.com"
    },
    "version": "1.0"
  },
  "servers": [
    {
      "url": "https://supply-xml.booking.com/",
      "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.\n\nUse the **Try it** feature to send sample requests to API endpoints directly from the developer portal. In the **Mock (schema only)** environment, Try it returns schema-driven mock responses or pre-built example responses. In the **Production** environment, it sends the request to the live API and returns dynamic responses from your selected test property.\n\n## Environment\n\nYou can select between two different environments (top right corner in the UI):\n\n**Mock (schema only)** (default):\n- Helps to understand the response data schema\n- Recommended for all write operations (POST, PUT, DELETE)\n- Environment for testing without affecting live/test data\n\n**Test live endpoint**:\n- Make sure to use only test properties.\n- Changes will affect your test property data\n- Requires valid credentials\n- Same API structure as production\n\n## Request\n\nYou can click on any unresolved placeholders to add a value or edit an existing placeholder value.\n\nThe 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.\n\nSome helpful pointers before running a request:\n\n- **Authentication** (when using live endpoint): Configure your authentication headers\n  - API Key or OAuth token as required. Use the **Environments** tab.\n  - Make sure to manage separate machine accounts for test vs. properties in production.\n  - Ensure credentials match your selected environment.\n\n- **Parameters**: Fill in required parameters\n  - Path parameters (like `propertyId`)\n  - Query parameters (like `language_code`)\n  - Request body for `POST/PUT` operations\n\n- **Execute**: Click **Send** to send the request\n  - The request is sent to the selected environment\n  - When sending requests to the live endpoint, real HTTP request is made to the API\n\n## Response\n\nThe Try it feature provides comprehensive response information to the extent supported by the Open API specification:\n\n### Status code\n- **2xx**: Success responses (200)\n- **4xx**: Client errors (400 Bad Request, 401 Unauthorized, 404 Not Found)\n- **5xx**: Server errors (500 Internal Server Error)\n\n### Response body\n- JSON formatted response data\n\nIf the returned response, by default, is unformatted, select the supported Response body format in the UI.\n\n### Response headers\n- Content-Type, Content-Length.\n\n## Environments\n\nThe **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.\n\n### Variables\n\nMost 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.\n\n#### Path parameters\n- **Required**: Must be provided to make the request\n- **Type validation**: Ensures correct data types (integer, string, etc.)\n- **Example**: `propertyId` in `/facilities-api/properties/{propertyId}`\n\n#### Query parameters\n- **Optional**: Usually have default values\n- **Example**: `language_code` with `en-us` as the default value\n\n#### Request body\n- **Schema validation**: Follows OpenAPI schema definitions\n- **Example data**: Prepopulated with sample values\n\n## Best practices\n\nThis section provides some basic practice guidelines.\n\n### Authentication\n\n- Always use separate machine accounts for test properties vs. properties in production.\n- When testing with production endpoint, make sure to use only test properties.\n\n### For Read operations (GET)\n- Safe to test in any environment\n- Use valid IDs that exist in your system\n- Check response structure for integration planning\n\n### For Write operations (POST, PUT)\n- **Always use Mock (schema only) environment first**\n- Verify request payload structure\n- Check response for success confirmation\n- Test error scenarios with invalid data\n\n### For Delete operations (DELETE)\n- **Preferable to use Mock (schema only) environment only**\n- Understand the operation is irreversible\n- Have backup data when testing using test properties\n\n## Troubleshooting\n\n### Common issues\n\n**401 Unauthorized**\n- Check authentication credentials\n- Verify API key is valid and not expired\n- Ensure credentials match the selected environment\n\n**400 Bad Request**\n- Validate request payload against schema\n- Check required fields are provided\n- Verify data types match specification\n\n**404 Not Found**\n- Confirm the resource ID exists\n- Check the endpoint URL is correct\n- Verify you have access to the resource\n\n### Getting help\n\nIf you encounter issues:\n1. Check the response error message for details\n2. Verify your request matches the API specification\n3. Contact the Connectivity Team for support\n\n---\n\n*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:\n<ul><li>Retrieve property-level facilities details</li>\n<li>Add, modify or delete property-level facilities details<ul><li>Add single-instance facilities</li>\n<li>Add multi-instance facilities</li></ul></li></ul>\n"
    },
    {
      "name": "Manage room facilities",
      "description": "Use the GET and the PUT endpoints to:\n<ul><li>Retrieve room facilities set for a property.</li><li>Add, modify or delete room facilities.</li></ul>\n"
    },
    {
      "name": "Manage bathrooms",
      "description": "Use the GET and the PUT endpoints to:\n<ul><li>Retrieve room bathroom configuration</li>\n<li>Add, modify or delete room-level bathroom information</li></ul>\n"
    },
    {
      "name": "Meta data endpoint",
      "description": "<p>Retrieve the latest facility definitions.</p>\n<ul>\n<li>Get the list of all supported facilities<ul>\n<li>To get the details of a property-level facility: Look for a matching name under the facility_name in the response.\nTo add this facility, you must specify the facility_id.\nProperty-level facilities are listed under the property_facility_metas in the meta endpoint response.</li>\n<li>To get the details of the room-level facility: Look for a matching name under the room_facility_name in the response.\nTo add the facility, you must specify the room_facility_id.\nRoom-level facilities are listed under the room_facility_metas in the meta endpoint response.</li>\n</ul>\n</li>\n<li>Details of the facilities such as ID, OTA code and any optional parameters.</li>\n</ul>\n"
    }
  ],
  "x-tagGroups": [
    {
      "name": "API Endpoints",
      "tags": [
        "Manage property facilities",
        "Manage room facilities",
        "Manage bathrooms",
        "Meta data endpoint"
      ]
    },
    {
      "name": "Documentation",
      "tags": [
        "About Try it"
      ]
    }
  ],
  "paths": {
    "/facilities-api/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"
            }
          },
          {
            "name": "debugInfo",
            "in": "query",
            "required": false,
            "description": "When set to `true`, attaches facility metadata (facility names, OTA codes, allowed detail types) to each item in the response. Significantly increases payload size. Do not use in production environments.",
            "schema": {
              "type": "string",
              "default": "false"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiResponseListPropertyFacility"
                },
                "example": {
                  "data": [],
                  "warnings": [],
                  "errors": [],
                  "meta": {
                    "ruid": "46fc2375-ed22-430f-8ec4-06d5eca1efbe"
                  }
                }
              }
            }
          }
        }
      },
      "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 the available request examples in the specification.\n\nTo delete a facility or all instances of a multi-instance facility (for example: all parking facility), you can change the facility state to `MISSING`.\n\n**Important — overlay semantics for multi-instance facilities:** This endpoint replaces the full set of instances for any facility you include in the request. If you omit an existing instance, it is permanently deleted. Facility types not included in the request are unaffected.\n\nBefore updating a multi-instance facility (Parking, Restaurant, Swimming Pool), call `GET /facilities-api/properties/{propertyId}` to retrieve the current instance IDs for that facility, then include **all** of them alongside your changes in the PUT body. To add a new instance without disturbing existing ones, include the existing instances with their `instance_id` values plus the new instance (without an `instance_id`).\n",
        "operationId": "setFacilities",
        "parameters": [
          {
            "name": "propertyId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/PropertyFacilityRequest"
                }
              },
              "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 parking facilities (multi-instance)": {
                  "description": "Add parking facilities with detailed options",
                  "value": [
                    {
                      "facility_id": 2,
                      "instances": [
                        {
                          "parking_details": {
                            "name": "Basement Parking",
                            "parking_type": "PARKING_LOT",
                            "parking_location": "NEARBY",
                            "parking_access": "ONLY_GUESTS",
                            "parking_reservation": "NEEDED",
                            "has_valet_service": "PRESENT",
                            "has_onsite_staff": "PRESENT",
                            "has_security_cameras": "PRESENT",
                            "has_ev_charging_station": "PRESENT",
                            "has_gated_parking": "PRESENT",
                            "has_accessible_parking_spots": "PRESENT"
                          },
                          "payment_details": {
                            "charge_mode": "PAID",
                            "charge_details": {
                              "price": 10,
                              "frequency": "PER_STAY"
                            }
                          }
                        },
                        {
                          "parking_details": {
                            "name": "QuickPark",
                            "parking_location": "ON_SITE",
                            "parking_access": "GENERAL_PUBLIC",
                            "parking_reservation": "NOT_NEEDED",
                            "has_gated_parking": "PRESENT"
                          },
                          "payment_details": {
                            "charge_mode": "FREE"
                          }
                        }
                      ],
                      "state": "PRESENT"
                    }
                  ]
                },
                "Add restaurant facility (multi-instance)": {
                  "description": "Add a restaurant facility with details",
                  "value": [
                    {
                      "facility_id": 3,
                      "instances": [
                        {
                          "restaurant_details": {
                            "name": "Tastymenu",
                            "guests_only": false,
                            "accept_reservations": false,
                            "outdoor_seating": true,
                            "meal_types_list": [
                              "HALAL",
                              "KOSHER",
                              "VEGETARIAN",
                              "VEGAN",
                              "GLUTEN_FREE",
                              "DAIRY_FREE"
                            ],
                            "ambiances_list": [
                              "FAMILY_KIDS_FRIENDLY",
                              "ROMANTIC"
                            ],
                            "open_for_meals_list": [
                              "BREAKFAST",
                              "DINNER"
                            ],
                            "cuisines_list": [
                              "AMERICAN",
                              "DUTCH",
                              "BRITISH",
                              "FRENCH"
                            ],
                            "is_buffet": false,
                            "is_alacarte": true
                          }
                        }
                      ],
                      "state": "PRESENT"
                    }
                  ]
                },
                "Add swimming pool facility (multi-instance)": {
                  "description": "Add swimming pool facility with details",
                  "value": [
                    {
                      "facility_id": 433,
                      "state": "PRESENT",
                      "instances": [
                        {
                          "swimming_pool_details": {
                            "name": "rooftop pool",
                            "swimming_pool_type": "OUTDOOR",
                            "availability_type": "SEASONABLE",
                            "allowed_age_type": "ALL_AGES",
                            "has_water_slide": true,
                            "has_pool_bar": true,
                            "has_pool_cover": true,
                            "has_free_towels": true,
                            "has_pool_toys": true,
                            "has_sun_umbrellas": true,
                            "has_fence_around_pool": true,
                            "has_snake_trap": true,
                            "is_shared": true,
                            "is_rooftop": true,
                            "is_shallow_end": true,
                            "is_infinity": true,
                            "is_heated": true,
                            "is_salt_water": true,
                            "is_pool_with_view": true,
                            "is_plunge_pool": true
                          },
                          "surcharge_details": {
                            "surcharge_type": "PAID"
                          }
                        }
                      ]
                    }
                  ]
                },
                "Update existing and add new swimming pool instance": {
                  "description": "Update an existing swimming pool instance and add a new one in the same request. Include `instance_id` for each instance you want to update; omit it for new instances. **You must include all existing instances** — any instance omitted from this array will be permanently deleted.",
                  "value": [
                    {
                      "facility_id": 433,
                      "state": "PRESENT",
                      "instances": [
                        {
                          "instance_id": 12345678,
                          "swimming_pool_details": {
                            "name": "rooftop pool",
                            "swimming_pool_type": "OUTDOOR",
                            "availability_type": "ALL_SEASON",
                            "allowed_age_type": "ALL_AGES",
                            "has_pool_bar": true,
                            "has_free_towels": true,
                            "has_sun_umbrellas": true,
                            "is_rooftop": true,
                            "is_heated": true,
                            "is_pool_with_view": true
                          },
                          "surcharge_details": {
                            "surcharge_type": "FREE"
                          }
                        },
                        {
                          "swimming_pool_details": {
                            "name": "indoor pool",
                            "swimming_pool_type": "INDOOR",
                            "availability_type": "ALL_SEASON",
                            "allowed_age_type": "ALL_AGES",
                            "has_loungers": true,
                            "has_pool_cover": true,
                            "is_heated": true,
                            "is_shared": false
                          },
                          "surcharge_details": {
                            "surcharge_type": "FREE"
                          }
                        }
                      ]
                    }
                  ]
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiResponseSuccess"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request payload. The `errors` array contains one or more entries with `code: 320`. The `details.fields` path identifies the exact field that failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiResponseSuccessObject"
                },
                "examples": {
                  "Missing instances for multi-instance facility": {
                    "description": "A multi-instance facility (Parking, Restaurant, Swimming Pool) was submitted without an `instances` array.",
                    "value": {
                      "warnings": [],
                      "errors": [
                        {
                          "message": "Invalid value",
                          "code": 320,
                          "details": {
                            "fields": [
                              "property_facility_list[0]"
                            ]
                          },
                          "description": "instances required for facility_id: 2"
                        }
                      ],
                      "meta": {
                        "ruid": "f5197afa-4ec2-4236-89d1-b18ed4fda4f5"
                      }
                    }
                  },
                  "Missing required details object": {
                    "description": "The `instances` array is present but the required details sub-object is missing. For Parking, both `parking_details` and `payment_details` are required.",
                    "value": {
                      "warnings": [],
                      "errors": [
                        {
                          "message": "Invalid value",
                          "code": 320,
                          "details": {
                            "fields": [
                              "property_facility_list[0]"
                            ]
                          },
                          "description": "instances.parking_details required for facility_id: 2"
                        }
                      ],
                      "meta": {
                        "ruid": "0073237f-34a3-46b0-bd6c-55629f257761"
                      }
                    }
                  },
                  "Missing required field in details object": {
                    "description": "A required field inside a details object is null or absent. The `details.fields` path pinpoints the exact field.",
                    "value": {
                      "warnings": [],
                      "errors": [
                        {
                          "message": "Invalid value",
                          "code": 320,
                          "details": {
                            "fields": [
                              "property_facility_list[0].instances[0].parking_details.name"
                            ],
                            "facility_id": 2,
                            "instance_id": null
                          },
                          "description": "must not be null"
                        }
                      ],
                      "meta": {
                        "ruid": "X-RUID-EXAMPLE"
                      }
                    }
                  },
                  "Duplicate instance names": {
                    "description": "Two instances of the same multi-instance facility share the same `name`. Names must be unique per facility per property.",
                    "value": {
                      "warnings": [],
                      "errors": [
                        {
                          "message": "Invalid value",
                          "code": 320,
                          "details": {
                            "fields": [
                              "property_facility_list[0]"
                            ]
                          },
                          "description": "name must be unique for instances in facility_id: 2"
                        }
                      ],
                      "meta": {
                        "ruid": "6dc95763-7ad3-4c76-9f88-e363f84a29f9"
                      }
                    }
                  },
                  "Unrecognized field": {
                    "description": "The request body contains a field name the API does not recognize.",
                    "value": {
                      "warnings": [],
                      "errors": [
                        {
                          "message": "Invalid value",
                          "code": 320,
                          "details": {
                            "fields": [
                              "instances.wrong_field"
                            ],
                            "facility_id": 2,
                            "instance_id": null
                          },
                          "description": "Unrecognized field \"wrong_field\""
                        }
                      ],
                      "meta": {
                        "ruid": "X-RUID-EXAMPLE"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/facilities-api/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": "propertyId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "roomId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "debugInfo",
            "in": "query",
            "required": false,
            "description": "When set to `true`, attaches room facility metadata (facility names, OTA codes, allowed detail types) to each item in the response. Significantly increases payload size. Do not use in production environments.",
            "schema": {
              "type": "string",
              "default": "false"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiResponseListRoomFacility"
                },
                "example": {
                  "data": [],
                  "warnings": [],
                  "errors": [],
                  "meta": {
                    "ruid": "59b721b1-7d21-4cce-b847-79e5ccb6399f"
                  }
                }
              }
            }
          }
        }
      },
      "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"
            }
          },
          {
            "name": "roomId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/RoomFacilityRequest"
                }
              },
              "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": 125,
                      "state": "PRESENT",
                      "room_facility_instances": [
                        {
                          "linen_details": {
                            "has_crib_linen": true,
                            "has_fitted_sheet": true,
                            "has_top_sheet": false,
                            "has_blanket": true,
                            "has_extra_blankets": false,
                            "has_pillow": true,
                            "has_mattress_protector": false
                          }
                        }
                      ]
                    },
                    {
                      "room_facility_id": 175,
                      "state": "PRESENT",
                      "room_facility_instances": [
                        {
                          "crib_details": {
                            "is_foldable": false,
                            "is_standalone": true
                          }
                        }
                      ]
                    }
                  ]
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiResponseSuccess"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request payload. The `errors` array contains one or more entries with `code: 320`. The `details.fields` path identifies the exact field that failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiResponseSuccessObject"
                },
                "examples": {
                  "Unrecognized field in room facility": {
                    "description": "The request body contains a field name the API does not recognize for a room facility instance.",
                    "value": {
                      "warnings": [],
                      "errors": [
                        {
                          "message": "Invalid value",
                          "code": 320,
                          "details": {
                            "fields": [
                              "instances.wrong_field"
                            ],
                            "room_facility_id": 175,
                            "instance_id": null
                          },
                          "description": "Unrecognized field \"wrong_field\""
                        }
                      ],
                      "meta": {
                        "ruid": "X-RUID-EXAMPLE"
                      }
                    }
                  },
                  "Missing required field": {
                    "description": "A required field is null or absent. The `details.fields` path pinpoints the exact field.",
                    "value": {
                      "warnings": [],
                      "errors": [
                        {
                          "message": "Invalid value",
                          "code": 320,
                          "details": {
                            "fields": [
                              "room_facility_list[0].room_facility_id"
                            ]
                          },
                          "description": "must not be null"
                        }
                      ],
                      "meta": {
                        "ruid": "X-RUID-EXAMPLE"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/facilities-api/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"
            }
          },
          {
            "name": "roomId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "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.\n\n**Important — overlay semantics:** This endpoint uses full-replace mode. Any bathroom definition absent from the request body is permanently deleted. Before updating existing bathroom configuration, call `GET /facilities-api/properties/{propertyId}/rooms/{roomId}/bathrooms` to retrieve the current state, then include all existing bathroom entries in your PUT body alongside any changes.",
        "operationId": "setBathroomDetails",
        "parameters": [
          {
            "name": "propertyId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "roomId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BathroomDetailsRequest"
              },
              "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/ApiResponseSuccess"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request payload. The `errors` array contains one or more entries with `code: 320`. The `details.fields` path identifies the exact field that failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiResponseSuccessObject"
                },
                "examples": {
                  "Hostel private bathroom limit exceeded": {
                    "description": "A hostel property cannot have more than 1 private bathroom.",
                    "value": {
                      "warnings": [],
                      "errors": [
                        {
                          "message": "Invalid value",
                          "code": 320,
                          "details": {
                            "fields": [
                              "property_bathroom_details.bathrooms"
                            ]
                          },
                          "description": "Hostel properties support a maximum of 1 private bathroom and 5 shared bathrooms."
                        }
                      ],
                      "meta": {
                        "ruid": "X-RUID-EXAMPLE"
                      }
                    }
                  },
                  "Shared hostel bathroom missing required fields": {
                    "description": "A SHARED hostel bathroom must include `gender` and `num_guests_with_access_type`.",
                    "value": {
                      "warnings": [],
                      "errors": [
                        {
                          "message": "Invalid value",
                          "code": 320,
                          "details": {
                            "fields": [
                              "property_bathroom_details.bathrooms[0].hostel_bathroom_details.gender"
                            ]
                          },
                          "description": "must not be null"
                        }
                      ],
                      "meta": {
                        "ruid": "X-RUID-EXAMPLE"
                      }
                    }
                  },
                  "Hotel bathroom state and count inconsistency": {
                    "description": "Both `private_bathroom_state` and `shared_bathroom_state` are MISSING but `number_of_bathrooms` is greater than 0.",
                    "value": {
                      "warnings": [],
                      "errors": [
                        {
                          "message": "Invalid value",
                          "code": 320,
                          "details": {
                            "fields": [
                              "hotel_bathroom_details.number_of_bathrooms"
                            ]
                          },
                          "description": "number_of_bathrooms must be 0 when both private_bathroom_state and shared_bathroom_state are MISSING"
                        }
                      ],
                      "meta": {
                        "ruid": "X-RUID-EXAMPLE"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/facilities-api/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"
      },
      "InstanceRequest": {
        "type": "object",
        "properties": {
          "instance_id": {
            "type": "integer",
            "description": "ID of an existing instance. Include this when updating an existing instance. Omit it when creating a new one. Retrieve current instance IDs from `GET /facilities-api/properties/{propertyId}` before calling PUT."
          },
          "restaurant_details": {
            "allOf": [
              {
                "$ref": "#/components/schemas/RestaurantDetailsRequest"
              }
            ],
            "description": "Applicable to: RESTAURANT (3). Required for this facility. See GET /facilities-api/meta for the full allowed_details_list per facility."
          },
          "parking_details": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ParkingDetailsRequest"
              }
            ],
            "description": "Applicable to: PARKING (2). Required for this facility. Always appears together with payment_details."
          },
          "payment_details": {
            "allOf": [
              {
                "$ref": "#/components/schemas/PaymentDetailsRequest"
              }
            ],
            "description": "Applicable to: PARKING (2) — required, always paired with parking_details; INTERNET_SERVICES (47) — paired with internet_details."
          },
          "swimming_pool_details": {
            "allOf": [
              {
                "$ref": "#/components/schemas/SwimmingPoolDetailsRequest"
              }
            ],
            "description": "Applicable to: SWIMMING_POOL (433). Required for this facility. May appear alongside surcharge_details, schedule_details, or temporarily_closed_details."
          },
          "internet_details": {
            "allOf": [
              {
                "$ref": "#/components/schemas/InternetDetailsRequest"
              }
            ],
            "description": "Applicable to: INTERNET_SERVICES (47). Always appears together with payment_details."
          },
          "kids_pool_details": {
            "allOf": [
              {
                "$ref": "#/components/schemas/KidsPoolDetails"
              }
            ],
            "description": "Applicable to: KIDS_POOL (258)."
          },
          "on_site_details": {
            "allOf": [
              {
                "$ref": "#/components/schemas/OnsiteDetails"
              }
            ],
            "description": "Applicable to facilities where on-site vs off-site location is relevant, including: TENNISCOURT (9), FISHING (19), SKIING (26), WINDSURFING (61), CANOEING (69), HIKING (70), CYCLING (76), BOWLING (77), DIVING (82), HORSERIDING (86), SQUASH (87), SNORKELING (90), AQUA_PARK (148), and various activity facilities (400–414). See GET /facilities-api/meta for the full list."
          },
          "age_limit_details": {
            "allOf": [
              {
                "$ref": "#/components/schemas/AgeLimitDetails"
              }
            ],
            "description": "Applicable to: KID_MEALS (176), CHILD_FRIENDLY_BUFFET (177)."
          },
          "schedule_details": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ScheduleDetailsRequest"
              }
            ],
            "description": "Applicable to facilities with opening hours or schedules, including: RESTAURANT (3), SAUNA (10), FITNESS_ROOM (11), LAUNDRY (22), SOLARIUM (50), CHILDREN_PLAY_GROUND (56), HOT_TUB (63), TURKISHSTEAM_BATH (79), LUGGAGE_STORAGE (91), HOT_SPRING_BATH (138), KIDS_CLUB (144), COFFEE_SHOP_ONSITE (219), STEAM_ROOM (241), SWIMMING_POOL (433), BREAKFAST (9111). See GET /facilities-api/meta for the full list."
          },
          "temporarily_closed_details": {
            "allOf": [
              {
                "$ref": "#/components/schemas/TemporarilyClosedDetails"
              }
            ],
            "description": "Applicable to: RESTAURANT (3), BAR (7), SAUNA (10), SPA_AND_WELLNESS_CENTRE (54), HOT_TUB (63), FITNESS (253), SWIMMING_POOL (433)."
          },
          "surcharge_details": {
            "allOf": [
              {
                "$ref": "#/components/schemas/SurchargeDetails"
              }
            ],
            "description": "Applicable to facilities where a surcharge or free-of-charge distinction is relevant. Applies to a large number of facilities including MEETINGBANQUET_FACILITIES (6), TENNISCOURT (9), SAUNA (10), FITNESS_ROOM (11), BUSINESS_CENTER (20), LAUNDRY (22), SPA_AND_WELLNESS_CENTRE (54), SWIMMING_POOL (433), and many others. See GET /facilities-api/meta for the full list."
          },
          "meal_details": {
            "allOf": [
              {
                "$ref": "#/components/schemas/MealDetailsRequest"
              }
            ],
            "description": "Applicable to meal facilities. Required by: BREAKFAST (9111), LUNCH_AVAILABLE (9114), DINNER_AVAILABLE (9115)."
          }
        },
        "description": "A property facility instance. The valid detail objects for a given instance depend on the parent facility_id — only detail types listed in that facility's allowed_details_list (from GET /facilities-api/meta) will be present. Multiple compatible detail types (e.g. swimming_pool_details + surcharge_details) can appear in the same instance."
      },
      "InstanceResponse": {
        "description": "A property facility instance. The shape depends on the parent facility_id — see GET /facilities-api/meta for the allowed_details_list per facility.",
        "anyOf": [
          {
            "title": "Parking instance",
            "type": "object",
            "description": "Applicable to: PARKING (2).",
            "properties": {
              "instance_id": {
                "type": "integer",
                "description": "Instance ID",
                "format": "int32"
              },
              "parking_details": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/ParkingDetailsResponse"
                  }
                ],
                "description": "Applicable to: PARKING (2). Always appears together with payment_details."
              },
              "payment_details": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/PaymentDetailsResponse"
                  }
                ],
                "description": "Payment details for the parking facility."
              }
            }
          },
          {
            "title": "Restaurant instance",
            "type": "object",
            "description": "Applicable to: RESTAURANT (3).",
            "properties": {
              "instance_id": {
                "type": "integer",
                "description": "Instance ID",
                "format": "int32"
              },
              "restaurant_details": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/RestaurantDetailsResponse"
                  }
                ],
                "description": "Applicable to: RESTAURANT (3)."
              },
              "schedule_details": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/ScheduleDetailsResponse"
                  }
                ],
                "description": "Opening hours for the restaurant."
              },
              "temporarily_closed_details": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/TemporarilyClosedDetails"
                  }
                ],
                "description": "Temporary closure dates for the restaurant."
              }
            }
          },
          {
            "title": "Internet instance",
            "type": "object",
            "description": "Applicable to: INTERNET_SERVICES (47).",
            "properties": {
              "instance_id": {
                "type": "integer",
                "description": "Instance ID",
                "format": "int32"
              },
              "internet_details": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/InternetDetailsResponse"
                  }
                ],
                "description": "Applicable to: INTERNET_SERVICES (47). Always appears together with payment_details."
              },
              "payment_details": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/PaymentDetailsResponse"
                  }
                ],
                "description": "Payment details for the internet service."
              }
            }
          },
          {
            "title": "Swimming pool instance",
            "type": "object",
            "description": "Applicable to: SWIMMING_POOL (433).",
            "properties": {
              "instance_id": {
                "type": "integer",
                "description": "Instance ID",
                "format": "int32"
              },
              "swimming_pool_details": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/SwimmingPoolDetailsResponse"
                  }
                ],
                "description": "Applicable to: SWIMMING_POOL (433)."
              },
              "surcharge_details": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/SurchargeDetails"
                  }
                ],
                "description": "Whether the pool is free or paid."
              },
              "schedule_details": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/ScheduleDetailsResponse"
                  }
                ],
                "description": "Opening hours for the pool."
              },
              "temporarily_closed_details": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/TemporarilyClosedDetails"
                  }
                ],
                "description": "Temporary closure dates for the pool."
              }
            }
          },
          {
            "title": "Kids pool instance",
            "type": "object",
            "description": "Applicable to: KIDS_POOL (258).",
            "properties": {
              "instance_id": {
                "type": "integer",
                "description": "Instance ID",
                "format": "int32"
              },
              "kids_pool_details": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/KidsPoolDetails"
                  }
                ],
                "description": "Applicable to: KIDS_POOL (258)."
              }
            }
          },
          {
            "title": "Meal instance",
            "type": "object",
            "description": "Applicable to: BREAKFAST (9111), LUNCH_AVAILABLE (9114), DINNER_AVAILABLE (9115).",
            "properties": {
              "instance_id": {
                "type": "integer",
                "description": "Instance ID",
                "format": "int32"
              },
              "meal_details": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/MealDetailsResponse"
                  }
                ],
                "description": "Applicable to: BREAKFAST (9111), LUNCH_AVAILABLE (9114), DINNER_AVAILABLE (9115)."
              },
              "schedule_details": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/ScheduleDetailsResponse"
                  }
                ],
                "description": "Opening hours for the meal service."
              }
            }
          },
          {
            "title": "General instance",
            "type": "object",
            "description": "Applicable to facilities with surcharge, on-site location, age limit, schedule, or temporarily closed details. See GET /facilities-api/meta for the full allowed_details_list per facility.",
            "properties": {
              "instance_id": {
                "type": "integer",
                "description": "Instance ID",
                "format": "int32"
              },
              "surcharge_details": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/SurchargeDetails"
                  }
                ],
                "description": "Applicable to facilities where a surcharge or free-of-charge distinction is relevant. Applies to a large number of facilities including MEETINGBANQUET_FACILITIES (6), TENNISCOURT (9), SAUNA (10), FITNESS_ROOM (11), BUSINESS_CENTER (20), LAUNDRY (22), SPA_AND_WELLNESS_CENTRE (54), SWIMMING_POOL (433), and many others. See GET /facilities-api/meta for the full list."
              },
              "on_site_details": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/OnsiteDetails"
                  }
                ],
                "description": "Applicable to facilities where on-site vs off-site location is relevant, including: TENNISCOURT (9), FISHING (19), SKIING (26), WINDSURFING (61), CANOEING (69), HIKING (70), CYCLING (76), BOWLING (77), DIVING (82), HORSERIDING (86), SQUASH (87), SNORKELING (90), AQUA_PARK (148), and various activity facilities (400–414). See GET /facilities-api/meta for the full list."
              },
              "age_limit_details": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/AgeLimitDetails"
                  }
                ],
                "description": "Applicable to: KID_MEALS (176), CHILD_FRIENDLY_BUFFET (177)."
              },
              "schedule_details": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/ScheduleDetailsResponse"
                  }
                ],
                "description": "Applicable to facilities with opening hours or schedules, including: SAUNA (10), FITNESS_ROOM (11), LAUNDRY (22), SOLARIUM (50), CHILDREN_PLAY_GROUND (56), HOT_TUB (63), TURKISHSTEAM_BATH (79), LUGGAGE_STORAGE (91), HOT_SPRING_BATH (138), KIDS_CLUB (144), COFFEE_SHOP_ONSITE (219), STEAM_ROOM (241). See GET /facilities-api/meta for the full list."
              },
              "temporarily_closed_details": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/TemporarilyClosedDetails"
                  }
                ],
                "description": "Applicable to: BAR (7), SAUNA (10), SPA_AND_WELLNESS_CENTRE (54), HOT_TUB (63), FITNESS (253)."
              }
            }
          }
        ]
      },
      "InternetDetailsRequest": {
        "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"
      },
      "InternetDetailsResponse": {
        "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
          }
        }
      },
      "MealDetailsRequest": {
        "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"
          }
        }
      },
      "MealDetailsResponse": {
        "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"
      },
      "ParkingDetailsRequest": {
        "required": [
          "name",
          "parking_access",
          "parking_location",
          "parking_reservation"
        ],
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Name of this parking instance. Must be unique across all instances of PARKING (facility_id 2) for the same property. Providing a duplicate name returns a 400 error."
          },
          "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"
      },
      "ParkingDetailsResponse": {
        "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"
      },
      "PaymentDetailsRequest": {
        "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"
      },
      "PaymentDetailsResponse": {
        "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"
      },
      "PropertyFacilityRequest": {
        "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/InstanceRequest"
            }
          },
          "state": {
            "type": "string",
            "description": "Is facility Present/Missing?",
            "enum": [
              "MISSING",
              "PRESENT"
            ]
          }
        },
        "description": "Property Facility object"
      },
      "PropertyFacilityResponse": {
        "type": "object",
        "properties": {
          "facility_id": {
            "type": "integer",
            "description": "Property Facility ID",
            "format": "int32"
          },
          "instances": {
            "type": "array",
            "description": "Array of instances",
            "items": {
              "$ref": "#/components/schemas/InstanceResponse"
            }
          },
          "state": {
            "type": "string",
            "description": "Is facility Present/Missing?",
            "enum": [
              "MISSING",
              "PRESENT"
            ]
          },
          "property_facility_meta": {
            "allOf": [
              {
                "$ref": "#/components/schemas/PropertyFacilityMetaSummary"
              }
            ],
            "description": "Present only when `debugInfo=true` is passed. Contains the facility name, OTA codes, and allowed/required detail types for this facility."
          }
        },
        "description": "Property Facility object"
      },
      "DetailsType": {
        "type": "string",
        "description": "Name of a details object that can be used in facility instances",
        "enum": [
          "AgeLimitDetails",
          "CribDetails",
          "InternetDetails",
          "KidsPoolDetails",
          "LinenDetails",
          "MealDetails",
          "OnsiteDetails",
          "ParkingDetails",
          "PaymentDetails",
          "RestaurantDetails",
          "ScheduleDetails",
          "SurchargeDetails",
          "SwimmingPoolDetails",
          "TemporarilyClosedDetails"
        ]
      },
      "PropertyFacilityMetaSummary": {
        "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 detail type names",
            "items": {
              "$ref": "#/components/schemas/DetailsType"
            }
          },
          "required_details_list": {
            "type": "array",
            "description": "List of required detail type names",
            "items": {
              "$ref": "#/components/schemas/DetailsType"
            }
          }
        },
        "description": "Property Facility meta summary with detail type names"
      },
      "RestaurantDetailsRequest": {
        "required": [
          "name"
        ],
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Name of this restaurant instance. Must be unique across all instances of RESTAURANT (facility_id 3) for the same property. Providing a duplicate name returns a 400 error."
          },
          "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"
          }
        }
      },
      "RestaurantDetailsResponse": {
        "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"
          }
        }
      },
      "ScheduleDetailsRequest": {
        "type": "object",
        "properties": {
          "schedule": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WeekTimeEntryRequest"
            }
          }
        },
        "description": "Defines a schedule for a Facility. Corresponding legacy object in HDCN: OperationTimes"
      },
      "ScheduleDetailsResponse": {
        "type": "object",
        "properties": {
          "schedule": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WeekTimeEntryResponse"
            }
          }
        },
        "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"
      },
      "SwimmingPoolDetailsRequest": {
        "required": [
          "name",
          "swimming_pool_type"
        ],
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Name of this swimming pool instance. Must be unique across all instances of SWIMMING_POOL (facility_id 433) for the same property. Providing a duplicate name returns a 400 error."
          },
          "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?"
          }
        }
      },
      "SwimmingPoolDetailsResponse": {
        "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": "Unix timestamp in seconds since epoch"
          }
        },
        "description": "Start date"
      },
      "EndTimestamp": {
        "type": "object",
        "properties": {
          "epoch_seconds": {
            "type": "integer",
            "format": "int64",
            "description": "Unix timestamp in seconds since epoch"
          }
        },
        "description": "End date"
      },
      "WeekTimeEntryRequest": {
        "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"
      },
      "WeekTimeEntryResponse": {
        "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": "integer",
            "description": "Error code"
          },
          "description": {
            "type": "string",
            "description": "Detailed error description"
          },
          "details": {
            "type": "object",
            "description": "Additional error context"
          }
        }
      },
      "ApiResponseSuccessObject": {
        "type": "object",
        "properties": {
          "data": {
            "nullable": true,
            "allOf": [
              {
                "$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"
          }
        }
      },
      "ApiResponseSuccess": {
        "type": "object",
        "description": "Successful response with empty warnings and errors",
        "properties": {
          "data": {
            "$ref": "#/components/schemas/SuccessObject"
          },
          "warnings": {
            "type": "array",
            "maxItems": 0
          },
          "errors": {
            "type": "array",
            "maxItems": 0
          },
          "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"
      },
      "RoomFacilityRequest": {
        "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/RoomFacilityInstanceRequest"
            }
          }
        }
      },
      "RoomFacilityResponse": {
        "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/RoomFacilityInstanceResponse"
            }
          },
          "room_facility_meta": {
            "allOf": [
              {
                "$ref": "#/components/schemas/RoomFacilityMetaSummary"
              }
            ],
            "description": "Present only when `debugInfo=true` is passed. Contains the facility name, OTA codes, and allowed detail types for this room facility."
          }
        }
      },
      "RoomFacilityInstanceRequest": {
        "type": "object",
        "properties": {
          "linen_details": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LinenDetails"
              }
            ],
            "description": "Applicable to: LINEN (125)."
          },
          "crib_details": {
            "allOf": [
              {
                "$ref": "#/components/schemas/CribDetails"
              }
            ],
            "description": "Applicable to: CHILDREN_CRIB_COTS (175)."
          }
        },
        "description": "A room facility instance. The valid detail object for a given instance depends on the parent room_facility_id — only detail types listed in that facility's allowed_details_list (from GET /facilities-api/meta) will be present."
      },
      "RoomFacilityInstanceResponse": {
        "type": "object",
        "properties": {
          "linen_details": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LinenDetails"
              }
            ],
            "description": "Applicable to: LINEN (125)."
          },
          "crib_details": {
            "allOf": [
              {
                "$ref": "#/components/schemas/CribDetails"
              }
            ],
            "description": "Applicable to: CHILDREN_CRIB_COTS (175)."
          }
        },
        "description": "A room facility instance. The valid detail object for a given instance depends on the parent room_facility_id — only detail types listed in that facility's allowed_details_list (from GET /facilities-api/meta) will be present."
      },
      "RoomFacilityMetaSummary": {
        "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 detail type names",
            "items": {
              "$ref": "#/components/schemas/DetailsType"
            }
          }
        },
        "description": "Room Facility meta summary with detail type names"
      },
      "BathroomRequest": {
        "required": [
          "bathroom_type"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "format": "int32"
          },
          "bathroom_type": {
            "type": "string",
            "enum": [
              "PRIVATE",
              "SHARED"
            ]
          },
          "bathroom_location": {
            "type": "string",
            "description": "Location of the bathroom relative to the room. The set of allowed values differs by unit type — call `GET /facilities-api/meta` and inspect `bathroom_configurations[*].allowed_options` for the applicable `unit_type_id`. Submitting a location not in the allowed list for your unit type returns a 400 error. Note: BED_IN_DORMITORY (unit_type_id 26) does not allow a location for private bathrooms.",
            "enum": [
              "ENSUITE",
              "NEXT_DOOR",
              "DOWN_THE_HALL",
              "OPPOSITE_THE_ROOM",
              "IN_THE_HALLWAY",
              "OTHER",
              "INSIDE_THE_UNIT"
            ]
          },
          "hostel_bathroom_details": {
            "$ref": "#/components/schemas/HostelBathroomDetailsRequest"
          }
        }
      },
      "BathroomResponse": {
        "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/HostelBathroomDetailsResponse"
          }
        }
      },
      "BathroomDetailsRequest": {
        "type": "object",
        "properties": {
          "property_bathroom_details": {
            "$ref": "#/components/schemas/PropertyBathroomDetailsRequest"
          },
          "hotel_bathroom_details": {
            "$ref": "#/components/schemas/HotelBathroomDetailsRequest"
          }
        }
      },
      "BathroomDetailsResponse": {
        "type": "object",
        "properties": {
          "property_bathroom_details": {
            "$ref": "#/components/schemas/PropertyBathroomDetailsResponse"
          },
          "hotel_bathroom_details": {
            "$ref": "#/components/schemas/HotelBathroomDetailsResponse"
          }
        }
      },
      "HostelBathroomDetailsRequest": {
        "required": [
          "bathroom_facilities"
        ],
        "type": "object",
        "description": "Bathroom details for hostel-group properties. Property-level limits apply: maximum 1 private bathroom and 5 shared bathrooms per property. Rules for `gender` and `num_guests_with_access_type` differ by `bathroom_type`: required for SHARED bathrooms, prohibited for PRIVATE bathrooms.",
        "properties": {
          "gender": {
            "type": "string",
            "description": "Gender access for this shared bathroom. Required when `bathroom_type` is SHARED. Must not be provided when `bathroom_type` is PRIVATE.",
            "enum": [
              "FEMALE",
              "MALE",
              "MIXED"
            ]
          },
          "num_guests_with_access_type": {
            "type": "string",
            "description": "Approximate number of guests with access to this shared bathroom. Required when `bathroom_type` is SHARED. Must not be provided when `bathroom_type` is PRIVATE.",
            "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",
            "description": "List of facilities in this bathroom. Must include at least one of: SHOWER, TOILET, SINK, BATH.",
            "minItems": 1,
            "items": {
              "$ref": "#/components/schemas/HostelBathroomFacilityRequest"
            }
          }
        }
      },
      "HostelBathroomDetailsResponse": {
        "type": "object",
        "description": "Bathroom details for hostel-group properties. Property-level limits apply: maximum 1 private bathroom and 5 shared bathrooms per property.",
        "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/HostelBathroomFacilityResponse"
            }
          }
        }
      },
      "HostelBathroomFacilityRequest": {
        "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",
            "description": "Number of units of this facility. Only applicable to SHOWER, TOILET, SINK, and BATH. Must not be provided for other facility types."
          },
          "is_paid": {
            "type": "boolean",
            "description": "Whether guests are charged for this amenity. Only applicable to SLIPPERS, TOOTHBRUSH, SHAMPOO, CONDITIONER, BODY_SOAP, and TOWEL. Must not be provided for other facility types."
          }
        }
      },
      "HostelBathroomFacilityResponse": {
        "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"
          }
        }
      },
      "HotelBathroomDetailsRequest": {
        "required": [
          "number_of_bathrooms",
          "private_bathroom_state",
          "shared_bathroom_state"
        ],
        "type": "object",
        "description": "Bathroom details for hotel-group properties. Consistency rules: if both `private_bathroom_state` and `shared_bathroom_state` are MISSING, `number_of_bathrooms` must be 0. If either state is PRESENT, `number_of_bathrooms` must be greater than 0.",
        "properties": {
          "private_bathroom_state": {
            "type": "string",
            "description": "Whether the property has private bathrooms. If PRESENT, `number_of_bathrooms` must be greater than 0.",
            "enum": [
              "MISSING",
              "PRESENT"
            ]
          },
          "shared_bathroom_state": {
            "type": "string",
            "description": "Whether the property has shared bathrooms. If PRESENT, `number_of_bathrooms` must be greater than 0.",
            "enum": [
              "MISSING",
              "PRESENT"
            ]
          },
          "private_bathroom_details": {
            "$ref": "#/components/schemas/PrivateBathroomDetails"
          },
          "number_of_bathrooms": {
            "maximum": 20,
            "minimum": 0,
            "type": "integer",
            "format": "int32",
            "description": "Total number of bathrooms (private + shared combined). Must be 0 if both states are MISSING. Must be greater than 0 if either state is PRESENT."
          }
        }
      },
      "HotelBathroomDetailsResponse": {
        "type": "object",
        "description": "Bathroom details for hotel-group properties.",
        "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"
          }
        }
      },
      "PropertyBathroomDetailsRequest": {
        "required": [
          "bathrooms"
        ],
        "type": "object",
        "properties": {
          "bathrooms": {
            "maxItems": 20,
            "minItems": 0,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/BathroomRequest"
            }
          }
        }
      },
      "PropertyBathroomDetailsResponse": {
        "type": "object",
        "properties": {
          "bathrooms": {
            "maxItems": 20,
            "minItems": 0,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/BathroomResponse"
            }
          }
        }
      },
      "ApiResponseListPropertyFacility": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PropertyFacilityResponse"
            }
          },
          "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/RoomFacilityResponse"
            }
          },
          "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/BathroomDetailsResponse"
          },
          "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/PropertyFacilityMetaSummary"
            }
          },
          "room_facility_metas": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RoomFacilityMetaSummary"
            }
          },
          "bathroom_configurations": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/BathroomConfiguration"
            }
          }
        },
        "description": "Contains meta data about property & room facilities"
      }
    }
  }
}