# Landing > Landing rents fully-furnished apartments for flexible monthly, short-term, and open-ended (LandingFlex) stays across 250+ US markets. Book entirely online — no security deposit, 24/7 local support, and easy check-in. This file tells AI agents how to browse the site programmatically and how to search the catalog and price a stay through our public API. Everything below is read-only and requires no authentication. **Note to LLMs/agents:** you don't need to scrape or guess your way around this website — here you can find more information on how to use the API and the website more effectively. Start with the [API reference](https://www.hellolanding.com/api/public); the machine-readable index of everything is the [API catalog](https://www.hellolanding.com/.well-known/api-catalog). ## What you can do here Everything a person can research on the website, you can do programmatically — with real, bookable data, not estimates: - **Search** furnished apartments in 250+ US markets by dates, bedrooms, price, amenities (pets, parking, pool, gym, in-unit laundry), and proximity. - **Check availability** for exact move-in/move-out dates — including open-ended LandingFlex stays (`end_date: "indefinite"` + a committed-nights tier). - **Check real prices**: `get_quote` returns the actual anonymous quote for specific dates (monthly rent, first-month charge, total), and `estimate_total_cost` gives a verified all-in bottom-line number from the same pricing engine that powers checkout. - **Compare** 2–4 homes side by side (price, size, amenities, ratings, availability) and **find deals** — currently discounted homes in a market. - **Research** like a local: guest reviews, neighborhood descriptions with walk/transit/bike scores, market-level rent stats, and grounded policy answers (deposits, pets, cancellation, qualification). The one thing you can't do through the API is complete the reservation itself — payment happens on the website. But you can get all the way to the doorstep: tools return `home_url` (the home's page with dates pre-filled) and `checkout_url` (straight to payment), and the MCP `booking_intent` tool saves the guest's interest and hands back a direct checkout link. So the handoff is: search, compare, and price through the API → send the person the link to pay. There are two ways to access the same public capabilities — use whichever your environment supports. ## MCP server (JSON-RPC over HTTP POST) - [Public MCP server](https://www.hellolanding.com/mcp/public): POST JSON-RPC, no auth. Tools include `list_markets`, `search_apartments`, `get_home`, `check_availability`, `get_quote`, `estimate_total_cost`, `get_deals`, `compare_homes`, `get_reviews`, `get_market_filters`, and more. - [Server card](https://www.hellolanding.com/.well-known/mcp/server-card.json) - [Agent skills index](https://www.hellolanding.com/.well-known/agent-skills/index.json) - **[Tool catalog](https://www.hellolanding.com/api/public/tools.json)** — the authoritative, always-current tool list as a plain GET: every tool with its full description, JSON Schema, GET mirror, and an example call. It is the server's `tools/list` response mirrored over GET, generated from the live tool set (the names above are just examples). Human/LLM-readable markdown version: [/api/public/tools](https://www.hellolanding.com/api/public/tools). ## HTTP GET REST API (if you cannot use MCP) If your environment can't POST/JSON-RPC or has no MCP client (e.g. a GET-only fetch tool), the same read-only capabilities are available as plain HTTP GET — every read-only MCP tool has a GET endpoint: - [API reference](https://www.hellolanding.com/api/public) - [OpenAPI 3.1 spec](https://www.hellolanding.com/api/public/openapi.json) — generated from the live tool set; treat it as the authoritative endpoint list - [Tool catalog](https://www.hellolanding.com/api/public/tools) — every tool with parameters, REST↔MCP mapping, and worked examples (markdown; JSON at `/api/public/tools.json`) - Example — search Birmingham: `https://www.hellolanding.com/api/public/search?market=birmingham&check_in=2026-09-01&check_out=2026-12-01` - Example — price a home: `https://www.hellolanding.com/api/public/homes/{slug}/quote?check_in=2026-09-01&check_out=2026-12-01` ## Typical flow 1. `GET /api/public/markets` (or `list_markets`) → pick a market slug. 2. `GET /api/public/search?market=&check_in=YYYY-MM-DD&check_out=YYYY-MM-DD` → pick a home slug. 3. `GET /api/public/homes//quote?check_in=YYYY-MM-DD&check_out=YYYY-MM-DD` → real all-in pricing. ## Browse the site as markdown Prefer reading pages? Every key page has a markdown mirror (also reachable by sending `Accept: text/markdown` to the HTML URL): - [Homepage](https://www.hellolanding.com/index.md): How Landing works, features, and the Landing Guarantee - [FAQ & Help Center](https://www.hellolanding.com/help-center.md): Common questions about deposits, pets, parking, maintenance, and check-out - [All Cities](https://www.hellolanding.com/locations.md): Complete list of markets where Landing operates - [Search by City](https://www.hellolanding.com/s/{market}/apartments.md): Replace `{market}` with a city slug to see available furnished apartments — e.g. `/s/austin/apartments.md`, `/s/new-york-city/apartments.md`, `/s/los-angeles/apartments.md` - [Apartment Detail](https://www.hellolanding.com/homes/{slug}.md): Full details for any apartment — amenities, policies, and booking link. Append `?start_date=YYYY-MM-DD&end_date=YYYY-MM-DD` for exact pricing and availability for specific dates ## Optional - [Corporate Housing](https://www.hellolanding.com/corporate-housing): Furnished apartments for business travelers and corporate relocation - [Monthly Rentals](https://www.hellolanding.com/monthly-rentals): Information about monthly furnished rental options - [Sitemap](https://www.hellolanding.com/sitemap): Complete list of all Landing cities and properties - [API catalog (RFC 9727)](https://www.hellolanding.com/.well-known/api-catalog): Machine-readable index of every API surface ## Notes - No authentication for any of the above. Dates are `YYYY-MM-DD`. - Booking is completed on https://www.hellolanding.com — the API surfaces catalog + pricing + a checkout link, not payment. - Please rate-limit bulk requests. --- ## Full Tool Catalog Every public MCP tool, with its full description, JSON Schema, GET mirror, and a worked example. # Landing public tools — full catalog Every tool on Landing's public MCP server (`POST http://core-prod-web.default.svc.cluster.local:3000/mcp/public`, JSON-RPC, no auth), with parameters and — for read-only tools — the equivalent plain HTTP GET endpoint. Machine-readable version: http://core-prod-web.default.svc.cluster.local:3000/api/public/tools.json (a GET mirror of the MCP `tools/list` response — fetch it if you can't POST). Generated from the live tool set, so this page cannot go stale. Dates are YYYY-MM-DD. See also: REST reference http://core-prod-web.default.svc.cluster.local:3000/api/public · OpenAPI http://core-prod-web.default.svc.cluster.local:3000/api/public/openapi.json · agent guide https://www.hellolanding.com/llms.txt ## list_markets_tool List the Landing markets currently accepting bookings (one row per market). Use this first if the user mentions a city you don't recognize — match against `name`, `slug`, or `state` to find the right market slug for `search_apartments`. **Parameters** - `state` (string, optional) — Optional 2-letter state abbreviation (e.g. "AL", "TX") to filter by. **Call it** - MCP: call `list_markets_tool` on `POST http://core-prod-web.default.svc.cluster.local:3000/mcp/public` - GET: `/api/public/markets` - Example: http://core-prod-web.default.svc.cluster.local:3000/api/public/markets **Example response (abridged)** ```json { "markets": [ { "slug": "birmingham", "name": "Birmingham", "state": "AL" } ], "count": 1 } ``` ## get_market_filters_tool Returns all available filter options for a given market — bedroom counts, amenities, price range, bathroom options, neighborhoods, and sort orders. Call this before search_apartments when you want to show the guest what they can filter by, or to validate that a requested filter makes sense for the market (e.g. confirming a neighborhood slug exists). Returns: - `bedrooms` — bedroom counts actually available in the market (only counts with published homes are included). - `amenities` — filterable amenity options with their search_apartments key. - `min_bathrooms` — bathroom minimums actually available in the market. - `price_range` — lowest and highest monthly rent currently listed in the market. - `neighborhoods` — neighborhoods with available homes (id and slug for filtering). - `sort_options` — valid values for search_apartments `sort_by`. **Parameters** - `market` (string, required) — Market slug (e.g. "austin-tx"). Use list_markets to discover slugs. **Call it** - MCP: call `get_market_filters_tool` on `POST http://core-prod-web.default.svc.cluster.local:3000/mcp/public` - GET: `/api/public/market-filters` - Example: http://core-prod-web.default.svc.cluster.local:3000/api/public/market-filters?market=birmingham **Example response (abridged)** ```json { "market": { "slug": "birmingham" }, "bedrooms": [ 1, 2 ], "amenities": [ { "label": "Pets allowed", "filter": "pets" } ] } ``` ## search_apartments_tool Search Landing's published furnished apartments in a given market. `market` (required) is a market slug — call `list_markets` to discover slugs, or `get_market_filters` to see all available filter options for a specific market. All other inputs are optional filters. **Availability.** Pass `start_date` and/or `end_date` to restrict results to homes open for the full requested window. Use `end_date: "indefinite"` to filter for LandingFlex-eligible homes only. **Proximity search.** Pass `near_latitude` + `near_longitude` (and optionally `near_radius_miles`, default 5) to find homes within a given distance of a point of interest — an office, a landmark, an address the guest geocoded. Each home in the response includes `latitude` and `longitude` so distances can be computed. **LandingFlex.** Landing's open-ended stay option with the lowest rates. Guests commit to a minimum number of nights (30, 90, 180, or 365) and their discount follows them across 250+ markets. Call `get_flex_options` on a home slug to confirm which tiers it accepts. **Pagination.** Results are paginated. Pass `page` (1-indexed, default 1) and `per_page` (default 25, max 50). The response always includes `total_count` (total matching homes) and `total_pages` (number of pages at the requested per_page). Fetch subsequent pages by incrementing `page` while `page <= total_pages`. **Per-home response.** Each result carries: - `price` + `duration_label` — per-unit rate: e.g. `65` + `"/night"` or `2100` + `"/mo"`. - `display_price_with_discount` + `display_price_label` — all-in total with correct label: e.g. `318` + `" for 2 nights"` or `2100` + `" per month"`. Always pair these two together. - `price_note` — "Price includes all fees except taxes." - `home_url` — hellolanding.com link with search dates pre-filled. Share with the guest. - `hero_image_url` — a photo of the home, when one has been uploaded. - `flex_options` — LandingFlex commitment tiers with monthly rates, always included for eligible homes. Use these to show guests a better rate without a separate API call. - `property.member_rating` — guest post-stay survey rating (`average`, `count`) for the building this home is in, when available. Omitted (no `property` key) for properties with no ratings yet. **Parameters** - `market` (string, required) — Market slug (e.g. "birmingham", "austin-tx"). Use list_markets to discover slugs. - `start_date` (string, optional) — Move-in date (YYYY-MM-DD). Filters to homes available on or before this date. - `end_date` (string, optional) — Move-out date (YYYY-MM-DD) for a fixed stay, or "indefinite" for LandingFlex. - `committed_nights` (integer, optional) — LandingFlex commitment tier — only valid with end_date="indefinite". - `min_bedrooms` (integer, optional) — Minimum bedroom count (0 = studio). - `max_bedrooms` (integer, optional) — Maximum bedroom count. - `min_bathrooms` (integer, optional) — Minimum bathroom count. - `min_price` (integer, optional) — Minimum monthly rent in USD. - `max_price` (integer, optional) — Maximum monthly rent in USD. - `pets` (boolean, optional) — When true, only return pet-friendly homes. - `parking` (boolean, optional) — When true, only return homes with parking available. - `pool` (boolean, optional) — When true, only return homes with a pool. - `gym` (boolean, optional) — When true, only return homes with a fitness center. - `in_unit_laundry` (boolean, optional) — When true, only return homes with in-unit washer/dryer. - `near_latitude` (number, optional) — Latitude of a point of interest (e.g. an office or landmark). Use with near_longitude and near_radius_miles to find homes within a given distance. - `near_longitude` (number, optional) — Longitude of a point of interest. Use with near_latitude and near_radius_miles. - `near_radius_miles` (number, optional) — Search radius in miles around near_latitude/near_longitude. Defaults to 5 miles when near_latitude and near_longitude are provided. - `sort_by` (string, optional) — Sort order: price_asc, price_desc, availability (earliest move-in first), newest. - `page` (integer, optional) — 1-indexed page number. - `per_page` (integer, optional) — Page size (capped at 50). **Call it** - MCP: call `search_apartments_tool` on `POST http://core-prod-web.default.svc.cluster.local:3000/mcp/public` - GET: `/api/public/search` (REST param → tool argument: `check_in`→`start_date`, `check_out`→`end_date`, `bedrooms`→`min_bedrooms`) - Example: http://core-prod-web.default.svc.cluster.local:3000/api/public/search?market=birmingham **Example response (abridged)** ```json { "market": { "slug": "birmingham" }, "total_count": 12, "homes": [ { "slug": "apartment-in-birmingham-example" } ] } ``` ## get_home_tool Fetch a single Landing home by its slug — property details, amenities, photos, **flex pricing**, **the full availability calendar**, and a pre-filled `reservation_link` so the agent doesn't have to probe dates with `check_availability` or assemble booking URLs by hand. Use this after `search_apartments` returns a slug the user is interested in. **Pricing.** Two ways to read the price: - `price` + `duration_label` → per-unit rate, e.g. `65` + `"/night"` = $65/night or `2100` + `"/mo"` = $2,100/mo. - `display_price_with_discount` + `display_price_label` → all-in total with the correct label, e.g. `318` + `" for 2 nights"` = $318 for 2 nights, or `2100` + `" per month"` = $2,100/mo. Always use `display_price_label` with `display_price_with_discount` — not with `duration_label`. `price_note` explains what's included. Call `get_quote` for the full checkout breakdown. **Availability.** The response includes an `availability` section with: - `bookable_windows` — contiguous open-for-occupancy periods, each with `start_date`, `end_date` (nullable for open-ended), `nights`, `can_move_in_at_start`, `can_move_out_at_end`, and `fits_minimum_stay`. This is what most agents want — pick a window, then optionally confirm specific dates with `check_availability`. - `ranges` — raw booking-range segments (same shape the PDP calendar consumes) with `move_in_allowed`, `move_out_allowed`, `open_for_occupancy`, and `unbookable_reason`. Use these when you need to know *why* a window is blocked. - `earliest_available_date` — first date the home accepts a new reservation. - `minimum_nightly_stay_by_date` — only present when the minimum varies across dates. **Reservation link.** Pass `start_date`, `end_date`, and (for flex) `committed_nights` to bake those into `reservation_link` — the agent can share that URL with the user to land them on the PDP pre-filled with the booking intent. The calendar is also clipped to the start/end window. **Property.** The `property` object describes the building the home is in (shared across all units at that address): `name`, `address`, `amenities`, `member_rating` (guest post-stay survey `average` + `count` — omitted when the property has no ratings yet), `recent_reviews` (up to 5 guest comments the reviewer opted to share publicly, most recent first — omitted when none exist), and `walk_score`/`walk_score_description`/ `transit_score`/`transit_score_description`/`bike_score`/ `bike_score_description` (omitted when not yet computed for this property). **Photos.** `photos` combines the home's own unit-specific photos with the property's building-level photos (exterior, common areas, amenities) — same precedence the OTA listing feeds use: unit photos first, then building photos. Each entry has a `source` (`"unit"` or `"building"`). The first entry has `hero: true`. **Parameters** - `slug` (string, required) — Home slug (e.g. "apartment-in-birmingham-landing-midtown-200-5"). - `start_date` (string, optional) — Move-in date (YYYY-MM-DD). Used to populate the reservation_link and to clip the availability calendar. - `end_date` (string, optional) — Move-out date (YYYY-MM-DD) for a fixed stay, or the literal string "indefinite" for flex. - `committed_nights` (integer, optional) — Only meaningful with end_date="indefinite". Picks the flex commitment tier baked into reservation_link. **Call it** - MCP: call `get_home_tool` on `POST http://core-prod-web.default.svc.cluster.local:3000/mcp/public` - GET: `/api/public/homes/{slug}` - Example: http://core-prod-web.default.svc.cluster.local:3000/api/public/homes/apartment-in-birmingham-example **Example response (abridged)** ```json { "slug": "apartment-in-birmingham-example", "bedrooms": 1, "photos": [] } ``` ## get_flex_options_tool Return the flex (open-ended) commitment tiers a given home accepts, so the agent doesn't suggest a `committed_nights` value the home will reject. Two things gate flex on a home: - `eligible_for_flexible_stays` — set to false on homes that opt out of flex entirely. When false, `available_tiers` is empty. - `minimum_nightly_stay` — a tier is only valid when its night count is ≥ the home's minimum nightly stay. Higher minimums drop the shorter tiers. Use this before calling `check_availability` with `end_date: "indefinite"`. Comparing this home's fixed-stay price against its flex tiers? Call `get_home_offers` instead — one call prices every tier this home accepts. **Parameters** - `home_slug` (string, required) — Home slug to inspect. **Call it** - MCP: call `get_flex_options_tool` on `POST http://core-prod-web.default.svc.cluster.local:3000/mcp/public` - GET: `/api/public/homes/{slug}/flex-options` (REST param → tool argument: `slug`→`home_slug`) - Example: http://core-prod-web.default.svc.cluster.local:3000/api/public/homes/apartment-in-birmingham-example/flex-options **Example response (abridged)** ```json { "home_slug": "apartment-in-birmingham-example", "available_tiers": [ { "committed_nights": 180 } ] } ``` ## check_availability_tool Check whether a specific Landing home is bookable for the requested dates, and return the structured reason if not. Considers third-party reservations, the home's minimum nightly stay, and member-applied availability blocks. For flex (open-ended) stays, pass `end_date: "indefinite"` plus a `committed_nights` value. Not every home accepts every tier — call `get_flex_options` first to see what a specific home supports. Returns: - `available` (boolean) — whether the dates are bookable. - `ranges` — array of date segments with `move_in_allowed`, `move_out_allowed`, `open_for_occupancy`, and an `unbookable_reason` when blocked. Use these to suggest alternative windows when the requested dates are unavailable. - `minimum_nightly_stay` — stays shorter than this are rejected. - `earliest_available_date` — first date the home accepts a new reservation. **Parameters** - `home_slug` (string, required) — Home slug to check. - `start_date` (string, required) — Move-in date (YYYY-MM-DD). - `end_date` (string, optional) — Move-out date (YYYY-MM-DD) for a fixed stay, or the literal string "indefinite" for flex. - `committed_nights` (integer, optional) — Required when end_date="indefinite". **Call it** - MCP: call `check_availability_tool` on `POST http://core-prod-web.default.svc.cluster.local:3000/mcp/public` - GET: `/api/public/homes/{slug}/availability` (REST param → tool argument: `slug`→`home_slug`, `check_in`→`start_date`, `check_out`→`end_date`) - Example: http://core-prod-web.default.svc.cluster.local:3000/api/public/homes/apartment-in-birmingham-example/availability?check_in=2026-09-01 **Example response (abridged)** ```json { "home_slug": "apartment-in-birmingham-example", "available": true } ``` ## get_quote_tool Real, date-specific anonymous quote for a home. Mirrors what an unauthenticated visitor sees in checkout: monthly rent after seasonal adjustments and length-of-stay discounts, the first-month charge, ongoing monthly cost, and an estimated total. For flex (open-ended) stays, pass `end_date: "indefinite"` plus a `committed_nights` value. Not every home accepts every tier — call `get_flex_options` first. Member-only adjustments (promo codes, account credit, membership pricing, parking selections, pets) are not applied. For a member-specific quote, the guest must sign in and use the website checkout. Returns: - `monthly_rent` / `nightly_rate` — anonymous rates for these dates. - `term_duration_label` — e.g. "5 months", "30 nights". - `checkout_total` — what charges at booking time. - `monthly_total` — recurring monthly charge after the first month. - `total_cost_estimate` — full stay cost across the monthly billing schedule. - `total_discount` — sum of seasonal + length-of-stay discounts applied. - `currency` — always "USD". - `available` — false when the home is not bookable for these dates. `unbookable_reason` is the same structured, calendar-range reason `check_availability` returns (e.g. reserved, availability block) — present when the block is date-specific. `unavailable_reason` is a free-text sentence covering ALL blocks, including non-calendar ones (e.g. the home's `available_from` cutoff); it's always present when `available` is false, so treat it as the reliable fallback and `unbookable_reason` as an optional, more structured detail. Comparing a home's fixed-stay quote against its flex tiers? Call `get_home_offers` instead of this tool once per tier — one call returns every bookable offer for the home. **Parameters** - `home_slug` (string, required) — Home slug to quote. - `start_date` (string, required) — Move-in date (YYYY-MM-DD). - `end_date` (string, required) — Move-out date (YYYY-MM-DD) for a fixed stay, or the literal string "indefinite" for flex. - `committed_nights` (integer, optional) — Required when end_date="indefinite". **Call it** - MCP: call `get_quote_tool` on `POST http://core-prod-web.default.svc.cluster.local:3000/mcp/public` - GET: `/api/public/homes/{slug}/quote` (REST param → tool argument: `slug`→`home_slug`, `check_in`→`start_date`, `check_out`→`end_date`) - Example: http://core-prod-web.default.svc.cluster.local:3000/api/public/homes/apartment-in-birmingham-example/quote?check_in=2026-09-01&check_out=2026-12-01 **Example response (abridged)** ```json { "home_slug": "apartment-in-birmingham-example", "charge_schedule": { "total_cost": 6300.0 } } ``` ## get_home_offers_tool Every bookable pricing offer for one home at a single move-in date, in one call — priced through the same live pricing engine as `get_quote` (checkout-grade, not an estimate), each carrying any active special offer/discount already applied (see `deal_applied`). Pass `end_date` for a single fixed-stay offer, same as `get_quote`. Omit `end_date` to instead receive one offer per flex (open-ended) tier this home accepts — replacing what would otherwise be a `get_flex_options` call plus one `get_quote` call per tier. There is no bare "default" fixed-length offer: a fixed stay always needs a specific `end_date`. Offers that aren't bookable for the requested start date are left out of `offers` rather than included as an error entry; `offers: []` means nothing was bookable at all. `unavailable_reason` (free text, always present in that case) and `unbookable_reason` (the same structured, calendar-range enum `check_availability` uses — present only for date-specific blocks) explain why, same as `get_quote`. Does not include `cancellation_terms` — call `get_policies_faq` for the general cancellation policy; exact per-stay terms are confirmed at checkout. `get_quote`, `get_flex_options`, and `estimate_total_cost` remain available for single-number callers. **Parameters** - `home_slug` (string, required) — Home slug to price. - `start_date` (string, required) — Move-in date (YYYY-MM-DD). - `end_date` (string, optional) — Move-out date (YYYY-MM-DD) for a single fixed-stay offer. Omit to receive one offer per flex tier this home accepts instead. **Call it** - MCP: call `get_home_offers_tool` on `POST http://core-prod-web.default.svc.cluster.local:3000/mcp/public` - GET: `/api/public/homes/{slug}/offers` (REST param → tool argument: `slug`→`home_slug`, `check_in`→`start_date`, `check_out`→`end_date`) - Example: http://core-prod-web.default.svc.cluster.local:3000/api/public/homes/apartment-in-birmingham-example/offers?check_in=2026-09-01 ## booking_intent_tool Save the guest's interest in a home so Landing can follow up, then return a direct checkout link for them to complete the booking. Call this once the guest has confirmed which home and dates they want — ideally after get_quote shows them a price they like. Calling it more than once for the same email is safe; it won't create duplicates. The guest must create a Landing account and add a payment method to finalise the reservation — that all happens on hellolanding.com via the checkout_url this tool returns. Returns: - `checkout_url` — direct link to payment; share this with the guest. - `intent_id` — a reference number the guest can give to Landing support if they need help. - `email` / `phone` — echoed back for confirmation. - `home_slug` / `start_date` / `end_date` — echoed when provided. **Parameters** - `email` (string, required) — Guest email address. Used for deduplication and follow-up. - `phone` (string, optional) — Guest phone number (optional). E.164 format preferred. - `name` (string, optional) — Guest full name (optional). - `home_slug` (string, optional) — Slug of the home the guest intends to book (optional but recommended). - `start_date` (string, optional) — Requested move-in date (YYYY-MM-DD). - `end_date` (string, optional) — Requested move-out date (YYYY-MM-DD) for a fixed stay, or "indefinite" for LandingFlex. - `committed_nights` (integer, optional) — LandingFlex commitment tier — required when end_date="indefinite". **Call it** - MCP: call `booking_intent_tool` on `POST http://core-prod-web.default.svc.cluster.local:3000/mcp/public` - GET: none — this tool writes, so it is MCP-only. ## compare_homes_tool Side-by-side comparison of 2-4 Landing homes — price, size, amenities, ratings, and availability in one call, instead of stitching together multiple get_home calls yourself. Pass 2-4 home slugs (from search_apartments or get_home results). Slugs that don't resolve to a home are reported in `not_found` rather than failing the whole request. **Parameters** - `home_slugs` (array, required) — 2-4 home slugs to compare. **Call it** - MCP: call `compare_homes_tool` on `POST http://core-prod-web.default.svc.cluster.local:3000/mcp/public` - GET: `/api/public/compare` (REST param → tool argument: `slugs`→`home_slugs`) - Example: http://core-prod-web.default.svc.cluster.local:3000/api/public/compare?slugs=apartment-in-birmingham-example,apartment-in-southside-example **Example response (abridged)** ```json { "homes": [], "not_found": [] } ``` ## get_deals_tool Currently discounted homes in a market, surfaced most-vacant-first. Landing auto-generates a special offer from a home's vacancy — the more days a home has sat vacant, the larger the discount its special-offer table produces (same engine search_apartments and get_quote use). So this scans the 100 most-vacant published homes in the market and returns up to 10 that carry an active discount today, most vacant first. Each deal includes `vacant_days`. A home not appearing here may still carry a smaller discount, or none right now. Call get_quote on a specific home for the exact breakdown, or get_home_offers for its exact breakdown across every stay length (fixed + flex tiers) at once. **Parameters** - `market` (string, required) — Market slug. Use list_markets to discover slugs. **Call it** - MCP: call `get_deals_tool` on `POST http://core-prod-web.default.svc.cluster.local:3000/mcp/public` - GET: `/api/public/deals` - Example: http://core-prod-web.default.svc.cluster.local:3000/api/public/deals?market=birmingham **Example response (abridged)** ```json { "market": { "slug": "birmingham" }, "deals": [] } ``` ## estimate_total_cost_tool Verified all-in cost for a stay at a Landing home — the same live pricing engine as get_quote, summarized as a single bottom-line total for the full stay length rather than a line-item checkout breakdown. Every number in the response is real, date-specific pricing for this home — there's no estimation or assumption involved. Use get_quote instead when you need the itemized charge schedule (checkout total, monthly total, deferred charges, etc.). **Parameters** - `home_slug` (string, required) — Home slug to estimate. - `start_date` (string, required) — Move-in date (YYYY-MM-DD). - `end_date` (string, required) — Move-out date (YYYY-MM-DD) for a fixed stay, or the literal string "indefinite" for flex. - `committed_nights` (integer, optional) — Required when end_date="indefinite". **Call it** - MCP: call `estimate_total_cost_tool` on `POST http://core-prod-web.default.svc.cluster.local:3000/mcp/public` - GET: `/api/public/homes/{slug}/total-cost` (REST param → tool argument: `slug`→`home_slug`, `check_in`→`start_date`, `check_out`→`end_date`) - Example: http://core-prod-web.default.svc.cluster.local:3000/api/public/homes/apartment-in-birmingham-example/total-cost?check_in=2026-09-01&check_out=2026-12-01 **Example response (abridged)** ```json { "home_slug": "apartment-in-birmingham-example", "total_cost_estimate": 6300.0 } ``` ## get_market_stats_tool Market-level stats for a Landing market: average monthly rent by bedroom count, total published inventory, and the neighborhoods with the most availability. Useful for cross-market comparisons ("is Austin or Dallas cheaper for a 1BR?") without paging through search_apartments results. Rents are unweighted averages of each home's base monthly rate (before seasonal/length-of-stay discounts) across currently published homes. **Parameters** - `market` (string, required) — Market slug. Use list_markets to discover slugs. **Call it** - MCP: call `get_market_stats_tool` on `POST http://core-prod-web.default.svc.cluster.local:3000/mcp/public` - GET: `/api/public/market-stats` - Example: http://core-prod-web.default.svc.cluster.local:3000/api/public/market-stats?market=birmingham **Example response (abridged)** ```json { "inventory_count": 42, "average_rent_by_bedroom": [] } ``` ## get_neighborhood_info_tool Neighborhood context for a home: description, market/city, and the same walk/transit/bike score shown on hellolanding.com. Does not estimate commute time to a specific address — Landing hasn't wired a routing/distance-matrix integration into this tool yet. If asked for a commute estimate, say so explicitly rather than guessing; only the neighborhood's general walkability/transit score is available today. **Parameters** - `home_slug` (string, required) — Home slug to look up. Use search_apartments or get_home to find one. **Call it** - MCP: call `get_neighborhood_info_tool` on `POST http://core-prod-web.default.svc.cluster.local:3000/mcp/public` - GET: `/api/public/homes/{slug}/neighborhood` (REST param → tool argument: `slug`→`home_slug`) - Example: http://core-prod-web.default.svc.cluster.local:3000/api/public/homes/apartment-in-birmingham-example/neighborhood **Example response (abridged)** ```json { "home_slug": "apartment-in-birmingham-example", "walk_score": { "walk_score": 77 } } ``` ## get_policies_faq_tool Grounded, conservative answers to the most common Landing policy questions (deposits, pets, parking, cancellation, qualification, LandingFlex, utilities, move-in). Use this instead of guessing at policy specifics — where an exact number (deposit amount, cancellation window) depends on the home/market/reservation, the answer says so explicitly and points to get_quote, checkout, or Landing support rather than inventing a figure. Pass no `topic` to get all entries, or one of: security_deposit, pets, parking, cancellation_policy, qualification_requirements, landing_flex, utilities_and_furnishing, move_in_process. **Parameters** - `topic` (string, optional) — Optional — return only this topic's entry. Omit to get all entries. **Call it** - MCP: call `get_policies_faq_tool` on `POST http://core-prod-web.default.svc.cluster.local:3000/mcp/public` - GET: `/api/public/policies-faq` (REST param → tool argument: `q`→`topic`) - Example: http://core-prod-web.default.svc.cluster.local:3000/api/public/policies-faq **Example response (abridged)** ```json { "entries": [ { "topic": "pets", "answer": "Pet policies are set per home." } ] } ``` ## get_reviews_tool All guest reviews for a home's building, paginated — use this when the guest wants to read more than the handful get_home previews. Reviews are property-level (shared across every unit in the building) and come from the same post-stay guest surveys that back `member_rating`. Only comments the reviewer opted to share publicly are returned, most recent first. `total_reviews` is the full count of shared reviews for the building; page through them with `page`/`per_page` (default 10, max 25) while `page <= total_pages`. **Parameters** - `home_slug` (string, required) — Home slug. Use search_apartments or get_home to find one. - `page` (integer, optional) — 1-indexed page number. - `per_page` (integer, optional) — Reviews per page (capped at 25). **Call it** - MCP: call `get_reviews_tool` on `POST http://core-prod-web.default.svc.cluster.local:3000/mcp/public` - GET: `/api/public/homes/{slug}/reviews` (REST param → tool argument: `slug`→`home_slug`) - Example: http://core-prod-web.default.svc.cluster.local:3000/api/public/homes/apartment-in-birmingham-example/reviews **Example response (abridged)** ```json { "home_slug": "apartment-in-birmingham-example", "total_reviews": 12, "reviews": [] } ``` --- ## Full Policies & FAQ ### Is there a security deposit? Deposit requirements vary by home and market and are shown before checkout, along with any deposit alternatives Landing offers. Confirm the exact amount for a specific home via get_quote or at checkout on hellolanding.com. ### Can I bring a pet? Pet policies are set per home — use the `pets` filter on search_apartments to find pet-friendly homes. Pet fees/deposits, when they apply, are member-only charges applied at checkout after sign-in, so they won't appear in an anonymous get_quote. ### Is parking included? Parking availability varies by home — use the `parking` filter on search_apartments. Where parking is a paid add-on, it's a member-only selection applied at checkout, not part of the anonymous quote. ### What's the cancellation policy? Cancellation terms depend on the specific reservation and stay length. The authoritative terms are shown during checkout on hellolanding.com before the guest confirms payment — Landing does not finalize a booking without the guest seeing and accepting those terms first. ### What do I need to qualify for a Landing home? Qualification (identity/income verification, etc.) happens after the guest creates a Landing account and starts checkout — this MCP server only handles anonymous search and quoting, not qualification. Send the guest to the home's checkout_url (from get_quote or booking_intent) to start that process. ### How does LandingFlex work? LandingFlex is Landing's open-ended stay option: the guest commits to a minimum number of nights (30, 90, 180, or 365) in exchange for a lower rate, and can transfer that same rate to any other eligible home across Landing's markets. Not every home accepts every tier — call get_flex_options on a specific home to see which tiers it supports. ### Are utilities and furniture included? Every Landing home is furnished. Utilities and Wi-Fi inclusion varies by home — check the home's amenities via get_home, or confirm directly with Landing support for a specific address. ### How does move-in work? Move-in details (self-check-in, key pickup, etc.) are specific to each home and are shared with the guest after booking. This MCP server doesn't have access to a home's move-in instructions before a reservation exists.