EscapeStays by Luxury Lodging
Book vacation rentals direct: search homes, check live availability, get a real total.
사용해야 할까요
품질 및 안전성
도구 정의와 프로토콜 준수에 대한 자동 분석을 기반으로 합니다.
컨텍스트 비용
이는 서버의 도구가 모델의 컨텍스트에 로드될 때마다 소비되는 대략적인 토큰 수입니다. 수치가 높을수록 다른 작업에 사용할 수 있는 주의가 줄어듭니다.
설치
원클릭 설치
`claude_desktop_config.json` 파일에 다음을 추가하세요:
{
"mcpServers": {
"luxury-lodging": {
"url": "https://stay.luxurylodgingpm.com/mcp"
}
}
}원격 엔드포인트
https://stay.luxurylodgingpm.com/mcpstreamable-http할 수 있는 일
도구 목록
도구 (7)
🟢search_properties(query, radius_miles, market, check_in, check_out, ...)
Searches Luxury Lodging's directly bookable vacation rentals by destination, dates, group size, bedrooms and amenities. With dates, only homes confirmed available are returned, each with a stay total that includes cleaning, fees and taxes; nightly rates exclude them. Interchangeable units of the same type are returned once, with every unit's id listed in `similar_units` so any of them can still be quoted and booked; `limit` counts those results, while `total_matching` counts the individual homes confirmed available. A busy market can hold more homes than one request can price, so `unpriced_in_time` counts matching homes whose availability was not established: they are unknown, not unavailable, and `unpriced_property_ids` lists the property_id of up to 30 of them, each of which can be priced individually with a live quote. Pet-friendly searches also report `pet_policy_unknown`: otherwise matching homes with unverified pet policies, with or without dates. While either count is above zero, the results are not the whole market; `price_all_matches`, a higher `limit`, or a narrower place covers more of it. Without dates no price is returned. Each result carries `accommodation_type` and `bathroom_sharing`: a private room or shared room is not an entire home. Optional filters cover accommodation type, exact bedrooms, required amenities and a budget; results can be paged with `cursor`, and `completeness` is partial when a matching home was left unpriced or unchecked. A query that names a known landmark or area ("near McCormick Place") returns homes within `radius_miles` of it, nearest first, each with `distance_miles` and `distance_type` straight_line: a direct distance, not a driving or walking route.
입력 스키마
{
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Free text place, e.g. 'Tampa', a neighbourhood, or a landmark such as 'near McCormick Place, Chicago'. A known Chicago landmark or area (McCormick Place, Navy Pier, Wrigley Field, O'Hare Airport, the South Loop and others) returns homes within radius_miles, nearest first, with a straight-line distance. Text that names no city, state, neighbourhood or landmark is refused with INVALID_INPUT; it is not answered as an empty, complete result."
},
"radius_miles": {
"type": "integer",
"minimum": 1,
"maximum": 25,
"description": "How far from a named landmark or area to search, in whole miles, 1 to 25. Homes are included by the distance they state, to the nearest half mile. Defaults to 5 for a landmark and 3 for an area. Ignored for any other place."
},
"market": {
"type": "string",
"description": "Market or city name, when the guest named one exactly."
},
"check_in": {
"type": "string",
"description": "Check-in date, YYYY-MM-DD. Availability is checked only when both dates are given."
},
"check_out": {
"type": "string",
"description": "Check-out date, YYYY-MM-DD."
},
"guests": {
"type": "integer",
"minimum": 1,
"maximum": 50,
"description": "Everyone staying, including children and infants."
},
"bedrooms_min": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"description": "Fewest bedrooms acceptable."
},
"bedrooms_exact": {
"type": "integer",
"minimum": 0,
"maximum": 100,
"description": "Exactly this many bedrooms; 0 is a studio. Cannot be sent together with bedrooms_min."
},
"accommodation_type": {
"type": "string",
"enum": [
"entire_home",
"private_room",
"shared_room"
],
"description": "What the guest rents. Homes whose type is not recorded are left out and counted in accommodation_type_unknown."
},
"bathrooms_min": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"description": "Fewest bathrooms acceptable."
},
"pets": {
"type": [
"integer",
"boolean"
],
"minimum": 0,
"maximum": 4,
"description": "How many pets the guest is bringing, 0 to 4; 0 or leave out for none. true means one pet and false none. Results are limited to pet-friendly homes, dated totals include the pet fee for that many pets, and booking links keep the number of pets."
},
"amenities": {
"type": "array",
"items": {
"type": "string",
"enum": [
"pool",
"hot_tub",
"parking",
"wifi",
"kitchen",
"washer",
"pets"
]
},
"description": "Amenities every returned home has, as recorded by the property manager. The same hard filter as amenities_required, except a home with no amenity data is left out without being counted."
},
"amenities_required": {
"type": "array",
"items": {
"type": "string",
"enum": [
"pool",
"hot_tub",
"parking",
"wifi",
"kitchen",
"washer",
"pets"
]
},
"description": "Amenities every returned home has. A home whose amenity data is unavailable fails the filter and is counted in amenities_unknown."
},
"amenities_preferred": {
"type": "array",
"items": {
"type": "string",
"enum": [
"pool",
"hot_tub",
"parking",
"wifi",
"kitchen",
"washer",
"pets"
]
},
"description": "Amenities that order homes when the requested sort ties, and appear in match_reasons. Homes lacking them stay in the results."
},
"budget": {
"type": "object",
"description": "A spending limit. scope total compares amount with each home's stay total including cleaning, fees and taxes, and needs check_in and check_out. scope nightly compares it with each home's starting nightly rate, which excludes cleaning, fees and taxes. amount, currency and scope are all required.",
"properties": {
"amount": {
"type": "number",
"exclusiveMinimum": 0,
"maximum": 1000000,
"description": "The limit, in the stated currency."
},
"currency": {
"type": "string",
"enum": [
"USD"
],
"description": "Only USD is supported."
},
"scope": {
"type": "string",
"enum": [
"total",
"nightly"
],
"description": "total: the whole stay, with dates. nightly: the starting nightly rate, excluding fees and taxes."
}
},
"required": [
"amount",
"currency",
"scope"
],
"additionalProperties": false
},
"max_total": {
"type": "integer",
"minimum": 1,
"description": "Budget for the whole stay in dollars, including cleaning, fees and taxes. Applies only when dates are given."
},
"sort": {
"type": "string",
"enum": [
"total_price_asc",
"total_price_desc",
"from_price_asc",
"sleeps_desc"
],
"description": "total_price_* needs dates and orders by the stay total; from_price_asc orders by a starting rate that is not returned, and with dates by the stay total; sleeps_desc puts the largest homes first."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 20,
"description": "How many properties to return (default 8)."
},
"page_size": {
"type": "integer",
"minimum": 1,
"maximum": 20,
"description": "Results per page, up to 20. Takes the place of limit when both are sent."
},
"page": {
"type": "integer",
"minimum": 1,
"description": "Page number, starting at 1, counted in units of page_size. Cannot be sent together with cursor."
},
"cursor": {
"type": "string",
"description": "The next_cursor value of the previous response, valid only with the same other inputs. Returns the page after it."
},
"price_all_matches": {
"type": "boolean",
"description": "Prices every matching home rather than a fast sample, so total_matching is the real count and the cheapest result is genuinely the cheapest. Slower, and still bounded: unpriced_in_time counts any homes it did not reach."
}
},
"additionalProperties": false
}출력 스키마
{
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"OK",
"NO_MATCHES"
],
"description": "NO_MATCHES: nothing matched and nothing is unknown (unpriced_in_time and pet_policy_unknown are both 0). It is a normal answer, not an error. Any other search is OK, even with no results, and unpriced_in_time and pet_policy_unknown say what is still unknown."
},
"matches": {
"type": "integer",
"description": "How many results this response carries."
},
"total_matching": {
"type": "integer",
"description": "How many individual homes matched, counting every interchangeable unit."
},
"total_matching_groups": {
"type": "integer",
"description": "How many distinct unit types matched."
},
"unpriced_in_time": {
"type": "integer",
"description": "Matching homes whose availability was not established for these dates, because their pet policy could not be verified, a quote failed, the request ran out of budget, or it did not reach them. They are unknown, not unavailable. `price_all_matches`, a higher `limit`, or a narrower place establishes more of them. These counts cover the whole search, not one page, and the homes they count are not part of any page. A later page quotes more homes, so the count can fall."
},
"unpriced_property_ids": {
"type": "array",
"maxItems": 30,
"items": {
"type": "integer"
},
"description": "The property_id of up to 30 of the homes counted in unpriced_in_time; each can be priced individually with a live quote. Homes whose quote failed or timed out come first, then homes the request did not reach. A home listed here is unknown, not unavailable."
},
"pet_policy_unknown": {
"type": "integer",
"description": "Otherwise matching homes omitted from a pet-friendly search because their pet policy is unknown, not confirmed to prohibit pets. Applies with or without dates; included in unpriced_in_time when dated. A positive count means the pet-friendly inventory is incomplete."
},
"accommodation_type_unknown": {
"type": "integer",
"description": "Otherwise matching homes left out of an accommodation_type search because no type is recorded for them. They are not confirmed to be another type. 0 when the filter was not sent."
},
"amenities_unknown": {
"type": "integer",
"description": "Otherwise matching homes left out of an amenities_required search because no amenity data is available for them. They are not confirmed to lack the amenity. 0 when the filter was not sent."
},
"budget_unverified": {
"type": "integer",
"description": "Otherwise matching homes left out of a nightly budget search because no starting nightly rate is on record. 0 when the budget was not sent or was a total budget."
},
"budget_unverified_property_ids": {
"type": "array",
"maxItems": 30,
"items": {
"type": "integer"
},
"description": "The property_id of up to 30 of the homes counted in budget_unverified; each can be priced for specific dates with a live quote."
},
"distance_unknown": {
"type": "integer",
"description": "Only on a landmark or area search: otherwise matching homes left out because no position is recorded for them, so their distance is unknown. They are not confirmed to be outside the radius."
},
"completeness": {
"type": "string",
"enum": [
"complete",
"partial"
],
"description": "complete: no matching home is unpriced, and none was left out for an unknown pet policy, accommodation type, amenity data, starting rate or position. partial: at least one is, so the results may omit a home that matches."
},
"search_scope": {
"type": "object",
"description": "The place actually searched and how it was read.",
"properties": {
"place": {
"type": [
"string",
"null"
],
"description": "The place searched; null when no place was given and every home was searched."
},
"type": {
"type": "string",
"enum": [
"all_homes",
"metro",
"state",
"city",
"nearby_or_text",
"landmark",
"area"
],
"description": "metro: the metro area around the named city, within radius_miles. state: the whole state. city: homes in the named city. nearby_or_text: homes near the place or whose listing text matches it. landmark: homes within radius_miles of a named landmark, nearest first, by straight-line distance. area: the same, measured from the centre of a named area such as the South Loop."
},
"radius_miles": {
"type": "number",
"description": "How far from its centre or point homes are included; given for a metro, landmark or area."
}
},
"required": [
"place",
"type"
]
},
"offset": {
"type": "integer",
"description": "How many results precede this page in the full ordering."
},
"page_size": {
"type": "integer",
"description": "How many results this page asked for."
},
"has_more": {
"type": "boolean",
"description": "True when more results follow this page in the same ordering, within the priced sample. Homes counted in unpriced_in_time are not part of any page and have no effect on this."
},
"next_cursor": {
"type": [
"string",
"null"
],
"description": "The value to send as cursor, with every other input unchanged, to get the next page. Null when has_more is false."
},
"budget_applied": {
"type": "object",
"description": "Only returned when a budget was sent: what it was compared with.",
"properties": {
"scope": {
"type": "string",
"enum": [
"total",
"nightly"
]
},
"amount": {
"type": "number"
},
"currency": {
"type": "string"
},
"compared_to": {
"type": "string",
"enum": [
"stay_total",
"from_price_per_night"
],
"description": "stay_total includes cleaning, fees and taxes; from_price_per_night is a starting nightly rate that excludes them."
},
"includes_fees_and_taxes": {
"type": "boolean"
},
"homes_not_checked": {
"type": "integer",
"description": "Matching homes the budget could not be checked against: unpriced for a total budget, no starting rate for a nightly one."
},
"note": {
"type": "string"
}
},
"required": [
"scope",
"amount",
"currency",
"compared_to",
"includes_fees_and_taxes",
"note"
]
},
"searched_location": {
"type": [
"string",
"null"
]
},
"dates_checked": {
"type": "boolean",
"description": "False means availability is unknown and no stay has been priced; no row carries a stay_total."
},
"availability_note": {
"type": "string"
},
"properties": {
"type": "array",
"items": {
"type": "object",
"properties": {
"property_id": {
"type": "integer"
},
"name": {
"type": "string"
},
"neighbourhood": {
"type": [
"string",
"null"
],
"description": "Neighbourhood-level location only; the exact address is shared after booking."
},
"city": {
"type": "string"
},
"state": {
"type": [
"string",
"null"
]
},
"property_type": {
"type": [
"string",
"null"
]
},
"accommodation_type": {
"type": "string",
"enum": [
"entire_home",
"private_room",
"shared_room",
"unknown"
],
"description": "What the guest rents: an entire home, a private room in a shared building or a shared room. A private room or shared room is not an entire home. unknown means the type is not recorded for this home."
},
"bathroom_sharing": {
"type": "string",
"enum": [
"private",
"shared",
"unknown"
],
"description": "Whether the guest has a private bathroom or shares one. unknown means it is not recorded for this home."
},
"bedrooms": {
"type": [
"number",
"null"
]
},
"bathrooms": {
"type": [
"number",
"null"
]
},
"sleeps": {
"type": [
"integer",
"null"
]
},
"from_price_per_night": {
"type": [
"number",
"null"
],
"description": "Deprecated, no longer returned: only a row with a confirmed stay_total carries a price. Kept in this schema so existing clients still validate."
},
"from_price_note": {
"type": "string",
"description": "Deprecated, no longer returned along with from_price_per_night."
},
"stay_total": {
"type": "number",
"description": "Total for the requested dates including cleaning, fees and taxes. Only present when dates were given and the home was priced."
},
"stay_total_display": {
"type": "string"
},
"nights": {
"type": "integer"
},
"avg_per_night": {
"type": "number",
"description": "No longer returned; stay_total is the price of the stay."
},
"avg_per_night_display": {
"type": "string"
},
"top_amenities": {
"type": "array",
"items": {
"type": "string"
}
},
"review_count": {
"type": "integer",
"description": "How many 4- and 5-star reviews this home has. It is a count, not a rating; no average rating exists for any home."
},
"review_sources": {
"type": "array",
"items": {
"type": "string"
},
"description": "Which platforms those reviews came from."
},
"highlights": {
"type": "array",
"items": {
"type": "string"
},
"description": "Up to three short phrases describing what sets the home apart."
},
"photo": {
"type": [
"string",
"null"
]
},
"booking_url": {
"type": "string",
"description": "Where the guest completes the booking on Luxury Lodging's own site."
},
"match_reasons": {
"type": "array",
"items": {
"type": "string"
},
"description": "Short statements of why this home passed the filters that were sent, e.g. \"2 bedrooms (exact)\" or \"has parking\". On a landmark search the first is the distance, e.g. \"1.5 mi from McCormick Place (straight line)\" or \"under 0.5 mi from McCormick Place (straight line)\". Empty when no filter was sent."
},
"distance_miles": {
"type": "number",
"description": "Only on a landmark or area search: how far this home is from it, in miles, rounded to the nearest 0.5 (0.5 means under 0.5 mile), as a straight line over the ground, not a driving or walking route."
},
"distance_type": {
"type": "string",
"enum": [
"straight_line"
],
"description": "Only with distance_miles: how the distance was measured. straight_line is the direct distance, shorter than any route."
},
"availability_status": {
"type": "string",
"enum": [
"available",
"not_checked"
],
"description": "available: confirmed available for the requested dates when this answer was produced. not_checked: no dates were given, so availability was not checked."
},
"data_checked_at": {
"type": "string",
"description": "When this home's availability and price were fetched, ISO 8601. Only present on a row whose stay was priced."
},
"content_updated_at": {
"type": "string",
"description": "When the property manager's record of this home last changed, ISO 8601, as the provider states it. Omitted when the provider gives no such time."
},
"missing_or_unverified": {
"type": "array",
"items": {
"type": "string"
},
"description": "Facts about this home that could not be verified, drawn from: pet policy, amenities, accommodation type."
},
"similar_units": {
"type": "object",
"description": "Only present when interchangeable units of this type exist; any of these ids can be quoted and booked.",
"properties": {
"count": {
"type": "integer"
},
"note": {
"type": "string"
},
"property_ids": {
"type": "array",
"items": {
"type": "integer"
}
}
},
"required": [
"count",
"note",
"property_ids"
]
}
},
"required": [
"property_id",
"name",
"city",
"top_amenities",
"review_count",
"review_sources",
"highlights",
"booking_url",
"match_reasons",
"availability_status",
"missing_or_unverified"
]
}
}
},
"required": [
"matches",
"total_matching",
"total_matching_groups",
"unpriced_in_time",
"unpriced_property_ids",
"dates_checked",
"availability_note",
"properties",
"completeness",
"search_scope",
"has_more",
"next_cursor"
]
}🟢list_markets
Every city where Luxury Lodging has directly bookable homes, with the state or region, the country, how many homes and the largest group each can sleep. Counts are given for the city alone and for the wider area a search covers, split into whole homes and rooms. It shows whether a destination is covered, including when a guest has not named a place.
입력 스키마
{
"type": "object",
"properties": {},
"additionalProperties": false
}출력 스키마
{
"type": "object",
"properties": {
"markets_count": {
"type": "integer"
},
"homes_count": {
"type": "integer"
},
"markets": {
"type": "array",
"items": {
"type": "object",
"properties": {
"city": {
"type": "string"
},
"state": {
"type": [
"string",
"null"
],
"description": "State, province or region as the provider files it."
},
"country": {
"type": [
"string",
"null"
],
"description": "Not every destination is in the United States; two cities can share a name across countries."
},
"homes": {
"type": "integer"
},
"sleeps_max": {
"type": "integer",
"description": "The largest group any single home in this market sleeps."
},
"collection_url": {
"type": "string",
"description": "The public page for this market, when it has enough homes to have one. It lists the homes and their neighbourhoods."
},
"homes_in_area": {
"type": "integer",
"description": "Stays a search for this market returns before dates, including nearby cities (Chicago: 65 miles around the city). At least homes."
},
"area_name": {
"type": "string"
},
"counts": {
"type": "object",
"description": "The same stays split into whole homes and rooms, for the city alone and for the area. homes includes unknown_type; a room is not a whole home.",
"properties": {
"city": {
"type": "object",
"properties": {
"total": {
"type": "integer"
},
"homes": {
"type": "integer",
"description": "Entire homes, plus homes whose type is not recorded (unknown_type)."
},
"private_rooms": {
"type": "integer"
},
"shared_rooms": {
"type": "integer"
},
"unknown_type": {
"type": "integer",
"description": "Counted inside homes: nothing on record says whether these are whole homes."
}
},
"required": [
"total",
"homes",
"private_rooms",
"shared_rooms",
"unknown_type"
]
},
"area": {
"type": "object",
"properties": {
"total": {
"type": "integer"
},
"homes": {
"type": "integer",
"description": "Entire homes, plus homes whose type is not recorded (unknown_type)."
},
"private_rooms": {
"type": "integer"
},
"shared_rooms": {
"type": "integer"
},
"unknown_type": {
"type": "integer",
"description": "Counted inside homes: nothing on record says whether these are whole homes."
}
},
"required": [
"total",
"homes",
"private_rooms",
"shared_rooms",
"unknown_type"
]
}
}
},
"summary": {
"type": "string",
"description": "The counts as a guest reads them, e.g. \"41 stays in Chicago · 47 in the Chicago area, including 13 private rooms\"."
}
},
"required": [
"city",
"homes",
"sleeps_max"
]
}
},
"note": {
"type": "string"
}
},
"required": [
"markets_count",
"homes_count",
"markets",
"note"
]
}🟢get_property_details(property_id)
Full detail for one property: bedrooms, capacity, amenities recorded by the property manager, photos, house rules and the real check-in, check-out, deposit and pet policies for that specific home. Location is given at neighbourhood level; the exact address is shared after booking. Guest reviews are a selection of 4- and 5-star reviews, each with its source; no average rating exists. `accommodation_type` and `bathroom_sharing` say whether the guest rents an entire home or a room: a private room or shared room is not an entire home.
입력 스키마
{
"type": "object",
"properties": {
"property_id": {
"type": "string",
"description": "Property id or the slug from a booking link."
}
},
"required": [
"property_id"
],
"additionalProperties": false
}출력 스키마
{
"type": "object",
"properties": {
"property_id": {
"type": "integer"
},
"name": {
"type": "string"
},
"alias": {
"type": [
"string",
"null"
]
},
"property_type": {
"type": [
"string",
"null"
]
},
"accommodation_type": {
"type": "string",
"enum": [
"entire_home",
"private_room",
"shared_room",
"unknown"
],
"description": "What the guest rents: an entire home, a private room in a shared building or a shared room. A private room or shared room is not an entire home. unknown means the type is not recorded for this home."
},
"bathroom_sharing": {
"type": "string",
"enum": [
"private",
"shared",
"unknown"
],
"description": "Whether the guest has a private bathroom or shares one. unknown means it is not recorded for this home."
},
"location": {
"type": "object",
"properties": {
"neighbourhood": {
"type": [
"string",
"null"
],
"description": "Neighbourhood-level location only; the exact address is shared after booking."
},
"city": {
"type": "string"
},
"state": {
"type": [
"string",
"null"
]
},
"country": {
"type": [
"string",
"null"
],
"description": "Null when the provider gave none; the country is then unknown."
}
},
"required": [
"city",
"country"
]
},
"bedrooms": {
"type": [
"number",
"null"
]
},
"bathrooms": {
"type": [
"number",
"null"
]
},
"beds": {
"type": [
"number",
"null"
]
},
"sleeps": {
"type": [
"integer",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"amenities": {
"type": "array",
"items": {
"type": "string"
}
},
"amenities_source": {
"type": "string",
"enum": [
"provider",
"unavailable"
]
},
"photos": {
"type": "array",
"items": {
"type": "string"
}
},
"policies": {
"type": "object",
"description": "This home's own policies, not portfolio defaults, when policies_source is \"provider\".",
"properties": {
"check_in_from": {
"type": "string"
},
"check_in_until": {
"type": [
"string",
"null"
]
},
"check_out_by": {
"type": "string"
},
"cancellation": {
"type": "string"
},
"security_deposit_hold": {
"type": "number",
"description": "A refundable hold, not part of the total charged at booking."
},
"pets_allowed": {
"type": "boolean",
"description": "Omitted when pet policy could not be verified."
},
"pet_policy_note": {
"type": "string"
},
"pet_fee": {
"type": [
"number",
"null"
],
"description": "The fee for one pet, from the fee table the quote charges from; with several pets a live quote charges it as pet_fee_basis says (per pet, per pet per night) and states the total in price_breakdown.pet_fee. Null when the home charges none; omitted when it could not be verified, and pet_fee_note says why."
},
"pet_fee_basis": {
"type": "string",
"enum": [
"per stay",
"per night",
"per pet",
"per pet per night"
],
"description": "How pet_fee applies. Per night multiplies by the nights; per pet by the number of pets; per pet per night by both."
},
"pet_fee_note": {
"type": "string"
},
"quiet_hours": {
"type": [
"object",
"null"
],
"properties": {
"from": {
"type": "string"
},
"to": {
"type": "string"
}
},
"required": [
"from",
"to"
]
},
"minimum_nights": {
"type": [
"number",
"null"
]
},
"policies_source": {
"type": "string",
"enum": [
"provider",
"portfolio-default"
]
}
},
"required": [
"check_in_from",
"check_out_by",
"cancellation",
"security_deposit_hold",
"policies_source"
]
},
"house_rules": {
"type": "array",
"items": {
"type": "string"
}
},
"guest_reviews": {
"type": "object",
"description": "A selection of 4- and 5-star reviews, not a summary of every review. No overall or average rating is implied or available.",
"properties": {
"selection": {
"type": "string"
},
"reviews": {
"type": "array",
"items": {
"type": "object",
"properties": {
"source": {
"type": "string",
"description": "The platform the review was left on."
},
"stars": {
"type": [
"number",
"null"
]
},
"text": {
"type": [
"string",
"null"
]
},
"published": {
"type": [
"string",
"null"
]
}
},
"required": [
"source"
]
}
}
},
"required": [
"selection",
"reviews"
]
},
"common_questions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"question": {
"type": "string"
},
"answer": {
"type": "string"
}
},
"required": [
"question",
"answer"
]
}
},
"booking_url": {
"type": "string"
},
"support_email": {
"type": "string"
}
},
"required": [
"property_id",
"name",
"location",
"amenities",
"amenities_source",
"photos",
"policies",
"house_rules",
"guest_reviews",
"booking_url",
"support_email"
]
}🟢get_availability(property_id, start_date, end_date)
Open and blocked nights for one property over a date range of up to 93 days, with its minimum stay. It shows which alternative dates are open; it does not price or confirm a stay.
입력 스키마
{
"type": "object",
"properties": {
"property_id": {
"type": "string",
"description": "Property id or slug."
},
"start_date": {
"type": "string",
"description": "First date to check, YYYY-MM-DD."
},
"end_date": {
"type": "string",
"description": "Last date to check, YYYY-MM-DD. At most 93 days after start_date."
}
},
"required": [
"property_id",
"start_date",
"end_date"
],
"additionalProperties": false
}출력 스키마
{
"type": "object",
"properties": {
"property_id": {
"type": "integer"
},
"start_date": {
"type": "string"
},
"end_date": {
"type": "string"
},
"nights_open": {
"type": "integer"
},
"nights_blocked": {
"type": "integer"
},
"open_dates": {
"type": "array",
"items": {
"type": "string"
},
"description": "YYYY-MM-DD nights that are open. They still have to satisfy minimum stay and arrival rules."
},
"blocked_dates": {
"type": "array",
"items": {
"type": "string"
}
},
"minimum_nights": {
"type": [
"number",
"null"
]
},
"note": {
"type": "string"
}
},
"required": [
"property_id",
"start_date",
"end_date",
"nights_open",
"nights_blocked",
"open_dates",
"blocked_dates",
"note"
]
}🟢get_live_quote(property_id, check_in, check_out, guests, pets)
Live price for one property and one stay. stay_total includes cleaning, fees and taxes; nightly rates exclude them. Also returns the refundable deposit hold, which is separate from the total, the payment schedule, and that home's own cancellation and check-in terms. The top-level totals and cancellation are the non-refundable rate; rate_options lists every rate on offer with its own terms, total and booking_url, including a refundable rate with its free-cancellation deadline when check-in is more than 30 days away (a cancellation by then refunds everything paid except the 3.5% card processing fee). Returns a booking_url the guest opens to complete the booking and accept the rental terms on Luxury Lodging's own site; this tool does not book or take payment. Amounts ending in _minor are integer cents in `currency`.
입력 스키마
{
"type": "object",
"properties": {
"property_id": {
"type": "string",
"description": "Property id or slug."
},
"check_in": {
"type": "string",
"description": "Check-in date, YYYY-MM-DD."
},
"check_out": {
"type": "string",
"description": "Check-out date, YYYY-MM-DD."
},
"guests": {
"type": "integer",
"minimum": 1,
"maximum": 50,
"description": "Everyone staying, including children and infants."
},
"pets": {
"type": [
"integer",
"boolean"
],
"minimum": 0,
"maximum": 4,
"description": "How many pets the guest is bringing, 0 to 4; 0 or leave out for none. true means one pet and false none. This changes the price: some homes charge per pet or per pet per night."
}
},
"required": [
"property_id",
"check_in",
"check_out"
],
"additionalProperties": false
}출력 스키마
{
"type": "object",
"properties": {
"property_id": {
"type": "integer"
},
"name": {
"type": "string"
},
"available": {
"type": "boolean"
},
"reason": {
"type": "string",
"description": "Why the stay cannot be booked. Only present when available is false."
},
"check_in": {
"type": "string"
},
"check_out": {
"type": "string"
},
"nights": {
"type": [
"integer",
"null"
]
},
"guests": {
"type": "integer"
},
"pets": {
"type": "integer",
"minimum": 0,
"maximum": 4,
"description": "How many pets this quote is for. pet_fee in price_breakdown is the fee for that many."
},
"currency": {
"type": "string"
},
"stay_total": {
"type": [
"number",
"null"
],
"description": "The price of the stay, including cleaning, fees and taxes. Nightly rates exclude them."
},
"total_due_now": {
"type": [
"number",
"null"
],
"description": "What the guest pays at booking: the whole stay_total, or 50% of it when check-in is more than 60 days away; payment_schedule says which."
},
"total_display": {
"type": "string",
"description": "stay_total, formatted."
},
"payment_schedule": {
"type": "object",
"description": "When the guest pays. plan 'deposit': due_at_booking now and the balance charged automatically to the same card on balance_charged_on (60 days before check-in). plan 'full': everything at booking.",
"properties": {
"plan": {
"type": "string",
"enum": [
"full",
"deposit"
]
},
"due_at_booking": {
"type": "number"
},
"balance": {
"type": "number"
},
"balance_charged_on": {
"type": "string"
}
}
},
"price_breakdown": {
"type": [
"object",
"null"
],
"properties": {
"nightly_subtotal": {
"type": [
"number",
"null"
]
},
"cleaning_fee": {
"type": [
"number",
"null"
]
},
"pet_fee": {
"type": [
"number",
"null"
]
},
"extra_guest_fee": {
"type": [
"number",
"null"
]
},
"other_fees": {
"type": [
"number",
"null"
]
},
"refundable_rate_premium": {
"type": [
"number",
"null"
],
"description": "The 8% of the nightly subtotal the refundable rate adds; 0 on the non-refundable rate."
},
"taxes": {
"type": [
"number",
"null"
],
"description": "Lodging tax. It is collected on every stay and included in the total."
},
"card_processing_fee": {
"type": [
"number",
"null"
]
},
"discount": {
"type": [
"number",
"null"
]
},
"total": {
"type": [
"number",
"null"
]
}
}
},
"security_deposit_hold": {
"type": [
"number",
"null"
],
"description": "A refundable hold, not part of stay_total."
},
"check_in_from": {
"type": "string"
},
"check_out_by": {
"type": "string"
},
"cancellation": {
"type": "string",
"description": "This home's own cancellation terms for the non-refundable rate, which stay_total prices. Each entry in rate_options carries its own terms, and those are the only refund terms that apply to that rate."
},
"rate_options": {
"type": "array",
"description": "Every rate on offer for this stay. The first is the non-refundable rate (the same totals as the top level). When check-in is more than 30 days away a refundable rate follows: 8% more on the nightly subtotal, taxed as rent, cancellable until free_cancel_until; on a cancellation by then the 3.5% card processing fee is non-refundable and everything else paid is refunded in full. Each rate has its own booking_url.",
"items": {
"type": "object",
"properties": {
"plan": {
"type": "string",
"enum": [
"non_refundable",
"refundable"
]
},
"refundable": {
"type": "boolean",
"description": "True when this rate can be cancelled for a refund until free_cancel_until; false when a confirmed reservation cannot be cancelled for a refund."
},
"free_cancel_until": {
"type": "string",
"description": "Refundable rate only. The last instant, in UTC, the stay can be cancelled for a refund of everything paid except the 3.5% card processing fee."
},
"stay_total": {
"type": "number"
},
"total_due_now": {
"type": "number"
},
"payment_schedule": {
"type": "object"
},
"price_breakdown": {
"type": "object"
},
"cancellation": {
"type": "string",
"description": "This rate's terms."
},
"booking_url": {
"type": "string"
}
},
"required": [
"plan",
"refundable",
"stay_total",
"total_due_now",
"cancellation",
"booking_url"
]
}
},
"minimum_nights": {
"type": [
"number",
"null"
]
},
"maximum_nights": {
"type": [
"number",
"null"
]
},
"quoted_at": {
"type": "string"
},
"quote_expires_at": {
"type": "string",
"description": "When this quote lapses. After it, the price of the stay can differ from stay_total until it is quoted again."
},
"booking_url": {
"type": "string"
},
"quote": {
"type": "object",
"description": "The authoritative, machine-readable quote for this stay, for the rate stay_total prices (the non-refundable rate). Amounts ending in _minor are integer cents in `currency`. total_stay_price_minor is exactly what the guest is charged in total, including taxes and the card processing fee, and the amounts add up: total_stay_price_minor = nightly_subtotal_minor + mandatory_fees_minor + optional_fees_minor + taxes_minor + card_fee_minor - discounts_minor. When available is false only availability_status, inventory_held, checked_at, canonical_url, incomplete and missing are present. The itemised _minor amounts are null only when missing includes price_breakdown.",
"properties": {
"quote_id": {
"type": "string",
"description": "Stable id for this priced stay: the same home, dates, guests, pets, rate and total give the same id; any change gives a new one. Not a hold or a reservation."
},
"currency": {
"type": "string",
"description": "ISO 4217 code, e.g. USD."
},
"timezone": {
"type": [
"string",
"null"
],
"description": "IANA zone of the home: the provider's own zone when it states one, otherwise the zone of the home's US state (timezone_source says which). Null when unknown."
},
"timezone_source": {
"type": "string",
"enum": [
"listing",
"market",
"unknown"
]
},
"nights": {
"type": [
"integer",
"null"
]
},
"nightly_subtotal_minor": {
"type": [
"integer",
"null"
],
"minimum": 0,
"description": "Rent for the nights before any discount, plus the refundable-rate premium when that rate is quoted."
},
"mandatory_fees_minor": {
"type": [
"integer",
"null"
],
"minimum": 0,
"description": "Cleaning and every other required fee."
},
"optional_fees_minor": {
"type": [
"integer",
"null"
],
"minimum": 0,
"description": "Fees the guest chose, the pet fee for the pets in this quote."
},
"taxes_minor": {
"type": [
"integer",
"null"
],
"minimum": 0,
"description": "Lodging tax."
},
"card_fee_minor": {
"type": [
"integer",
"null"
],
"minimum": 0,
"description": "The 3.5% card processing fee, added at checkout and included in the total. It is non-refundable when a refundable-rate stay is cancelled."
},
"discounts_minor": {
"type": [
"integer",
"null"
],
"minimum": 0,
"description": "A positive amount subtracted from the total; 0 when there is none."
},
"total_stay_price_minor": {
"type": "integer",
"minimum": 0,
"description": "The whole price of the stay, equal to stay_total in cents."
},
"due_now_minor": {
"type": "integer",
"minimum": 0,
"description": "Charged when the guest books: 50% of the total when check-in is more than 60 days away, otherwise all of it."
},
"due_later_minor": {
"type": "integer",
"minimum": 0,
"description": "The rest, charged automatically to the same card 60 days before check-in; 0 when everything is due now."
},
"refundable_security_hold_minor": {
"type": "integer",
"minimum": 0,
"description": "A refundable hold on the card on file, separate from the total. The home's own amount, or the standard hold when it states none."
},
"taxes_included": {
"type": "boolean",
"description": "True: the total includes lodging tax, which is collected on every stay."
},
"tax_source": {
"type": "string",
"enum": [
"provider",
"jurisdiction_table"
],
"description": "Where the tax comes from: the provider's own quote, or our verified rate table for the home's jurisdiction when the provider's quote had none. Either way the tax is collected and in the total."
},
"availability_status": {
"type": "string",
"enum": [
"available",
"unavailable"
]
},
"inventory_held": {
"type": "boolean",
"description": "False: a quote does not hold the home."
},
"checked_at": {
"type": "string",
"description": "When this quote was fetched, ISO 8601."
},
"expires_at": {
"type": "string",
"description": "When the quote lapses, ISO 8601; the same instant as quote_expires_at."
},
"cancellation_policy_id": {
"type": "string",
"enum": [
"non_refundable",
"refundable"
],
"description": "The rate this quote prices; rate_options lists both."
},
"cancellation_summary": {
"type": "string"
},
"refundable": {
"type": "boolean",
"description": "True when the rate this quote prices can be cancelled for a refund until its free-cancellation deadline; false for the non-refundable rate."
},
"canonical_url": {
"type": "string",
"description": "The home's property page, not the booking link."
},
"charges": {
"type": "array",
"description": "Every charge, itemised. The amounts of the rows with paid_at checkout add up to total_stay_price_minor exactly; a discount row is negative.",
"items": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"nightly",
"fee",
"tax",
"discount",
"card_fee",
"security_hold",
"adjustment"
]
},
"name": {
"type": "string"
},
"amount_minor": {
"type": "integer"
},
"paid_at": {
"type": "string",
"enum": [
"checkout",
"outside_checkout"
],
"description": "checkout: part of the total. outside_checkout: not part of it (the security hold)."
}
},
"required": [
"type",
"name",
"amount_minor",
"paid_at"
]
}
},
"incomplete": {
"type": "boolean",
"description": "True when a required input or tax could not be determined; missing says which."
},
"missing": {
"type": "array",
"items": {
"type": "string"
},
"description": "rent_tax_rate: the provider's fee table could not be read, so the refundable rate cannot be priced. price_breakdown: the provider sent only a total. line_items_mismatch: the itemised charges add up to more than the total."
}
},
"required": [
"availability_status",
"inventory_held",
"checked_at",
"canonical_url",
"incomplete",
"missing"
]
},
"note": {
"type": "string"
}
},
"required": [
"property_id",
"available",
"booking_url"
],
"description": "A live total for one stay. When available is false only property_id, available, reason, booking_url and a short quote block are present."
}🟢compare_properties(property_ids, check_in, check_out, guests, pets)
Compares 2 to 5 homes in one call: size, the amenities guests choose by, review counts, each home's own check-in time, deposit and pet policy, and with dates, availability and the stay total for each, for a guest deciding between specific homes. Each home carries `accommodation_type` and `bathroom_sharing`: a private room or shared room is not an entire home. Without dates no price is returned.
입력 스키마
{
"type": "object",
"properties": {
"property_ids": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 2,
"maxItems": 5,
"description": "Property ids or slugs from search results or booking links."
},
"check_in": {
"type": "string",
"description": "Check-in date, YYYY-MM-DD. Totals are returned only when both dates are given."
},
"check_out": {
"type": "string",
"description": "Check-out date, YYYY-MM-DD."
},
"guests": {
"type": "integer",
"minimum": 1,
"maximum": 50,
"description": "Everyone staying, including children and infants."
},
"pets": {
"type": [
"integer",
"boolean"
],
"minimum": 0,
"maximum": 4,
"description": "How many pets the guest is bringing, 0 to 4; 0 or leave out for none. true means one pet and false none. Totals include the pet fee for that many pets."
}
},
"required": [
"property_ids"
],
"additionalProperties": false
}출력 스키마
{
"type": "object",
"properties": {
"compared": {
"type": "integer"
},
"dates_checked": {
"type": "boolean"
},
"homes": {
"type": "array",
"items": {
"type": "object",
"properties": {
"property_id": {
"type": "integer"
},
"name": {
"type": "string"
},
"neighbourhood": {
"type": [
"string",
"null"
],
"description": "Neighbourhood-level location only; the exact address is shared after booking."
},
"city": {
"type": "string"
},
"state": {
"type": [
"string",
"null"
]
},
"accommodation_type": {
"type": "string",
"enum": [
"entire_home",
"private_room",
"shared_room",
"unknown"
],
"description": "What the guest rents: an entire home, a private room in a shared building or a shared room. A private room or shared room is not an entire home. unknown means the type is not recorded for this home."
},
"bathroom_sharing": {
"type": "string",
"enum": [
"private",
"shared",
"unknown"
],
"description": "Whether the guest has a private bathroom or shares one. unknown means it is not recorded for this home."
},
"sleeps": {
"type": [
"integer",
"null"
]
},
"bedrooms": {
"type": [
"number",
"null"
]
},
"bathrooms": {
"type": [
"number",
"null"
]
},
"top_amenities": {
"type": "array",
"items": {
"type": "string"
}
},
"review_count": {
"type": "integer",
"description": "How many 4- and 5-star reviews this home has. It is a count, not a rating; no average rating exists for any home."
},
"review_sources": {
"type": "array",
"items": {
"type": "string"
},
"description": "Which platforms those reviews came from."
},
"highlights": {
"type": "array",
"items": {
"type": "string"
},
"description": "Up to three short phrases describing what sets the home apart."
},
"check_in_from": {
"type": "string"
},
"check_out_by": {
"type": "string"
},
"security_deposit_hold": {
"type": [
"number",
"null"
]
},
"pets_allowed": {
"type": "boolean",
"description": "Omitted when pet policy could not be verified."
},
"pet_policy_note": {
"type": "string"
},
"pet_fee": {
"type": [
"number",
"null"
],
"description": "The fee for one pet, from the fee table the quote charges from; with several pets a live quote charges it as pet_fee_basis says (per pet, per pet per night) and states the total in price_breakdown.pet_fee. Null when the home charges none; omitted when it could not be verified, and pet_fee_note says why."
},
"pet_fee_basis": {
"type": "string",
"enum": [
"per stay",
"per night",
"per pet",
"per pet per night"
]
},
"pet_fee_note": {
"type": "string"
},
"from_price_per_night": {
"type": [
"number",
"null"
],
"description": "Deprecated, no longer returned: only a row with a confirmed stay_total carries a price. Kept in this schema so existing clients still validate."
},
"from_price_note": {
"type": "string",
"description": "Deprecated, no longer returned along with from_price_per_night."
},
"available": {
"type": "boolean",
"description": "Only present when dates were given. A reason of not_checked means this home's availability could not be read, not that it is booked."
},
"reason": {
"type": "string"
},
"stay_total": {
"type": "number"
},
"stay_total_display": {
"type": "string"
},
"nights": {
"type": [
"integer",
"null"
]
},
"avg_per_night": {
"type": "number",
"description": "No longer returned; stay_total is the price of the stay."
},
"details_available": {
"type": "boolean",
"description": "Only present, and only false, when this home's record could not be loaded. Such a row carries no name, place, amenity or review fields at all; detail_note says why."
},
"detail_note": {
"type": "string"
},
"booking_url": {
"type": "string"
}
},
"required": [
"property_id",
"booking_url"
]
}
},
"note": {
"type": "string"
}
},
"required": [
"compared",
"dates_checked",
"homes",
"note"
]
}🟢get_booking_link(property_id, check_in, check_out, guests, pets, ...)
A link to Luxury Lodging's own site that opens checkout for one home, dates, party size and rate, for the same stay, rate and attribution as a live quote's booking_url, carrying a freshly signed quote token. It checks the stay the way a live quote does: valid dates, the home's guest limit and its pet policy, and it re-prices the stay to sign the link without returning the total. Opening the link does not reserve the home, hold dates or take payment; the guest completes checkout on EscapeStays. When the guest has dates and wants to book, call get_booking_link and give the guest that URL. Never return a nightly rate as the price; quote all-in totals only. Never return an exact street address.
입력 스키마
{
"type": "object",
"properties": {
"property_id": {
"type": "string",
"description": "Property id or slug."
},
"check_in": {
"type": "string",
"description": "Check-in date, YYYY-MM-DD."
},
"check_out": {
"type": "string",
"description": "Check-out date, YYYY-MM-DD."
},
"guests": {
"type": "integer",
"minimum": 1,
"maximum": 50,
"description": "Everyone staying, including children and infants. The link opens on this party size."
},
"pets": {
"type": [
"integer",
"boolean"
],
"minimum": 0,
"maximum": 4,
"description": "How many pets the guest is bringing, 0 to 4; 0 or leave out for none. true means one pet and false none. The link keeps the number of pets, and the stay is refused when the home does not allow them."
},
"rate": {
"type": "string",
"enum": [
"refundable",
"non_refundable"
],
"description": "Which rate the link opens on. Defaults to non_refundable, the rate a live quote's booking_url opens on. refundable is offered only while check-in is more than 30 days away."
},
"quote_id": {
"type": "string",
"maxLength": 64,
"description": "The quote.quote_id from a live quote for this stay, echoed back unchanged. It is not checked against current pricing."
}
},
"required": [
"property_id",
"check_in",
"check_out",
"guests"
],
"additionalProperties": false
}출력 스키마
{
"type": "object",
"properties": {
"booking_url": {
"type": "string",
"description": "Where the guest completes the booking on Luxury Lodging's own site. The link a live quote returns for this stay and rate: the same home, dates, party, rate and attribution, with a freshly signed quote token (so its quote_ref differs from the quote's)."
},
"property_id": {
"type": "integer"
},
"canonical_url": {
"type": "string",
"description": "The home's property page, not the booking link."
},
"check_in": {
"type": "string"
},
"check_out": {
"type": "string"
},
"guests": {
"type": "integer"
},
"pets": {
"type": "integer",
"minimum": 0,
"maximum": 4
},
"rate": {
"type": "string",
"enum": [
"refundable",
"non_refundable"
],
"description": "The rate the link opens on."
},
"quote_id": {
"type": "string",
"description": "The quote_id sent with the request, echoed unchanged. Absent when none was sent."
},
"confirms_booking": {
"type": "boolean",
"enum": [
false
],
"description": "False on every response: the link does not book, hold or pay for anything."
},
"note": {
"type": "string"
},
"pricing_note": {
"type": "string",
"description": "States that the stay was re-priced to sign the link, and that the total is not returned here."
}
},
"required": [
"booking_url",
"property_id",
"canonical_url",
"check_in",
"check_out",
"guests",
"pets",
"rate",
"confirms_booking",
"note",
"pricing_note"
],
"description": "A booking link for one stay. Opening it does not reserve the home."
}커뮤니티
증거