Skip to content

search_hotels_availability ​

Returns a price calendar across a date range — for each check-in date in the window, the cheapest rate among the hotels Vio selected for the search. Use this to answer "when should I go?" questions where the user is flexible on dates.

This is a date-axis tool. For fixed-date hotel search, use search_hotels. For "is this hotel a good deal?" questions, use search_hotels with include: ["analytic"].

Parameters ​

Search input (provide exactly one) ​

ParameterTypeDescription
queriesstring[] (1-3)Location or hotel name (e.g., ["Amsterdam"])
latitude + longitudenumberCoordinate-based search
nearMebooleanUser's current location (requires GPS or geo headers)
addressstringGeocoded address
hotelIdsstring[]Specific hotels (skips internal search)

Date range ​

ParameterTypeDescription
startDatestring (YYYY-MM-DD)First check-in date in the calendar. Defaults to today + 15 days.
endDatestring (YYYY-MM-DD)Last check-in date. Defaults to startDate + 14. Maximum range: 91 days from startDate.
nightsnumberStay length per check-in (default: 3). The calendar shows the cheapest rate for this duration at each check-in date.

Other parameters ​

ParameterTypeDescription
roomsConfigurationobject[]Room occupancy (default [{adults: 2}]). Same shape as other tools.
maxHotelsnumberHotels to include in the calendar (default 5, max 5).
searchMode"fast" | "deep"fast (default, ~5s soft deadline) or deep (~22s, more thorough). Identical semantics to search_hotels.
sortFieldstringHotel ranking: popularity (default), price, guestRating, starRating, distance. For "cheapest possible trip" intent, pass price — by default the calendar reflects popularity-ranked hotels which can overstate prices vs the actual price floor.
sortOrder"ascending" | "descending"Used with sortField.
filtersobjectSame hotel-level filters as search_hotels (star rating, guest rating, facilities, themes, price range, property types). See Filters.
currencystringISO 4217 (e.g., EUR, USD). Auto-detected from locale if omitted.
priceMode"total" | "nightly"total (default) or per-night.
dryRunbooleanValidate inputs and return the normalized stay metadata without calling the upstream service.

Hotel selection ​

When hotelIds is provided, those hotels are used directly. Otherwise the tool first runs an offers-aware search to find candidates that have offers for the requested dates and rooms — mirroring the pattern Vio's website uses for its own price-color calendar (search → calendar). Without this step the calendar can surface popular but unbookable hotels.

Use cases ​

Cheapest dates in a city ​

json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "search_hotels_availability",
    "arguments": {
      "queries": ["Barcelona"],
      "startDate": "2026-06-01",
      "endDate": "2026-06-30",
      "nights": 3,
      "roomsConfiguration": [{"adults": 2}]
    }
  }
}

Cheapest possible trip — bias toward the price floor ​

json
{
  "jsonrpc": "2.0",
  "id": 2,
  "method": "tools/call",
  "params": {
    "name": "search_hotels_availability",
    "arguments": {
      "queries": ["Lisbon"],
      "startDate": "2026-06-01",
      "endDate": "2026-06-30",
      "nights": 3,
      "sortField": "price",
      "sortOrder": "ascending",
      "filters": {"guestRating": [7, 8, 9, 10]}
    }
  }
}
json
{
  "jsonrpc": "2.0",
  "id": 3,
  "method": "tools/call",
  "params": {
    "name": "search_hotels_availability",
    "arguments": {
      "hotelIds": ["hotel_abc123"],
      "startDate": "2026-06-01",
      "endDate": "2026-07-01",
      "nights": 3
    }
  }
}

Coordinate-based, near user ​

json
{
  "jsonrpc": "2.0",
  "id": 4,
  "method": "tools/call",
  "params": {
    "name": "search_hotels_availability",
    "arguments": {
      "nearMe": true,
      "startDate": "2026-06-01",
      "endDate": "2026-06-21",
      "nights": 2
    }
  }
}

Response ​

json
{
  "language": "en",
  "currency": "EUR",
  "startDate": "2026-06-01",
  "endDate": "2026-06-30",
  "nights": 3,
  "roomConfiguration": [{"adults": 2}],
  "priceScope": "all_rooms_combined",
  "priceLogic": "base_tax_fees",
  "availability": [
    {
      "hotelId": "hotel_abc123",
      "checkIn": "2026-06-01",
      "cheapestRate": {
        "base": 280.0,
        "taxes": 28.5,
        "hotelFees": 12.0,
        "displayPrice": 320.5
      },
      "offerCount": 7
    }
  ]
}

The response is a flat array of (hotelId, checkIn) entries — one per (hotel, date) pair the tool was able to compute a rate for. To get hotel names, locations, and images, call get_hotels with the hotelId values from the calendar.

See Availability entry in Data Types for the full schema.

Notes ​

  • Range cap: 91 days. Longer ranges return a recoverable error.
  • Polling: the tool runs a soft-deadline polling loop (5s fast / 22s deep) and returns whatever rates have arrived by then. The response always includes a flat calendar even if some providers were still responding when the deadline hit — no thrown errors on partial completion.
  • Hotel diversity: the calendar covers whatever hotels the search step surfaced. To compare a specific shortlist, pass hotelIds directly.