Hermeseus Docs
Legacy docs

Hotel search

Search live availability in two steps: a city search lists hotels with a lead-in price, then a hotel search lists that property's bookable rates. You pick a rate, confirm it, and turn it into an order.

Search availability

POST/v3/HAPI/hotels/searches

Requires the hotels:read scope.

Body

FieldTypeRequiredDescription
check_instringYesCheck-in date, YYYY-MM-DD.
check_outstringYesCheck-out date, after check-in.
city_idinteger*Destination city id → a city search. Provide exactly one of city_id or hotel_id.
hotel_idinteger*A single hotel id (from a city search result) → a hotel search with bookable rates.
occupanciesarrayYesOne entry per room.
occupancies[].adultsintegerYesAdults in the room, 1–8.
occupancies[].childrenarrayNoChild ages, e.g. [4, 9].
sortstringNoCity mode only: a sort id from the response sorts (e.g. price, stars_desc, review_score).
filtersobjectNoCity mode only: facet key → array of option values — see below.
page, page_sizeintegerNoPaging (page_size up to 200).

Filtering & sorting a city search

Filtering is facet-based and applied across the whole city result (not just one page). A city response includes:

To filter, send filters as a map of facet key → array of option values, and sort as a sort id:

curl -X POST https://api.hermeseus.com/v3/HAPI/hotels/searches \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "check_in": "2026-11-14",
    "check_out": "2026-11-16",
    "city_id": 1019782831,
    "occupancies": [ { "adults": 2 } ],
    "sort": "review_score",
    "filters": {
      "stars": [4, 5],
      "facility": [107, 433],
      "meals": ["breakfast"],
      "free_cancellation": [true]
    }
  }'

Each facet group is { key, title, type, options: [{ value, name, count }] }. type is range (ordered numbers), enum (a set) or boolean. To filter, put the option values under the group key in filters. Multiple values in a group are OR; different groups are AND.

Filter groups

Groups with a fixed set of values are listed in full below — you can build these without reading facets. Groups marked catalogue have per-destination values (ids with a human name): read them from facets and pass the value back.

keyTitletypeValues
starsProperty ratingrange0 (unrated) – 5.
review_scoreGuest review scorerange5,6,7,8,9 — minimum score (e.g. 8 = 8+).
mealsMealsenumbreakfast, breakfast_lunch, breakfast_dinner, full_board, all_inclusive, self_catering.
free_cancellationFree cancellationbooleantrue.
adults_onlyAdults onlybooleantrue.
sustainableSustainability certifiedbooleantrue.
distance_kmMax distance from centrerange1, 3, 5 (km).
min_bedsMinimum bedsrange1–5.
min_bedroomsMinimum bedroomsrange1–4.
bed_typeBed preferenceenumsingle (2 single beds), double.
property_typeProperty typeenumFull list below.
facilityFacilitiesenum · catalogueFull list below.
room_facilityRoom facilitiesenum · catalogueFull list below.
districtNeighbourhoodenum · per-cityValues are per-city (a neighbourhood id + name); read them from facets.
chainHotel chainenum · per-cityValues are per-city (a chain id + name); read them from facets.
landmarkNear a landmarkenum · per-cityValues are per-city (a landmark id + name); read them from facets.

Example: {"stars":[4,5], "facility":[107,433], "meals":["breakfast"], "free_cancellation":[true]} means (4- or 5-star) AND (has Free WiFi and Swimming pool) AND (breakfast included) AND (free cancellation).

property_type values

valueNamevalueName
3Entire homes & apartments216Guest houses
201Apartments220Holiday homes
203Hostels221Lodges
204Hotels222Homestays
205Motels223Country houses
206Resorts224Luxury tents
208Bed and breakfasts225Capsule hotels
209Ryokans226Love hotels
212Holiday parks228Chalets
213Villas231Economy hotels
214Campsites235Student accommodation
215Boats

facility values

valueNamevalueName
2Parking46Free parking
3Restaurant54Spa & wellness centre
4Pets allowed72BBQ facilities
5Room service107Free WiFi
824-hour front desk139Airport shuttle (free)
11Fitness centre182Electric vehicle charging station
16Non-smoking rooms185Wheelchair accessible
17Airport shuttle433Swimming pool
28Family rooms

room_facility values

valueNamevalueName
5Bath81View
11Air conditioning86Electric kettle
16Kitchenette93Private pool
17Balcony108Sea view
23Desk120Coffee machine
34Washing machine123Terrace
37Patio998Coffee/tea maker
38Private bathroom999Kitchen/kitchenette
75Flat-screen TV79Soundproofing
facility and room_facility are catalogue groups: the response facets only lists the values present for the current destination and dates (each with a live count). The tables above are the catalogue values; always send ids that appeared in facets.
These filters are not the amenity list. facility / room_facility are the short, curated set of facilities you can filter by (the values above). They are not the per-hotel/per-room amenities you receive in a hotel-details response — that is an open-ended, free-text descriptive list (Bathrobe, Slippers, Wake-up service, Socket near the bed, …) that varies by property and has no fixed value set. Filter by the ids here; display the descriptive amenities from the response.

Sort options

Pass a sort id as sort (city mode):

idMeaning
pricePrice, low to high.
stars_descStars, high to low.
stars_ascStars, low to high.
review_scoreGuest review score, high to low.
distanceDistance from city centre.
popularityPopularity.

