{"openapi":"3.1.0","info":{"title":"Landing Public API (HTTP GET)","version":"1.0.0","description":"Read-only GET mirror of Landing's public MCP server. Same capabilities, callable with plain HTTP GET — for agents that cannot use MCP. No auth. Agent guide (llms.txt): https://www.hellolanding.com/llms.txt"},"servers":[{"url":"https://www.hellolanding.com"}],"paths":{"/api/public/markets":{"get":{"operationId":"markets","summary":"List every Landing market currently accepting bookings, and — nested under each — its **display cities** (the specific, neighborhood-level places the website is organized around).","parameters":[{"name":"state","in":"query","required":false,"description":"","schema":{"type":"string"},"example":"AL"}],"responses":{"200":{"description":"Success","content":{"application/json":{"example":{"markets":[{"slug":"birmingham","name":"Birmingham","state":"AL"}],"count":1}}}},"400":{"description":"Invalid parameters","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown home or market","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/public/market-filters":{"get":{"operationId":"market_filters","summary":"Returns all available filter options for a given market — its display cities, bedroom counts, amenities, price range, bathroom options, neighborhoods, and sort orders.","parameters":[{"name":"market","in":"query","required":true,"description":"Market slug (e.g. \"austin-tx\"). Use list_markets to discover slugs.","schema":{"type":"string"},"example":"birmingham"}],"responses":{"200":{"description":"Success","content":{"application/json":{"example":{"market":{"slug":"birmingham"},"bedrooms":[1,2],"amenities":[{"label":"Pets allowed","filter":"pets"}]}}}},"400":{"description":"Invalid parameters","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown home or market","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/public/search":{"get":{"operationId":"search","summary":"Search Landing's published furnished apartments by location.","parameters":[{"name":"market","in":"query","required":true,"description":"The search location — a display-CITY slug or a market slug from list_markets. Optional when `scope.display_city` or `scope.market` is given instead (see `scope` below); one of the three is required. A named city is a SLUG, not a coordinate. Resolution order when the guest names a place: (1) if it matches a city in list_markets (cities[].slug, e.g. \"Frisco\" -\u003e \"frisco-tx\", \"Alexandria\" -\u003e \"alexandria-va\", \"Birmingham\" -\u003e \"birmingham-al\"), pass that CITY slug here and do NOT geocode it to near_latitude/near_longitude; (2) else if it matches a market slug (broader metro, e.g. \"birmingham\"), use that; (3) reserve near_latitude/near_longitude ONLY for a sub-city point that no city/market slug can name (a specific building, employer, hospital, campus, or street address). Call list_markets to discover markets and the cities within each.","schema":{"type":"string"},"example":"birmingham"},{"name":"check_in","in":"query","required":false,"description":"Move-in date (YYYY-MM-DD). Filters to homes available on or before this date.","schema":{"type":"string"},"example":"2026-09-01"},{"name":"check_out","in":"query","required":false,"description":"Move-out date (YYYY-MM-DD) for a fixed stay, or \"indefinite\" for Landing Flex.","schema":{"type":"string"},"example":"2026-12-01"},{"name":"bedrooms","in":"query","required":false,"description":"Minimum bedroom count (0 = studio).","schema":{"type":"integer"},"example":1},{"name":"max_price","in":"query","required":false,"description":"Maximum budget in USD, in the unit given by `price_unit` (per night or per month). Compared against each home's FINAL all-in price for the requested dates, not just base rent — so short stays whose one-time fees push them over budget are correctly excluded.","schema":{"type":"integer"},"example":3500}],"responses":{"200":{"description":"Success","content":{"application/json":{"example":{"market":{"slug":"birmingham"},"total_count":12,"homes":[{"slug":"apartment-in-birmingham-example"}]}}}},"400":{"description":"Invalid parameters","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown home or market","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/public/homes/{slug}":{"get":{"operationId":"home","summary":"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 or assemble booking URLs by hand (get_apartment already returns the full calendar).","parameters":[{"name":"slug","in":"path","required":true,"description":"Home slug (e.g. \"apartment-in-birmingham-landing-midtown-200-5\").","schema":{"type":"string"},"example":"apartment-in-birmingham-example"}],"responses":{"200":{"description":"Success","content":{"application/json":{"example":{"slug":"apartment-in-birmingham-example","bedrooms":1,"photos":[]}}}},"400":{"description":"Invalid parameters","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown home or market","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/public/homes/{slug}/flex-options":{"get":{"operationId":"flex_options","summary":"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.","parameters":[{"name":"slug","in":"path","required":true,"description":"Home slug to inspect.","schema":{"type":"string"},"example":"apartment-in-birmingham-example"}],"responses":{"200":{"description":"Success","content":{"application/json":{"example":{"home_slug":"apartment-in-birmingham-example","available_tiers":[{"committed_nights":180}]}}}},"400":{"description":"Invalid parameters","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown home or market","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/public/homes/{slug}/quote":{"get":{"operationId":"quote","summary":"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.","parameters":[{"name":"slug","in":"path","required":true,"description":"Home slug to quote.","schema":{"type":"string"},"example":"apartment-in-birmingham-example"},{"name":"check_in","in":"query","required":true,"description":"Move-in date (YYYY-MM-DD).","schema":{"type":"string"},"example":"2026-09-01"},{"name":"check_out","in":"query","required":true,"description":"Move-out date (YYYY-MM-DD) for a fixed stay, or the literal string \"indefinite\" for flex.","schema":{"type":"string"},"example":"2026-12-01"},{"name":"cats","in":"query","required":false,"description":"Number of cats, if any. Priced into charge_schedule; omit or pass 0 for no cats.","schema":{"type":"integer"}},{"name":"dogs","in":"query","required":false,"description":"Number of dogs, if any. Priced into charge_schedule; omit or pass 0 for no dogs.","schema":{"type":"integer"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"example":{"home_slug":"apartment-in-birmingham-example","charge_schedule":{"total_cost":6300.0}}}}},"400":{"description":"Invalid parameters","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown home or market","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/public/market-info":{"get":{"operationId":"market_info","summary":"Market context 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.","parameters":[{"name":"market","in":"query","required":true,"description":"A display-CITY slug or a market slug. Use list_markets to discover slugs.","schema":{"type":"string"},"example":"birmingham"},{"name":"home","in":"query","required":false,"description":"Optional. When given, the response also includes this home's neighborhood context (description, walk/transit/bike score).","schema":{"type":"string"},"example":"apartment-in-birmingham-example"}],"responses":{"200":{"description":"Success","content":{"application/json":{"example":{"market":{"slug":"birmingham"},"inventory_count":42,"average_rent_by_bedroom":[],"popular_neighborhoods":[]}}}},"400":{"description":"Invalid parameters","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown home or market","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/public/policies-faq":{"get":{"operationId":"policies_faq","summary":"Grounded, conservative answers to the most common Landing policy questions (deposits, pets, parking, cancellation, qualification, Landing Flex, 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.","parameters":[{"name":"q","in":"query","required":false,"description":"Optional — return only this topic's entry. Omit to get all entries.","schema":{"type":"string"},"example":"pets"}],"responses":{"200":{"description":"Success","content":{"application/json":{"example":{"entries":[{"topic":"pets","answer":"Pet policies are set per home."}]}}}},"400":{"description":"Invalid parameters","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown home or market","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/public/status":{"get":{"operationId":"status","summary":"Health check.","parameters":[],"responses":{"200":{"description":"Success","content":{"application/json":{"example":{"status":"ok"}}}},"400":{"description":"Invalid parameters","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown home or market","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"components":{"schemas":{"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"]}}}}}}