The recommendations endpoints return Wheelhouse's suggested nightly prices, base price options, seasonality factors, min/max price calendars, and base price history. The daily price recommendations endpoint is the core data source for building pricing dashboards, syncing prices to external systems, or driving automated pricing logic.
GET /listings/:listing_id/price_recommendations
Retrieve daily price recommendations for a listing.
curl "https://api.usewheelhouse.com/ss_api/v1/listings/12345678/price_recommendations?channel=airbnb" \
-H "X-Integration-Api-Key: your_api_key_here"
The horizon depends on the listing's plan: Free listings get 30 days; Pro listings get 18 months.
Path parameters
listing_id(string, required) — the channel's unique listing identifier
Query parameters
channel(string, required) — the channel name for this listing (fromGET /listings)currency(string, optional) — ISO-4217 code to convert prices to (e.g.EUR); uses the listing's currency by defaultattribution(boolean, optional, default:false) — whentrue, includesattr_*fields in each day's object showing what factors drove the priceprice_model(string, optional) —currentis the model the listing gets when nothing else is set.opt_inis the opt-in model, and returns400when there are several opt-in models, so useprice_model_idinstead. Leave it out to use the model currently active for the listingprice_model_id(integer, optional) — the ID of a price model fromGET /price_models, used instead ofprice_model. It must be a model the listing can use and that has run for the listing's market, or the request returns400
Response
{
"data": [
{
"stay_date": "2026-08-01",
"price": 189,
"currency": "USD",
"min_stay": 2,
"custom_type": null
},
{
"stay_date": "2026-08-02",
"price": 215,
"currency": "USD",
"custom_type": "fixed"
}
],
"base_price": 175,
"base_price_recommended": 175,
"base_price_conservative": 158,
"base_price_aggressive": 193,
"global_min_stay": 2,
"automatic_rate_posting_enabled": true
}
Response fields
Per-day fields (data array)
stay_date— the date the price applies to (YYYY-MM-DD)price— Wheelhouse's recommended nightly rate for that datecurrency— currency of the pricemin_stay— minimum stay requirement for that date (omitted unless min stay rules are configured)custom_type—nullwhen no custom rate override is active;"fixed"when a fixed custom price overrides the recommendation;"adjusted"when a percentage adjustment override is activehistorical_anchor_date— the earlier date whose price historical anchoring held this date's recommendation up to: the same day of the week, in the same week a year earlier, or two years earlier when that date has no price. Only present ifattribution=trueand historical anchoring raised this date's price;attr_historical_anchoringsays by how muchhistorical_anchor_pct— the historical anchoring percentage in effect for this date, from the listing'shistorical_anchoring_rules, applied ashistorical_anchoring_modedescribes. Present withhistorical_anchor_datehistorical_anchor_price— the price onhistorical_anchor_datethat anchoring weighed in, in this response'scurrency. Present withhistorical_anchor_datehistorical_anchor_source— wherehistorical_anchor_pricecomes from:observed, the listing's price as Wheelhouse saw it on the channel once the date booked, orposted, the price Wheelhouse last posted for the date before it booked. Present withhistorical_anchor_date
Top-level fields
base_price— the currently active base price for this listing (may differ from recommendation if set manually)base_price_recommended— Wheelhouse's data-driven recommended base pricebase_price_conservative— conservative base price estimatebase_price_aggressive— aggressive base price estimateglobal_min_stay— default minimum stay applied when no higher-priority rule matchesautomatic_rate_posting_enabled— whether Wheelhouse is auto-pushing prices to the channel
Status codes
400— the price model can't be used for this listing, orprice_model=opt_inmatches several models422— listing is not covered by a Wheelhouse market423— price recommendations are still being generated; retry after a brief delay
Attribution breakdown
When attribution=true, each day in the data array includes attr_* fields showing the dollar-amount contribution of each pricing factor:
{
"stay_date": "2026-08-01",
"price": 189,
"currency": "USD",
"custom_type": null,
"attr_seasonality": 12,
"attr_local_demand": 8,
"attr_availability": 3,
"attr_time": 0,
"attr_custom_weekend": 5,
"attr_scarcity": 0,
"attr_occupancy_pacing": 2,
"attr_historical_anchoring": -4,
"attr_restriction": 0,
"attr_user_adjustment": 0
}
All values are integers in the listing's currency representing the price contribution of each factor.
attr_seasonality— seasonal demand adjustmentattr_local_demand— local event/demand signalattr_availability— gap night pricingattr_time— time-based adjustment (e.g. last-minute discount)attr_custom_weekend— day-of-week adjustmentattr_scarcity— scarcity pricingattr_occupancy_pacing— pacing vs expected occupancyattr_historical_anchoring— adjustment from booking history anchoringattr_restriction— min/max price restriction impactattr_user_adjustment— user customization (e.g. base price offset)
GET /price_models
List the price models you can pick from. The current model comes first.
curl "https://api.usewheelhouse.com/ss_api/v1/price_models" \
-H "X-Integration-Api-Key: your_api_key_here"
The current model prices every listing that has not picked another one, unless its channel or market is set to a different model. Pass a model's id as price_model_id to GET /listings/:listing_id/price_recommendations or POST /preferences/:listing_id/preview to price with it. A model that has not run for a listing's market returns 400 there.
Response
Returns an array with one object per model:
[
{
"id": 12,
"name": "Blended model",
"version": 9.0,
"display_name": "Blended model v9.0",
"status": "current",
"description": null
}
]
Response fields (per model in the array)
id— the price model ID, to pass asprice_model_idname— the model nameversion— the model version numberdisplay_name— name and version, for exampleBlended model v9.0status—currentfor the model listings get when nothing else is set,opt_infor an alternativedescription— how the model prices, in plain language (nullable)
GET /listings/:listing_id/base_price_recommendation
Get recommended, conservative, and aggressive base price options for a listing, plus anchoring context and an attribution breakdown.
curl "https://api.usewheelhouse.com/ss_api/v1/listings/12345678/base_price_recommendation?channel=airbnb" \
-H "X-Integration-Api-Key: your_api_key_here"
Query parameters
channel(string, required)currency(string, optional) — convert prices to this ISO-4217 currency
Response fields
base_price_recommended— Wheelhouse's data-driven recommended base pricebase_price_conservative— conservative variantbase_price_aggressive— aggressive variantbase_price_selected— the base price currently in effect for the listing (same asbase_priceinGET /preferences/{listing_id})anchor_credibility— how much of the recommendation is driven by the listing's own booking history (0–100%); higher = more historical data incorporatedanchor_price— median observed booking price used in anchoring (nullable)base_price_attribution— signed breakdown amounts showing what contributes to the recommended base price, matching the in-app "Recommended Breakdown"currency— currency all amounts are expressed in
GET /listings/:listing_id/checkin_checkout
Get a daily calendar of check-in and check-out availability for a listing.
curl "https://api.usewheelhouse.com/ss_api/v1/listings/12345678/checkin_checkout?channel=airbnb" \
-H "X-Integration-Api-Key: your_api_key_here"
Returns 204 if check-in/check-out rules are not configured for this listing.
Response fields (per day in data array)
stay_date— the date (YYYY-MM-DD)check_in—trueif check-in is allowed on this datecheck_out—trueif check-out is allowed on this date
GET /listings/:listing_id/min_max_prices
Get the min and max price floor/ceiling calendar for a listing.
curl "https://api.usewheelhouse.com/ss_api/v1/listings/12345678/min_max_prices?channel=airbnb" \
-H "X-Integration-Api-Key: your_api_key_here"
Response fields (per day in data array)
stay_date— the date (YYYY-MM-DD)min_price— the minimum price floor for this date (nullable)max_price— the maximum price ceiling for this date (nullable)
GET /listings/:listing_id/monthly_seasonality
Get recommended monthly seasonality multipliers for a listing — useful for understanding seasonal pricing patterns.
curl "https://api.usewheelhouse.com/ss_api/v1/listings/12345678/monthly_seasonality?channel=airbnb" \
-H "X-Integration-Api-Key: your_api_key_here"
Response
Returns an object with three keys (CON, REC, AGG), each mapping month numbers "1"–"12" to a multiplier:
{
"CON": { "1": 0.88, "2": 0.91, "6": 1.12, "12": 1.18 },
"REC": { "1": 0.85, "2": 0.88, "6": 1.15, "12": 1.22 },
"AGG": { "1": 0.82, "2": 0.86, "6": 1.18, "12": 1.26 }
}
A factor of 1.0 means no seasonal adjustment. Values above 1.0 indicate higher-demand months; below 1.0 indicate lower-demand months.
The three levels differ in how much they amplify the signal: CON = 80% of base variation, REC = 100%, AGG = 120%.
GET /listings/:listing_id/base_price_history
Get the daily log of Wheelhouse base price recommendations and effective base prices for a listing. Defaults to the last 30 days.
curl "https://api.usewheelhouse.com/ss_api/v1/listings/12345678/base_price_history?channel=airbnb&start_date=2026-06-01&end_date=2026-06-30" \
-H "X-Integration-Api-Key: your_api_key_here"
Query parameters
channel(string, required)start_date(string, optional) — first date to include (YYYY-MM-DD); defaults to 30 days beforeend_dateend_date(string, optional) — last date to include (YYYY-MM-DD); defaults to today
Response fields (per entry in the array)
model_date— the date this recommendation was computedraw_recommendation— the raw model recommendation before anchoring adjustmentsrecommendation— the anchored base price recommendationadjustment— multiplicative adjustment factor applied by the user (e.g.1.1= +10%)fixed— the user-set fixed base price, if any; when present, overrides the recommendationanchor_price— the anchor price used to blend the model recommendationanchor_weight— the weight given to the anchor price (0–1)effective_base_price— the base price actually in effect; equalsfixedwhen set, otherwiserecommendation × adjustment
Code examples
Python — sync recommendations for all active listings
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 = requests.get(f"{BASE_URL}/listings", headers=headers, params={"exclude_inactive": "true"}).json()
for listing in listings:
recs = requests.get(
f"{BASE_URL}/listings/{listing['id']}/price_recommendations",
headers=headers,
params={"channel": listing["channel"]}
).json()
for day in recs["data"]:
print(f"{listing['title']}: {day['stay_date']} → ${day['price']}")
Related
How to sync price recommendations to your system
How to preview pricing changes before applying them
Understanding pricing tiers and recommendation horizons