Skip to main content
GET
Call this endpoint after the guest picks a destination and before (or alongside) Search Hotels. It returns the filter options that exist for that destination, with the number of hotels behind each one: star ratings, a typical price range, property types, hotel chains and facilities. Use it to build a filter drawer that only offers choices that will return hotels.
Send exactly one of place_id or hotel_id. Sending both or neither returns HTTP 400. The payload is cached on the server for 24 hours and data.cached_until tells you when it will be rebuilt.

Request example

Response example

From filter value to search field

Each option has the same shape: value (send this), label (show this) and count (hotels with it). Other fields of the response:

Price range is per night

price_range is the typical price per night for one standard room (about 2 adults), in USD cents. The search filters are totals for the whole stay across all nights and rooms. Before sending the slider values, multiply by the number of nights and rooms in the guest’s search. For example, a max_usd_cents of 48200 for a 3-night, 1-room stay is about 144600 as price_max_usd_cents.
The range shows typical prices and leaves out extreme outliers, so it is a good slider scale but not a guarantee. Price filters stay in USD even if your account receives EUR prices in search results.

Behaviour to know

  • Counts describe the catalogue, not live availability or prices for the guest’s dates. A filter can still leave a hotel whose price turns out to be unavailable.
  • Counts do not change when other filters are selected. Do not grey out options based on them.
  • Lists are limited: up to 30 property types, 50 chains and 50 facilities (most common first). Star options cover ratings 1 to 5 only, so unrated hotels have no star option.
  • Counts cover hotels with at least one supplier mapping, the base set a search starts from. A search for your organization can return fewer, for example when your enabled suppliers do not cover a hotel.
  • The cursor of a search is tied to its filters: changing a filter means starting again from the first page.
Two search filters have no facet list: hotel_name (free text, case-insensitive “contains”) and hotel_ids (restrict to specific hotels).

Next step

Send the chosen values to Search Hotels, then use fresh room options and prebook before checkout. The OpenAPI section below lists every parameter and response field.

Authorizations

x-api-key
string
header
required

Environment-specific API key created in the Unifystays portal

Headers

X-Unifystays-Contract-Version
enum<string>
default:2

Hotel API contract version. Optional: 2 is the current version and the default.

Available options:
2
X-Unifystays-Currency
string

ISO 4217 currency for display amounts (display_ledger, display_amount, commercial_display). Optional: defaults to your organization's display currency, USD unless configured. Read pricing.display_currency in the response.

Required string length: 3
Example:

"EUR"

Query Parameters

place_id
number

Place ID from destination autocomplete (type=place). Facets cover every searchable hotel in the place (e.g. all of Bali). Send exactly one of place_id or hotel_id; sending both or neither returns 400.

Example:

2930267

hotel_id
string

Hotel ID from destination autocomplete (type=hotel), as a string. The server resolves the hotel's pricing place and returns facets for that whole place, not for the single hotel. Unknown hotel returns 404.

Example:

"1892345"

Response

success
boolean
required

True when the request succeeded.

Example:

true

message
string
required

Human-readable status. Do not parse.

Example:

"Filters fetched successfully"

data
object
required

Filter facets for the place.