Skip to main content

Calendar: Prices, Availability, and Day History

Reference for the Wheelhouse RM API calendar endpoints — the price calendar, last posted prices, minimum stay calendar, fee impact calendar, and calendar day history.

Written by Ryo

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 (from GET /listings), or wheelhouse if listing_id is a Wheelhouse listing ID

  • start_date (string, optional) — first stay date to include (YYYY-MM-DD). Defaults to today

  • end_date (string, optional) — last stay date to include (YYYY-MM-DD). Defaults to about 18 months from today. The range from start_date to end_date can't be longer than 3 years

Response fields

Returns an array, one entry per stay date, ordered by date.

  • stay_date — the stay date

  • price — the current price for this date, or null if none is recorded. For available dates, this is the live price. For booked or blocked dates, it's the price the date booked at

  • currency — ISO 4217 currency code for the price

  • is_available — whether the date can be booked

  • is_booked — whether the date has a confirmed booking

  • block_time — when this night first became unavailable (ISO 8601), or null for available nights. See the note below

  • reservation_id — the channel's reservation ID if the night is booked, otherwise null

  • unit_number — the unit number, 0 for a single-unit listing

  • created_at — when this data was created

Available, booked, or blocked? Read is_available and is_booked together:

  • is_available: true, is_booked: false — available

  • is_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 entries

  • 400 — the date range is longer than 3 years

  • 401 — API key authorization failed

  • 403 — listing authorization failed

  • 404 — listing not found

  • 429 — 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, or wheelhouse

  • start_date (string, optional) — first stay date to include (YYYY-MM-DD). Defaults to today

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

  • unit_number — the unit number, 0 for a single-unit listing

  • last_posted_price — the last price posted to the channel for this date, or null if no price has been posted yet

Status codes

  • 200 — array of last-posted-price entries

  • 400 — the date range is longer than 3 years

  • 401 — API key authorization failed

  • 403 — listing authorization failed

  • 404 — listing not found

  • 429 — 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, or wheelhouse

  • start_date (string, optional) — first stay date to include (YYYY-MM-DD). Defaults to today

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

  • min_stay — the minimum stay in nights for this date, or null if no specific rule covers it

Status codes

  • 200 — array of minimum stay entries

  • 400 — the date range is longer than 3 years

  • 401 — API key authorization failed

  • 403 — listing authorization failed

  • 404 — listing not found

  • 429 — 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, or wheelhouse

  • start_date (string, optional) — first stay date to include (YYYY-MM-DD). Defaults to today

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

  • fee_multiplier — multiply a nightly price by this to get the fee-inclusive price. 1.0 means no fee adjustment; 1.15 means an estimated 15% fee

Status codes

  • 200 — array of fee multiplier entries

  • 400 — the date range is longer than 3 years

  • 401 — API key authorization failed

  • 403 — listing authorization failed

  • 404 — listing not found

  • 429 — 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, or wheelhouse

  • stay_date (string, required) — the stay date to get history for (YYYY-MM-DD)

Response fields

  • stay_date — the stay date the history is for

  • posted_prices — the prices posted to the channel for this date, oldest first. Each entry has:

    • posted_at — when the price was posted

    • posted_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, or null if none is recorded

    • currency — ISO 4217 currency code

    • is_available — whether the date can be booked

    • is_booked — whether the date has a confirmed booking

    • block_time — when the night first became unavailable, or null for available nights

    • reservation_id — the channel's reservation ID if booked, otherwise null

    • unit_number — the unit number, 0 for a single-unit listing

    • created_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 date

  • 400 — stay_date is missing, or it's further back than the 180-day limit

  • 401 — API key authorization failed

  • 402 — the listing doesn't have access to historical calendar data (Free listings)

  • 403 — listing authorization failed

  • 404 — listing not found

  • 429 — rate limit exceeded


Related

  • GET /listings — where listing_id and channel come from

  • GET /listings/:listing_id/pricing_tier — check a listing's plan before calling calendar day history

  • Rate limit: 60 requests per minute per key. See Error Codes Explained.

Did this answer your question?