Skip to main content

How to Read and Update Pricing Preferences

Written by Ryo

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 recommendations

  • weekly_discount / monthly_discount — discount percentage for long-term stays (0 = no discount)

  • automatic_rate_posting_enabled — whether Wheelhouse auto-pushes prices to the channel

  • last_minute_discount, seasonality_adjustment — type is CON (conservative), REC (recommended), or AGG (aggressive)

  • fee_adjustments — the estimated fees guests pay on top of the nightly rate. It has total_fee_percentage (fees as a percentage of the nightly rate, so 15 means guests pay about 15% on top) and auto_update (when true, the percentage is recalculated weekly from the fees on recent reservations). It is null when nothing is configured. When you update it, send both keys.

For the full field list, see Listing Preferences: Read, Update & Preview Pricing Settings. The Calendar: Prices, Availability, and Day History article uses fee_adjustments to compare your rates with neighborhood prices, which include fees.


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 --request 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 --request 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, day_of_week, 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 --request 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:

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 --request 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

Did this answer your question?