Paginated holiday accommodation search over directly bookable/inquirable own inventory (externally managed listings are not exposed). Filter by region (regionId from autocomplete_regions), a radius around a point (lat/lng/radiusKm — use the coordinates of the place the user names; results then carry distanceKm and can be sorted by distance) or a map bounding box (neLat/neLng/swLat/swLng); these three are mutually exclusive. Travel dates (arrival/departure, both together; add bookableOnly to drop stays below the minimum stay), persons (a minimum: beds ≥ persons — add personsMax to exclude oversized houses; optional adults split for families — children can use extra-children slots), bedrooms, bathrooms, livingSpaceMin (m²), minReviews, price range per night, feature codes (e.g. swimming_pool, wifi, pets_allowed), accommodation types and offers. Sort: relevance (default), rating (best first; website formula, a single 5.0 review outranks many 4.8s — use minReviews), persons, bedrooms, living_area, distance (radius searches). Every result carries `url` (the listing page on the website of the locale) and, on dated searches, `stayUrl` with dates and guests pre-filled — give these to the user as the link. `location.place` is the actual town; `location.region` is the (marketing) region it is listed under. Dated searches include a stayPrice per result: the exact total for the stay incl. mandatory costs and discounts (kind "total"; "min_stay" when the stay is below the minimum), or "from"/"on_request" where only the static basePrice or no price is available. `approximate: true` means some nights were priced from the owner's base price; the website confirms the final total.
View input schema
{
"type": "object",
"properties": {
"regionId": {
"description": "Region to search in (from /regions/autocomplete); omit to search everywhere",
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
"query": {
"description": "Keyword search over names and descriptions in the response language and the German originals",
"type": "string",
"minLength": 1,
"maxLength": 100
},
"arrival": {
"type": "string",
"format": "date",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
},
"departure": {
"type": "string",
"format": "date",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
},
"bookableOnly": {
"description": "Dated searches only: keep only stays that meet the minimum stay (drops stayPrice.kind \"min_stay\" results)",
"type": "string"
},
"persons": {
"description": "Minimum sleeping places (beds ≥ persons); combine with personsMax to cap size",
"type": "integer",
"minimum": 1,
"maximum": 50
},
"personsMax": {
"description": "Maximum sleeping places (beds ≤ personsMax); excludes oversized houses",
"type": "integer",
"minimum": 1,
"maximum": 50
},
"livingSpaceMin": {
"description": "Minimum living space in m²",
"type": "number",
"minimum": 0
},
"minReviews": {
"description": "Only accommodations with at least this many visible reviews",
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
"adults": {
"description": "Adults among persons; when below persons, objects may host the remainder as extra children (website guests widget parity)",
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
"bedrooms": {
"type": "integer",
"minimum": 0,
"maximum": 50
},
"bathrooms": {
"type": "integer",
"minimum": 0,
"maximum": 50
},
"priceMin": {
"description": "Per night with dates, base price without",
"type": "number",
"minimum": 0
},
"priceMax": {
"description": "Omit for unbounded — no sentinel values",
"type": "number",
"minimum": 0
},
"neLat": {
"description": "Bounding box north-east latitude",
"type": "number",
"minimum": -90,
"maximum": 90
},
"neLng": {
"description": "Bounding box north-east longitude",
"type": "number",
"minimum": -180,
"maximum": 180
},
"swLat": {
"description": "Bounding box south-west latitude",
"type": "number",
"minimum": -90,
"maximum": 90
},
"swLng": {
"description": "Bounding box south-west longitude",
"type": "number",
"minimum": -180,
"maximum": 180
},
"lat": {
"description": "Search centre latitude",
"type": "number",
"minimum": -90,
"maximum": 90
},
"lng": {
"description": "Search centre longitude",
"type": "number",
"minimum": -180,
"maximum": 180
},
"radiusKm": {
"description": "Radius around the centre in km (as the crow flies), max 300",
"type": "number",
"exclusiveMinimum": 0,
"maximum": 300
},
"features": {
"type": "array",
"items": {
"type": "string",
"enum": [
"relaxing_holiday",
"family_holiday",
"farm_holiday",
"holiday_resort",
"golfing_holiday",
"cultural_holiday",
"romantic_holiday",
"singles_holiday",
"skiing_holiday",
"sport_holiday",
"beach_holiday",
"city_trip",
"hiking_holiday",
"dog_friendly",
"mountain_holiday",
"seaside_holiday",
"lakeside_holiday",
"sea_view",
"group_accommodation",
"countryside_holiday",
"lake_view",
"fireplace",
"air_conditioning",
"sauna",
"whirlpool",
"heating",
"dishwasher",
"tv",
"washing_machine",
"crib",
"wifi",
"fishing",
"climbing",
"golf",
"skiing",
"tennis",
"hiking",
"long_term_rental",
"non_smoking",
"allergy_friendly",
"suitable_for_contractors",
"balcony",
"garden",
"bbq_grill",
"swimming_pool",
"parking_space",
"terrace",
"fenced_garden",
"ev_charging",
"wheelchair_accessible",
"suitable_for_seniors",
"suitable_for_children",
"pets_allowed",
"barrier_free",
"accessible_holiday",
"contactless_stay",
"sustainable_holiday",
"pets_not_allowed",
"instant_booking",
"booking_on_request",
"free_cancellation"
]
}
},
"types": {
"type": "array",
"items": {
"type": "string",
"enum": [
"holiday_home",
"holiday_apartment",
"bed_and_breakfast",
"castle",
"hut",
"hotel",
"boarding_house",
"houseboat"
]
}
},
"offers": {
"type": "array",
"items": {
"type": "string",
"enum": [
"special_offer",
"last_minute",
"early_booking",
"best_price",
"weekly_discount",
"monthly_discount"
]
}
},
"sort": {
"default": "relevance",
"type": "string",
"enum": [
"relevance",
"rating",
"persons",
"bedrooms",
"living_area",
"distance"
]
},
"page": {
"default": 1,
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
"perPage": {
"default": 25,
"type": "integer",
"minimum": 1,
"maximum": 50
},
"locale": {
"default": "de",
"description": "Language the user is writing in (de, en, fr, pl, it, es, nl, hr); defaults to de. Selects the language of names and texts in the response and the language region names are matched in — pass it on every call.",
"type": "string",
"enum": [
"de",
"en",
"fr",
"pl",
"it",
"es",
"nl",
"hr"
]
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}