{"openapi":"3.1.0","info":{"title":"Lauderdale Apartments API","version":"1.0.0","description":"Public read API for apartment listings in Fort Lauderdale. No authentication is required for read endpoints. Renters contact landlords directly through POST /inquiries -- there are no fees anywhere in this API.","contact":{"email":"info@lauderdaleapartments.com"},"license":{"name":"Proprietary"}},"servers":[{"url":"https://lauderdaleapartments.com/api/v1"}],"tags":[{"name":"catalog","description":"Properties and units"},{"name":"contact","description":"Direct landlord contact"},{"name":"meta","description":"Health, locales, translations"}],"paths":{"/properties":{"get":{"tags":["catalog"],"summary":"List published properties","parameters":[{"name":"locale","in":"query","required":false,"description":"Response language; falls back to English per missing string.","schema":{"type":"string","enum":["en","es","ht","pt"],"default":"en"}}],"responses":{"200":{"description":"Property collection"}}}},"/properties/{slug}":{"get":{"tags":["catalog"],"summary":"Property detail including all units","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}},{"name":"locale","in":"query","required":false,"description":"Response language; falls back to English per missing string.","schema":{"type":"string","enum":["en","es","ht","pt"],"default":"en"}}],"responses":{"200":{"description":"Property"},"404":{"description":"Not found"}}}},"/units":{"get":{"tags":["catalog"],"summary":"Search units","parameters":[{"name":"locale","in":"query","required":false,"description":"Response language; falls back to English per missing string.","schema":{"type":"string","enum":["en","es","ht","pt"],"default":"en"}},{"name":"property","in":"query","required":false,"description":"Filter to one property slug","schema":{"type":"string"}},{"name":"bedrooms","in":"query","required":false,"description":"Exact bedroom count; 0 is a studio","schema":{"type":"integer"}},{"name":"minBedrooms","in":"query","required":false,"description":"Minimum bedroom count","schema":{"type":"integer"}},{"name":"maxRent","in":"query","required":false,"description":"Maximum monthly rent in dollars","schema":{"type":"number"}},{"name":"minRent","in":"query","required":false,"description":"Minimum monthly rent in dollars","schema":{"type":"number"}},{"name":"minSquareFeet","in":"query","required":false,"description":"Minimum interior square feet","schema":{"type":"integer"}},{"name":"availableBy","in":"query","required":false,"description":"ISO date; unit must be available on or before","schema":{"type":"string"}},{"name":"status","in":"query","required":false,"description":"available | occupied | pending | off_market","schema":{"type":"string"}},{"name":"sort","in":"query","required":false,"description":"rent_asc | rent_desc | size_desc | newest","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Page size, max 100","schema":{"type":"integer"}},{"name":"offset","in":"query","required":false,"description":"Page offset","schema":{"type":"integer"}}],"responses":{"200":{"description":"Unit collection with total"}}}},"/units/{id}":{"get":{"tags":["catalog"],"summary":"Unit detail including landlord contact","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"locale","in":"query","required":false,"description":"Response language; falls back to English per missing string.","schema":{"type":"string","enum":["en","es","ht","pt"],"default":"en"}}],"responses":{"200":{"description":"Unit"},"404":{"description":"Not found"}}}},"/inquiries":{"post":{"tags":["contact"],"summary":"Contact a landlord about a unit","description":"Rate limited to 5 per 10 minutes per IP. No fee, no account.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["name","email","message"],"properties":{"name":{"type":"string","minLength":2},"email":{"type":"string","format":"email"},"phone":{"type":"string"},"message":{"type":"string","minLength":10,"maxLength":4000},"unitId":{"type":"string","format":"uuid"},"propertySlug":{"type":"string"},"moveInDate":{"type":"string","format":"date"},"locale":{"type":"string","enum":["en","es","ht","pt"]},"website":{"type":"string","description":"Honeypot -- leave empty"}}}}}},"responses":{"201":{"description":"Inquiry accepted"},"422":{"description":"Validation failed"},"429":{"description":"Rate limited"}}}},"/listing-requests":{"post":{"tags":["contact"],"summary":"Outside owner requesting to list a property","responses":{"201":{"description":"Request accepted"}}}},"/locales":{"get":{"tags":["meta"],"summary":"Supported locales","responses":{"200":{"description":"Locales"}}}},"/i18n/{locale}":{"get":{"tags":["meta"],"summary":"Content translation bundle","parameters":[{"name":"locale","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Translation map"}}}},"/health":{"get":{"tags":["meta"],"summary":"Liveness and database reachability","responses":{"200":{"description":"Healthy"}}}}}}