Every Wheelhouse listing has a set of pricing preferences that control how recommendations are generated — base price, weekend premium, seasonality curves, discounts, and more. The RM API lets you read and update all of these programmatically, so you can build preference management tools, run bulk updates, or keep your system in sync with what's set in Wheelhouse.
Read preferences for a single listing
curl "https://api.usewheelhouse.com/ss_api/v1/preferences/12345678?channel=airbnb" \
-H "X-Integration-Api-Key: your_api_key_here"
{
"listing_id": "45012",
"base_price": 175,
"currency": "USD",
"monthly_discount": 0,
"weekly_discount": 0,
"automatic_rate_posting_enabled": true,
"last_minute_discount": { "type": "REC", "rules": [] },
"seasonality_adjustment": { "type": "REC", "rules": [] }
}
Key fields:
base_price— the anchor price Wheelhouse uses to generate all recommendationsweekly_discount/monthly_discount— discount percentage for long-term stays (0 = no discount)automatic_rate_posting_enabled— whether Wheelhouse auto-pushes prices to the channellast_minute_discount,seasonality_adjustment— type isCON(conservative),REC(recommended), orAGG(aggressive)
Read preferences for multiple listings at once
curl "https://api.usewheelhouse.com/ss_api/v1/preferences?channel=airbnb&listing_ids=12345678&listing_ids=87654321" \
-H "X-Integration-Api-Key: your_api_key_here"
Returns an array with one preference object per listing. Repeat listing_ids for each listing ID.
Update preferences for a listing
Send a PUT request with only the fields you want to change — everything else stays as-is:
curl -X PUT "https://api.usewheelhouse.com/ss_api/v1/preferences/12345678?channel=airbnb" \
-H "X-Integration-Api-Key: your_api_key_here" \
-H "Content-Type: application/json" \
-d '{"base_price": 200, "monthly_discount": 10}'
Note
If the listing's preferences haven't been initialized yet, the API returns 423. This is temporary — retry after a brief delay.
Update a single setting quickly
For common settings, you can set them to a preset level without specifying exact values. Use CON (conservative), REC (recommended), or AGG (aggressive):
curl -X PUT "https://api.usewheelhouse.com/ss_api/v1/preferences/12345678/seasonality_adjustment?channel=airbnb" \
-H "X-Integration-Api-Key: your_api_key_here" \
-H "Content-Type: application/json" \
-d '{"type": "AGG"}'
Supported settings: base_price_adjustment, seasonality_adjustment, last_minute_discount, far_future_premium, automatic_rate_posting.
To toggle automatic rate posting:
-d '{"enabled": true}'
Update preferences in bulk
To update settings across multiple listings in one request:
curl -X PUT "https://api.usewheelhouse.com/ss_api/v1/preferences?channel=airbnb" \
-H "X-Integration-Api-Key: your_api_key_here" \
-H "Content-Type: application/json" \
-d '{
"listing_preferences": [
{"listing_id": "12345678", "base_price": 200},
{"listing_id": "87654321", "base_price": 180}
]
}'
```
A `207` response means some updates succeeded and some failed — check the response body for the breakdown.
---
# Read preferences across your portfolio
Loop through all your listings to audit preferences in bulk:
python
import requests
API_KEY = "your_api_key_here"
BASE_URL = "https://api.usewheelhouse.com/ss_api/v1"
```
headers = {"X-Integration-Api-Key": API_KEY}
listings_resp = requests.get(f"{BASE_URL}/listings?exclude_inactive=true", headers=headers)
listings = listings_resp.json()
for listing in listings:
listing_id = listing["id"]
prefs_resp = requests.get(
f"{BASE_URL}/preferences/{listing_id}",
headers=headers,
params={"channel": listing["channel"]}
)
prefs = prefs_resp.json()
print(f"{listing['name']}: base_price={prefs.get('base_price')}, min_price={prefs.get('min_price')}")
Copy preferences from one listing to another
To copy preferences from a source listing to a target listing, use the copy endpoint. The listing_id in the path is the target (the listing being overwritten). The source is identified in the request body:
curl -X PUT "https://api.usewheelhouse.com/ss_api/v1/preferences/87654321/copy" \
-H "X-Integration-Api-Key: your_api_key_here" \
-H "Content-Type: application/json" \
-d '{
"channel": "airbnb",
"copy_preferences_from": {
"listing_id": "12345678",
"channel": "airbnb"
}
}'
This overwrites the target listing's existing preferences — it's a destructive action. By default, custom rates are also copied (copy_custom_rates defaults to true). This is useful for onboarding new listings — copy preferences from a similar property instead of configuring from scratch.
Next steps
How to set custom rates for specific dates