{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/flightpowers-com/json-schema/flightpowers-com-hotel-search-request-schema.json",
  "title": "HotelSearchRequest",
  "x-generated": "2026-10-30",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/flightpowers-com-openapi.json#/components/schemas/HotelSearchRequest",
  "type": "object",
  "required": [
    "destination",
    "checkin_date",
    "checkout_date"
  ],
  "properties": {
    "destination": {
      "type": "string",
      "description": "Free-text destination, e.g. `Paris`, `Tokyo Shibuya`. NOTE: the field is `destination` - a `location` key is rejected with a 400."
    },
    "checkin_date": {
      "type": "string",
      "format": "date"
    },
    "checkout_date": {
      "type": "string",
      "format": "date"
    },
    "adults": {
      "type": "integer",
      "default": 2
    },
    "children": {
      "type": "integer",
      "default": 0
    },
    "currency": {
      "type": "string",
      "default": "USD"
    },
    "proxy_country": {
      "type": "string",
      "description": "Two-letter country code to route the request through a residential proxy in that country (e.g. `us`, `de`, `il`). Booking.com shows different prices to different markets; this is how you observe them - the basis for rate-parity and geo-pricing monitoring. When omitted, the request uses the full global residential pool."
    },
    "budget_per_night": {
      "type": "number",
      "description": "Maximum price per night, in the request currency."
    },
    "filters": {
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "free_cancellation",
          "breakfast_included",
          "breakfast_and_lunch",
          "breakfast_and_dinner",
          "all_meals_included",
          "all_inclusive",
          "free_wifi",
          "swimming_pool",
          "gym",
          "parking",
          "front_desk_24h",
          "review_score_7",
          "review_score_8",
          "review_score_9",
          "private_bathroom",
          "air_conditioning",
          "stars_3",
          "stars_4",
          "stars_5",
          "pets_allowed",
          "adults_only",
          "sauna",
          "very_good_breakfast",
          "accepts_online_payment"
        ]
      },
      "default": [],
      "description": "Booking.com search filters, 24 supported."
    },
    "sort": {
      "type": "string",
      "enum": [
        "price_asc",
        "price_desc",
        "rating_desc",
        "price",
        "rating"
      ],
      "description": "Result order: `price_asc` cheapest first, `price_desc` most expensive first, `rating_desc` highest review score first; `price` and `rating` are shorthands for `price_asc` and `rating_desc`. Booking.com sorts the whole destination first, then the rows are ordered by the tax-inclusive `price` (or `review_score`), rows without one last. Omit it for Booking.com's own order. Any other value is a 400 that lists the valid ones, before any search runs."
    }
  }
}