{"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 the Landing markets currently accepting bookings (one row per market).","parameters":[{"name":"state","in":"query","required":false,"description":"Optional 2-letter state abbreviation (e.g. \"AL\", \"TX\") to filter by.","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 — 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 in a given market.","parameters":[{"name":"market","in":"query","required":true,"description":"Market slug (e.g. \"birmingham\", \"austin-tx\"). Use list_markets to discover slugs.","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 LandingFlex.","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 monthly rent in USD.","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 with `check_availability` or assemble booking URLs by hand.","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}/availability":{"get":{"operationId":"availability","summary":"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.","parameters":[{"name":"slug","in":"path","required":true,"description":"Home slug to check.","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":false,"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":"committed_nights","in":"query","required":false,"description":"Required when end_date=\"indefinite\".","schema":{"type":"integer"},"example":180}],"responses":{"200":{"description":"Success","content":{"application/json":{"example":{"home_slug":"apartment-in-birmingham-example","available":true}}}},"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"}],"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/homes/{slug}/offers":{"get":{"operationId":"offers","summary":"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`).","parameters":[{"name":"slug","in":"path","required":true,"description":"Home slug to price.","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":false,"description":"Move-out date (YYYY-MM-DD) for a single fixed-stay offer. Omit to receive one offer per flex tier this home accepts instead.","schema":{"type":"string"},"example":"2026-12-01"}],"responses":{"200":{"description":"Success","content":{"application/json":{"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}/total-cost":{"get":{"operationId":"total_cost","summary":"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.","parameters":[{"name":"slug","in":"path","required":true,"description":"Home slug to estimate.","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"}],"responses":{"200":{"description":"Success","content":{"application/json":{"example":{"home_slug":"apartment-in-birmingham-example","total_cost_estimate":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/homes/{slug}/neighborhood":{"get":{"operationId":"neighborhood","summary":"Neighborhood context for a home: description, market/city, and the same walk/transit/bike score shown on hellolanding.com.","parameters":[{"name":"slug","in":"path","required":true,"description":"Home slug to look up. Use search_apartments or get_home to find one.","schema":{"type":"string"},"example":"apartment-in-birmingham-example"}],"responses":{"200":{"description":"Success","content":{"application/json":{"example":{"home_slug":"apartment-in-birmingham-example","walk_score":{"walk_score":77}}}}},"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}/reviews":{"get":{"operationId":"reviews","summary":"All guest reviews for a home's building, paginated — use this when the guest wants to read more than the handful get_home previews.","parameters":[{"name":"slug","in":"path","required":true,"description":"Home slug. Use search_apartments or get_home to find one.","schema":{"type":"string"},"example":"apartment-in-birmingham-example"},{"name":"page","in":"query","required":false,"description":"1-indexed page number.","schema":{"type":"integer"},"example":1},{"name":"per_page","in":"query","required":false,"description":"Reviews per page (capped at 25).","schema":{"type":"integer"},"example":10}],"responses":{"200":{"description":"Success","content":{"application/json":{"example":{"home_slug":"apartment-in-birmingham-example","total_reviews":12,"reviews":[]}}}},"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/compare":{"get":{"operationId":"compare","summary":"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.","parameters":[{"name":"slugs","in":"query","required":true,"description":"Comma-separated. 2-4 home slugs to compare.","schema":{"type":"string"},"example":"apartment-in-birmingham-example,apartment-in-southside-example"}],"responses":{"200":{"description":"Success","content":{"application/json":{"example":{"homes":[],"not_found":[]}}}},"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/deals":{"get":{"operationId":"deals","summary":"Currently discounted homes in a market, surfaced most-vacant-first.","parameters":[{"name":"market","in":"query","required":true,"description":"Market slug. Use list_markets to discover slugs.","schema":{"type":"string"},"example":"birmingham"}],"responses":{"200":{"description":"Success","content":{"application/json":{"example":{"market":{"slug":"birmingham"},"deals":[]}}}},"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-stats":{"get":{"operationId":"market_stats","summary":"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.","parameters":[{"name":"market","in":"query","required":true,"description":"Market slug. Use list_markets to discover slugs.","schema":{"type":"string"},"example":"birmingham"}],"responses":{"200":{"description":"Success","content":{"application/json":{"example":{"inventory_count":42,"average_rent_by_bedroom":[]}}}},"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, 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.","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"]}}}}}}