Skip to main content
Draft — not yet available. The amenities model described here is a work-in-progress contract. The endpoints and fields appear in the API reference but are not implemented yet; they may change before release. Don’t build against them.
Hotel and room services & amenities are exposed as structured, filterable data — not free-text — so you can filter (“hotels with a sauna and parking”) and group them for display. There are two parts:
  1. The amenity dictionary — the list of every possible amenity, each with a stable code, a category, a value type, and localized labels. Fetch it once from GET /api/v2/amenities.
  2. Amenity values — what a given hotel or room type actually offers, as a list of code + state objects on its amenities field.
Hotel and room responses carry just the code (plus any quantity or condition); labels and categories live in the dictionary. So fetch the dictionary once, cache it, and look up codes locally.

The amenity dictionary

GET /api/v2/amenities

The full endpoint spec — query parameters, response schema, and a request playground.
GET /api/v2/amenities returns the full list of possible amenities — a small reference list, not paginated. Each entry has a code, a category, a scope, a valueType, and a localized label — see the Amenity object for the full field reference. Optionally narrow it by scope or category:
GET /api/v2/amenities                  # the whole dictionary
GET /api/v2/amenities?scope=hotel      # amenities applicable at hotel level
GET /api/v2/amenities?category=wellness
Response
{
  "data": [
    {
      "code": "wellness.sauna",
      "category": "wellness",
      "scope": ["hotel", "roomType"],
      "valueType": "boolean",
      "label": { "cs-CZ": "Sauna", "de": "Sauna", "en": "Sauna" }
    },
    {
      "code": "parking.parking",
      "category": "parking",
      "scope": ["hotel"],
      "valueType": "count",
      "label": { "cs-CZ": "Parkoviště", "de": "Parkplatz", "en": "Parking" }
    },
    {
      "code": "connectivity.wifi",
      "category": "connectivity",
      "scope": ["hotel", "roomType"],
      "valueType": "boolean",
      "label": { "cs-CZ": "Wi-Fi", "de": "WLAN", "en": "Wi-Fi" }
    },
    {
      "code": "pools.indoor_pool",
      "category": "pools",
      "scope": ["hotel"],
      "valueType": "boolean",
      "label": { "cs-CZ": "Vnitřní bazén", "de": "Innenpool", "en": "Indoor pool" }
    },
    {
      "code": "comfort.air_conditioning",
      "category": "comfort",
      "scope": ["roomType"],
      "valueType": "boolean",
      "label": { "cs-CZ": "Klimatizace", "de": "Klimaanlage", "en": "Air conditioning" }
    }
  ]
}

Example categories and codes

Codes follow a category.slug convention and are spa/wellness-oriented. The list below is a sample — the full set (from GET /api/v2/amenities) has more categories and codes, and grows over time.
CategoryExample codes
wellnesswellness.sauna, wellness.massage, wellness.spa, …
poolspools.indoor_pool, pools.outdoor_pool, pools.hot_tub, …
connectivityconnectivity.wifi, connectivity.public_terminal, …
parkingparking.parking, parking.ev_charging, parking.garage, …
foodAndDrinkfoodAndDrink.restaurant, foodAndDrink.bar, foodAndDrink.breakfast, …
servicesservices.reception_24h, services.concierge, services.laundry, …
accessibilityaccessibility.step_free_access, accessibility.accessible_bathroom, …
comfortcomfort.air_conditioning, comfort.minibar, comfort.balcony, …
bathroombathroom.shower, bathroom.bathtub, bathroom.hairdryer, …
…and more — further categories (e.g. pets, families, sustainability) and codes are added as the catalog evolves. Resolve a code against GET /api/v2/amenities rather than hard-coding this list.

Amenity values on hotels and room types

Hotels and room types carry an amenities array — the amenities that hotel or room has. Each item references a dictionary code, optionally with a quantity or a condition — see the Amenity value object for the full field reference. The array lists the amenities a hotel or room offers — a code’s presence means it has that amenity. A code that is absent means it is not offered (or not yet advertised).
Hotel with amenities
{
  "id": "66f16191f739705faa020001",
  "name": { "cs-CZ": "Pawlik", "de": "Pawlik-Aquaforum" },
  "stars": 4,
  "amenities": [
    { "code": "wellness.sauna" },
    { "code": "connectivity.wifi" },
    { "code": "parking.parking", "quantity": 40 },
    { "code": "pools.indoor_pool", "condition": "seasonal" }
  ]
}
To display these, resolve each code against the dictionary you fetched from GET /api/v2/amenities — that is where the localized label and category live.

Scope: hotel vs. room type

Each dictionary entry has a scope — an array of the levels where the amenity applies:
  • hotel — property-level facilities (parking, an outdoor pool, 24h reception).
  • roomType — in-room features (air conditioning, balcony, minibar).
An amenity that applies at both levels (e.g. Wi-Fi) has ["hotel", "roomType"]. An amenity whose scope contains hotel can appear in a hotel’s amenities; one whose scope contains roomType can appear in a room type’s.
Room type with amenities
{
  "id": "66f16191f739705faa020003",
  "hotelId": "66f16191f739705faa020001",
  "code": "SUPERIOR-DBL",
  "beds": 2,
  "amenities": [
    { "code": "comfort.air_conditioning" },
    { "code": "connectivity.wifi" }
  ]
}

Filtering by amenity

Both GET /api/v2/hotels and GET /api/v2/room-types accept two amenity filters:
  • amenities — comma-separated codes; returns only results that have all of them (AND semantics).
  • amenityCategory — returns results that have any amenity in that category.
# Hotels with BOTH a sauna AND parking
GET /api/v2/hotels?amenities=wellness.sauna,parking.parking

# Hotels with any wellness amenity
GET /api/v2/hotels?amenityCategory=wellness

# Room types with air conditioning
GET /api/v2/room-types?amenities=comfort.air_conditioning
stars and beds have their own query parameters — don’t pass them as amenity codes.

Putting it together

  1. Fetch the dictionary once: GET /api/v2/amenities. Cache it — it changes rarely.
  2. Filter the catalog: GET /api/v2/hotels?amenities=wellness.sauna&amenityCategory=wellness.
  3. Render each result: for every amenities[].code, look up the localized label and category in the cached dictionary, and show any quantity or condition.
The dictionary is the single source of truth for labels and grouping; hotel and room payloads stay lean by carrying only code + state.