Example facets block

"facets": [
  { "key": "stars", "title": "Property rating", "type": "range",
    "options": [ { "value": 5, "name": "5 stars", "count": 639 }, { "value": 4, "name": "4 stars", "count": 4196 } ] },
  { "key": "facility", "title": "Facilities", "type": "enum",
    "options": [ { "value": 107, "name": "Free WiFi", "count": 6110 }, { "value": 433, "name": "Swimming pool", "count": 5604 } ] },
  { "key": "meals", "title": "Meals", "type": "enum",
    "options": [ { "value": "breakfast", "name": "Breakfast included", "count": 652 } ] },
  { "key": "free_cancellation", "title": "Free cancellation", "type": "boolean",
    "options": [ { "value": true, "name": "Free cancellation", "count": 4614 } ] }
],
"sorts": [ { "id": "price", "name": "Price (low to high)" }, { "id": "review_score", "name": "Guest review score" } ]
A property's full facilities also appear on the hotel search (by hotel_id) under hotel.facility_groups.

City search — hotel summaries

With city_id, every offer is a hotel_summary: the property, its review scores, and the cheapest available price. Nothing is bookable yet — take the hotel_id you like and search again with it.

curl -X POST https://api.hermeseus.com/v3/HAPI/hotels/searches \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "check_in": "2026-11-14",
    "check_out": "2026-11-16",
    "city_id": 1019782831,
    "occupancies": [ { "adults": 2 } ]
  }'
{
  "object": "hotel_search",
  "id": "hsr_485158995",
  "mode": "city",
  "check_in": "2026-11-14",
  "check_out": "2026-11-16",
  "nights": 2,
  "total": 6263,
  "sort": null,
  "filters_applied": {},
  "sorts": [ { "id": "price", "name": "Price (low to high)" }, { "id": "stars_desc", "name": "Stars (5 to 0)" } ],
  "facets": [
    { "key": "stars", "title": "Property rating", "type": "range", "options": [ { "value": 5, "name": "5 stars", "count": 639 } ] },
    { "key": "facility", "title": "Facilities", "type": "enum", "options": [ { "value": 107, "name": "Free WiFi", "count": 6110 } ] }
  ],
  "pagination": { "page": 1, "page_size": 140, "total_pages": 8, "has_next": true, "has_prev": false },
  "offer_count": 140,
  "offers": [
    {
      "object": "hotel_summary",
      "hotel_id": "70784396381",
      "name": "Vida Creek Harbour",
      "lead_rate": { "amount": "165.52", "currency": "USD" },
      "lead_rate_before_discount": null,
      "discount_percent": 0,
      "deal_badges": [],
      "meal_plan": "Room Only",
      "refundable": true,
      "free_cancellation": true,
      "nights": 2,
      "occupancy": { "adults": 2, "children": 0 },
      "rating": 5,
      "review_score": 8.6,
      "review_count": 1565,
      "review_word": "Very good",
      "accommodation": "Hotels",
      "address": { "city": "Dubai", "country": "United Arab Emirates", "country_code": "AE" },
      "location": { "lat": 25.19, "lng": 55.35 },
      "images": [ "…" ]
    }
  ]
}

With hotel_id, the response carries the property once under hotel (address, check-in/out times, description, facilities) and each offer is a bookable hotel_rate with a real rate id, board, room and cancellation terms.

{
  "object": "hotel_search",
  "id": "hsr_738363500",
  "mode": "hotel",
  "check_in": "2026-11-14",
  "check_out": "2026-11-16",
  "nights": 2,
  "hotel": {
    "id": "70784396381",
    "name": "Vida Creek Harbour",
    "rating": 5,
    "address": { "line": "…", "city": "Dubai", "country": "United Arab Emirates", "country_code": "AE", "postal_code": "…" },
    "location": { "lat": 25.19, "lng": 55.35 },
    "images": [ "…" ],
    "description": "…",
    "check_in_from": "15:00",
    "check_out_until": "12:00",
    "facility_groups": [ { "name": "General", "facilities": [ "Air conditioning", "…" ] } ]
  },
  "offer_count": 39,
  "offers": [
    {
      "object": "hotel_rate",
      "id": "hrt_TkRNNU5qTTRNWHd5…",
      "total": { "amount": "165.52", "currency": "USD" },
      "total_before_discount": null,
      "discount_percent": 0,
      "deal_badges": [],
      "refundable": true,
      "refundable_until": "2026-11-12T23:59:00",
      "available_rooms": 5,
      "units": 1,
      "board": "Breakfast included",
      "board_basis": "breakfast_included",
      "board_included": [ "Breakfast included (Buffet)" ],
      "rooms": [
        {
          "id": "…",
          "name": "Classic Twin Room with City View",
          "adults": 2,
          "children": 0,
          "beds": [ "2 single beds" ],
          "max_occupancy": 2,
          "size_m2": 32,
          "description": "…",
          "images": [ "…" ]
        }
      ],
      "payment": { "title": "Pay online", "description": "…", "deposit_required": true },
      "cancellation": { "non_refundable": false, "type": "free_cancellation", "policy_text": "…" }
    }
  ]
}
Rates are quotes. Confirm the rate right before booking to lock the price and availability. The next step, confirm a rate, does that and is required before an order.