POST /api/trivago/hotels/search
Price: 5 credits
Search Trivago hotels in a destination. Returns a paginated list of properties with id, name, accommodation type, star class, guest rating with review count and top aspects, highlights, lowest 'from' price, number of comparing partner sites, coordinates, locality, distance, images and room details. Filter by dates, occupancy, price, star class, property type, amenities, meal plan, payment and cancellation options, style, traveller type and minimum guest rating, and choose the sort order.
Search hotels in a Trivago destination by destination id. Returns items with id, name, accommodation_type, category, star_rating, is_superior, rating (guest score 0-10), review_count, aspects, highlights, is_popular, is_sponsored, from_price (lowest nightly price), from_price_month, partner_count (number of sites compared), latitude, longitude, country, locality, locality_id, distance_label, construction_year, image, image_count, alias and units. Filter with arrival/departure, adults/children/rooms, min_price/max_price, star_ratings (1-5), property_types, amenities, meal, payment, styles, popular_with and guest_rating (minimum guest score); order with sort. X-Total-Available-Results reports the total matching count.
access-token string requiredtimeout integer — Max scrapping execution timeout (in seconds) (default: 300; min: 20; max: 1500)locale string — Market language-region tag that localizes names, availability and content (default: "en-US"; examples: "en-US", "de-DE", "fr-FR", "es-ES", "ja-JP")currency string — ISO 4217 currency code prices are returned in (default: "USD"; examples: "USD", "EUR", "GBP", "JPY")destination string required — Trivago destination id to search in (resolve names via /trivago/destinations/search) (examples: "14667", "200/14667", "200-14667"; minLength: 1)count integer required — Max number of hotels to return (min: 1)arrival string nullable — Check-in date (YYYY-MM-DD); defaults to ~30 days out (examples: "2026-08-15")departure string nullable — Check-out date (YYYY-MM-DD); defaults to the day after arrivaladults integer — Adults per room (default: 2; min: 1; max: 10)children array — Ages of children per room (default: [])rooms integer — Number of rooms (default: 1; min: 1; max: 8)sort string — Result ordering (default: "featured"; one of: "featured", "rating", "price", "distance", "top_rated", "price_ascending", "price_descending", "distance_from_center")min_price integer — Minimum price per night filter (default: 0; min: 0)max_price integer nullable — Maximum price per night filter (min: 1)star_ratings array — Filter by hotel star classes (1-5); multiple allowed (default: [])property_types array — Filter by property type (default: []; one of: "hotel", "bed_and_breakfast", "guesthouse", "motel", "serviced_apartment", "aparthotel", "apartment", "hostel", "camping", "hostal", "countryside_stay", "resort", "pousada", "ryokan")amenities array — Filter by property amenities and features (default: []; one of: "parking", "pool", "wifi", "pet_friendly", "spa", "hot_tub", "air_conditioning", "kitchen", "restaurant", "gym", "reception_24h", "airport_shuttle", "ev_charger", "sauna", "indoor_pool", "sun_umbrellas", "adults_only", "fridge", "bar", "non_smoking_rooms", "balcony_terrace", "smoking_rooms", "wheelchair_accessible", "in_room_accessibility", "accessible_parking", "crib", "childcare", "playground", "kids_pool", "arcade", "hiking_trail", "horse_riding", "golf_course", "yoga")meal array — Filter by included meal plan (default: []; one of: "breakfast_not_included", "breakfast_included", "half_board", "full_board", "all_inclusive")payment array — Filter by payment and cancellation options (default: []; one of: "free_cancellation", "non_refundable", "pay_at_property", "pay_in_installments")styles array — Filter by property style (default: []; one of: "budget", "local", "modern", "luxury")popular_with array — Filter by traveller type (default: []; one of: "couples", "families")guest_rating string nullable — Minimum guest rating threshold (one of: "8.5", "8.0", "7.5", "7.0")@type string (default: "TrivagoSearchHotel")id integer requiredname string requiredaccommodation_type string nullablecategory string nullablestar_rating integer nullableis_superior boolean nullablerating number nullablereview_count integer nullableaspects array (default: [])highlights array (default: [])is_popular boolean nullableis_sponsored boolean nullablefrom_price number nullablefrom_price_month string nullablepartner_count integer nullablelatitude number nullablelongitude number nullablecountry string nullablelocality string nullablelocality_id integer nullabledistance_label string nullableconstruction_year integer nullableimage string nullableimage_count integer nullablealias string nullableunits array (default: [])@type string (default: "TrivagoUnit")adult_capacity integer nullablechildren_capacity integer nullablebedroom_count integer nullablebathroom_count integer nullablesize_value number nullablesize_unit string nullable422 — The request body did not validate Check the fields against this schema. A URN with the wrong prefix is the most common cause.408 — The request ran past its time limit Raise `timeout` in the request body, up to the maximum this endpoint documents. Lowering `count` or turning off the `with_*` flags also helps, because less work finishes sooner.412 — Destination not found or no hotels available for the given filters Retrying will not help: either the entity does not exist, or the input points at a different one.429 — Too many requests: a rate limit or a usage window is exhausted When the response carries an X-Retry-After header, wait that many seconds and retry: the same number is in the body as `detail.retry_after`, and the limit clears once that window passes. The message in the body names the limit that was hit.500 — Something broke on our side Retrying will not help. If it keeps happening, send us the X-Request-ID from the response headers.529 — Rate limit reached, or the endpoint is overloaded Wait at least 30 seconds, then retry.X-Error — Error message text (present only on error)X-Request-ID — Unique request identifierX-Execution-Time — Execution time in secondsX-Result-Count — How many records the body carries. 0 means an empty result, which is a normal answer and not by itself an error. A non-zero count can come back together with X-Error when the failure happened partway through — read this header and X-Error independently.X-Total-Available-Results — How many records exist for this query, when the endpoint can say. On a `dry_run` request this is the answer and the body is empty. It saturates: the endpoint's documented maximum means 'at least that many', any smaller number is exact.X-Warning — Present when the request body carried keys this endpoint does not document. They were ignored, so any filter you meant to apply through them did not apply. Check the spelling against this schema and retry.X-Retry-After — Seconds to wait before retrying. Present only on 429.