Skip to main content

Listing Preferences: Read, Update & Preview Pricing Settings

Written by Ryo

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 identifier

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

Key response fields

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

  • partner_listing_id — the channel's listing ID (same as the id in GET /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 if base_price is 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 channel

  • last_minute_discount / seasonality_adjustment / far_future_premium / day_of_week — objects with type set to CON (conservative), REC (recommended), AGG (aggressive), or CUS (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 listings

  • listing_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 delay

  • 409 — 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 above

  • channel (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 ID

    • any 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 breakdown

  • 424 — 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 listing

  • copy_preferences_from (object, required) — identifies the source listing:

  • listing_id (string, required) — the source listing's channel ID

    • channel (string, optional) — channel name of the source listing

  • copy_custom_rates (boolean, optional, default: true) — when true, 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 max

  • end_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

Did this answer your question?