2026-09-18
Hotel and room type images
- Added
width,height, localizedalt, andvariantsto every image, including room types embedded in a hotel response. ExistingurlandthumbnailUrlfields retain their behavior. variantscontains available WebP URLs at widths 480, 960, 1440, and 1920. Sizes larger than the original are omitted. When no variant exists, fall back tothumbnailUrland thenurl.- Unavailable dimensions are explicitly
null; unavailable variants are{}. altfollowsAccept-Language. Missing translations fall back to the hotel name or room category. Preserve an explicit empty string for decorative images.thumbnailUrlis deprecated and remains available throughout API v2.
2026-09-10
Hotels
- Breaking:
priceFromreplacesperNight,perNightOriginal,minimumStay,minimumStayOriginal,guests, andminimumNights. Under each currency there is now the hotel-wide pricealland the categorieshealthandwellness, each carrying two independent minima:perPersonPerNightandperStay. Every minimum reports its ownamount,original,nights,occupancy, andvisitType. See Prices. - A category is omitted when the hotel sells nothing in it.
allincludes visit types that have no category yet, so it can be lower than both categories. - A promotion lowers a “from” price only when it covers the whole stay.
- Visit types whose selling period has ended no longer contribute a “from” price.
- Send
Accept-Language:priceFromembeds visit type names, and without the header every name is returned in all four locales. - The category behind
healthandwellnessis exposed in API v1 asstay_categoryon every visit type object.
2026-07-28
Amenities
GET /amenity-categoriesalways includes each amenity’soptionslist. Theexpand=optionsquery parameter is removed; option definitions are returned by default.- Hotel amenity values now return the category, the amenity, and each selected
option by
codeonly; localized labels come from the dictionary. This drops the inlinecategory.labeland per-optionlabelthat hotel responses previously carried. GET /hotelsandGET /hotels/{hotelId}acceptexpand=amenityLabels, which inlines the localizedlabelon each amenity category, amenity, and selected option for a self-contained response.expandaccepts a comma-separated list.
2026-07-27
Amenities
GET /amenity-categoriessupports conditional revalidation: responses carry anETagandCache-Control: private, max-age=3600, and a request with a matchingIf-None-Matchreturns304without a body.GET /amenity-categories,GET /hotels, andGET /hotels/{hotelId}return theX-SpaPortal-Amenities-Versionheader. The value changes only when the dictionary content changes; refetch the dictionary when it differs from the cached version.
2026-07-24
Hotels
priceFromnow returns the cheapest available current or future room price for the room’s standard occupancy. It includes nightly and minimum-stay totals, occupancy, and minimum nights for each available currency. Hotels without a usable price returnnull. Applicable public-channel promotions are included together with their original prices.
Amenities
- The amenity dictionary is available from
GET /amenity-categories. Each item indatacontainscategoryand anamenitiesarray. - Hotel responses expose assigned amenity values under
amenityCategories. Categories without assigned amenities are omitted. - Amenity option definitions are omitted from the dictionary by default. Use
expand=optionsto include every supported choice and its localized label. - Amenity-specific choices use the generic
optionsdetail kind and localizedoptionsobjects. This replaces the publicparking_types,sauna_types, anddietary_optionsdetail kinds and their corresponding value fields. - Hotel amenity values now include only the detail fields mapped from the
corresponding amenity dictionary entry’s
detailKinds. Thecodefield is always present. - Supported fields that are not filled retain their neutral value: scalar
fields are
null, arrays are empty, opening-hour blocks are empty, and requested note translations arenull. - Amenity charge information is returned exclusively through
accessusingincluded,conditional, orpaid. - Dictionary entries with an empty
detailKindsarray are presence-only. Their hotel values contain onlycode.
2026-07-23
Hotels and amenities
- Added
GET /hotels. - Added
GET /hotels/{hotelId}. - Added
GET /amenity-categories. - Hotel responses include localized
shortDescriptionandchannelContent.tagline, structured accommodation rules and meal services, ordered indication codes, staff language codes, and structured amenities.
Room types
- Invalid cursors, cursors created for another sort mode, and cursors belonging to another resource now return
400instead of silently restarting pagination. - Empty localized strings are returned as
null. - Empty
codeandsearchquery parameters are treated as omitted parameters.
lastSortValue remain supported.