The calendar endpoints show what a listing's calendar looks like: the price on each night, whether it is available, booked or blocked, the last price Wheelhouse posted, the minimum stay, and the fee multiplier. One endpoint also lets you look back at how a single night changed over time.
All five are read-only GET requests. Each one needs a listing_id and a channel, which come from GET /listings.
Which plans can use them: Every listing can use the price calendar, last posted prices, minimum stay calendar, and fee impact calendar. They return about 18 months of dates on every plan, with blank values on dates that have no data. Calendar day history needs a Pro listing. A Free listing gets a 402.
GET /listings/:listing_id/price_calendar
Get the price calendar for a listing. Each entry is one stay date, with its price, availability, and booking state.
curl "https://api.usewheelhouse.com/ss_api/v1/listings/12345678/price_calendar?channel=airbnb&start_date=2026-11-01&end_date=2026-11-30" \
-H "X-Integration-Api-Key: your_api_key_here"
The data reflects the calendar as it is at the time of your request:
Future dates: the current price and availability.
Past dates: the state the date ended up in (booked, blocked, or left available) and the price that was in effect.
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), orwheelhouseiflisting_idis a Wheelhouse listing IDstart_date(string, optional) — first stay date to include (YYYY-MM-DD). Defaults to todayend_date(string, optional) — last stay date to include (YYYY-MM-DD). Defaults to about 18 months from today. The range fromstart_datetoend_datecan't be longer than 3 years
Response fields
Returns an array, one entry per stay date, ordered by date.
stay_date— the stay dateprice— the current price for this date, ornullif none is recorded. For available dates, this is the live price. For booked or blocked dates, it's the price the date booked atcurrency— ISO 4217 currency code for the priceis_available— whether the date can be bookedis_booked— whether the date has a confirmed bookingblock_time— when this night first became unavailable (ISO 8601), ornullfor available nights. See the note belowreservation_id— the channel's reservation ID if the night is booked, otherwisenullunit_number— the unit number,0for a single-unit listingcreated_at— when this data was created
Available, booked, or blocked? Read is_available and is_booked together:
is_available: true,is_booked: false— availableis_available: false,is_booked: true— booked (a confirmed reservation)is_available: false,is_booked: false— blocked (an owner hold or similar)
About block_time: it isn't the check-in date or the booking date on the channel. It's when Wheelhouse first saw the night as unavailable. For a booked night, that's when Wheelhouse first detected the reservation as pending or accepted. For a blocked night, it's about when the calendar sync recorded the block.
Status codes
200— array of calendar day entries400— the date range is longer than 3 years401— API key authorization failed403— listing authorization failed404— listing not found429— rate limit exceeded
GET /listings/:listing_id/last_posted_prices
Get the last price Wheelhouse posted to the channel for each stay date.
curl "https://api.usewheelhouse.com/ss_api/v1/listings/12345678/last_posted_prices?channel=airbnb" \
-H "X-Integration-Api-Key: your_api_key_here"
Available nights: the most recently posted price for that date.
Booked nights: the last price posted at or before
block_time, which is the price that was live when the booking came in.
Dates with no posting history return null.
Path parameters
listing_id(string, required) — the channel's unique listing identifier
Query parameters
channel(string, required) — the channel name for this listing, orwheelhousestart_date(string, optional) — first stay date to include (YYYY-MM-DD). Defaults to todayend_date(string, optional) — last stay date to include (YYYY-MM-DD). Defaults to about 18 months from today. The range can't be longer than 3 years
Response fields
Returns an array, one entry per stay date and unit, ordered by date.
stay_date— the stay dateunit_number— the unit number,0for a single-unit listinglast_posted_price— the last price posted to the channel for this date, ornullif no price has been posted yet
Status codes
200— array of last-posted-price entries400— the date range is longer than 3 years401— API key authorization failed403— listing authorization failed404— listing not found429— rate limit exceeded
GET /listings/:listing_id/min_stay_calendar
Get the minimum stay for each date, based on the listing's minimum stay rules.
curl "https://api.usewheelhouse.com/ss_api/v1/listings/12345678/min_stay_calendar?channel=airbnb" \
-H "X-Integration-Api-Key: your_api_key_here"
One entry is returned for every date in the range. A null minimum stay means no specific rule covers that date.
Path parameters
listing_id(string, required) — the channel's unique listing identifier
Query parameters
channel(string, required) — the channel name for this listing, orwheelhousestart_date(string, optional) — first stay date to include (YYYY-MM-DD). Defaults to todayend_date(string, optional) — last stay date to include (YYYY-MM-DD). Defaults to about 18 months from today. The range can't be longer than 3 years
Response fields
Returns an array, one entry per stay date, ordered by date.
stay_date— the stay datemin_stay— the minimum stay in nights for this date, ornullif no specific rule covers it
Status codes
200— array of minimum stay entries400— the date range is longer than 3 years401— API key authorization failed403— listing authorization failed404— listing not found429— rate limit exceeded
GET /listings/:listing_id/fee_impact_calendar
Get the estimated fee multiplier for each stay date.
curl "https://api.usewheelhouse.com/ss_api/v1/listings/12345678/fee_impact_calendar?channel=airbnb" \
-H "X-Integration-Api-Key: your_api_key_here"
The multiplier comes from the listing's fee adjustment setting (total_fee_percentage in the listing's preferences). Multiply any nightly price by fee_multiplier to get the fee-inclusive price. A multiplier of 1.0 means no fee adjustment is set.
Right now the multiplier is the same for every date. The response is built per date so that it can vary by date range or season later without changing its shape.
Path parameters
listing_id(string, required) — the channel's unique listing identifier
Query parameters
channel(string, required) — the channel name for this listing, orwheelhousestart_date(string, optional) — first stay date to include (YYYY-MM-DD). Defaults to todayend_date(string, optional) — last stay date to include (YYYY-MM-DD). Defaults to about 18 months from today. The range can't be longer than 3 years
Response fields
Returns an array, one entry per stay date, ordered by date.
stay_date— the stay datefee_multiplier— multiply a nightly price by this to get the fee-inclusive price.1.0means no fee adjustment;1.15means an estimated 15% fee
Status codes
200— array of fee multiplier entries400— the date range is longer than 3 years401— API key authorization failed403— listing authorization failed404— listing not found429— rate limit exceeded
GET /listings/:listing_id/calendar_day_history
Get the history of one stay date: every price Wheelhouse posted for it, and snapshots of how the date's state changed over time.
curl "https://api.usewheelhouse.com/ss_api/v1/listings/12345678/calendar_day_history?channel=airbnb&stay_date=2026-12-31" \
-H "X-Integration-Api-Key: your_api_key_here"
Pro listings only. A Free listing returns 402. The history looks back at most 180 days.
Path parameters
listing_id(string, required) — the channel's unique listing identifier
Query parameters
channel(string, required) — the channel name for this listing, orwheelhousestay_date(string, required) — the stay date to get history for (YYYY-MM-DD)
Response fields
stay_date— the stay date the history is forposted_prices— the prices posted to the channel for this date, oldest first. Each entry has:posted_at— when the price was postedposted_price— the price posted, in the listing's currency
calendar_snapshots— snapshots of the date's state over time. Each entry has:price— the observed price, ornullif none is recordedcurrency— ISO 4217 currency codeis_available— whether the date can be bookedis_booked— whether the date has a confirmed bookingblock_time— when the night first became unavailable, ornullfor available nightsreservation_id— the channel's reservation ID if booked, otherwisenullunit_number— the unit number,0for a single-unit listingcreated_at— when this snapshot was recorded
Read is_available and is_booked together the same way as in the price calendar: available, booked, or blocked.
Status codes
200— the history for the requested stay date400—stay_dateis missing, or it's further back than the 180-day limit401— API key authorization failed402— the listing doesn't have access to historical calendar data (Free listings)403— listing authorization failed404— listing not found429— rate limit exceeded
Related
GET /listings— wherelisting_idandchannelcome fromGET /listings/:listing_id/pricing_tier— check a listing's plan before calling calendar day historyRate limit: 60 requests per minute per key. See Error Codes Explained.