Skip to main content

Troubleshooting & Error Codes

Written by Ryo

When a request fails, the RM API returns a standard HTTP status code along with an error message in the response body. Here's what each code means and what to do about it.


400 Bad Request

The request was malformed — missing required fields, invalid values, or incorrect JSON syntax. Check your request body and query parameters. Common causes:

  • Missing a required field like start_date or end_date on custom rates

  • Sending a string where a number is expected

  • Malformed JSON in the request body


401 Unauthorized

Your API key is missing or invalid.

The RM API uses a custom header — not standard Bearer auth. Make sure your request includes exactly:

X-Integration-Api-Key: your_api_key_here

Common mistakes:

  • Using Authorization: Bearer your_api_key — this won't work

  • Using Api-Key or X-Api-Key instead of X-Integration-Api-Key

  • Passing the key as a query parameter instead of a header

If the header is correct and you're still getting 401, regenerate your API key in the Wheelhouse dashboard.


403 Forbidden

Your API key is valid but doesn't have permission to access this resource.

This usually means the listing_id belongs to a different Wheelhouse account than your API key. Verify listing IDs by calling GET /listings — only listings that appear in that response are accessible with your key.


404 Not Found

The requested resource doesn't exist.

  • Confirm the listing_id is correct

  • Check that the listing is still active in Wheelhouse

  • Verify the endpoint path — a typo in the URL will return a 404


422 Unprocessable Entity

The request was well-formed but contained invalid data the server couldn't process.

The response body will include a description of what failed. Common causes:

  • Date ranges where end_date is before start_date

  • Values outside an accepted range (e.g. per_page greater than 100)

  • Unsupported channel value


423 Locked

The listing hasn't completed its initial Wheelhouse setup. This happens with recently added listings that haven't been fully configured yet.

Wait for setup to complete, or have the property manager finish the initial configuration in the Wheelhouse dashboard before retrying. Build 423 handling into your integration so it skips unconfigured listings gracefully rather than failing the whole operation.


429 Too Many Requests

You've exceeded the rate limit — RM API keys are limited to 60 requests per minute by default, on a rolling one-minute window.

  • Implement exponential backoff: after the first 429, wait 1 second, then double the delay on each retry (2s, 4s, 8s, …) up to about 60 seconds, with ±10–20% jitter to avoid concurrent clients retrying in lockstep

  • For bulk preference updates, use PUT /preferences to update multiple listings in a single request instead of looping single-listing calls

  • If your integration regularly hits the limit, batch requests where possible or contact Wheelhouse to discuss a higher limit


500 Internal Server Error

Something went wrong on Wheelhouse's end. This is not caused by your request.

Wait a moment and retry. If the error persists, contact Wheelhouse support.


207 Multi-Status

Returned on bulk operations when some items succeeded and others failed. This is not an error — it means partial success.

Check the response body for a per-item breakdown of what succeeded and what failed. Common per-item failure causes: listing in 423 Locked state, invalid value for a setting, listing ID not belonging to your account. Retry only the failed items — don't re-send the full batch.


Common scenarios

Price recommendations are empty or missing dates

  • Confirm you're passing channel=airbnb — the parameter is required

  • Check that the listing is active in Wheelhouse

  • The recommendation window length depends on your account's plan tier — a shorter window than expected may be a plan limit, not an error

Custom rates aren't appearing in Wheelhouse

  • Confirm the response was 200, not 400 or 422

  • Dates must be in YYYY-MM-DD format; end_date must be after start_date

  • For rate_type: "adjustment", rate is a multiplier (e.g. 0.9 = 10% discount) — not a dollar amount

  • For rate_type: "fixed", rate is the nightly price in the listing's currency

Listings are missing from GET /listings By default, GET /listings excludes inactive listings. Pass exclude_inactive=false to include all listings regardless of status.

Related

Making your first API request (step-by-step walkthrough)

Did this answer your question?