Skip to main content

Dynamic Sets: Property Groups and Performance Insights

Written by Ryo

Dynamic sets are saved collections of relevant properties that meet your specified criteria. They're built inside Wheelhouse Navigator — a map-based interface that combines geographic, performance, pricing, inventory type, operator type, LOS & fees, and amenity data. Use dynamic sets for benchmarking, pricing strategy, owner comms, listing acquisition, and more.

Dynamic sets include two distinct listing types: the member listings inside the set (properties matching your criteria), and your own associated listings that you've linked for side-by-side comparison.

Important

The RM API only exposes paid dynamic sets. Free sets return 404 Not Found.


GET /sets

List all paid dynamic sets the authenticated user owns or has shared access to. Results are ordered by most recently updated first.

curl "https://api.usewheelhouse.com/ss_api/v1/sets" \
-H "X-Integration-Api-Key: your_api_key_here"

Query parameters

  • per_page (integer, optional, default: 50) — number of sets per page (max 100)

  • page (integer, optional) — page number

  • offset (integer, optional) — number of items to skip

Response — array of dynamic set objects:

[
{
"id": 7,
"user_id": 1001,
"name": "Beachfront Comps",
"description": "Top comps near our Malibu property",
"kind": "competitive",
"currency": "USD",
"is_static": true,
"filters": {},
"boundary": [...],
"listing_counts": {
"active": 8,
"hidden": 1,
"review": 0,
"removed": 1
},
"updated_at": "2026-01-15T08:30:00Z"
}
]

Response fields

  • id — Wheelhouse's internal dynamic set ID (integer)

  • kind — the use-case label for the set. One of: competitive, market, neighborhood, marketing, acquisition, underwriting, merchandising, other

  • is_statictrue if member listings are a frozen snapshot; false if the set auto-syncs based on its boundary and filters

  • listing_counts — member counts broken down by status: active, hidden, review, removed

  • boundary — geographic boundary of the set

Status codes

  • 200 — array of dynamic sets

  • 401 — API key authorization failed


GET /sets/:set_id

Get detailed information about a single dynamic set, including its definition, boundary, and member counts per status.

curl "https://api.usewheelhouse.com/ss_api/v1/sets/7" \
-H "X-Integration-Api-Key: your_api_key_here"

Path parameters

  • set_id (integer, required) — Wheelhouse internal dynamic set ID

Status codes

  • 200 — dynamic set object (same shape as list response)

  • 401 — API key authorization failed

  • 404 — not found, not accessible, or not a paid set


GET /sets/:set_id/aggregated_metrics

Get monthly performance metrics aggregated across active member listings.

curl "https://api.usewheelhouse.com/ss_api/v1/sets/7/aggregated_metrics?currency=USD&dates=2026-05-01&dates=2026-06-01" \
-H "X-Integration-Api-Key: your_api_key_here"

Path parameters

  • set_id (integer, required) — Wheelhouse internal dynamic set ID

Query parameters

  • currency (string, optional) — ISO 4217 3-letter currency code. Defaults to the set's currency.

  • dates (string[], optional) — restrict to months starting on these dates (YYYY-MM-DD, first of month). Send multiple as ?dates=2026-05-01&dates=2026-06-01. Defaults to all available.

Status codes

  • 200 — aggregated metrics per period

  • 401 — API key authorization failed

  • 404 — not found, not accessible, or not a paid set


GET /sets/:set_id/listings

List member listings grouped by membership status, with trailing year performance metrics.

curl "https://api.usewheelhouse.com/ss_api/v1/sets/7/listings" \
-H "X-Integration-Api-Key: your_api_key_here"

Path parameters

  • set_id (integer, required) — Wheelhouse internal dynamic set ID

Response

json
{ "active": [...], "hidden": [...], "review": [...], "removed": [...] }
  • active — currently active members

  • hidden — hidden from the set view

  • review — pending review before being added

  • removed — previously removed members

Status codes

  • 200 — member listings grouped by status

  • 401 — API key authorization failed

  • 404 — not found, not accessible, or not a paid set


GET /sets/:set_id/time_series

Get daily time-series metrics aggregated across active member listings over a date range.

curl "https://api.usewheelhouse.com/ss_api/v1/sets/7/time_series?metric=occupancy&metric=adr_w_fees&start_date=2026-01-01&end_date=2026-06-30" \
-H "X-Integration-Api-Key: your_api_key_here"

Path parameters

  • set_id (integer, required) — Wheelhouse internal dynamic set ID

Query parameters

  • metric (string[], optional) — metrics to include. Available: asking_rate_w_fees, occupancy, occupancy_adjusted, adr_w_fees, lead_time, revpar_adjusted_w_fees, revpar_w_fees, revenue_w_fees, nights_bookable. Defaults to all.

  • start_date (string, optional) — YYYY-MM-DD. Defaults to today. Max 3 years past, 1 year future.

  • end_date (string, optional) — YYYY-MM-DD. Defaults to 1 year from today. Must be after start_date.

