Search for travel listings with filters, sorting, and pagination.
This is the main search tool. Use it after search_init to find specific travel deals.
Required parameters:
- niche: ONE travel type — "ski", "golf", "surf", "diving", "hiking", "charter", "cycling", "football", "carrental", "f1", "running", "americanfootball", "yoga", "triathlon", "cruise", "coach", "holidayhome", "roundtrip", "citybreak", "dance", "wellness", "safari", "culture", "sportsevent", "camping", "hunting", "culinary", "fishing", "language", "racket", "motorcycle", "riding", "birding", "sailing", "concert", "umrah". Single niche per request.
- market: market code (one of "dk", "nl", "se", "no")
Common filters (valid for every niche):
- adults (ALWAYS include — prices depend on group size)
- children (ALWAYS include — prices depend on group size)
- departureFrom (YYYY-MM-DD)
- departureTo (YYYY-MM-DD)
- onlyDiscounted (boolean — only trips with a discount)
- onlyMultiDestination (boolean — only trips that sleep in more than one place (round trips, stage tours))
- countries (array of country slugs — use EXACT slugs, e.g. ["austria"])
- destinations (array of destination slugs in country_destination format, e.g. ["austria_zell-am-see"] — use EXACT slugs. Also returns round trips and stage tours that stop there; their `accommodation.route` lists every stop)
- providers (array of provider slugs)
- centrumDistance ({ min, max } meters to town centre)
- minPrice (total price, not per person)
- maxPrice (total price, not per person)
- minPricePerPerson (per-person price)
- maxPricePerPerson (per-person price)
- durations (array of trip lengths in days, e.g. [7, 14])
- arrivalWeeks (array of ISO weeks, e.g. ["2026-W15"] — use for "next week")
- arrivalMonths (array of months, e.g. ["2026-04"] — use for "in April")
- arrivalDates (array of exact arrival dates, YYYY-MM-DD)
- departureDateFlexDays (0-7, day flex around arrivalDates)
- minStars (minimum hotel star rating, 1-5)
- minGuestRating (guest review score 0-10 (TripAdvisor scores are ×2 normalized))
- maxGuestRating (guest review score 0-10)
- includeUnratedGuestRating (boolean — keep unrated hotels in rated searches)
- transports (array: bus, train, car, flight_bll, flight_cph, flight_aal, flight_arn, flight_got, flight_ham, flight_aar, flight_krp, flight_rnn, flight_ams, flight_ein, flight_rtm, flight_grq, flight_mst, flight_bru, flight_dus, flight_nrn, flight_cgn, flight_osl, flight_bgo, flight_svg, flight_trd, flight_mmx — a trip sold without the flight is never under a flight_<airport>: it is car, own travel (drive, or a flight the traveller books))
- accommodationTypes (array: hotel, apartment, cabin, chalet, villa, hostel, resort, pension, house, other)
- mealPlanTypes (array: all_inclusive, breakfast, full_board, half_board, none)
- accommodationFeatures (array, e.g. pool, wifi, sauna, spa, parking, bar)
Niche-specific filters (only valid when niche matches):
- Ski: skiPassIncluded (boolean), skiPassDaysCount ({ min, max } bundled lift-pass days), skiLiftDistance ({ min, max } meters), skiBusDistance ({ min, max } meters), skiSlopeDistance ({ min, max } meters), guideIncluded (boolean — a guide is in the price (riding: a riding guide or instructor); null (not stated) never matches), transferIncluded (boolean — the transfer from the airport/station (or circuit) to the accommodation is bundled; null (not stated) never matches. Shared by the event, ski, charter and tour niches (yoga, language, surf, racket, riding …))
- Golf (accommodation-centric like ski; greenFeeIncluded says whether ANY golf is in the price, golfRoundsRanges/golfBagIncluded refine it further; guideIncluded is a golf host, not a generic tour guide): greenFeeIncluded (boolean — the package price includes green fees (any rounds or unlimited golf); false = golf is bought separately), courseDistance ({ min, max } meters, hotel to nearest course), golfRoundsRanges (array: none, 1-3, 4-5, 6+, unlimited — rounds included per golfer ('none' = green fee not included)), golfTripTypes (array: stay, school, group, longstay, tour — 'stay' is the default golf-hotel package), golfBagIncluded (boolean — golf bag carried on the flight at no extra charge), guideIncluded (boolean — a guide is in the price (riding: a riding guide or instructor); null (not stated) never matches), transferIncluded (boolean — the transfer from the airport/station (or circuit) to the accommodation is bundled; null (not stated) never matches. Shared by the event, ski, charter and tour niches (yoga, language, surf, racket, riding …))
- Surf (diving's shape (one card = one seller's board-sport trip: a surf, kite, windsurf or wing camp or week with lessons, coaching or guiding in the price; offers are dated weeks or season windows x party); adults = the number of surfers, a non-surfing companion is not in the party, children only where the seller prices them; price is the party total for the trip; a season window (dateFlexible) matches any date search it overlaps, from its first bookable day to seasonEnd; boardSports/surfLevels/instructions/surfAccommodations are OR-matched; every boolean is null when the seller does not say, never false): transferIncluded (boolean — the transfer from the airport/station (or circuit) to the accommodation is bundled; null (not stated) never matches. Shared by the event, ski, charter and tour niches (yoga, language, surf, racket, riding …)), dateFlexible (boolean — hunting, diving, fishing, language, surf, racket and riding: true = season windows only (one offer the traveller books any days inside, e.g. "1/5-31/7", "hver lørdag hele året", a language course starting every Monday of a price season, a surf or padel camp open every week of its season, a riding farm stay bookable any day of its season), false = fixed-date departures only; absent = both), boardSports (array: surf, kitesurf, windsurf, wingfoil, sup — the board sports taught or guided in the price (kitesurf = kite, wingfoil = wing, sup = stand up paddle); matches a trip with ANY of them), surfLevels (array: beginner, intermediate, advanced, all — the level the seller prints (all = every level welcome, so add it to a beginner ask); matches ANY of them), instructions (array: lessons, guiding, both — lessons = surfskole / kursus, guiding = a surf guide takes you to the spots, both = lessons and guiding; matches ANY of them), surfAccommodations (array: camp, hotel, apartment, house, tent, boat — where the surfers sleep; matches ANY of them), lessonDays (object { min?, max? } — days with lessons / sessions in the price (not the nights of the stay); a trip that does not say never matches a bound), equipmentIncluded (boolean — board / kite / wetsuit are in the price (rental offered as an extra = false); null (not stated) never matches), yogaIncluded (boolean — yoga sessions are in the price (surf & yoga weeks); null (not stated) never matches)
- Diving (hunting's shape (one card = one seller's dive trip: a liveaboard, a dive-resort or dive-camp package, a group trip; offers are dated departures or season windows x party); adults = the number of divers, a non-diving companion is not in the party; price is the party total and never includes marine-park, fuel or chamber fees paid on site; a season window (dateFlexible) matches any date search it overlaps, from its first bookable day to seasonEnd; diveTripTypes/diveAreas/certifications are OR-matched; every boolean is null when the seller does not say, never false): diveTripTypes (array: liveaboard, resort, dive_camp, course_trip — liveaboard = safaribåd / dykkersafari, resort = dive-resort package, dive_camp = dykkerlejr, course_trip = a certification course on the trip; matches ANY of them), diveAreas (array — the sellers' own dive-area slugs (red-sea-north, red-sea-south, maldives, raja-ampat, …); use the destination filters for a country or resort), certifications (array: open_water, advanced, rescue, tech — the lowest certificate the trip requires; a diver with open water wants ['open_water']), divesIncluded (object { min?, max? } — total dives in the price; a trip that does not say never matches a bound), nitroxIncluded (boolean — nitrox is in the price), gearIncluded (boolean — full gear rental is in the price (tank and weights alone are not gear)), danishDiveLeader (boolean — a Danish dive leader or instructor travels with the group), unlimitedHouseReef (boolean — unlimited shore / house-reef diving is in the price), parkFeesIncluded (boolean — park / conservation fees (and permits) are in the price (diving: marine-park, fuel and port fees)), dateFlexible (boolean — hunting, diving, fishing, language, surf, racket and riding: true = season windows only (one offer the traveller books any days inside, e.g. "1/5-31/7", "hver lørdag hele året", a language course starting every Monday of a price season, a surf or padel camp open every week of its season, a riding farm stay bookable any day of its season), false = fixed-date departures only; absent = both)
- Hiking: difficultyLevels (array), dailyDistance, trailheadDistance ({ min, max } meters), hikingTripFormats, routeDistance ({ min, max } km), elevationGain ({ min, max } meters), luggageTransportIncluded (boolean), guideIncluded (boolean — a guide is in the price (riding: a riding guide or instructor); null (not stated) never matches), gpxAvailable (boolean)
- Charter: beachDistance ({ min, max } meters), guideIncluded (boolean — a guide is in the price (riding: a riding guide or instructor); null (not stated) never matches), transferIncluded (boolean — the transfer from the airport/station (or circuit) to the accommodation is bundled; null (not stated) never matches. Shared by the event, ski, charter and tour niches (yoga, language, surf, racket, riding …))
- Cycling: cyclingDifficultyLevels (array: easy, moderate, challenging, hard, expert), cyclingTypes (array: road, gravel, mountainbike, e_mountainbike, e_bike, bike_cruise, event), tripFormats (array: self_guided, guided_group, private_custom, club_event, race_event), routeDistance ({ min, max } km), elevationGain ({ min, max } meters), eBikeAvailable (boolean), luggageTransportIncluded (boolean), guideIncluded (boolean — a guide is in the price (riding: a riding guide or instructor); null (not stated) never matches), bikeRentalAvailable (boolean), gpxAvailable (boolean)
- Football (match-centric; the match ticket is always included, transport fly/kør-selv via the shared transports filter): leagues (array of league slugs, e.g. ["premier-league", "la-liga"] or ["nfl"] — use EXACT slugs from the league facet), teams (array of team slugs, e.g. ["wolverhampton-wanderers"] or ["kansas-city-chiefs"] — use EXACT slugs from the team facet; matches the home OR away side), matchDateFrom (YYYY-MM-DD, kickoff date), matchDateTo (YYYY-MM-DD, kickoff date), hotelIncluded (boolean)
- Carrental (groups by car group at a pickup station; adults/children do not price a car — they only set minSeats; prices are per rental, not per person): carSuppliers (array of rental-brand slugs, e.g. ["avis"] — use EXACT slugs from the carSupplier facet), carClasses (array: mini, economy, compact, intermediate, standard, fullsize, premium, luxury, special), carBodyTypes (array: car, suv, estate, van, convertible, other), transmissions (array: manual, automatic), fuelTypes (array: petrol, diesel, hybrid, electric), minSeats (integer 1-20, minimum seats — set it from the party size), zeroExcess (boolean — only rate tiers without an excess (ingen selvrisiko)), pickupStations (array of pickup-station slugs, e.g. ["london-heathrow-t5"] — use EXACT slugs from the pickupStation facet), pickupStationTypes (array: airport, city, rail, port, other)
- F1 (event-centric (one card = one Grand Prix weekend); the race ticket is always included, hotel via hotelIncluded, transport fly/kør-selv via the shared transports filter; guideIncluded = a tour leader travels with the group): guideIncluded (boolean — a guide is in the price (riding: a riding guide or instructor); null (not stated) never matches), hotelIncluded (boolean), races (array of race slugs, e.g. ["monaco"] (f1), ["berlin-marathon"] (running) or ["ironman-kalmar"] (triathlon) — use EXACT slugs from the race facet), seasons (array of season years, e.g. [2026]), raceDateFrom (YYYY-MM-DD, race day (not the travel dates); a triathlon camp: its departure date), raceDateTo (YYYY-MM-DD, race day (not the travel dates); a triathlon camp: its departure date), ticketTypes (array: grandstand, general_admission, hospitality), raceDays (array: 3_day, 2_day, 1_day (Fri–Sun / Sat–Sun / race day only)), transferIncluded (boolean — the transfer from the airport/station (or circuit) to the accommodation is bundled; null (not stated) never matches. Shared by the event, ski, charter and tour niches (yoga, language, surf, racket, riding …))
- Running (event-centric: one card = one race edition (tripTypes race) or one running camp / guided trail tour (tripTypes camp, its departures are the offers); the race entry is NOT always included (entryIncluded), arrival/departure are the travel window around the race day, raceDate* = race day for races, departure date for camps, hotel via hotelIncluded): guideIncluded (boolean — a guide is in the price (riding: a riding guide or instructor); null (not stated) never matches), hotelIncluded (boolean), races (array of race slugs, e.g. ["monaco"] (f1), ["berlin-marathon"] (running) or ["ironman-kalmar"] (triathlon) — use EXACT slugs from the race facet), seasons (array of season years, e.g. [2026]), raceDateFrom (YYYY-MM-DD, race day (not the travel dates); a triathlon camp: its departure date), raceDateTo (YYYY-MM-DD, race day (not the travel dates); a triathlon camp: its departure date), transferIncluded (boolean — the transfer from the airport/station (or circuit) to the accommodation is bundled; null (not stated) never matches. Shared by the event, ski, charter and tour niches (yoga, language, surf, racket, riding …)), distances (array: 5k, 10k, half_marathon, marathon, ultra, other — matches a package offering ANY of them), terrains (array: road, trail), raceSeries (array: majors, superhalfs — World Marathon Majors / SuperHalfs), entryIncluded (boolean — the race entry (bib / startnummer) is bundled; false = not bundled (it may be a paid add-on or not offered at all — never promise the traveller can buy one)), tripTypes (array: race, camp — triathlon and running: race = a package to a named race, camp = a dated training camp (running: also a running week or guided trail tour))
- Americanfootball (event-centric (one card = one NFL game, mostly the International Series in London/Paris/Madrid/Munich plus the Super Bowl); the game ticket is always included, hotel via hotelIncluded; a Super Bowl sold before the bracket has no teams — use gameTypes ["super_bowl"], not teams): guideIncluded (boolean — a guide is in the price (riding: a riding guide or instructor); null (not stated) never matches), leagues (array of league slugs, e.g. ["premier-league", "la-liga"] or ["nfl"] — use EXACT slugs from the league facet), teams (array of team slugs, e.g. ["wolverhampton-wanderers"] or ["kansas-city-chiefs"] — use EXACT slugs from the team facet; matches the home OR away side), matchDateFrom (YYYY-MM-DD, kickoff date), matchDateTo (YYYY-MM-DD, kickoff date), hotelIncluded (boolean), seasons (array of season years, e.g. [2026]), transferIncluded (boolean — the transfer from the airport/station (or circuit) to the accommodation is bundled; null (not stated) never matches. Shared by the event, ski, charter and tour niches (yoga, language, surf, racket, riding …)), gameTypes (array: preseason, regular_season, playoffs, super_bowl (International Series games abroad are regular_season))
- Yoga (destination-centric (one card = one retreat venue); yogaStyles is OR-matched, and unknown booleans are unset, never false): transferIncluded (boolean — the transfer from the airport/station (or circuit) to the accommodation is bundled; null (not stated) never matches. Shared by the event, ski, charter and tour niches (yoga, language, surf, racket, riding …)), yogaRetreatFocuses (array: yoga, yoga_hiking, yoga_surf, yoga_wellness, yoga_active, yoga_culture, teacher_training — what the retreat pairs yoga with; teacher_training = a 200h/500h course), yogaLevels (array: beginner, all_levels, intermediate, advanced), yogaStyles (array: hatha, vinyasa, yin, ashtanga, kundalini, iyengar, restorative, yoga_nidra, power, aerial, somatic, other — matches a retreat teaching ANY of them), meditationIncluded (boolean — meditation or mindfulness is part of the programme), vegetarianMeals (boolean — the kitchen is vegetarian (not just a vegetarian option on request)), danishInstructor (boolean — the yoga teacher teaches in Danish), groupSizeMax (object { min?, max? } — yoga, roundtrip, safari, culture, culinary, birding and sailing: the printed maximum number of participants ({ max: 12 } = small groups); a trip that does not print one never matches a bound)
- Triathlon (event-centric: one card = one race edition (tripTypes race) or one training camp (tripTypes camp, its departures are the offers); the race entry is usually NOT included (entryIncluded); raceDate* = race day for races, departure date for camps): guideIncluded (boolean — a guide is in the price (riding: a riding guide or instructor); null (not stated) never matches), hotelIncluded (boolean), races (array of race slugs, e.g. ["monaco"] (f1), ["berlin-marathon"] (running) or ["ironman-kalmar"] (triathlon) — use EXACT slugs from the race facet), seasons (array of season years, e.g. [2026]), raceDateFrom (YYYY-MM-DD, race day (not the travel dates); a triathlon camp: its departure date), raceDateTo (YYYY-MM-DD, race day (not the travel dates); a triathlon camp: its departure date), transferIncluded (boolean — the transfer from the airport/station (or circuit) to the accommodation is bundled; null (not stated) never matches. Shared by the event, ski, charter and tour niches (yoga, language, surf, racket, riding …)), entryIncluded (boolean — the race entry (bib / startnummer) is bundled; false = not bundled (it may be a paid add-on or not offered at all — never promise the traveller can buy one)), tripTypes (array: race, camp — triathlon and running: race = a package to a named race, camp = a dated training camp (running: also a running week or guided trail tour)), triathlonDistances (array: full, half, olympic, sprint, other — full = IRONMAN, half = 70.3, olympic = 5150; matches ANY of them), raceBrands (array: ironman, challenge, other), bikeTransportIncluded (boolean — the traveller’s own bike is carried to the start in the price (triathlon: the athlete’s bike flies with the package; motorcycle: the seller ships the rider’s own motorcycle); false = an add-on or not offered)
- Cruise (one card = one sailing (ship + embarkation port + length); cruiseLines is the ship operator, never the reselling agency; drinksIncluded/excursionsIncluded/guideIncluded are all null when the line does not say): guideIncluded (boolean — a guide is in the price (riding: a riding guide or instructor); null (not stated) never matches), cruiseTypes (array: ocean, river, coastal, expedition), cruiseLines (array: msc, costa, royal_caribbean, celebrity, norwegian, princess, holland_america, carnival, cunard, p_and_o, disney, virgin_voyages, oceania, regent, azamara, silversea, seabourn, explora, windstar, ponant, viking, hurtigruten, havila, ambassador, fred_olsen, aida, tui_cruises, amawaterways, nicko, a_rosa, avalon, uniworld, scenic, other — the ship operator, not the reselling agency), cabinTypes (array: inside, oceanview, balcony, suite — cheapest bookable category the offer prices), cruiseRegions (array: mediterranean, norwegian_fjords, northern_europe, baltic, british_isles, atlantic_islands, arctic, antarctica, caribbean, north_america, alaska, south_america, asia, middle_east, africa, oceania, transatlantic, world, rhine, danube, douro, seine, rhone, elbe, nile, mekong, other_river), embarkationCountries (array of country slugs the ship departs from), drinksIncluded (boolean — an onboard drinks package is bundled), excursionsIncluded (boolean — excursions are bundled (shore excursions on a cruise, sightseeing on a coach tour, round trip, culture trip or city break))
- Coach (destination-centric like cycling (one card = one seller's tour, departures are the offers); pickupRegions matches a tour boarding in ANY chosen Danish region; guideIncluded/excursionsIncluded are shared with cruise and null when the operator does not say): guideIncluded (boolean — a guide is in the price (riding: a riding guide or instructor); null (not stated) never matches), excursionsIncluded (boolean — excursions are bundled (shore excursions on a cruise, sightseeing on a coach tour, round trip, culture trip or city break)), coachTripTypes (array: round_trip, city_break, christmas_market, holiday_stay, garden, event, wellness, other), pickupRegions (array: north_jutland, central_jutland, south_jutland, funen, zealand, copenhagen, bornholm — the Danish region the coach boards in, matches ANY chosen region)
- Holidayhome (one card = one specific rentable house; price is per HOUSE for the stay, never per person — adults/children only set a capacity floor (maxPersons >= adults + children), same mechanism as carrental minSeats; beachDistance is shared with charter and camping; maxPersons is that ROW's price-band top (a house priced by party size emits one row per band, e.g. a "2-person offer"), never the house's real capacity — when telling the visitor what a house sleeps, use houseCapacity, and never phrase a result as "max N persons"): beachDistance ({ min, max } meters), minBedrooms (minimum bedrooms), houseSizeRanges (array: 0-60, 60-80, 80-100, 100-130, 130-170, 170-250, 250+ — living area in m² (the house, or the camping unit), matches ANY of them), petsAllowed (boolean — pets are allowed in the house or camping unit), consumptionIncluded (boolean — electricity, water and heating are included in the price), freeCancellation (boolean — only prices that can be cancelled free of charge (refundable rate); without it a house or unit shows its cheapest rate, often non-refundable)
- Roundtrip (coach's shape (one card = one seller's multi-stop tour, departures are the offers); the overnight places are route stops, so a town search finds every tour sleeping there; price is the party total (per person in a shared double for even parties, single supplement included for one traveller or an odd party); danishGuide/guaranteedDeparture/excursionsIncluded are null when the seller does not say): excursionsIncluded (boolean — excursions are bundled (shore excursions on a cruise, sightseeing on a coach tour, round trip, culture trip or city break)), tourFormats (array: guided_group, small_group, self_drive, private — self_drive is a fly & drive round trip in a rental car with a fixed day plan, not a car-rental search), danishGuide (boolean — a Danish-speaking tour guide is stated (birding: a Danish ornithologist or Danish tour leader travels, read off the bird guide); null when the seller does not say), guaranteedDeparture (boolean — the departure is guaranteed to run; null when the seller does not say, never read as "not guaranteed"), groupSizeMax (object { min?, max? } — yoga, roundtrip, safari, culture, culinary, birding and sailing: the printed maximum number of participants ({ max: 12 } = small groups); a trip that does not print one never matches a bound)
- Citybreak (charter-shaped: one card = one city hotel, each offer a date x stay length x departure airport x party; the price is the party total for the stay as the seller quotes it; escorted = a fixed-date trip with a tour leader (a plain city-break search is a free flight+hotel stay, so set escorted only when the visitor wants a leader); centrumDistance is the key city-break quality signal; transferIncluded/excursionsIncluded are null when the seller does not say): transferIncluded (boolean — the transfer from the airport/station (or circuit) to the accommodation is bundled; null (not stated) never matches. Shared by the event, ski, charter and tour niches (yoga, language, surf, racket, riding …)), excursionsIncluded (boolean — excursions are bundled (shore excursions on a cruise, sightseeing on a coach tour, round trip, culture trip or city break)), escorted (boolean — a fixed-date trip with a tour leader and a programme; absent = everything, including free flight+hotel stays)
- Dance (destination-centric like yoga (one card = one dance week at one venue); danceStyles is OR-matched, and unknown booleans are unset, never false): transferIncluded (boolean — the transfer from the airport/station (or circuit) to the accommodation is bundled; null (not stated) never matches. Shared by the event, ski, charter and tour niches (yoga, language, surf, racket, riding …)), danceStyles (array: ballroom, latin, tango, swing, linedance, flamenco, dance_fitness, other — matches a dance week teaching ANY of them), danceLevels (array: beginner, all_levels, intermediate, advanced), soloWelcome (boolean — true = the page says you can come without a dance partner; false = a partner is needed (pardans); most weeks leave it unset, so for a solo traveller prefer danceStyles linedance or dance_fitness over this filter)
- Wellness (hotel-centric like charter (one card = one spa hotel or retreat venue, each offer a date x nights x party, priced for the whole party); programTypes and spaAccess are OR-matched, and unknown booleans are unset, never false): programTypes (array: spa_stay, cure, ayurveda, fasting_detox, mindfulness_retreat, active_retreat, health_retreat — spa_stay = spaophold / spa & dinner, cure = kurophold, fasting_detox = faste / detox, mindfulness_retreat = meditation / stilhed without a yoga core (yoga retreats are the yoga niche); matches ANY of them), spaAccess (array: unlimited, timed, entrance_only, none — unlimited = "fri adgang", timed = a stated time window or session count, entrance_only = one entry), treatmentsIncluded (boolean — at least one treatment (massage, facial, bath) is in the price; unset when the seller does not say), dinnerIncluded (boolean — at least one dinner (e.g. a 3-course menu) is in the price), guidedProgramme (boolean — a scheduled programme or classes (retreat schedule, fitness/yoga classes, guided sauna) are in the price), doctorConsultation (boolean — a doctor or ayurvedic doctor consultation is in the price (cures, health retreats))
- Safari (round trip's shape (one card = one seller's safari, departures are the offers); the parks and camps are route stops, so a search for a park finds every safari sleeping there; price is the party total for the departure; safariTypes/wildlifeFocus are OR-matched; a land-only safari (no flight in the price) is transports car; every boolean is null when the seller does not say, never false): tourFormats (array: guided_group, small_group, self_drive, private — self_drive is a fly & drive round trip in a rental car with a fixed day plan, not a car-rental search), danishGuide (boolean — a Danish-speaking tour guide is stated (birding: a Danish ornithologist or Danish tour leader travels, read off the bird guide); null when the seller does not say), safariBases (array: circuit, single_lodge — circuit = moves between parks / camps, single_lodge = drives out from one base), accommodationStyles (array: lodge, tented_camp, camping, hotel, mixed — tented_camp = teltlejr; matches ANY of them), safariTypes (array: game_drive, night_drive, walking, boat, mokoro, balloon, horseback, gorilla_trek, chimp_trek — activities in the price (a paid add-on does not count); matches a safari offering ANY of them), wildlifeFocus (array: big_five, great_migration, gorillas, chimpanzees, tigers, polar_bears, lemurs — the animals the page names as the trip's focus; matches ANY of them), privateVehicle (boolean — the party has its own safari vehicle; unset when the seller does not say), windowSeatGuaranteed (boolean — a window seat in the safari vehicle is guaranteed ("vinduesplads garanteret")), beachStayIncluded (boolean — a beach or island extension (Zanzibar, Mauritius, Watamu) is in the price), parkFeesIncluded (boolean — park / conservation fees (and permits) are in the price (diving: marine-park, fuel and port fees)), groupSizeMax (object { min?, max? } — yoga, roundtrip, safari, culture, culinary, birding and sailing: the printed maximum number of participants ({ max: 12 } = small groups); a trip that does not print one never matches a bound)
- Culture (round trip's shape (one card = one seller's culture trip, departures are the offers); the overnight places are route stops, so a town search finds every trip sleeping there; price is the party total for the departure; cultureThemes/eventKinds are OR-matched; expertGuide = a named specialist leads it; every boolean is null when the seller does not say, never false): excursionsIncluded (boolean — excursions are bundled (shore excursions on a cruise, sightseeing on a coach tour, round trip, culture trip or city break)), tourFormats (array: guided_group, small_group, self_drive, private — self_drive is a fly & drive round trip in a rental car with a fixed day plan, not a car-rental search), danishGuide (boolean — a Danish-speaking tour guide is stated (birding: a Danish ornithologist or Danish tour leader travels, read off the bird guide); null when the seller does not say), guaranteedDeparture (boolean — the departure is guaranteed to run; null when the seller does not say, never read as "not guaranteed"), cultureThemes (array: art, architecture, history, war_history, archaeology, classical_music, opera, literature, religion, philosophy, craft_design, gastronomy_culture, society_politics — the trip's cultural themes as the seller names them (war_history = militærhistorie, classical_music = klassisk musik); matches a trip with ANY of them), expertGuide (boolean — a named specialist leads the trip (art historian, archaeologist, author, professor), not a generic tour leader), lecturesIncluded (boolean — lectures / talks are in the price ("foredrag undervejs")), entriesIncluded (boolean — museum and site entrances are in the price), ticketsIncluded (boolean — culture and concert: opera / concert / performance tickets are in the price), eventKinds (array: opera, concert, festival, exhibition, theatre — only trips bound to a dated cultural event (an opera festival, a concert, an exhibition); matches ANY of them), groupSizeMax (object { min?, max? } — yoga, roundtrip, safari, culture, culinary, birding and sailing: the printed maximum number of participants ({ max: 12 } = small groups); a trip that does not print one never matches a bound)
- Sportsevent (event-centric like football (one card = one event session: a darts evening, a Wimbledon day, an NBA game); the event ticket is always included, sellers differ on hotel, flight or bus; football, F1 and NFL are their own niches; every boolean is null when the seller does not say, never false): hotelIncluded (boolean), transferIncluded (boolean — the transfer from the airport/station (or circuit) to the accommodation is bundled; null (not stated) never matches. Shared by the event, ski, charter and tour niches (yoga, language, surf, racket, riding …)), sports (array: darts, tennis, handball, basketball, baseball, rugby, motorsport, icehockey, other — the spectator sport; matches ANY of them), competitions (array of competition slugs, e.g. ["pdc-world-darts-championship", "wimbledon", "nba-regular-season"] — use EXACT slugs from the competition facet), stages (array: group, main_round, quarterfinal, semifinal, final — the furthest stage the ticket covers (a session with semifinals and the final is final); an early round has none)
- Camping (holidayhome's mechanism for a campsite: one card = one campsite, each offer a rented unit (mobile home, safari tent, bungalow) x arrival x stay length; price is per UNIT for the stay, never per person — adults/children only set a capacity floor (maxPersons >= adults + children, maxPersons being that row's price-band top; what the unit sleeps is houseCapacity); unit facts (unitTypes, unitRanges, airConditioning, coveredTerrace, minBedrooms, houseSizeRanges, petsAllowed) differ per unit, campsite facts (pool, waterPark, kidsClub, directBeach, beachDistance) per card; every boolean is null when the operator does not say, never false): beachDistance ({ min, max } meters), minBedrooms (minimum bedrooms), houseSizeRanges (array: 0-60, 60-80, 80-100, 100-130, 130-170, 170-250, 250+ — living area in m² (the house, or the camping unit), matches ANY of them), petsAllowed (boolean — pets are allowed in the house or camping unit), consumptionIncluded (boolean — electricity, water and heating are included in the price), freeCancellation (boolean — only prices that can be cancelled free of charge (refundable rate); without it a house or unit shows its cheapest rate, often non-refundable), unitTypes (array: mobile_home, safari_tent, lodge_tent, bungalow_tent, bungalow, cabin, apartment, caravan — the rented unit at the campsite, matches ANY of them), unitRanges (array: classic, comfort, premium, ultimate — the operator's comfort tier for the unit, matches ANY of them), airConditioning (boolean — the camping unit has air conditioning; null when the operator does not say), coveredTerrace (boolean — the camping unit has a covered terrace), pool (boolean — the campsite has a swimming pool), waterPark (boolean — the campsite has water slides or an aqua park), kidsClub (boolean — the campsite runs a kids club, animation or entertainment), directBeach (boolean — the campsite lies directly on the beach)
- Hunting (safari's shape (one card = one seller's hunting package, offers are dated departures or season windows x party); adults = the number of hunters, a non-hunting companion is not in the party; price is the party total and never includes trophy fees; a season window (dateFlexible) matches any date search it overlaps, from its first bookable day to seasonEnd; species/huntTypes are OR-matched; every boolean is null when the seller does not say, never false): huntTypes (array: driven, stalking, bird, plains_game, big_game, bowhunting, other — how the hunt is run (driven = drivjagt, stalking = pürsch / anstand); matches a package offering ANY of them), species (array: roe_deer, red_deer, fallow_deer, sika_deer, moose, reindeer, wild_boar, mouflon, chamois, ibex, bear, wolf, duck, goose, pheasant, partridge, grouse, woodcock, plains_game, buffalo, lion, leopard, whitetail, pronghorn, muntjac, camel, other — the game the package hunts; matches ANY of them), guideRatios (array: 1:1, 1:2, 1:3, 1:4, group, none — hunting and fishing: guests per guide (group = one guide or tour leader for the group, none = self-guided; hunting uses 1:1, 1:2 and group); matches ANY of them), trophyFees (array: included, extra, partly — included = every trophy in the price, extra = paid by the seller's price list, partly = some animals included), huntingDays (object { min?, max? } — days of hunting (not the nights of the stay); a package that does not say never matches a bound), dateFlexible (boolean — hunting, diving, fishing, language, surf, racket and riding: true = season windows only (one offer the traveller books any days inside, e.g. "1/5-31/7", "hver lørdag hele året", a language course starting every Monday of a price season, a surf or padel camp open every week of its season, a riding farm stay bookable any day of its season), false = fixed-date departures only; absent = both)
- Culinary (culture's shape (one card = one seller's wine or food trip, departures are the offers); the wine / food programme (tastings, vineyard visits, cooking classes, food-tour meals) is in the price; price is the party total for the departure; culinaryThemes/culinaryRegions/expertTypes are OR-matched; the three counts are null when the seller does not say, so prefer culinaryThemes for a loose ask; every boolean is null when the seller does not say, never false): danishGuide (boolean — a Danish-speaking tour guide is stated (birding: a Danish ornithologist or Danish tour leader travels, read off the bird guide); null when the seller does not say), culinaryThemes (array: wine, champagne, port, spirits, beer, food, cooking, truffle, olive_oil, cheese — what the wine / food trip is built around (port = portvin, spirits = whisky / cognac / gin, cooking = hands-on cooking classes, food = a food or gastronomy tour); matches a trip with ANY of them), culinaryRegions (array — wine / food region slugs, English, lowercase and hyphenated (burgundy, sicily, liguria, douro, trentino-alto-adige, …); use the destination filters for a country or town), expertTypes (array: sommelier, wine_guide, chef, food_writer — the specialist leading the trip (wine_guide = vinkender / vinrejseleder); matches ANY of them), tastingsIncluded (object { min?, max? } — tastings in the price; { min: 1 } = has tastings; a trip that states no number never matches a bound), producerVisits (object { min?, max? } — vineyard / producer visits in the price; a trip that states no number never matches a bound), cookingClasses (object { min?, max? } — cooking classes in the price; { min: 1 } = has cooking classes; a trip that states no number never matches a bound), groupSizeMax (object { min?, max? } — yoga, roundtrip, safari, culture, culinary, birding and sailing: the printed maximum number of participants ({ max: 12 } = small groups); a trip that does not print one never matches a bound)
- Fishing (hunting's shape (one card = one seller's fishing package with lodging, offers are dated departures or season windows x party); adults = the number of anglers, a non-fishing companion is not in the party, no children; price is the party total for the package; a season window (dateFlexible) matches any date search it overlaps, from its first bookable day to seasonEnd; fishSpecies/fishingTypes/waterTypes/lodgingTypes are OR-matched; every boolean is null when the seller does not say, never false): guideRatios (array: 1:1, 1:2, 1:3, 1:4, group, none — hunting and fishing: guests per guide (group = one guide or tour leader for the group, none = self-guided; hunting uses 1:1, 1:2 and group); matches ANY of them), dateFlexible (boolean — hunting, diving, fishing, language, surf, racket and riding: true = season windows only (one offer the traveller books any days inside, e.g. "1/5-31/7", "hver lørdag hele året", a language course starting every Monday of a price season, a surf or padel camp open every week of its season, a riding farm stay bookable any day of its season), false = fixed-date departures only; absent = both), fishingTypes (array: fly, spin, sea, big_game, ice, other — how the package fishes (fly = fluefiskeri, spin = spinnefiskeri, sea = havfiskeri incl. jigging / popping / trolling, big_game = big-game sea fishing); matches ANY of them), fishSpecies (array: salmon, sea_trout, trout, char, grayling, pike, perch, zander, sturgeon, carp, catfish, tarpon, bonefish, permit, gt, tuna, sailfish, marlin, dorado, cod, halibut, tigerfish, peacock_bass, snook, roosterfish, other — the fish the package targets (sea_trout = havørred, char = fjeldørred / røding, gt = giant trevally); matches ANY of them), waterTypes (array: river, lake, sea, flats — the water fished (river = elv / å); matches ANY of them), lodgingTypes (array: lodge, camp, hotel, cabin, liveaboard — where the anglers sleep; matches ANY of them), fishingDays (object { min?, max? } — days of fishing (not the nights of the stay); a package that does not say never matches a bound), licenceIncluded (boolean — the fishing licence / beat / river card is in the price; null (not stated) never matches), boatIncluded (boolean — the boat (with fuel / captain) is in the price; null (not stated) never matches), tackleIncluded (boolean — rods and tackle are in the price (rental offered as an extra = false); null (not stated) never matches)
- Language (one card = one language school; offers are a course x length (courseWeeks) x accommodation x room, for a start window (dateFlexible) or a fixed start date; the price is course plus accommodation for that length, the party total in DKK; adults = the students sharing the room (single 1, twin 2, triple 3, quad 4); a junior is one student on an ageGroups junior course (adults 1, children 0); children is always 0; a start window matches any date search it overlaps, from its first start to seasonEnd (the last start); courseLanguages/courseTypes/ageGroups/accommodationKinds/roomTypes are OR-matched; every boolean is null when the school does not say, never false): transferIncluded (boolean — the transfer from the airport/station (or circuit) to the accommodation is bundled; null (not stated) never matches. Shared by the event, ski, charter and tour niches (yoga, language, surf, racket, riding …)), dateFlexible (boolean — hunting, diving, fishing, language, surf, racket and riding: true = season windows only (one offer the traveller books any days inside, e.g. "1/5-31/7", "hver lørdag hele året", a language course starting every Monday of a price season, a surf or padel camp open every week of its season, a riding farm stay bookable any day of its season), false = fixed-date departures only; absent = both), courseLanguages (array: english, spanish, french, german, italian, portuguese, chinese, japanese, korean, arabic, russian, other — the language the course teaches; matches ANY of them), courseTypes (array: general, intensive, business, exam, one_to_one, combination, activity, other — the course format (one_to_one = private lessons, combination = group plus private lessons, activity = language plus a sport or culture programme, exam = Cambridge / DELE / DELF preparation); matches ANY of them), ageGroups (array: junior, adult, adult_30, adult_50, family — who the course is for (junior = under 18, adult_30 / adult_50 = the 30+ / 50+ programmes); matches ANY of them), accommodationKinds (array: host_family, residence, apartment, hotel, campus, other — where the student sleeps (host_family = værtsfamilie, residence = kollegium); matches ANY of them), roomTypes (array: single, twin, triple, quad, dorm — the room the price is for; the party is the room (single = 1 student, twin = 2, triple = 3, quad = 4); matches ANY of them), courseWeeks (object { min?, max? } — the course length in weeks this offer prices; { min: 2, max: 2 } = exactly two weeks), lessonsPerWeek (object { min?, max? } — lessons per week; a course that does not say never matches a bound), activitiesIncluded (boolean — an activity programme is in the price; null (not stated) never matches)
- Racket (surf's shape (one card = one seller's padel, tennis or badminton camp / bundle with coaching, organised play or a tournament entry in the price; offers are dated departures or season windows x party); adults = the number of players (a junior player counts as one), a non-playing companion is not in the party, children is always 0; price is the party total for the trip; a season window (dateFlexible) matches any date search it overlaps, from its first bookable day to seasonEnd; racketSports/racketLevels are OR-matched; the hour counts and every boolean are null when the seller does not say, never 0 or false): transferIncluded (boolean — the transfer from the airport/station (or circuit) to the accommodation is bundled; null (not stated) never matches. Shared by the event, ski, charter and tour niches (yoga, language, surf, racket, riding …)), dateFlexible (boolean — hunting, diving, fishing, language, surf, racket and riding: true = season windows only (one offer the traveller books any days inside, e.g. "1/5-31/7", "hver lørdag hele året", a language course starting every Monday of a price season, a surf or padel camp open every week of its season, a riding farm stay bookable any day of its season), false = fixed-date departures only; absent = both), racketSports (array: padel, tennis, badminton, squash, pickleball — the racket sports coached or played in the price; matches a trip with ANY of them), racketLevels (array: beginner, intermediate, advanced, all — the level the seller prints, mapped from its own band (all = every level welcome, so add it to a beginner ask); matches ANY of them), coachingHours (object { min?, max? } — printed hours of coaching / training for the whole trip; a trip that does not say never matches a bound), playHours (object { min?, max? } — printed hours of organised play / court time for the whole trip; a trip that does not say never matches a bound), danishCoach (boolean — a Danish coach travels with the group or teaches; null (not stated) never matches), tournamentIncluded (boolean — a tournament / competition entry is in the price; null (not stated) never matches), junior (boolean — a junior camp (the junior is the player, counted in adults); null (not stated) never matches)
- Motorcycle (culinary's shape (one card = one seller's MC tour; offers are dated departures x option (flight and bike transport, own or rental bike, bike model) x party); adults = riders + pillions (the passengers on a rider's bike), children is always 0, so adults alone matches every split and pillions narrows it; a pillion offer exists only where the seller prints a pillion price; price is the party total for the departure; mcTerrains/bikeModes/mcLevels are OR-matched; ridingDays, totalKm and every boolean are null when the seller does not say, never 0 or false): guideIncluded (boolean — a guide is in the price (riding: a riding guide or instructor); null (not stated) never matches), bikeTransportIncluded (boolean — the traveller’s own bike is carried to the start in the price (triathlon: the athlete’s bike flies with the package; motorcycle: the seller ships the rider’s own motorcycle); false = an add-on or not offered), danishGuide (boolean — a Danish-speaking tour guide is stated (birding: a Danish ornithologist or Danish tour leader travels, read off the bird guide); null when the seller does not say), pillions (object { min?, max? } — pillion passengers riding on a rider’s bike (adults = riders + pillions); { min: 1 } = "we are 2 on 1 bike", { max: 0 } = every adult rides his own bike; absent = any split of the party), mcTerrains (array: road, adventure, offroad, enduro — what the riding is (road = tarmac touring, adventure = mixed, offroad, enduro); matches ANY of them), bikeModes (array: own, rental_included, rental_extra — own = bring your own motorcycle, rental_included = a rental bike is in the price, rental_extra = a rental at extra cost; matches ANY of them), mcLevels (array: beginner, intermediate, advanced, all — the riding level the seller prints (all = every level welcome, so add it to a beginner ask); matches ANY of them), ridingDays (object { min?, max? } — printed riding days (motorcycle: on the bike; riding: in the saddle); a trip that does not say never matches a bound), totalKm (object { min?, max? } — printed total distance in km; a tour that does not say never matches a bound), supportVehicle (boolean — a support / luggage vehicle follows the group; null (not stated) never matches), fuelIncluded (boolean — fuel (and tolls) are in the price; null (not stated) never matches)
- Riding (racket's shape (one card = one seller's riding holiday: a trail ride, a ranch or farm stay, a riding safari or course with horse, guide and lodging in the price; offers are dated departures or season windows x party); the party is the riders: adults, plus children only where the seller prints a child price; a non-riding companion is never in the party (adults 1 when only one of two rides); price is the party total; a season window (dateFlexible) matches any date search it overlaps, from its first bookable day to seasonEnd; ridingTypes/ridingAccommodations are OR-matched; ridingLevels is the rider's own level and matches every trip at or below it; weightLimitKg is the rider's weight (a holiday that prints no limit still matches); ridingDays and every boolean are null when the seller does not say, never 0 or false): guideIncluded (boolean — a guide is in the price (riding: a riding guide or instructor); null (not stated) never matches), transferIncluded (boolean — the transfer from the airport/station (or circuit) to the accommodation is bundled; null (not stated) never matches. Shared by the event, ski, charter and tour niches (yoga, language, surf, racket, riding …)), dateFlexible (boolean — hunting, diving, fishing, language, surf, racket and riding: true = season windows only (one offer the traveller books any days inside, e.g. "1/5-31/7", "hver lørdag hele året", a language course starting every Monday of a price season, a surf or padel camp open every week of its season, a riding farm stay bookable any day of its season), false = fixed-date departures only; absent = both), ridingDays (object { min?, max? } — printed riding days (motorcycle: on the bike; riding: in the saddle); a trip that does not say never matches a bound), ridingTypes (array: trail, ranch, safari, centre, icelandic, instruction, family — what the riding holiday is (trail = a ride from place to place, ranch, safari, centre = a riding school / centre stay, icelandic = Icelandic horses, instruction = a riding course, family); matches ANY of them), ridingLevels (array: beginner, intermediate, experienced — the RIDER'S own level, not the trip's: a seller prints the minimum level it asks, so a rider matches every trip at or below their level (beginner: beginner and all-levels trips; intermediate adds intermediate; experienced matches every stated level). Send one value; with several the highest counts. A trip that does not state a level never matches), ridingAccommodations (array: ranch, farm, lodge, hotel, tent — where the riders sleep; matches ANY of them), weightLimitKg (integer — the RIDER’S weight in kg, not a bound: keeps holidays whose printed maximum rider weight carries it, and those that print no limit)
- Birding (motorcycle's shape (one card = one seller's guided birding trip with a bird guide or ornithologist and a birding programme in the price; offers are dated departures x party, no season windows); adults only, never children: 2 share a double room, 1 pays the printed single supplement; price is the party total and may be provisional ("forventet pris", "ca."); birdingThemes/birdGuides/birdingActivityLevels are OR-matched; danishGuide is true for every Danish-led trip; groupSizeMax bounds the printed maximum group size; every boolean, enum and the group size are null when the seller does not say, never 0 or false): danishGuide (boolean — a Danish-speaking tour guide is stated (birding: a Danish ornithologist or Danish tour leader travels, read off the bird guide); null when the seller does not say), birdingThemes (array: migration, breeding, wintering, endemics, raptors, cranes, seabirds, owls, wetlands — what the birding trip is built around, only as the seller words it (migration, breeding season, wintering birds, endemic species, raptors, cranes, seabirds, owls, wetlands); matches ANY of them), birdGuides (array: danish_ornithologist, danish_leader, local_bird_guide, danish_and_local — who guides the birding (danish_ornithologist = a Danish ornithologist / DOF leader, danish_leader = a Danish tour leader not stated as a birder, local_bird_guide = a local bird guide only, danish_and_local = both); matches ANY of them), birdingActivityLevels (array: easy, moderate, demanding — the trip's pace and walking as the seller states it; matches ANY of them; a trip that does not say never matches), photoFocus (boolean — birding: photo hides or a stated photo trip; null (not stated) never matches), groupSizeMax (object { min?, max? } — yoga, roundtrip, safari, culture, culinary, birding and sailing: the printed maximum number of participants ({ max: 12 } = small groups); a trip that does not print one never matches a bound)
- Sailing (birding's shape (one card = one seller's sailing voyage, or later a chartered boat; offers are dated departures x party, no season windows); adults only, never children; a voyage sells places per person, so the price is the party total of n places (a solo offer exists where the seller sells a single place or a single-room ticket); flights and travel to the boat are usually not included (transports car); nightsOnBoard 0 means the guests sleep in hotels ashore; sailingProductKinds/vesselTypes/crewModels/sailingCabinTypes are OR-matched; every boolean, enum and the group size are null when the seller does not say, never 0 or false): groupSizeMax (object { min?, max? } — yoga, roundtrip, safari, culture, culinary, birding and sailing: the printed maximum number of participants ({ max: 12 } = small groups); a trip that does not print one never matches a bound), sailingProductKinds (array: voyage, charter — voyage = a place (berth) sold per person on a fixed-date sailing trip, charter = a whole boat rented per period; matches ANY of them), vesselTypes (array: catamaran, monohull, schooner, ketch, motor, other — the boat as the seller names it (a schooner or ketch rig is its own value, never monohull); matches ANY of them), crewModels (array: skippered, guest_crew, crewed, bareboat — who sails the boat (skippered = a skipper sails and the guests join in, guest_crew = the guests crew the boat under a skipper, crewed = a professional crew with the guests as passengers, bareboat = no skipper, charter only); matches ANY of them), sailingCabinTypes (array: shared, private — the priced sleeping place on board (shared = a berth in a shared cabin, private = an own cabin); a trip sleeping in hotels ashore never matches), instructionIncluded (boolean — sailing: sailing lessons are in the price; null (not stated) never matches), womenOnly (boolean — sailing: the trip is for women only; null (not stated) never matches)
- Concert (one card = one seller's coach trip to one named concert; offers are the boarding stops x party (a seat per person whatever the age, so the price is the party total of the seats from that stop); search by the venue's city or country, the artist is on the card and not a filter; the concert ticket is usually not included (ticketsIncluded false) and most trips have no hotel (hotelIncluded false); pickupRegions matches the Danish region of the boarding stop; every boolean is null when the seller does not say, never false): hotelIncluded (boolean), pickupRegions (array: north_jutland, central_jutland, south_jutland, funen, zealand, copenhagen, bornholm — the Danish region the coach boards in, matches ANY chosen region), ticketsIncluded (boolean — culture and concert: opera / concert / performance tickets are in the price)
- Umrah (one card = one seller's dated Umrah or Hajj departure (flight, visa and hotels in Makkah and Madinah; Umrah and Hajj are one niche, the card says which); offers are the room sharings (4, 3 or 2 in a room, or single) x party, the price is the party total and a child pays the seller's child price; search the destination Mecca or Medina, or the country Saudi Arabia; every departure flies from Copenhagen with the flight in the price; danishGuide is the one filter; the hotels, nights, airline and visa are on the card, not filters; every boolean is null when the seller does not say, never false): danishGuide (boolean — a Danish-speaking tour guide is stated (birding: a Danish ornithologist or Danish tour leader travels, read off the bird guide); null when the seller does not say)
Distance filters are { min, max } objects (both bounds optional), e.g. { "max": 500 } for "within 500 m".
Sorting & pagination:
- sort: one of "price", "pricePerPerson", "departureDate", "stars", "kompareScore" (Kompare’s ranking weighs the price against similar trips, hotel stars, guest ratings, how well the trip fits the party and the commission the travel agency pays Kompare. Agencies with a commission agreement always rank above those without.), "discountPercentage", "distanceToCentrum", "distanceToLift" (ski ONLY — silently sorts by price on every other niche, so never offer it there), "providerMix"
- order: "asc" or "desc"
- limit: results per page (1-100)
- offset: pagination offset
IMPORTANT: countries and destinations use EXACT slug matching — always use the exact slugs returned by search_init (topDestinations) or get_facets (countrySlug/destinationSlug facets). Do NOT guess slugs.
Response — the matching accommodations with their trips:
{ total, accommodationCount, offset, results: [{ name, country, destination, stars, guestRating, tripsAvailable, trips: [{ start, end, durationDays, adults, children, price, pricePerPerson, currency, priceBeforeDiscount, transport, meals, unit, seller, bookingUrl }] }] }
- price is the whole party's price; pricePerPerson divides it. Quote them as given, in currency — never convert or round them into a different claim.
- trips holds the first few dates in sort order; tripsAvailable says how many more exist. Page with offset (it counts accommodations).
- seller is the travel agency that sells the trip. bookingUrl opens that trip on the seller's site — give it to the user as the way to book. It is null when the seller can only be compared, not booked, through Kompare.
- start/end are the trip's own first and last day.
- Pass limit (5-10 is plenty) to keep the reply short.
If the filters match nothing, the response instead contains alternatives (facet counts with one filter removed) — use them to suggest what the user could relax.
Tips:
- ALWAYS pass ALL established filters (adults, children, arrivalWeeks/arrivalMonths, niche, market, countries, destinations, etc.) — never drop previously established filters
- Prices depend on group size — always include adults and children
- Start with broad searches, then narrow down with filters
- Use sort=pricePerPerson&order=asc to find cheapest deals
- Use sort=kompareScore&order=desc for Kompare's ranking (see sort above)
- Use sort=providerMix&order=desc for fair provider diversity (round-robin interleave)
- Check search_init first to know valid filter values (topDestinations has exact country/destination slugs)
- Call get_facets before search_listings to verify results exist — use the EXACT SAME filters
ConnectorNo auth