Skip to main content

Listings: Retrieve and Inspect Your Properties

Written by Ryo

The listings endpoints are your starting point for any RM API integration. Use them to retrieve your full property portfolio or inspect a specific listing's details — including its listing_id and channel, which are required by most other endpoints.


GET /listings

Retrieve all listings in your account.

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

Query parameters

  • exclude_inactive (boolean, default: true) — when true, returns only active listings

  • include_managed_listings (boolean, default: false) — when true, also returns listings you manage for another Wheelhouse account (shared/delegated access), in addition to your own

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

  • page (integer, default: 1) — page number

  • offset (integer) — number of items to skip; alternative to page

Response

Returns a plain array of listing objects:

[
{
"id": "12345678",
"channel": "airbnb",
"wheelhouse_id": 987654,
"title": "2BR Beachfront Villa",
"nickname": "Beach Villa",
"currency": "USD",
"num_bedrooms": 2,
"num_bathrooms": 1.0,
"location": {
"address": "Miami Beach, FL",
"country": "US",
"latitude": 25.7825,
"longitude": -80.1340
},
"is_active": true,
"number_of_active_units": null,
"wheelhouse_created_at": "2024-01-15 08:00:00 -0800",
"access_level": "owner"
}
]

Response fields

  • id — the channel's unique listing ID (use this as listing_id in all other endpoints)

  • channel — the integration connected to this listing (use this as the channel parameter in other endpoints)

  • wheelhouse_id — Wheelhouse's internal numeric ID for this listing

  • title — the listing name as it appears on the channel

  • nickname — shortened name used internally in Wheelhouse

  • currency — ISO-4217 currency code for this listing's pricing

  • num_bedrooms / num_bathrooms — property details (bathrooms may be fractional, e.g. 1.5)

  • location — nested object with address, country, latitude, longitude, postal_code

  • is_active — whether the listing is currently active

  • number_of_active_unitsnull for standard listings; positive integer for multi-unit listings (see note below)

  • wheelhouse_created_at — when the listing was added to Wheelhouse

  • access_level — your access role: owner, viewer, restricted_editor, editor, or manager

Multi-unit listings

A non-null number_of_active_units means the listing has multiple independently bookable units. Calendar endpoints (/price_calendar, /last_posted_prices) return one row per unit per date, with a unit_number field identifying which unit the row belongs to.


GET /listings/:listing_id

Retrieve details for a single listing.

curl "https://api.usewheelhouse.com/ss_api/v1/listings/12345678?channel=airbnb" \
-H "X-Integration-Api-Key: your_api_key_here"
bash

Path parameters

  • listing_id (string, required) — the channel's unique listing identifier

Query parameters

  • channel (string, required) — the channel name for this listing (from GET /listings)

Response

Returns a single listing object with the same fields as above.


GET /listings/:listing_id/pricing_tier

Get the pricing tier for a listing — useful for understanding what features are available.

curl "https://api.usewheelhouse.com/ss_api/v1/listings/12345678/pricing_tier?channel=airbnb" \
-H "X-Integration-Api-Key: your_api_key_here"

Response fields

  • name — the listing's pricing tier: Free, Pro Flex, Pro Flat, or Pro SS API

  • horizon — how many days into the future price recommendations are generated


GET /listings/:listing_id/recent_changes

Get timestamps of the most recent preference and rate changes for a listing. Useful for detecting changes since your last sync.

curl "https://api.usewheelhouse.com/ss_api/v1/listings/12345678/recent_changes?channel=airbnb" \
-H "X-Integration-Api-Key: your_api_key_here"

Response fields

  • settings — ISO 8601 datetime when the listing's preferences were last updated

  • rates — ISO 8601 datetime when custom rates were last updated (nullable)


POST /listings/:listing_id/sync

Trigger a manual price sync — pushes the latest Wheelhouse price recommendations to the connected channel and refreshes reservation data. Equivalent to clicking Sync in the Wheelhouse UI.

curl -X POST "https://api.usewheelhouse.com/ss_api/v1/listings/12345678/sync?channel=airbnb" \
-H "X-Integration-Api-Key: your_api_key_here"

Returns 202 Accepted immediately — the sync runs asynchronously.

Important notes:

  • Manual syncs require a paid (Pro) plan — free plan listings return 429

  • If a sync was already requested within the last 60 seconds, returns 423 — wait before retrying

  • Daily sync limits apply per listing's plan


Code examples

Python — fetch all active listing IDs and channels

import requests

headers = {"X-Integration-Api-Key": "your_api_key_here"}
BASE_URL = "https://api.usewheelhouse.com/ss_api/v1"

resp = requests.get(f"{BASE_URL}/listings", headers=headers, params={"exclude_inactive": "true"})
listings = resp.json()

for listing in listings:
print(f"ID: {listing['id']} | Channel: {listing['channel']} | Name: {listing['title']}")

Python — check for recently changed listings

python
import requests

headers = {"X-Integration-Api-Key": "your_api_key_here"}
BASE_URL = "https://api.usewheelhouse.com/ss_api/v1"

listings = requests.get(f"{BASE_URL}/listings", headers=headers).json()

for listing in listings:
changes = requests.get(
f"{BASE_URL}/listings/{listing['id']}/recent_changes",
headers=headers,
params={"channel": listing["channel"]}
).json()
if changes.get("settings"):
print(f"{listing['title']}: preferences last changed {changes['settings']}")
python

Related

Understanding listing_id and channel — the two required parameters Pagination: using per_page, page, and offset

Did this answer your question?