Status codes

  • 200 — time-series data

  • 204 — not enough data

  • 400 — invalid parameter value

  • 401 — API key authorization failed

  • 404 — not found, not accessible, or not a paid set


GET /sets/:set_id/distribution

Get histogram distributions for one or more metrics for a given calendar month.

curl "https://api.usewheelhouse.com/ss_api/v1/sets/7/distribution?metric=occupancy&metric=adr_w_fees&month=2026-06-01" \
-H "X-Integration-Api-Key: your_api_key_here"

Path parameters

  • set_id (integer, required) — Wheelhouse internal dynamic set ID

Query parameters

  • metric (string[], optional) — metrics to include. Available: occupancy, occupancy_adjusted, asking_rate_w_fees, adr_w_fees, lead_time, revpar_adjusted_w_fees, revpar_w_fees, length_of_stay. Defaults to all.

  • month (string, optional) — any date within the target month (YYYY-MM-DD). Defaults to start of current month.

Response

Each metric key maps to an array of histogram buckets:

{
"currency": "USD",
"month": "2026-06-01",
"data": {
"occupancy": [
{ "bucket_min_incl": 0.0, "bucket_max_excl": 0.1, "probability": 0.0625, "percentile": 0.0625 }
],
"adr_w_fees": [...],
"lead_time": [...],
"length_of_stay": [...]
}
}

Metric units:

  • asking_rate_w_fees, adr_w_fees, revpar_adjusted_w_fees, revpar_w_fees — monetary, in the currency at the top level

  • occupancy, occupancy_adjusted — decimal fraction (0–1); multiply by 100 for percentage

  • lead_time — days; negative = advance booking (booked before stay date)

  • length_of_stay — nights

Status codes

  • 200 — metric distributions for the month

  • 204 — not enough data

  • 400 — invalid parameter value

  • 401 — API key authorization failed

  • 404 — not found, not accessible, or not a paid set


GET /sets/:set_id/associated_listings

List the authenticated user's own listings associated with the set for comparison. For shared sets, listings you don't have access to are omitted.

curl "https://api.usewheelhouse.com/ss_api/v1/sets/7/associated_listings" \
-H "X-Integration-Api-Key: your_api_key_here"

Path parameters

  • set_id (integer, required) — Wheelhouse internal dynamic set ID

Status codes

  • 200 — array of associated listing objects

  • 401 — API key authorization failed

  • 404 — not found, not accessible, or not a paid set


PUT /sets/:set_id/associated_listings

Associate your own listings with a dynamic set. Already-associated listings are left unchanged. Requires editor or manager access on shared sets.

curl -X PUT "https://api.usewheelhouse.com/ss_api/v1/sets/7/associated_listings" \
-H "X-Integration-Api-Key: your_api_key_here" \
-H "Content-Type: application/json" \
-d '{ "listing_ids": ["abc123", "def456"], "channel": "airbnb" }'

Path parameters

  • set_id (integer, required) — Wheelhouse internal dynamic set ID

Request body

  • listing_ids (string[], required) — channel listing IDs to associate. Maximum 500.

  • channel (string, conditional) — required if it cannot be derived from the API key.

Status codes

  • 200 — updated array of associated listing objects

  • 400 — invalid parameters

  • 401 — API key authorization failed

  • 403 — insufficient access or read-only API key

  • 404 — not found, not accessible, or not a paid set

  • 409 — concurrent request in progress; retry after it completes


DELETE /sets/:set_id/associated_listings

Remove your own listings from a dynamic set. Requires editor or manager access on shared sets.

curl -X DELETE "https://api.usewheelhouse.com/ss_api/v1/sets/7/associated_listings?listing_ids=abc123&listing_ids=def456&channel=airbnb" \
-H "X-Integration-Api-Key: your_api_key_here"

Path parameters

  • set_id (integer, required) — Wheelhouse internal dynamic set ID

  • listing_ids (string[], required) — channel listing IDs to remove. Maximum 500.

  • channel (string, conditional) — required if it cannot be derived from the API key.

Status codes

  • 200 — updated array of associated listing objects

  • 400 — invalid parameters

  • 401 — API key authorization failed

  • 403 — insufficient access or read-only API key

  • 404 — not found

  • 409 — concurrent request in progress; retry after it completes


GET /sets/:set_id/changelog

Get the history of changes to a dynamic set — membership additions, removals, and edits — ordered oldest first.

curl "https://api.usewheelhouse.com/ss_api/v1/sets/7/changelog?after=2026-01-01" \
-H "X-Integration-Api-Key: your_api_key_here"

Path parameters

  • set_id (integer, required) — Wheelhouse internal dynamic set ID

Query parameters

  • after (string, optional) — only include changes on or after this date (YYYY-MM-DD)

  • before (string, optional) — only include changes before this date (YYYY-MM-DD, exclusive)

Status codes

  • 200 — array of changelog entries

  • 401 — API key authorization failed

  • 404 — not found, not accessible, or not a paid set

Related

  • Segments: Portfolio Groups and Filters

  • Market Reports & Neighborhood Data: Market-level insights

  • How to organize and filter listings (tags, segments, dynamic sets)

Did this answer your question?