All integrations will be given an integration API key. Contact us with a description of your use-case to get one.
Security Scheme Type | API Key |
---|---|
Header parameter name: | X-Integration-API-Key |
Requests to the API must be made in a specific User's context. When a user is registered, we will return an API key for that specific user.
BOTH API key headers are required to make Wheelhouse Pro API calls with the exception being that the new end user creation endpoint only requires IntegrationApiKey.
Security Scheme Type | API Key |
---|---|
Header parameter name: | X-User-API-Key |
By default, our API is limited to 20 requests / minute to prevent any accidental DOS attack in the testing phase or overloading the system. This can be adjusted so please reach out to us with any questions. We recommend using an exponential backoff strategy if you receive a 429 response code.
On average you can expect 4-6 API calls to update a single listing. That means for example a portfolio with 100 listings that makes 400 - 600 API calls for a full portfolio update. At a rate limit of 100 requests per minute, that means a full portfolio update would be achieved in at most six minutes.
We do support webhook callbacks to alert API users e.g. when a listing's price recommndations have been updated or when
a front end user requested a calendar refresh for a listing for which they have granted access to an API customer. Each
web hook will provide the event name (as event
), a boolean flag user_initiated
that indicates if the webhook was
initiated by a user action or through automatic routines, the external_user_id
of the user the listing belongs to, and
additional parameters in the body of the callback.
We currently support these web hooks:
listing_id
)listing_id
)listing_id
, posting_enabled
)For example, the payload of a call to notify about updated recommendations could look like this:
{ "event": "listing_recommendations_updated", "listing_id": "abc_1234", "user_initiated": false, "external_user_id": "user_007" }
Web hooks can use separate URLs for the individual events as well as separate URLs for test and production environments. Please reach out to us directly to inquire about the setup of this feature.
Registering each end user is a requirement of using our API. It allows us to isolate billing information and may enable future APIs or integrations.
Once registered, each user will receive a specific API key that must be included in requests for that user's listings.
Additionally, if you have a customer who already has a Wheelhouse account with linked listings, the user can grant you API access to their listings by generating a User API Key here: https://app.usewheelhouse.com/u/account/api_token. Once they have created this key, they give it to you and you can use it in the X-User-API-Key header to retrieve and update their listings and pull price recommendations.
Important: A user's id (external_user_id
in the User payload) MUST be unique across environments. In systems where uniqueness cannot be guaranteed, we recommend prepending the id with the environment. For example, an integrator may be using the primary key in their User database table as the external_user_id
. If they had separate databases per environment, it would be possible for these ids to collide. Instead, the integrator could send an external_user_id
of the format test-{user_primary_key}
and prod-{user_primary_key}
.
A user
first_name required | string The user's first name. |
last_name required | string The user's last name. |
email required | string The email contact for this user. This is a unique identifier across the system. |
phone required | string The phone number for this user. |
integrators_user_id required | string The unique id used to identify this user within the integration partner. This MUST be unique across environments. |
integrators_affiliate_name | string The name of the affiliate if the end user is through an affiliate. |
integrators_affiliate_user_id | string The unique id used to identify this user within the integration partner. |
password | string (Recommended) Password for accessing Wheelhouse website. If not specified, user will not have access to Wheelhouse website. |
allow_marketing_emails | boolean Default: false Whether we are allowed to send marketing emails to the customer. |
company | string Company affiliation of the user. |
portfolio_size | string Enum: "0-9" "10-49" "50-99" "100+" Number of listings the user operates. |
{- "first_name": "string",
- "last_name": "string",
- "email": "string",
- "phone": "string",
- "integrators_user_id": "string",
- "integrators_affiliate_name": "string",
- "integrators_affiliate_user_id": "string",
- "password": "string",
- "allow_marketing_emails": false,
- "company": "string",
- "portfolio_size": "0-9"
}
{- "first_name": "string",
- "last_name": "string",
- "email": "string",
- "user_api_key": "string"
}
User info
integrators_user_id required | string The unique id used to identify this user within the integration partner. This MUST be unique across environments. |
{- "integrators_user_id": "string"
}
Listing information drives the baseline of our price recommendations. The more detail you can provide, the better our recommendations will be.
Important: A listing id (id
in the PUT Listing payload) MUST be unique across environments and users. In systems where uniqueness cannot be guaranteed, we recommend prepending the id with the environment and user id, if necessary. For example, an integrator may be using the primary key in their Listing database table as the listing's id
. If they had separate databases per environment, it would be possible for these ids to collide. Instead, the integrator could send an id
of the format test-{listing_primary_key}
and prod-{listing_primary_key}
.
Another example would would be if an integrator re-used listing ids between different users. In this case, the integrator could send an id
of the format {external_user_id}-{listing_primary_key}
to guarantee uniqueness.
offset | integer The number of items to skip before starting to collect the result set. (Optional) |
page | integer The page of listings to retrieve. (Optional) |
per_page | integer Number of listings per page. Default is 50. (Optional) |
[- {
- "id": "string",
- "wheelhouse_id": 0,
- "title": "string",
- "location": { },
- "num_bedrooms": 0,
- "num_beds": 0,
- "num_bathrooms": 0,
- "room_type": "shared",
- "property_type": "house",
- "currency": "string",
- "security_deposit": 0,
- "star_rating": 5,
- "num_reviews": 0,
- "num_photos": 0,
- "thumb_url": "string",
- "amenities": [
- "24_hour_check_in"
], - "listing_preferences": {
- "num_included_guests": 0,
- "num_max_guests": 0,
- "fees": [
- {
- "name": "string",
- "type": "cleaning",
- "multiplier": "PER_STAY",
- "value_type": "FIXED",
- "value": 0,
- "quantity": 0
}
], - "automatic_rate_posting_enabled": true,
- "weekly_discount_pct": 0,
- "monthly_discount_pct": 0,
- "base_price": 0,
- "min_price": 0,
- "max_price": 0,
- "minimum_stay": 0
}, - "channel_ids": {
- "airbnb": "string",
- "bookingsync": "string",
- "bookingpals": "string",
- "escapia": "string",
- "guesty": "string",
- "guesty_for_hosts": "string",
- "hostaway": "string",
- "hostfully": "string",
- "igms": "string",
- "lmpm": "string",
- "myvr": "string",
- "orbirental": "string",
- "rentalsunited": "string",
- "smoobu": "string",
- "streamline": "string",
- "tokeet": "string",
- "track": "string",
- "tripadvisor": "string",
- "vrbo": "string"
}, - "description": "string",
- "nickname": "string",
- "base_min_night_stay": 0,
- "owner_name": "string",
- "is_active": true,
- "source_user_id": "string",
- "meta": {
- "amenities": [
- "24_hour_check_in"
], - "num_beds": 0,
- "num_reviews": 0,
- "num_photos": 0,
- "photos": [
- {
- "caption": "string",
- "regular": "string",
- "thumbnail": "string"
}
], - "security_deposit": 0,
- "source_user_id": "string",
- "thumb_url": "string"
}, - "channel": "string",
- "links": {
- "calendar": "string",
- "upgrade": "string"
}, - "wheelhouse_created_at": "2019-08-24T14:15:22Z"
}
]
A listing
id required | string The integration partner's unique listing identifier. This MUST be unique across environments and users. |
wheelhouse_id | integer Wheelhouse's unique listing indentifier. |
title | string (Recommended) The listing's name to show in the UI. |
required | object or object or object (location) Attributes describing a location with enough accuracy to identify a postal code. Prefer more precision. |
num_bedrooms required | integer >= 0 The number of bedrooms included in the unit. Whole numbers only. |
num_beds | integer >= 0 The number of actual beds within the listing |
num_bathrooms required | number >= 0 The number of bathrooms included in the unit, e.g. 1 or 1.5. |
room_type required | string Enum: "shared" "private" "apartment" "entire_place" "hotel_room" Description of the type of room offered. One of |
property_type | string Enum: "house" "cabin" "bnb" "boat" "bus" "camping" "camper" "castle" "hostel" "hotel" "houseboat" "island" "tower" "mill" (Recommended) Description of the property this rental is in. |
currency required | string The ISO-4217 currency code this listing uses for pricing. |
security_deposit required | number >= 0 An extra charge held against damage to the unit at booking. In the currency of the listing. |
star_rating required | number [ 0 .. 5 ] The average review rating of the listing. 0 is the lowest possible rating, 5 is the highest possible rating. |
num_reviews required | integer >= 0 The number of reviews on the listing. |
num_photos required | integer >= 0 The number of photos on the listing. |
thumb_url | string (Recommended) URL of thumbnail image for listing. Default to first photos thumbnail if not specified. |
amenities required | Array of strings Items Enum: "24_hour_check_in" "air_conditioning" "baby_bath" "baby_monitor" "babysitter_recommendations" "balcony" "bathroom_essentials" "bathtub" "bbq" "beach_essentials" "beachfront" "bed_linens" "bedroom_comforts" "bicycles" "breakfast" "building_staff" "cable_or_satellite_tv" "carbon_monoxide_detector" "ceiling_fans" "changing_table" "childrens_books_and_toys" "childrens_dinnerware" "cleaning_before_checkout" "coffee_maker" "cooking_basics" "deck" "dishes_and_silverware" "dishwasher" "dog_friendly" "dryer" "elderly_accessible" "elevator" "essentials" "ev_charger" "extra_pillows_and_blankets" "family_kid_friendly" "fire_extinguisher" "fireplace" "fireplace_guards" "first_aid_kit" "freezer" "fresh_linens" "fridge" "game_console" "garage" "gym" "hair_dryer" "hangers" "heating" "high_chair" "host_greets_you" "hot_tub" "hot_water" "internet" "iron" "jacuzzi" "kettle" "keypad" "kitchen" "lake_access" "laptop_friendly_workspace" "lock_on_bedroom_door" "lockbox" "long_term_stays_allowed" "luggage_dropoff" "microwave" "outlet_covers" "oven" "parking" "parking_free_on_premises" "parking_free_street" "parking_paid" "parking_paid_on_premises" "patio" "pets_allowed" "pool" "pool_cover" "pool_toys" "private_entrance" "private_living_room" "private_yard" "refrigerator" "room_darkening_shades" "sauna" "self_check_in" "shampoo" "shared_pool" "single_level_home" "ski_in_out" "smart_lock" "smoke_detector" "smoking_allowed" "step_free_access" "stereo" "stove" "streaming" "suitable_for_events" "table_corner_guards" "towel" "travel_crib" "tv" "washing_machine" "water_views" "waterfront" "window_guards" A list of amenities available at this listing. |
required | object (listing_preference) Settable attributes on the listing that help us compare apples to apples. |
object (channel_ids) A mapping of supported channel names to the channel's listing id. We use these to dedupe listings and it improves our demand modeling. For unit type inventory, this can be a comma-separated list to denote all individual units on the channel. Note that this is not used to create channel-specific pricing. | |
description | string The listing's description text. |
nickname | string Listing nickname used as a shortened title. |
base_min_night_stay | integer >= 0 This informs Wheelhouse of the length of the shortest stay this listing accepts. |
owner_name | string The listing owner's name to show in the UI. |
is_active | boolean Whether the listing is active and valid on the integration channel. |
source_user_id | string The user id of the user on the integration channel. |
object (meta) Deprecated Container for additional non-required attributes that will help price this listing. See new top-level attributes that are recommended to provide this data. | |
Array of objects A list of photos of the listing. | |
unit_names | string Used for hotel room or "unit type" inventory. This should be a comma delimited list of unit names available under this listing. If omitted, we assume there is only 1 unit. This enables scarcity pricing. |
created_at | string <date-time> The datetime the listing was created on your platform (ISO-8601). |
{- "id": "string",
- "wheelhouse_id": 0,
- "title": "string",
- "location": { },
- "num_bedrooms": 0,
- "num_beds": 0,
- "num_bathrooms": 0,
- "room_type": "shared",
- "property_type": "house",
- "currency": "string",
- "security_deposit": 0,
- "star_rating": 5,
- "num_reviews": 0,
- "num_photos": 0,
- "thumb_url": "string",
- "amenities": [
- "24_hour_check_in"
], - "listing_preferences": {
- "num_included_guests": 0,
- "num_max_guests": 0,
- "fees": [
- {
- "name": "string",
- "type": "cleaning",
- "multiplier": "PER_STAY",
- "value_type": "FIXED",
- "value": 0,
- "quantity": 0
}
], - "automatic_rate_posting_enabled": true,
- "weekly_discount_pct": 0,
- "monthly_discount_pct": 0,
- "base_price": 0,
- "min_price": 0,
- "max_price": 0,
- "minimum_stay": 0
}, - "channel_ids": {
- "airbnb": "string",
- "bookingsync": "string",
- "bookingpals": "string",
- "escapia": "string",
- "guesty": "string",
- "guesty_for_hosts": "string",
- "hostaway": "string",
- "hostfully": "string",
- "igms": "string",
- "lmpm": "string",
- "myvr": "string",
- "orbirental": "string",
- "rentalsunited": "string",
- "smoobu": "string",
- "streamline": "string",
- "tokeet": "string",
- "track": "string",
- "tripadvisor": "string",
- "vrbo": "string"
}, - "description": "string",
- "nickname": "string",
- "base_min_night_stay": 0,
- "owner_name": "string",
- "is_active": true,
- "source_user_id": "string",
- "meta": {
- "amenities": [
- "24_hour_check_in"
], - "num_beds": 0,
- "num_reviews": 0,
- "num_photos": 0,
- "photos": [
- {
- "caption": "string",
- "regular": "string",
- "thumbnail": "string"
}
], - "security_deposit": 0,
- "source_user_id": "string",
- "thumb_url": "string"
}, - "photos": [
- {
- "caption": "string",
- "regular": "string",
- "thumbnail": "string"
}
], - "unit_names": "string",
- "created_at": "2019-08-24T14:15:22Z"
}
{- "id": "string",
- "wheelhouse_id": 0,
- "title": "string",
- "location": { },
- "num_bedrooms": 0,
- "num_beds": 0,
- "num_bathrooms": 0,
- "room_type": "shared",
- "property_type": "house",
- "currency": "string",
- "security_deposit": 0,
- "star_rating": 5,
- "num_reviews": 0,
- "num_photos": 0,
- "thumb_url": "string",
- "amenities": [
- "24_hour_check_in"
], - "listing_preferences": {
- "num_included_guests": 0,
- "num_max_guests": 0,
- "fees": [
- {
- "name": "string",
- "type": "cleaning",
- "multiplier": "PER_STAY",
- "value_type": "FIXED",
- "value": 0,
- "quantity": 0
}
], - "automatic_rate_posting_enabled": true,
- "weekly_discount_pct": 0,
- "monthly_discount_pct": 0,
- "base_price": 0,
- "min_price": 0,
- "max_price": 0,
- "minimum_stay": 0
}, - "channel_ids": {
- "airbnb": "string",
- "bookingsync": "string",
- "bookingpals": "string",
- "escapia": "string",
- "guesty": "string",
- "guesty_for_hosts": "string",
- "hostaway": "string",
- "hostfully": "string",
- "igms": "string",
- "lmpm": "string",
- "myvr": "string",
- "orbirental": "string",
- "rentalsunited": "string",
- "smoobu": "string",
- "streamline": "string",
- "tokeet": "string",
- "track": "string",
- "tripadvisor": "string",
- "vrbo": "string"
}, - "description": "string",
- "nickname": "string",
- "base_min_night_stay": 0,
- "owner_name": "string",
- "is_active": true,
- "source_user_id": "string",
- "meta": {
- "amenities": [
- "24_hour_check_in"
], - "num_beds": 0,
- "num_reviews": 0,
- "num_photos": 0,
- "photos": [
- {
- "caption": "string",
- "regular": "string",
- "thumbnail": "string"
}
], - "security_deposit": 0,
- "source_user_id": "string",
- "thumb_url": "string"
}, - "channel": "string",
- "links": {
- "calendar": "string",
- "upgrade": "string"
}, - "wheelhouse_created_at": "2019-08-24T14:15:22Z"
}
id required | string The integration partner's unique listing identifier. |
channel | string Channel name of the listing. Can be ommitted if you request a listing you created, but required if you request a listing from another channel. See return value of the /listings endpoint. |
{- "id": "string",
- "wheelhouse_id": 0,
- "title": "string",
- "location": { },
- "num_bedrooms": 0,
- "num_beds": 0,
- "num_bathrooms": 0,
- "room_type": "shared",
- "property_type": "house",
- "currency": "string",
- "security_deposit": 0,
- "star_rating": 5,
- "num_reviews": 0,
- "num_photos": 0,
- "thumb_url": "string",
- "amenities": [
- "24_hour_check_in"
], - "listing_preferences": {
- "num_included_guests": 0,
- "num_max_guests": 0,
- "fees": [
- {
- "name": "string",
- "type": "cleaning",
- "multiplier": "PER_STAY",
- "value_type": "FIXED",
- "value": 0,
- "quantity": 0
}
], - "automatic_rate_posting_enabled": true,
- "weekly_discount_pct": 0,
- "monthly_discount_pct": 0,
- "base_price": 0,
- "min_price": 0,
- "max_price": 0,
- "minimum_stay": 0
}, - "channel_ids": {
- "airbnb": "string",
- "bookingsync": "string",
- "bookingpals": "string",
- "escapia": "string",
- "guesty": "string",
- "guesty_for_hosts": "string",
- "hostaway": "string",
- "hostfully": "string",
- "igms": "string",
- "lmpm": "string",
- "myvr": "string",
- "orbirental": "string",
- "rentalsunited": "string",
- "smoobu": "string",
- "streamline": "string",
- "tokeet": "string",
- "track": "string",
- "tripadvisor": "string",
- "vrbo": "string"
}, - "description": "string",
- "nickname": "string",
- "base_min_night_stay": 0,
- "owner_name": "string",
- "is_active": true,
- "source_user_id": "string",
- "meta": {
- "amenities": [
- "24_hour_check_in"
], - "num_beds": 0,
- "num_reviews": 0,
- "num_photos": 0,
- "photos": [
- {
- "caption": "string",
- "regular": "string",
- "thumbnail": "string"
}
], - "security_deposit": 0,
- "source_user_id": "string",
- "thumb_url": "string"
}, - "channel": "string",
- "links": {
- "calendar": "string",
- "upgrade": "string"
}, - "wheelhouse_created_at": "2019-08-24T14:15:22Z"
}
id required | string The integration partner's unique listing identifier. |
channel | string Channel name of the listing. Can be ommitted if you request a listing you created, but required if you request a listing from another channel. See return value of the /listings endpoint. |
{- "name": "Free",
- "horizon": 0
}
id required | string The integration partner's unique listing identifier. |
Pricing tier info
name | string Enum: "Free" "Pro Flex" "Pro Flat" "Pro SS API" Name of the Wheelhouse pricing tier. |
{- "name": "Free"
}
{- "name": "Free",
- "horizon": 0
}
Note that this endpoint is experimental
and might change in the future!
id required | string The integration partner's unique listing identifier. |
channel | string Channel name of the listing. Can be ommitted if you request a listing you created, but required if you request a listing from another channel. See return value of the /listings endpoint. |
{- "settings": "2019-08-24T14:15:22Z",
- "rates": "2019-08-24T14:15:22Z"
}
Determine whether a given location is in an active Wheelhouse market.
country required | string 2 characters The ISO-3166 2 letter country code. |
postal_code required | string A regional postal code for within the given country. |
latitude required | number [ -90 .. 90 ] The latitude coordinate of this location. |
longitude required | number [ -180 .. 180 ] The longitude coordinate of this location. |
{- "in_market": true,
- "market_name": "string"
}
Creates multiple custom rates for a listing. See description of setCustomRate for details.
listing_id required | any The integration partner's unique listing identifier. |
An object representing the custom rate to be set.
Array of objects (custom_rate) |
{- "custom_rates": [
- {
- "start_date": "2019-08-24",
- "end_date": "2019-08-24",
- "rate_type": "fixed",
- "adjustment": 1,
- "currency": "str",
- "monday": 1,
- "tuesday": 1,
- "wednesday": 1,
- "thursday": 1,
- "friday": 1,
- "saturday": 1,
- "sunday": 1,
- "weekend_price": 0,
- "weekday_price": 0
}
]
}
{- "updated_custom_rates": [
- {
- "start_date": "2019-08-24",
- "end_date": "2019-08-24",
- "rate_type": "fixed",
- "adjustment": 1,
- "currency": "str",
- "monday": 1,
- "tuesday": 1,
- "wednesday": 1,
- "thursday": 1,
- "friday": 1,
- "saturday": 1,
- "sunday": 1,
- "weekend_price": 0,
- "weekday_price": 0
}
]
}
This endpoint allows for multiple date ranges to have their custom rates removed, reverting back to recommended prices for those dates. Note that start_date and end_date of each range are inclusive, and custom rates will be removed on those dates as well.
listing_id required | any The integration partner's unique listing identifier. |
An object representing the set of ranges for which to delete custom rates.
Array of objects |
{- "delete_ranges": [
- {
- "start_date": null,
- "end_date": null
}
]
}
{- "errors": [
- { }
]
}
Defines a custom rate (an override of recommended pricing) for a date range. A rate_type of fixed
defines a fixed rate in the specified currency. A rate_type of adjustment
defines a percentage-based adjustment to the recommended price.
Fixed Rate Example:
Specifying the currency
as "USD", a day of week value of 500 for sunday
, 750 for friday
and 625 for saturday
will set the rates for those days during the specified date range to
$500, $750 and $625, respectively.
Adjustment Rate Example:
An adjustment value of 115 would mean a 15% increase in price, while a value of 75 would
indicate a decrease of 25% from the recommended price. In cases where both an adjustment and
day of week values are given, the adjustment will act as the default value for the non-specified
days of week. So setting an adjustment
of 115 and specifying 125 for sunday
, 145 for friday
and 135 for saturday
would results in a 25% increase for Sunday, a 15% increase for Monday-Thursday,
a 45% increase for Friday and a 35% increase for Saturday.
An object representing the custom rate to be set.
start_date required | string <date> The inclusive start of the stay-date range affected by the custom rate (YYYY-MM-DD). |
end_date required | string <date> The inclusive end of the stay-date range affected by the custom rate (YYYY-MM-DD). |
rate_type required | string Enum: "fixed" "adjustment" Whether the custom rate is percentage-based or a fixed override. |
adjustment | number >= 1 The percentage by which the price should be adjusted. For example 100 means 100% of the recommended price, i.e. no adjustment. 90 means 90% and thus reduces the recommended price by 10%. Vice versa 110 means 110% and thus increases the recommended price by 10%. This is required if the rate_type is |
currency | string 3 characters The ISO-4217 3-letter currency code of the price. Required if rate_type is |
monday | number >= 1 The price applied for all Mondays in the given date range. |
tuesday | number >= 1 The price applied for all Tuesdays in the given date range. |
wednesday | number >= 1 The price applied for all Wednesdays in the given date range. |
thursday | number >= 1 The price applied for all Thursdays in the given date range. |
friday | number >= 1 The price applied for all Fridays in the given date range. |
saturday | number >= 1 The price applied for all Saturdays in the given date range. |
sunday | number >= 1 The price applied for all Sundays in the given date range. |
weekend_price | number >= 0 Deprecated The price applied for nights on the weekend (Fri, Sat). |
weekday_price | number >= 0 Deprecated The price applied for nights during the week (Sun-Thu). |
{- "start_date": "2024-08-05",
- "end_date": "2024-09-05",
- "rate_type": "fixed",
- "currency": "USD",
- "sunday": 500,
- "friday": 750,
- "saturday": 625
}
{- "start_date": "2024-08-05",
- "end_date": "2024-09-05",
- "rate_type": "fixed",
- "currency": "USD",
- "sunday": 500,
- "friday": 750,
- "saturday": 625
}
Remove all custom rates from Wheelhouse for the affected stay dates. Any partially covered custom rates will be adequately shortened and the affected date range will be set to the recommended price again. These will then reflect both in the Wheelhouse UI and in the prices returned from the recommendations endpoint.
start_date required | string <date> The inclusive start of the stay-date range where any custom rate is removed (YYYY-MM-DD). |
end_date required | string <date> The inclusive end of the stay-date range where any custom rate is removed (YYYY-MM-DD). |
Reservations drive price anchoring and occupancy statistics for your properties. They are instrumental to our ability to make price recommendations.
The reservations create/update endpoint is called at least once per listing during the initial setup of a user's account to create historical reservations. Integrators MUST send us 1 year of historical reservations. Integrators SHOULD send us 2 years of historical reservations on setup.
Once the listing is setup and active, this endpoint MUST be called with reservation calendar changes. This MAY happen in real time or be batched, but Wheelhouse MUST be notified of changes on the same day they occur.
The more detail included in the reservation object, the more accurate our recommendations will be.
This endpoint accepts a list of reservation objects and returns a list of processed reservation IDs.
The unchanged
response field additionaly indicates reservations that were already present and
required no update.
If Wheelhouse errors or otherwise fails to return the reservation IDs that were created or updated, integrators MUST resend them after some period of time. DO NOT repeatedly call this endpoint if it is failing.
id required | string The integration partner's unique listing identifier. |
reservations
Array of objects or objects (schemas) |
{- "reservations": [
- {
- "id": "string",
- "start_date": "2019-08-24",
- "end_date": "2019-08-24",
- "booked_at": "2019-08-24T14:15:22Z",
- "num_guests": 0,
- "num_included_guests": 0,
- "num_included_adults": 0,
- "num_included_children": 0,
- "currency": "string",
- "total_price": 0,
- "payout_total": 0,
- "nightly_subtotal": 0,
- "nightly_prices": [
- {
- "price": 0,
- "date": "string"
}
], - "taxes": [
- {
- "name": "string",
- "type": "cleaning",
- "multiplier": "PER_STAY",
- "value_type": "FIXED",
- "value": 0,
- "quantity": 0
}
], - "fees": [
- {
- "name": "string",
- "type": "cleaning",
- "multiplier": "PER_STAY",
- "value_type": "FIXED",
- "value": 0,
- "quantity": 0
}
], - "deposits": [
- {
- "name": "string",
- "type": "cleaning",
- "multiplier": "PER_STAY",
- "value_type": "FIXED",
- "value": 0,
- "quantity": 0
}
], - "discounts": [
- {
- "name": "string",
- "type": "cleaning",
- "multiplier": "PER_STAY",
- "value_type": "FIXED",
- "value": 0,
- "quantity": 0
}
], - "cancelled": false,
- "cancelled_total": 0,
- "unit_name": "string",
- "source_name": "string",
- "confirmation_code": "string"
}
]
}
{- "error_messages": [
- "string"
], - "api_warnings": [
- "string"
], - "data": [
- "string"
], - "unchanged": [
- "string"
], - "failed": {
- "property1": {
- "reservation_id": "string",
- "error_messages": [
- "string"
]
}, - "property2": {
- "reservation_id": "string",
- "error_messages": [
- "string"
]
}
}
}
Experimental - the interface might change in the future! This endpoint lists reservations of a listing.
listing_id required | string The integration partner's unique listing identifier. |
start_date required | string <date> The inclusive start of the stay-date range to query reservations for (YYYY-MM-DD). |
end_date required | string <date> The inclusive end of the stay-date range to query reservations for (YYYY-MM-DD). |
offset | integer The number of reservations to skip before starting to collect the result set. |
page | integer The page of reservations to retrieve. |
per_page | integer Number of reservations per page. |
[- {
- "id": "string",
- "status": "string",
- "start_date": "2019-08-24",
- "end_date": "2019-08-24",
- "booket_at": "2019-08-24T14:15:22Z",
- "num_guests": 0,
- "currency": "string",
- "total_price": 0,
- "nightly_subtotal": 0,
- "extra_guest": 0,
- "security_deposit": 0,
- "extras": 0,
- "taxes": 0,
- "confirmation_code": "string",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
]
This endpoint deletes a single reservation by its id. NOTE: if a reservation is cancelled, it is best to update the reservation's cancelled flag to true with the PUT reservation endpoint. This endpoint is only intended to be used for erroneously created reservations.
listing_id required | string The integration partner's unique listing identifier. |
reservation_id required | string The reservation ID |
Price calendars help us keep our system up to date, understand usage, and drive some of our internal models for booking probabilities, gap night pricing, and more. They also provide us with information on which stay dates are available, and which ones are blocked as well as what asking prices are currently set relative to our recommendation.
This endpoint should be called before requesting price recommendations. If the listing calendar is changed by our recommendations, integrators MUST call this endpoint again to update our calendar.
id required | string The integration partner's unique listing identifier. |
Array of objects (price_calendar) A calendar object describing pricing and availability by stay date. |
{- "price_calendars": [
- {
- "stay_date": "2019-08-24",
- "price": 0,
- "currency": "string",
- "is_available": true,
- "min_night_stay": 0,
- "unit_name": "string"
}
]
}
Return daily price recommendations for this listing. The horizon of the price recommendations depends on the pricing tier this listing is in and can be queried using the pricing tier endpoint. If the listing calendar is changed by our recommendations, integrators MUST make another PUT to the price calendar to update our calendar.
id required | string The integration partner's unique listing identifier. |
currency | string The final currency that the prices should be in. Uses listing's currency by default. Uses 3-digit ISO form (e.g. 'USD', 'GBP'). |
channel | string Channel name of the listing. Can be ommitted if you request a listing you created, but required if you request a listing from another channel. See return value of the /listings endpoint. |
attribution | boolean Default: false Whether or not you want to receive a detailed attribution for each day. The attribution will break a daily recommendation down into contributing prices like seasonality, local events, etc. and activate all |
{- "error_messages": [
- "string"
], - "api_warnings": [
- "string"
], - "data": [
- {
- "stay_date": "2019-08-24",
- "price": 0,
- "currency": "string",
- "min_stay": 0,
- "custom_type": "string",
- "attr_seasonality": 0,
- "attr_local_demand": 0,
- "attr_availability": 0,
- "attr_time": 0,
- "attr_custom_weekend": 0,
- "attr_scarcity": 0,
- "attr_restriction": 0,
- "attr_user_adjustment": 0
}
], - "base_price": 0,
- "global_min_stay": 0,
- "automatic_rate_posting_enabled": true
}
Get base price recommendations for all active listings in the account
currency | string The final currency that the prices should be in. Uses listing's currency by default. Uses 3-digit ISO form (e.g. 'USD', 'GBP'). |
{- "base_price_recommendations": [
- {
- "listing_id": "string",
- "base_price_recommended": 0,
- "base_price_conservative": 0,
- "base_price_aggressive": 0,
- "base_price_selected": 0
}
]
}
Return base price recommendations for this listing with various options.
id required | string The integration partner's unique listing identifier. |
currency | string The final currency that the prices should be in. Uses listing's currency by default. Uses 3-digit ISO form (e.g. 'USD', 'GBP'). |
{- "base_price_recommended": 0,
- "base_price_conservative": 0,
- "base_price_aggressive": 0,
- "base_price_selected": 0
}
Preferences allow to adapt the Wheelhouse recommendation engine to the host specifically for each listing.
Return daily check-in/check-out rules for this listing. The horizon of the rules depends on the pricing tier this listing is in and can be queried using the pricing tier endpoint.
id required | string The integration partner's unique listing identifier. |
channel | string Channel name of the listing. Can be ommitted if you request a listing you created, but required if you request a listing from another channel. See return value of the /listings endpoint. |
{- "data": [
- {
- "stay_date": "2019-08-24",
- "check_in": true,
- "check_out": true
}
]
}
Return daily minimum and maximum price for this listing. The horizon of the rules depends on the pricing tier this listing is in and can be queried using the pricing tier endpoint.
id required | string The integration partner's unique listing identifier. |
channel | string Channel name of the listing. Can be ommitted if you request a listing you created, but required if you request a listing from another channel. See return value of the /listings endpoint. |
{- "data": [
- {
- "stay_date": "2019-08-24",
- "min_price": 0,
- "max_price": 0
}
]
}
This endpoint can be used to copy the preferences from one listing to another. This is useful if you have multiple listings that are very similar and you want to copy the preferences from one listing to another, or if you are creating a listing on a new channel and want to copy the preferences from an existing listing. The source listing is specified in the JSON payload of the request and the target listing is specified in the URL. Note that custom rates can also be copied using this endpoint.
id required | string The integration partner's unique listing identifier. |
object Identifies the source listing from which to copy the preferences. When identifying the listing from which to copy the preferences, you can either provide the wheelhouse_id of that source listing, or you can provide the channel and channel_id of the source listing. If you provide all of the above, wheelhouse_id is given priority. |
{- "copy_preferences_from": {
- "wheelhouse_id": 12345,
- "channel": "airbnb",
- "channel_id": "613557047440586411",
- "copy_custom_rates": true
}
}
This endpoint can be used to change basic preferences of the Wheelhouse recommendation engine. For each setting you can choose between a conservative (CON), recommended (REC), or aggressive (AGG) setting.
id required | string The integration partner's unique listing identifier. |
setting required | string Enum: "base_price_adjustment" "weekend_factor" "seasonality_adjustment" "last_minute_discount" "far_future_premium" The setting you want to change. |
type required | string Enum: "CON" "REC" "AGG" Setting to be applied. |
This setting informs Wheelhouse whether or not the user wishes to use the Wheelhouse recommended prices for this listing.
id required | string The integration partner's unique listing identifier. |
enabled required | boolean Whether or not the user wishes to use the Wheelhouse recommended prices for this listing. |
This endpoint can be used to fetch weekly and monthly discounts set up through Wheelhouse for a listing.
id required | string The integration partner's unique listing identifier. |
{- "weekly_discount": 100,
- "monthly_discount": 100
}
An array of objects representing the preferences to be set for each listing.
listing_id | string The integration partner's unique listing identifier. |
base_price | number >= 0 The base price to use for this listing. Only set it you want to override the Wheelhouse data-derived base price. Setting this option is equivalent to using a "Rule-based" base price definition in the Wheelhouse UI. To remove the base price override, set this value to null. |
object Definition of long term discounts. | |
Array of objects or objects or objects or objects or objects or objects or objects Definition of minimum prices. | |
Array of objects or objects or objects or objects or objects or objects or objects Definition of maximum prices. | |
Array of objects or objects or objects or objects or objects or objects or objects or objects or objects Definition of minimum length of stay. |
[- {
- "listing_id": "string",
- "base_price": 0,
- "long_term_discounts": {
- "active": true,
- "weekly_discount": 100,
- "monthly_discount": 100
}, - "minimum_price_rules": [
- { }
], - "maximum_price_rules": [
- { }
], - "minimum_stay_rules": [
- { }
]
}
]
{- "updated_preferences": [
- {
- "listing_id": "string",
- "base_price": 0,
- "long_term_discounts": {
- "active": true,
- "weekly_discount": 100,
- "monthly_discount": 100
}, - "minimum_price_rules": [
- { }
], - "maximum_price_rules": [
- { }
], - "minimum_stay_rules": [
- { }
]
}
]
}
Note that this endpoint is experimental
and might change in the future! This endpoint can
be used to change custom preferences of the Wheelhouse recommendation engine.
id required | string The integration partner's unique listing identifier. |
An object representing the preferences to be set.
base_price | number >= 0 The base price to use for this listing. Only set it you want to override the Wheelhouse data-derived base price. Setting this option is equivalent to using a "Rule-based" base price definition in the Wheelhouse UI. To remove the base price override, set this value to null. |
object Definition of long term discounts. | |
Array of objects or objects or objects or objects or objects or objects or objects Definition of minimum prices. | |
Array of objects or objects or objects or objects or objects or objects or objects Definition of maximum prices. | |
Array of objects or objects or objects or objects or objects or objects or objects or objects or objects Definition of minimum length of stay. |
{- "base_price": 0,
- "long_term_discounts": {
- "active": true,
- "weekly_discount": 100,
- "monthly_discount": 100
}, - "minimum_price_rules": [
- { }
], - "maximum_price_rules": [
- { }
], - "minimum_stay_rules": [
- { }
]
}
base_price_recommendation
for all listings in account.type
attribute.base_price_recommendation
endpoint to fetch recommended base price options.base_price
to be set via the /preferences/{id}
endpoint./preferences/{id}
) to define detailed custom preferences. This endpoint is experimental and subject to changes in the future./listings/{id}/recent_changes
) for retrieving the times of the most-recent changes for a listingexternal_user_id
to all webhooksautomatic_rate_posting_enabled
flag.user_initiated
attribute to webhook payloads to differentiate between a webhook was
initiated by a user action and one that was called through automatic routines.nickname
attribute from the Listing#listing_preferences
.
Please just use the Listing#nickname
attribute instead.PUT reservations
endpoint in the
unchanged
response field. These indicate that the reservations were already present and
required no update.external_user_id
as an identifying parameter to web hook callbacks.fixed
(i.e. a fixed custom price) or adjusted
(i.e. a percentage adjustment to the Wheelhouse
recommendation).Listing#meta
atrribute object and lift the relevant attribute to the top level
instead. The old meta
attribute still works as well for now but will evventually be
dropped in a future version.booked_at
and either nightly_subtotal
or nightly_prices
on
reservations.room_type
.