Skip to main content

Getting started with the Wheelhouse RM API

Learn what the Wheelhouse Revenue Manager (RM) API is, what you can build with it, and who it's designed for.

Written by Ryo

The Wheelhouse Revenue Manager (RM) API gives you programmatic access to your Wheelhouse account. Everything available through a current API endpoint mirrors what you can do in the Wheelhouse UI — from pulling price recommendations to updating pricing preferences and managing custom rates across your portfolio.


What is the Wheelhouse RM API?

The RM API offers 1:1 parity with the Wheelhouse UI — everything you can do in the app, you can do through the API. It's built for PMS and channel managers, property managers building custom reporting tools, and developers automating how Wheelhouse recommendations get applied across their portfolio.

What you can do with it:

  • Retrieving price recommendations for any listing in your portfolio

  • Reading and updating pricing preferences (Base Price, minimum stays, discounts, seasonality, and more)

  • Setting custom rates for specific dates or date ranges

  • Pulling reservation data, KPIs, and performance metrics

  • Accessing market-level and neighborhood-level pricing and occupancy data

  • Organizing listings using tags, segments, and dynamic sets


Step 1: Generate your API key

The RM API uses a single API key to authenticate every request. There are no OAuth flows or session tokens — just one header included with every call. To generate your key:

  1. Click your profile name in the top-right corner of the Wheelhouse dashboard

  2. Select Api Key from the dropdown

  3. Scroll down to the Revenue Management API Keys section

  4. Enter a label for your key (e.g. "Production RM")

  5. Click Create RM Key

  6. Copy the key immediately — it won't be shown again

To revoke a key, click Revoke next to any existing key. The old key stops working immediately.

Note

The RM API is currently in free beta. It will become a paid feature once it is officially released.

Keep your key secure:

  • Never expose your API key in client-side code, public repos, or browser requests

  • Store it in environment variables, not hardcoded in your application

  • If a key is compromised, revoke it immediately from your account settings and generate a new one

  • Each key has access to your full Wheelhouse portfolio — treat it like a password


Step 2: Make your first request

The fastest way to verify your setup is to pull your portfolio. Include your key in the X-Integration-Api-Key header on every request.

curl "https://api.usewheelhouse.com/ss_api/v1/listings?exclude_inactive=true&per_page=50" \
-H "X-Integration-Api-Key: your_api_key_here"

Python:

import requests

response = requests.get(
"https://api.usewheelhouse.com/ss_api/v1/listings",
headers={"X-Integration-Api-Key": "your_api_key_here"},
params={"exclude_inactive": "true", "per_page": 50}
)

data = response.json()
print(data)

JavaScript:

const response = await fetch(
"https://api.usewheelhouse.com/ss_api/v1/listings?exclude_inactive=true&per_page=50",
{
headers: { "X-Integration-Api-Key": "your_api_key_here" }
}
);

const data = await response.json();
console.log(data);

A successful response returns an array of listing objects. Each listing includes:

  • id — your listing's unique identifier (referred to as listing_id throughout the API)

  • channel — the integration this listing is connected to (e.g. airbnb)

  • name — the listing name as it appears in Wheelhouse

  • active — whether the listing is currently active

[
{
"id": 12345678,
"channel": "airbnb",
"name": "2BR Beachfront Villa",
"active": true
},
...
]

Save your listing_id and channel values. Nearly every other endpoint in the RM API requires both — you'll use them in the next step.


Step 3: Understand listing_id and channel

Almost every endpoint in the RM API requires two parameters: listing_id and channel. These two values together uniquely identify a listing in Wheelhouse — and without both, most requests won't work.

listing_id is the numeric id field from the listings response — Wheelhouse's unique identifier for each property.

channel identifies the specific integration connected to that listing. Rather than guessing the value, pull it directly from the listings endpoint — each listing in the response includes its own channel field. Common examples: airbnb. The exact value depends on which integration is connected to your listing — always source it from the API response.

Why are both required? Wheelhouse manages pricing separately per channel. A single property can have multiple listings in Wheelhouse — one per connected integration — each with its own base prices, minimum stays, and custom rates. Most endpoints return or update channel-specific data, so both identifiers are needed to scope the request correctly.

Pass listing_id as a path parameter and channel as a query parameter:

curl "https://api.usewheelhouse.com/ss_api/v1/listings/12345678/price_recommendations?channel=airbnb&attribution=false" \
-H "X-Integration-Api-Key: your_api_key_here"

Replace 12345678 with your actual listing_id and airbnb with your listing's channel.


Step 4: Page through large result sets

Endpoints that return lists — like listings, reservations, or segment members — support pagination to keep responses manageable. Three optional parameters control this behavior.

per_page — how many results to return per request. Accepts a value between 1 and 100. Defaults to 50.

page — which page of results to return. Page 1 returns the first batch, page 2 the next, and so on. Defaults to 1.

offset — an alternative to page. Specifies how many items to skip before returning results. page and offset are interchangeable; use one or the other.

# First page
curl "https://api.usewheelhouse.com/ss_api/v1/listings?per_page=50&page=1" \
-H "X-Integration-Api-Key: your_api_key_here"

# Second page
curl "https://api.usewheelhouse.com/ss_api/v1/listings?per_page=50&page=2" \
-H "X-Integration-Api-Key: your_api_key_here"

# Using offset instead
curl "https://api.usewheelhouse.com/ss_api/v1/listings?per_page=50&offset=50" \
-H "X-Integration-Api-Key: your_api_key_here"

If you have more listings than your per_page value, keep incrementing page (or offset) until the response returns fewer results than per_page — that signals you've reached the last page.


What to do if something goes wrong

401 Unauthorized — Your API key is missing, malformed, or invalid. Double-check that X-Integration-Api-Key is included in every request and that the key value is copied correctly with no extra spaces or characters. If you recently revoked and regenerated your key, make sure you're using the new one.

403 Forbidden — Your key is valid, but it doesn't have access to the resource you're requesting. This usually means the listing_id belongs to an account your key isn't scoped to. Confirm the listing exists in your Wheelhouse account and is associated with the key you're using.

404 Not Found — The endpoint path or resource doesn't exist. Check that the URL is correct, the listing_id is valid, and the channel parameter matches the listing's connected platform. A typo in the path or an incorrect listing ID will both return 404.

422 Unprocessable Entity — The request was understood but contains invalid parameters — for example, a date format the API doesn't accept or a missing required field. Check the request body or query parameters against the endpoint reference.

429 Too Many Requests — You've exceeded the rate limit. Slow down your requests and add a delay between calls. If you're building a sync or bulk operation, process listings in batches rather than firing requests in parallel.

500 Internal Server Error — Something went wrong on Wheelhouse's side. Wait a moment and retry. If it persists, contact Wheelhouse support.

Next steps

How to sync price recommendations to your system

Did this answer your question?