Listing preferences control how Wheelhouse generates price recommendations for each property — base price, seasonality, discounts, min stay rules, and more. These are called "Settings" in the Wheelhouse app. This reference covers every endpoint for reading, updating, previewing, and copying preferences.
GET /preferences/:listing_id
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"
Parameters
listing_id(string, path, required) — the channel's unique listing identifierchannel(string, query, required) — the channel name for this listing (fromGET /listings)
Key response fields
listing_id— Wheelhouse's internal numeric ID for this listingpartner_listing_id— the channel's listing ID (same as theidinGET /listings)base_price— the manually set base price (if set, overrides Wheelhouse's recommendation)base_price_adjustment— percentage adjustment to the Wheelhouse recommended base price (only present ifbase_priceis not set)weekly_discount/monthly_discount— discount percentage for stays ≥7 / ≥28 nights (0 = no discount)automatic_rate_posting_enabled— whether Wheelhouse auto-pushes prices to the channellast_minute_discount/seasonality_adjustment/far_future_premium/day_of_week— objects withtypeset toCON(conservative),REC(recommended),AGG(aggressive), orCUS(custom)currency— currency used for prices on this listing
GET /preferences
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"
Query parameters
channel(string, required) — the channel name for these listingslisting_ids(string, optional) — listing ID to include; repeat the parameter for each listing. If omitted, returns an empty array (not all listings)
Returns an array of preference objects, one per listing.
PUT /preferences/:listing_id
Update preferences for a single listing. Send only the fields you want to change — everything else stays unchanged.
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}'
Parameters
listing_id(string, path, required)channel(string, query, required)
Important behavior
Partial updates apply at the top level only. If you send a field that holds an array of rules (e.g. minimum_price_rules_v3), the entire array is replaced — individual rules cannot be patched. Always fetch current preferences first and include every rule you want to keep.
Status codes
423— preferences not yet initialized for this listing; retry after a brief delay409— another request already in progress for this listing; retry after it completes
PUT /preferences/:listing_id/:setting
Update a single pricing setting to a preset level.
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"}'
Returns 204 No Content on success.
Supported settings
base_price_adjustment— body:{"type": "CON" | "REC" | "AGG"}seasonality_adjustment— body:{"type": "CON" | "REC" | "AGG"}last_minute_discount— body:{"type": "CON" | "REC" | "AGG"}far_future_premium— body:{"type": "CON" | "REC" | "AGG"}automatic_rate_posting— body:{"enabled": true | false}
Parameters
listing_id(string, path, required)setting(string, path, required) — one of the settings listed abovechannel(string, query, required)
PUT /preferences (bulk)
Update preferences 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}
]
}'
Parameters
channel(string, query, required)listing_preferences(array, body, required) — each entry must include:listing_id(string, required) — the channel's listing IDany preference fields to update (same fields as
PUT /preferences/{listing_id})
Status codes
207— some updates succeeded, some failed; check the response body for per-listing breakdown424— all updates failed
PUT /preferences/:listing_id/copy
Copy preferences from one listing to another. This overwrites the target listing's existing preferences.
The :listing_id in the path is the target (the listing being overwritten). The source listing 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"
}
}'
Request body
channel(string, required) — channel name of the target listingcopy_preferences_from(object, required) — identifies the source listing:listing_id(string, required) — the source listing's channel IDchannel(string, optional) — channel name of the source listing
copy_custom_rates(boolean, optional, default:true) — whentrue, also copies custom rates from the source to the target
POST /preferences/:listing_id/preview
Preview how a preference change would affect daily prices — without saving anything. See the How to preview pricing changes before applying them guide for full details and code examples.
curl -X POST "https://api.usewheelhouse.com/ss_api/v1/preferences/12345678/preview?channel=airbnb" \
-H "X-Integration-Api-Key: your_api_key_here" \
-H "Content-Type: application/json" \
-d '{"base_price": 200}'
Returns the same format as GET /listings/{listing_id}/price_recommendations, with global_min_stay and automatic_rate_posting_enabled omitted. Nothing is saved.
GET /preferences/:listing_id/long_term_discounts
Get the long-term discount settings for a listing (weekly and monthly discounts).
curl "https://api.usewheelhouse.com/ss_api/v1/preferences/12345678/long_term_discounts?channel=airbnb" \
-H "X-Integration-Api-Key: your_api_key_here"
Response fields
weekly_discount— discount percentage for stays ≥7 nights (integer, nullable)monthly_discount— discount percentage for stays ≥28 nights (integer, nullable)
These are the same values as weekly_discount and monthly_discount in GET /preferences/{listing_id}.
GET /preferences/:listing_id/changelog
Get a log of recent preference changes for a listing — useful for auditing who changed what and when.
curl "https://api.usewheelhouse.com/ss_api/v1/preferences/12345678/changelog?channel=airbnb" \
-H "X-Integration-Api-Key: your_api_key_here"
Query parameters
channel(string, required)start_date(string, optional) — start of the date range (YYYY-MM-DD); defaults to 30 days ago, clamped to 90 days maxend_date(string, optional) — end of the date range (YYYY-MM-DD); defaults to tomorrow
Response
Returns an events array. Each event includes:
time— when the change occurred (ISO 8601)source— who triggered it:"Wheelhouse"(system),"User"/"User <name>","API","Customer Support","Wheelhouse team"event— type of event:"Prices posted","Calendar synced","Settings changed","Custom rates","Reservations imported"status—"success"or"error"msg— human-readable description of the change
Related
How to read and update pricing preferences
How to preview pricing changes before applying them