{"openapi":"3.1.0","info":{"title":"Taco Street Locating — Public API","description":"Public read API for the Taco Street apartment-locating service (Austin, Dallas, Houston). This is the agent-facing subset; authenticated and admin routes are intentionally not documented.","version":"2.0.0"},"servers":[{"url":"https://ai.tacostreetlocating.com"}],"paths":{"/api/apartments":{"get":{"tags":["apartments"],"summary":"Get Public Apartments","description":"Get apartments for public display (active/verified/published).","operationId":"get_public_apartments_api_apartments_get","parameters":[{"name":"city","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"default":"Austin","title":"City"}},{"name":"neighborhood","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Neighborhood"}},{"name":"property_tier","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Property Tier"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/apartments/by-name/{apartment_name}/similar":{"get":{"tags":["apartments"],"summary":"Get Similar Apartments","description":"Vector Search Phase 4 — return apartments similar to the given one,\nranked by `vibe_embedding` cosine similarity via Atlas $vectorSearch,\nthen re-ranked with neighborhood / price / age / housing-type signals so\nthe results actually feel comparable (not just semantically similar).\n\nAlways scoped to the same `city` as the source apartment. Excludes\nstudent/senior housing when the source isn't student/senior. Drops\ncandidates whose price differs by more than ~60% from the source.\n\nThe optional `?city=` query param disambiguates when two metros have\napartments with the same name (e.g., \"Paseo\" exists in both Austin\nand Dallas). When omitted, the lookup falls back to first-match,\nwhich can pick the wrong metro.","operationId":"get_similar_apartments_api_apartments_by_name__apartment_name__similar_get","parameters":[{"name":"apartment_name","in":"path","required":true,"schema":{"type":"string","title":"Apartment Name"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":6,"title":"Limit"}},{"name":"same_neighborhood_only","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Same Neighborhood Only"}},{"name":"city","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/apartments/by-name/{apartment_name}":{"get":{"tags":["apartments"],"summary":"Get Apartment By Name","description":"Get single apartment by name (full data for manual add).\n\nThe optional `?city=` param disambiguates when two metros share an\napartment name (e.g., Austin Paseo on Rainey Street vs Dallas Paseo\nin South Dallas). When omitted, MongoDB returns whichever matching\ndocument it finds first — which is how the cross-metro contamination\nbug surfaced.","operationId":"get_apartment_by_name_api_apartments_by_name__apartment_name__get","parameters":[{"name":"apartment_name","in":"path","required":true,"schema":{"type":"string","title":"Apartment Name"}},{"name":"city","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/apartments/{apartment_id}":{"get":{"tags":["apartments"],"summary":"Get Apartment","description":"Get single apartment by ID.","operationId":"get_apartment_api_apartments__apartment_id__get","parameters":[{"name":"apartment_id","in":"path","required":true,"schema":{"type":"string","title":"Apartment Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/apartments/by-tier/{tier}":{"get":{"tags":["apartments"],"summary":"Get Apartments By Tier","description":"Get apartments by property tier.\nTiers: luxury, mid-range, value","operationId":"get_apartments_by_tier_api_apartments_by_tier__tier__get","parameters":[{"name":"tier","in":"path","required":true,"schema":{"type":"string","title":"Tier"}},{"name":"city","in":"query","required":false,"schema":{"type":"string","default":"Austin","title":"City"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/apartments/neighborhood/{neighborhood}":{"get":{"tags":["apartments"],"summary":"Get Apartments By Neighborhood","description":"Get apartments in a specific neighborhood.","operationId":"get_apartments_by_neighborhood_api_apartments_neighborhood__neighborhood__get","parameters":[{"name":"neighborhood","in":"path","required":true,"schema":{"type":"string","title":"Neighborhood"}},{"name":"city","in":"query","required":false,"schema":{"type":"string","default":"Austin","title":"City"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/apartments/search/simple":{"get":{"tags":["apartments"],"summary":"Simple Search","description":"Simple text search for apartments by name.","operationId":"simple_search_api_apartments_search_simple_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","title":"Q"}},{"name":"city","in":"query","required":false,"schema":{"type":"string","default":"Austin","title":"City"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/search_v2/neighborhoods":{"get":{"tags":["search-v2","search-v2"],"summary":"Get Neighborhoods","description":"Get neighborhoods grouped by region with apartment counts.\nReturns regions with their neighborhoods for hierarchical display.","operationId":"get_neighborhoods_api_search_v2_neighborhoods_get","parameters":[{"name":"city","in":"query","required":false,"schema":{"type":"string","default":"Austin","title":"City"}},{"name":"min_apartments","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Min Apartments"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/search_v2/filter-options":{"get":{"tags":["search-v2","search-v2"],"summary":"Get Filter Options","description":"Get all available filter options with counts.\nUseful for building dynamic filter UI.","operationId":"get_filter_options_api_search_v2_filter_options_get","parameters":[{"name":"city","in":"query","required":false,"schema":{"type":"string","default":"Austin","title":"City"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/search_v2/enabled-amenity-tags":{"get":{"tags":["search-v2","search-v2"],"summary":"Get Enabled Amenity Tags","description":"Get admin-enabled amenity tags that should be displayed as featured filters.","operationId":"get_enabled_amenity_tags_api_search_v2_enabled_amenity_tags_get","parameters":[{"name":"city","in":"query","required":false,"schema":{"type":"string","default":"Austin","title":"City"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/search_v2/quick-stats":{"get":{"tags":["search-v2","search-v2"],"summary":"Get Quick Stats","description":"Get quick stats for the search page.","operationId":"get_quick_stats_api_search_v2_quick_stats_get","parameters":[{"name":"city","in":"query","required":false,"schema":{"type":"string","default":"Austin","title":"City"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/search_v2/bedroom-options":{"get":{"tags":["search-v2","search-v2"],"summary":"Get Bedroom Options","description":"Get available bedroom types with counts.","operationId":"get_bedroom_options_api_search_v2_bedroom_options_get","parameters":[{"name":"city","in":"query","required":false,"schema":{"type":"string","default":"Austin","title":"City"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/search_v2/explain":{"post":{"tags":["search-v2","search-v2"],"summary":"Explain Apartments","description":"Generate personalized AI recommendations for apartments.\nUses smart caching with budget bucketing to avoid redundant LLM calls.","operationId":"explain_apartments_api_search_v2_explain_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExplainRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/search_v2/explain-stream":{"post":{"tags":["search-v2","search-v2"],"summary":"Explain Apartment Stream","description":"Stream a single apartment's AI analysis token-by-token via SSE.\nReturns cached results instantly or streams LLM generation in real time.","operationId":"explain_apartment_stream_api_search_v2_explain_stream_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExplainRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/search_v2/explanation-cache-stats":{"get":{"tags":["search-v2","search-v2"],"summary":"Get Cache Stats","description":"Get explanation cache statistics for monitoring.","operationId":"get_cache_stats_api_search_v2_explanation_cache_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/search_v2/similar/{apartment_name}":{"get":{"tags":["search-v2","search-v2"],"summary":"Get Similar Apartments Route","description":"Find apartments similar to the given one.\nSimilarity is based on: geographic proximity, price range, lifestyle tags, walk score, and rating.","operationId":"get_similar_apartments_route_api_search_v2_similar__apartment_name__get","parameters":[{"name":"apartment_name","in":"path","required":true,"schema":{"type":"string","title":"Apartment Name"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":5,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/search_v2/load-more-neighborhood":{"post":{"tags":["search-v2","search-v2"],"summary":"Load More By Neighborhood","description":"Load more apartments from a specific neighborhood, excluding already displayed ones.\nReturns apartments with LLM explanations.","operationId":"load_more_by_neighborhood_api_search_v2_load_more_neighborhood_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoadMoreByNeighborhoodRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/search_v2/apartment/{apartment_name}":{"get":{"tags":["search-v2","search-v2"],"summary":"Get Apartment By Name","description":"Look up a specific apartment by name.\nUsed when users manually add apartments to verify if it exists in database.","operationId":"get_apartment_by_name_api_search_v2_apartment__apartment_name__get","parameters":[{"name":"apartment_name","in":"path","required":true,"schema":{"type":"string","title":"Apartment Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/search_v2/filter-preview":{"post":{"tags":["search-v2","search-v2"],"summary":"Get Filter Preview","description":"Preview how many apartments match current filters.\nReturns counts for each filter option to help users avoid zero-result searches.","operationId":"get_filter_preview_api_search_v2_filter_preview_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FilterPreviewRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/search_v2/search":{"post":{"tags":["search-v2"],"summary":"Search Apartments V2","description":"Database-first apartment search.\n\nThis searches our verified database directly instead of relying on AI.\nResults are enriched with all our data (photos, reviews, walk scores, etc.)","operationId":"search_apartments_v2_api_search_v2_search_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchFilters"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/search_v2/search-with-explanations":{"post":{"tags":["search-v2"],"summary":"Search Apartments With Explanations","description":"Enhanced search that includes LLM-generated personalized explanations.\n\nReturns the same structure as /search but adds an 'explanations' object\nwith rich, personalized explanations for each apartment.\n\nNow includes real-time commute calculations via Google Distance Matrix API.\n\nCost: ~$0.0004 per search (GPT-5-mini batched call) + ~$0.005 for commute\nCaching: 48-hour TTL for explanations, 24-hour for commute data\n\nNOTE: If explanation generation times out, results are returned without LLM explanations\nbut with rule-based Tier 1 explanations to ensure users always get results.","operationId":"search_apartments_with_explanations_api_search_v2_search_with_explanations_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchFilters"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/autocomplete/apartments":{"get":{"tags":["autocomplete"],"summary":"Autocomplete Apartments","description":"Typeahead autocomplete for apartment names.\nReturns matching apartments as user types.\n\nTolerates multi-word queries and partial matches:\n- \"trailhead\" finds \"Trailhead Apartments\"\n- \"trailhead east\" finds any listing containing both tokens\n- \"east tr\" finds any listing containing both partials\n\nExample: GET /api/autocomplete/apartments?q=cam&city=Austin\nReturns: Camden Rainey Street, Camden Downtown, etc.","operationId":"autocomplete_apartments_api_autocomplete_apartments_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"description":"Search query","title":"Q"},"description":"Search query"},{"name":"city","in":"query","required":false,"schema":{"type":"string","description":"City to search in","default":"Austin","title":"City"},"description":"City to search in"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":20,"minimum":1,"description":"Max results","default":8,"title":"Limit"},"description":"Max results"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Autocomplete Apartments Api Autocomplete Apartments Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/autocomplete/neighborhoods":{"get":{"tags":["autocomplete"],"summary":"Autocomplete Neighborhoods","description":"Typeahead autocomplete for neighborhood names.","operationId":"autocomplete_neighborhoods_api_autocomplete_neighborhoods_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"description":"Search query","title":"Q"},"description":"Search query"},{"name":"city","in":"query","required":false,"schema":{"type":"string","description":"City to search in","default":"Austin","title":"City"},"description":"City to search in"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":20,"minimum":1,"description":"Max results","default":10,"title":"Limit"},"description":"Max results"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Autocomplete Neighborhoods Api Autocomplete Neighborhoods Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/map-search/bounds":{"post":{"tags":["map-search"],"summary":"Search By Bounds","description":"Search apartments within visible map bounds.\nUsed for Airbnb-style map exploration.\n\nReturns apartments that fall within the lat/lng bounding box,\nwith optional filters applied.","operationId":"search_by_bounds_api_map_search_bounds_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MapBoundsSearch"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Search By Bounds Api Map Search Bounds Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/map-search/apartment/{name}":{"get":{"tags":["map-search"],"summary":"Get Apartment By Name","description":"Get full apartment details by name.\nUsed when user clicks on a map pin or selects from autocomplete.","operationId":"get_apartment_by_name_api_map_search_apartment__name__get","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Apartment By Name Api Map Search Apartment  Name  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/map-search/apartments/batch":{"post":{"tags":["map-search"],"summary":"Get Apartments Batch","description":"Fetch full details for multiple apartments by name.\nUsed by Saved Apartments page to hydrate localStorage data.\nPOST body: { \"names\": [\"Paseo\", \"415 Colorado\", ...] }","operationId":"get_apartments_batch_api_map_search_apartments_batch_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Get Apartments Batch Api Map Search Apartments Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/neighborhoods/profiles":{"get":{"tags":["neighborhoods"],"summary":"Get Neighborhood Profiles","description":"Get all neighborhood profiles with lifestyle scores.\nUsed for admin viewing and neighborhood exploration.","operationId":"get_neighborhood_profiles_api_neighborhoods_profiles_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/neighborhoods/profiles/{region_id}":{"get":{"tags":["neighborhoods"],"summary":"Get Neighborhood Profile","description":"Get detailed profile for a specific neighborhood.","operationId":"get_neighborhood_profile_api_neighborhoods_profiles__region_id__get","parameters":[{"name":"region_id","in":"path","required":true,"schema":{"type":"string","title":"Region Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["neighborhoods"],"summary":"Update Neighborhood Profile","description":"Update a neighborhood profile (admin only).\n\nAllows manual refinement of auto-generated lifestyle scores,\nadding Taco Street notes, and adjusting rent estimates.","operationId":"update_neighborhood_profile_api_neighborhoods_profiles__region_id__put","parameters":[{"name":"region_id","in":"path","required":true,"schema":{"type":"string","title":"Region Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/neighborhoods/quick-profiles":{"get":{"tags":["neighborhoods"],"summary":"Get Quick Profiles","description":"Get available quick profile options for the lifestyle quiz.","operationId":"get_quick_profiles_api_neighborhoods_quick_profiles_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/neighborhoods/major-employers":{"get":{"tags":["neighborhoods"],"summary":"Get Major Employers","description":"Get list of major employers for commute selection.\n\n§3.3 — If `city` is provided, filter to employers in that metro only.\nDefaults to Austin when not specified to preserve legacy behavior.","operationId":"get_major_employers_api_neighborhoods_major_employers_get","parameters":[{"name":"city","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/neighborhoods/recommend":{"post":{"tags":["neighborhoods"],"summary":"Recommend Neighborhoods Endpoint","description":"Recommend neighborhoods based on lifestyle quiz answers.\n\nThis is the main neighborhood matching endpoint that takes user\npreferences and returns ranked neighborhood recommendations.\n\nSupports:\n- Single quick_profile (legacy)\n- Multiple lifestyle_profiles (new multi-select)\n- Vibe words (new multi-select word cloud)","operationId":"recommend_neighborhoods_endpoint_api_neighborhoods_recommend_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LifestyleQuizAnswers"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/neighborhoods/similar/{region_id}":{"get":{"tags":["neighborhoods"],"summary":"Get Similar Neighborhoods Endpoint","description":"Get neighborhoods similar to a given one.\nUsed for \"You might also like\" suggestions.","operationId":"get_similar_neighborhoods_endpoint_api_neighborhoods_similar__region_id__get","parameters":[{"name":"region_id","in":"path","required":true,"schema":{"type":"string","title":"Region Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":3,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/neighborhoods/explore":{"get":{"tags":["neighborhoods"],"summary":"Explore Neighborhoods","description":"Public endpoint for the Neighborhood Explorer page, scoped to one city.\nReturns all neighborhood profiles for the requested metro, enriched with\napartment counts and DB-stored notes. Includes distance_from_downtown\n(metro-specific anchor) for sorting.","operationId":"explore_neighborhoods_api_neighborhoods_explore_get","parameters":[{"name":"city","in":"query","required":false,"schema":{"type":"string","default":"Austin","title":"City"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/neighborhoods/suggest-from-search":{"post":{"tags":["neighborhoods"],"summary":"Suggest Neighborhoods From Search","description":"Suggest additional neighborhoods based on user's current search.\n\nCalled after search results to show \"Neighborhoods worth exploring\"\nthat are similar to what they selected but might have been overlooked.\n\nUses geographic adjacency to only suggest nearby neighborhoods.","operationId":"suggest_neighborhoods_from_search_api_neighborhoods_suggest_from_search_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuggestFromSearchRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/neighborhoods/admin/export":{"get":{"tags":["neighborhoods"],"summary":"Export Profiles","description":"Export all neighborhood profiles as JSON for backup/review.","operationId":"export_profiles_api_neighborhoods_admin_export_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/neighborhoods/admin/list":{"get":{"tags":["neighborhoods"],"summary":"List All Profiles For Admin","description":"Get all neighborhood profiles for admin editing interface.","operationId":"list_all_profiles_for_admin_api_neighborhoods_admin_list_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/compare":{"post":{"tags":["compare"],"summary":"Compare Apartments","operationId":"compare_apartments_api_compare_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompareRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/compare/usage":{"get":{"tags":["compare"],"summary":"Get Comparison Usage","operationId":"get_comparison_usage_api_compare_usage_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/config/wizard-options":{"get":{"tags":["public-config"],"summary":"Get Public Wizard Options","description":"Get wizard options for the public search wizard.","operationId":"get_public_wizard_options_api_config_wizard_options_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/config/quick-searches":{"get":{"tags":["public-config"],"summary":"Get Public Quick Searches","description":"Get active quick searches for public display, optionally scoped to a metro.","operationId":"get_public_quick_searches_api_config_quick_searches_get","parameters":[{"name":"city","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/config/intake-amenities":{"get":{"tags":["public-config"],"summary":"Get Public Intake Amenities","description":"Get intake amenities for the public wizard.","operationId":"get_public_intake_amenities_api_config_intake_amenities_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/config/photo-proxy":{"get":{"tags":["public-config"],"summary":"Proxy Google Photo","description":"Proxy Google Places photos to avoid exposing API key to frontend.\nPublic endpoint - no auth required for photo access.\n\nHardened: rate-limited, `maxwidth` bounded, `ref` URL-encoded so it can't\ninject extra query params into the Google call, and errors are not echoed\nback to the client.","operationId":"proxy_google_photo_api_config_photo_proxy_get","parameters":[{"name":"ref","in":"query","required":true,"schema":{"type":"string","title":"Ref"}},{"name":"maxwidth","in":"query","required":false,"schema":{"type":"integer","default":400,"title":"Maxwidth"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/config/taco-favorites":{"get":{"tags":["public-config"],"summary":"Get Taco Favorites","description":"Get Taco Street favorite POIs for the map overlay. No auth required.","operationId":"get_taco_favorites_api_config_taco_favorites_get","parameters":[{"name":"city","in":"query","required":false,"schema":{"type":"string","title":"City"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/config/metros":{"get":{"tags":["public-config"],"summary":"Get Available Metros","description":"Get available metro areas with configs and apartment counts.\nPublic endpoint — used by the metro selection gate on the home page.\n\nCached (TTL) and DB-fault-tolerant: a brief Atlas blip must not 500 the\nhome page. On error we serve stale cache, or fall back to the static\nconfigs without counts — the picker still works.","operationId":"get_available_metros_api_config_metros_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/config/auth-config":{"get":{"tags":["public-config"],"summary":"Get Auth Public Config","description":"Public auth-related configuration. Used by the frontend to decide\nwhether to render the Turnstile widget and which Google OAuth client_id\nto use when redirecting to accounts.google.com. Safe to expose:\nTurnstile site keys and OAuth client_ids are public by design — only\nthe corresponding secrets must stay backend-only.","operationId":"get_auth_public_config_api_config_auth_config_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/vibe-search/chat/stream":{"post":{"tags":["vibe-search"],"summary":"Vibe Chat Stream","description":"Streaming counterpart to /chat, for sessions on the agent pipeline.\n\nA separate endpoint rather than content-negotiation on /chat: the legacy\npipeline has nothing to stream (one model call, then a response), and\nteaching a 700-line handler to sometimes be a generator is how the fallback\npath stops being trustworthy.\n\nA session not routed to the agent gets a single `fallback` frame and the\nclient re-issues against /chat. That keeps the decision about WHICH\npipeline runs in one place — should_use_agent — instead of duplicating it\nin the frontend.","operationId":"vibe_chat_stream_api_vibe_search_chat_stream_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VibeSearchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/vibe-search/chat":{"post":{"tags":["vibe-search"],"summary":"Vibe Chat","description":"Main Vibe Search conversation endpoint.\nReturns either a follow-up question or search results.\n\nDecomposition status (see also: helpers above this function):\n  ✓ _strip_explicit_removals        — pure transform\n  ✓ _handle_cross_metro_response    — early-return path\n  ✓ _handle_unsupported_response    — early-return path\n  ✓ _dedup_already_shown            — pure transform (more-intent dedup)\n  ✓ _expand_to_similar_neighborhoods — async, Brief 2 §2.3\n  ✓ _run_search_with_expansion       — orchestrates the search flow\n  … _setup_chat_state                — TODO (rate limits, parse, auth)\n  … _build_zero_result_response      — TODO (diagnostics + Claude reply)\n  … _build_question_response         — TODO (_chat_with_ai for follow-ups)\n\nEach TODO would let us unit-test that step in isolation. Filed against\nthe next time we touch this handler.","operationId":"vibe_chat_api_vibe_search_chat_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VibeSearchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/vibe-search/summary":{"post":{"tags":["vibe-search"],"summary":"Generate Summary","description":"Generate an AI summary for search results. Called async by frontend after results load.\n\nThe request body is client-supplied, so everything that can be recovered\nfrom server state is recovered rather than trusted: the criteria come from\nthe session transcript when we have it, and apartments are restricted to\nthe ones this session was actually shown. Otherwise an arbitrary caller\ncould put chosen text into an LLM prompt and bill it to any session id.","operationId":"generate_summary_api_vibe_search_summary_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SummaryRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/vibe-search/lead":{"post":{"tags":["vibe-search"],"summary":"Submit Vibe Lead","description":"Create a lead (and a tour request when apartments are in play).\n\nWrites to the same `leads` collection the intake form uses, tagged\nsource=\"vibe_conversation\" so this path can be measured against it, and\nmirrors into `tour_requests` when we know which apartments the renter was\nlooking at — that is the queue Alexander actually works from.\n\nContact details come from the renter, but everything about WHAT they want\nis read from the server-side transcript rather than the request body: the\nclient has no reason to be authoritative about it, and trusting it would\nlet anyone write arbitrary content into the operator's work queue.","operationId":"submit_vibe_lead_api_vibe_search_lead_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VibeLeadRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/vibe-search/starters":{"get":{"tags":["vibe-search"],"summary":"Get Starter Prompts","description":"Return city-specific conversation starters for the UI.","operationId":"get_starter_prompts_api_vibe_search_starters_get","parameters":[{"name":"city","in":"query","required":false,"schema":{"type":"string","default":"Austin","title":"City"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/vibe-search/report-issue":{"post":{"tags":["vibe-qa"],"summary":"Report Vibe Issue","description":"Report a quality issue with a vibe search conversation.","operationId":"report_vibe_issue_api_vibe_search_report_issue_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IssueReport"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/neighborhoods-v2/recommend":{"post":{"tags":["neighborhoods-v2"],"summary":"Recommend V2","operationId":"recommend_v2_api_neighborhoods_v2_recommend_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuizV2Request"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/agent/home":{"get":{"tags":["agent-readiness"],"summary":"Agent Home","description":"Content-negotiated site root (see module docstring).","operationId":"agent_home_api_agent_home_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/agent/llms.txt":{"get":{"tags":["agent-readiness"],"summary":"Agent Llms Txt","operationId":"agent_llms_txt_api_agent_llms_txt_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/agent/index.md":{"get":{"tags":["agent-readiness"],"summary":"Agent Index Md","operationId":"agent_index_md_api_agent_index_md_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/agent/lead":{"post":{"tags":["agent-readiness"],"summary":"Submit Agent Lead","description":"REST surface over create_agent_lead (documented in llms.txt).","operationId":"submit_agent_lead_api_agent_lead_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentLeadRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/agent/shortlist/{token}":{"get":{"tags":["agent-concierge"],"summary":"Get Shortlist","operationId":"get_shortlist_api_agent_shortlist__token__get","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/healthz":{"get":{"summary":"Healthz","description":"Lightweight health probe for Kubernetes / ingress / uptime monitors.","operationId":"healthz_api_healthz_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}}},"components":{"schemas":{"ABTestRequest":{"properties":{"query":{"type":"string","title":"Query"},"city":{"type":"string","title":"City","default":"Austin"},"eval_run_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Eval Run Id"}},"type":"object","required":["query"],"title":"ABTestRequest"},"AIEnrichNeighborhoodRequest":{"properties":{"neighborhood_name":{"type":"string","title":"Neighborhood Name"}},"type":"object","required":["neighborhood_name"],"title":"AIEnrichNeighborhoodRequest"},"AcceptedChange":{"properties":{"kind":{"type":"string","title":"Kind"},"field":{"type":"string","title":"Field"},"value":{"title":"Value"}},"type":"object","required":["kind","field","value"],"title":"AcceptedChange","description":"A single augmentation change the user accepted."},"AddBuildingRequest":{"properties":{"name":{"type":"string","title":"Name"},"website":{"type":"string","title":"Website"},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address"},"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City"},"google_place_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Google Place Id"}},"type":"object","required":["name","website"],"title":"AddBuildingRequest"},"AdminFee":{"properties":{"raw_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Raw Text"},"amount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Amount"},"frequency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Frequency","default":"one_time"},"citation":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Citation"}},"type":"object","title":"AdminFee"},"AgentContactRequest":{"properties":{"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"}},"type":"object","title":"AgentContactRequest"},"AgentLeadRequest":{"properties":{"contact":{"type":"string","title":"Contact"},"name":{"type":"string","title":"Name","default":""},"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City"},"budget_max":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Budget Max"},"bedrooms":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bedrooms"},"neighborhoods":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Neighborhoods"},"move_in":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Move In"},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note"},"agent":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Agent"}},"type":"object","required":["contact"],"title":"AgentLeadRequest"},"AgentRequest":{"properties":{"user_inputs":{"$ref":"#/components/schemas/UserInputs"},"apartments":{"anyOf":[{"items":{"$ref":"#/components/schemas/ApartmentForExplanation"},"type":"array"},{"type":"null"}],"title":"Apartments"}},"type":"object","required":["user_inputs"],"title":"AgentRequest"},"AgentResponse":{"properties":{"intent":{"$ref":"#/components/schemas/ExtractedIntent"},"explanations":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Explanations"}},"type":"object","required":["intent"],"title":"AgentResponse"},"AnswerBody":{"properties":{"answer":{"type":"string","title":"Answer"},"save_to_notes":{"type":"boolean","title":"Save To Notes","default":false}},"type":"object","required":["answer"],"title":"AnswerBody"},"ApartmentForExplanation":{"properties":{"name":{"type":"string","title":"Name"},"neighborhood":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Neighborhood"},"walk_score":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Walk Score"},"rating":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Rating"},"amenities":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Amenities"},"price_range":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Price Range"},"commute_minutes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Commute Minutes"},"is_taco_favorite":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Taco Favorite","default":false}},"type":"object","required":["name"],"title":"ApartmentForExplanation"},"ApartmentSummary":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"neighborhood":{"type":"string","title":"Neighborhood"},"price_range":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Price Range"},"rating":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Rating"},"walk_score":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Walk Score"},"amenities":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Amenities"},"pet_policy":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pet Policy"},"building_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Building Type"},"lifestyle_tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Lifestyle Tags"}},"type":"object","required":["id","name","neighborhood"],"title":"ApartmentSummary","description":"Summary of apartment data for AI context"},"ApartmentUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City"},"neighborhood":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Neighborhood"},"region":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Region"},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address"},"website":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website"},"rating":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Rating"},"walk_score":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Walk Score"},"transit_score":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Transit Score"},"bike_score":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Bike Score"},"year_built":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Year Built"},"property_tier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Property Tier"},"building_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Building Type"},"leasing_specials":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Leasing Specials"},"pet_policy":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pet Policy"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"},"housing_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Housing Type"},"is_taco_favorite":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Taco Favorite"},"taco_favorite_note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Taco Favorite Note"},"contact_phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contact Phone"},"amenities":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Amenities"},"standard_amenities":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Standard Amenities"},"floor_plans":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Floor Plans"},"total_units":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Units"},"starting_prices":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Starting Prices"},"admin_rank_modifier":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Admin Rank Modifier"},"is_hidden":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Hidden"}},"type":"object","title":"ApartmentUpdate"},"ApplicationFee":{"properties":{"raw_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Raw Text"},"amount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Amount"},"per_person":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Per Person","default":true},"citation":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Citation"}},"type":"object","title":"ApplicationFee"},"ApplyAugmentRequest":{"properties":{"accepted":{"items":{"$ref":"#/components/schemas/AcceptedChange"},"type":"array","title":"Accepted"}},"type":"object","required":["accepted"],"title":"ApplyAugmentRequest"},"ApplyChangeRequest":{"properties":{"message_index":{"type":"integer","title":"Message Index"},"change_index":{"type":"integer","title":"Change Index"}},"type":"object","required":["message_index","change_index"],"title":"ApplyChangeRequest"},"ApplyFixRequest":{"properties":{"fix_index":{"type":"integer","title":"Fix Index"},"edit":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Edit"}},"type":"object","required":["fix_index"],"title":"ApplyFixRequest"},"AugmentChangeOut":{"properties":{"kind":{"type":"string","title":"Kind"},"field":{"type":"string","title":"Field"},"value":{"title":"Value"},"old_value":{"title":"Old Value"},"evidence":{"type":"string","title":"Evidence","default":""}},"type":"object","required":["kind","field","value"],"title":"AugmentChangeOut"},"AugmentRequest":{"properties":{"saved_notes":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Saved Notes"}},"type":"object","title":"AugmentRequest","description":"Optional saved apartment notes included in the augmentation prompt."},"AugmentResponse":{"properties":{"enabled":{"type":"boolean","title":"Enabled"},"session_id":{"type":"string","title":"Session Id"},"changes":{"items":{"$ref":"#/components/schemas/AugmentChangeOut"},"type":"array","title":"Changes"},"confidence":{"type":"string","title":"Confidence"},"summary":{"type":"string","title":"Summary"},"cached":{"type":"boolean","title":"Cached","default":false}},"type":"object","required":["enabled","session_id","changes","confidence","summary"],"title":"AugmentResponse"},"AutoIngestRequest":{"properties":{"name":{"type":"string","title":"Name"},"city":{"type":"string","title":"City","default":"Austin"},"website_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website Url"},"skip_firecrawl":{"type":"boolean","title":"Skip Firecrawl","default":false},"deep_scrape":{"type":"boolean","title":"Deep Scrape","default":true},"place_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Place Id"}},"type":"object","required":["name"],"title":"AutoIngestRequest","description":"Request for single apartment auto-ingest with full enrichment."},"BatchEnrichmentRequest":{"properties":{"limit":{"type":"integer","title":"Limit","default":10},"skip_recently_enriched":{"type":"boolean","title":"Skip Recently Enriched","default":true},"recently_days":{"type":"integer","title":"Recently Days","default":7}},"type":"object","title":"BatchEnrichmentRequest","description":"Schema for batch enrichment request"},"BatchPricingUpdate":{"properties":{"updates":{"items":{},"type":"array","title":"Updates"}},"type":"object","required":["updates"],"title":"BatchPricingUpdate"},"BatchTestRequest":{"properties":{"apartment_name":{"type":"string","title":"Apartment Name"},"test_scenarios":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Test Scenarios"}},"type":"object","required":["apartment_name"],"title":"BatchTestRequest","description":"Test multiple configurations at once."},"Body_csv_upload_import_api_admin_bulk_import_csv_upload_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"}},"type":"object","required":["file"],"title":"Body_csv_upload_import_api_admin_bulk_import_csv_upload_post"},"Body_import_csv_api_admin_import_csv_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"}},"type":"object","required":["file"],"title":"Body_import_csv_api_admin_import_csv_post"},"Body_import_pricing_csv_api_admin_pricing_import_csv_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"}},"type":"object","required":["file"],"title":"Body_import_pricing_csv_api_admin_pricing_import_csv_post"},"Body_upload_firedev_json_api_enrichment_firedev_upload_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_firedev_json_api_enrichment_firedev_upload_post"},"BulkAmenityUpdate":{"properties":{"apartment_names":{"items":{"type":"string"},"type":"array","title":"Apartment Names"},"action":{"type":"string","title":"Action"},"community_amenities":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Community Amenities"},"standard_amenities":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Standard Amenities"}},"type":"object","required":["apartment_names","action"],"title":"BulkAmenityUpdate"},"BulkImportRequest":{"properties":{"apartments":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Apartments"},"include_firecrawl":{"type":"boolean","title":"Include Firecrawl","default":true},"include_photos":{"type":"boolean","title":"Include Photos","default":true},"dry_run":{"type":"boolean","title":"Dry Run","default":false}},"type":"object","required":["apartments"],"title":"BulkImportRequest","description":"Request for bulk CSV import."},"BulkNotesRequest":{"properties":{"notes":{"additionalProperties":{"type":"string"},"type":"object","title":"Notes"},"session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id"}},"type":"object","required":["notes"],"title":"BulkNotesRequest"},"BulkYearBuiltFix":{"properties":{"fixes":{"items":{},"type":"array","title":"Fixes"}},"type":"object","required":["fixes"],"title":"BulkYearBuiltFix"},"CaptureGoldRequest":{"properties":{"source_run_id":{"type":"string","title":"Source Run Id"},"source_test_id":{"type":"string","title":"Source Test Id"},"label":{"type":"string","title":"Label"},"admin_notes":{"type":"string","title":"Admin Notes","default":""},"forbidden_apartments":{"items":{"type":"string"},"type":"array","title":"Forbidden Apartments","default":[]},"score_tolerance":{"type":"integer","title":"Score Tolerance","default":10},"top_n":{"type":"integer","title":"Top N","default":8}},"type":"object","required":["source_run_id","source_test_id","label"],"title":"CaptureGoldRequest"},"CaseFromResultRequest":{"properties":{"run_id":{"type":"string","title":"Run Id"},"test_id":{"type":"string","title":"Test Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"assertions":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Assertions","default":[]}},"type":"object","required":["run_id","test_id"],"title":"CaseFromResultRequest"},"CategorizedAmenity":{"properties":{"category_name":{"type":"string","title":"Category Name"},"amenities":{"items":{"type":"string"},"type":"array","title":"Amenities"}},"type":"object","required":["category_name","amenities"],"title":"CategorizedAmenity"},"ChangePasswordRequest":{"properties":{"current_password":{"type":"string","title":"Current Password"},"new_password":{"type":"string","title":"New Password"}},"type":"object","required":["current_password","new_password"],"title":"ChangePasswordRequest"},"ChatMessage":{"properties":{"role":{"type":"string","title":"Role"},"content":{"type":"string","title":"Content"}},"type":"object","required":["role","content"],"title":"ChatMessage"},"CleanupCohortRunRequest":{"properties":{"cohort_key":{"type":"string","title":"Cohort Key"},"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City"},"limit":{"type":"integer","title":"Limit","default":10},"offset":{"type":"integer","title":"Offset","default":0},"source":{"type":"string","title":"Source","default":"website_first"},"dry_run":{"type":"boolean","title":"Dry Run","default":false},"background":{"type":"boolean","title":"Background","default":false},"per_item_timeout_seconds":{"type":"integer","title":"Per Item Timeout Seconds","default":120}},"type":"object","required":["cohort_key"],"title":"CleanupCohortRunRequest"},"CleanupJobRetryRequest":{"properties":{"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"},"per_item_timeout_seconds":{"type":"integer","title":"Per Item Timeout Seconds","default":180}},"type":"object","title":"CleanupJobRetryRequest"},"CommuteAnchor":{"properties":{"is_wfh":{"type":"boolean","title":"Is Wfh","default":false},"employer_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Employer Id"},"employer_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Employer Name"},"work_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Work Address"},"work_lat":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Work Lat"},"work_lng":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Work Lng"},"max_commute_minutes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Commute Minutes"}},"type":"object","title":"CommuteAnchor","description":"Work-location anchor — feeds the search rebuild's LocationIntent."},"CommuteAnchorLite":{"properties":{"is_wfh":{"type":"boolean","title":"Is Wfh","default":false},"work_lat":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Work Lat"},"work_lng":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Work Lng"},"max_commute_minutes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Commute Minutes"}},"type":"object","title":"CommuteAnchorLite"},"CompareRequest":{"properties":{"apartment_names":{"items":{"type":"string"},"type":"array","title":"Apartment Names"},"user_context":{"additionalProperties":true,"type":"object","title":"User Context"}},"type":"object","required":["apartment_names"],"title":"CompareRequest"},"ConfirmAddApartmentRequest":{"properties":{"name":{"type":"string","title":"Name"},"city":{"type":"string","title":"City","default":"Austin"},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address"},"neighborhood":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Neighborhood"},"property_manager":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Property Manager"},"website":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"},"latitude":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Latitude"},"longitude":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Longitude"},"place_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Place Id"},"google_maps_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Google Maps Url"},"rating":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Rating"},"user_ratings_total":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"User Ratings Total"},"reviews":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Reviews"},"photos":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Photos"},"opening_hours":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Opening Hours"},"business_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Business Status"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"}},"type":"object","required":["name"],"title":"ConfirmAddApartmentRequest"},"ConsolidationRequest":{"properties":{"master_neighborhoods":{"additionalProperties":true,"type":"object","title":"Master Neighborhoods"}},"type":"object","required":["master_neighborhoods"],"title":"ConsolidationRequest"},"CreateVersionRequest":{"properties":{"content":{"type":"string","title":"Content"},"description":{"type":"string","title":"Description"},"bump":{"type":"string","title":"Bump","default":"patch"},"model_default":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Model Default"},"notes":{"type":"string","title":"Notes","default":""},"created_by":{"type":"string","title":"Created By","default":"admin"}},"type":"object","required":["content","description"],"title":"CreateVersionRequest"},"Criteria":{"properties":{"bedrooms":{"anyOf":[{"type":"integer"},{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Bedrooms"},"budget_max":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Budget Max"},"min_sqft":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Min Sqft"},"move_in":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Move In"},"must_haves":{"items":{"type":"string"},"type":"array","title":"Must Haves"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","title":"Criteria"},"DataQualityBulkFixRequest":{"properties":{"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City"},"issue_family":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Issue Family"},"recommended_action":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Recommended Action"},"action":{"type":"string","title":"Action"},"strict_action_match":{"type":"boolean","title":"Strict Action Match","default":true},"limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Limit"},"offset":{"type":"integer","title":"Offset","default":0},"dry_run":{"type":"boolean","title":"Dry Run","default":false},"background":{"type":"boolean","title":"Background","default":true},"source":{"type":"string","title":"Source","default":"website_only"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"},"per_item_timeout_seconds":{"type":"integer","title":"Per Item Timeout Seconds","default":120},"fallback_external":{"type":"boolean","title":"Fallback External","default":true}},"type":"object","required":["action"],"title":"DataQualityBulkFixRequest"},"DeepResearchRequest":{"properties":{"apartment_name":{"type":"string","title":"Apartment Name"},"research_type":{"type":"string","title":"Research Type","default":"general"}},"type":"object","required":["apartment_name"],"title":"DeepResearchRequest","description":"Request for deep AI research on an apartment"},"DeleteAccountRequest":{"properties":{"password":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Password"}},"type":"object","title":"DeleteAccountRequest","description":"Body for /auth/delete-account — password optional for OAuth accounts."},"DossierPatchRequest":{"properties":{"criteria":{"anyOf":[{"$ref":"#/components/schemas/SearchCriteria"},{"type":"null"}]},"locator_context":{"anyOf":[{"$ref":"#/components/schemas/LocatorContext"},{"type":"null"}]},"source":{"type":"string","enum":["criteria_search","vibe_search","map_browse","quiz","explicit","admin"],"title":"Source","default":"explicit"}},"type":"object","title":"DossierPatchRequest","description":"Partial update — merges into the existing dossier at sub-object level.\nAny sub-object not present is left untouched. Empty fields inside a\nprovided sub-object overwrite (use explicit null/[] to clear)."},"DossierUpsertRequest":{"properties":{"session_id":{"type":"string","title":"Session Id"},"user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Id"},"criteria":{"anyOf":[{"$ref":"#/components/schemas/SearchCriteria"},{"type":"null"}]},"locator_context":{"anyOf":[{"$ref":"#/components/schemas/LocatorContext"},{"type":"null"}]},"source":{"type":"string","enum":["criteria_search","vibe_search","map_browse","quiz","explicit","admin"],"title":"Source","default":"explicit"}},"type":"object","required":["session_id"],"title":"DossierUpsertRequest","description":"Create-or-replace the dossier for a given session."},"EmbeddingRequest":{"properties":{"city":{"type":"string","title":"City","default":"Austin"},"force_regenerate":{"type":"boolean","title":"Force Regenerate","default":false}},"type":"object","title":"EmbeddingRequest"},"EnabledTagsUpdate":{"properties":{"enabled_tags":{"items":{"type":"string"},"type":"array","title":"Enabled Tags"}},"type":"object","required":["enabled_tags"],"title":"EnabledTagsUpdate"},"EnrichWave2Request":{"properties":{"dry_run":{"type":"boolean","title":"Dry Run","default":true}},"type":"object","title":"EnrichWave2Request"},"EnrichmentResult-Input":{"properties":{"enrichment_status":{"type":"string","title":"Enrichment Status"},"data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Data"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"},"successful_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Successful Url"}},"type":"object","required":["enrichment_status"],"title":"EnrichmentResult","description":"Schema for enrichment update data"},"EnrichmentResult-Output":{"properties":{"total_received":{"type":"integer","title":"Total Received"},"matched":{"type":"integer","title":"Matched"},"enriched":{"type":"integer","title":"Enriched"},"created":{"type":"integer","title":"Created"},"skipped":{"type":"integer","title":"Skipped"},"errors":{"items":{"type":"string"},"type":"array","title":"Errors"},"details":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Details"}},"type":"object","required":["total_received","matched","enriched","created","skipped","errors","details"],"title":"EnrichmentResult"},"EvalTestCase":{"properties":{"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"query":{"type":"string","title":"Query"},"target_metro":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target Metro"},"tags":{"items":{"type":"string"},"type":"array","title":"Tags","default":[]},"assertions":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Assertions","default":[]}},"type":"object","required":["query"],"title":"EvalTestCase"},"ExplainRequest":{"properties":{"apartment_names":{"items":{"type":"string"},"type":"array","title":"Apartment Names"},"user_context":{"additionalProperties":true,"type":"object","title":"User Context"},"mode":{"type":"string","title":"Mode","default":"detailed"}},"additionalProperties":true,"type":"object","required":["apartment_names"],"title":"ExplainRequest","description":"Request body for async personalized recommendation generation."},"ExtractedIntent":{"properties":{"priority_neighborhoods":{"items":{"type":"string"},"type":"array","title":"Priority Neighborhoods"},"location_keywords":{"items":{"type":"string"},"type":"array","title":"Location Keywords"},"hidden_preferences":{"items":{"type":"string"},"type":"array","title":"Hidden Preferences"},"implied_dealbreakers":{"items":{"type":"string"},"type":"array","title":"Implied Dealbreakers"},"boost_walkability":{"type":"boolean","title":"Boost Walkability","default":false},"boost_nature":{"type":"boolean","title":"Boost Nature","default":false},"boost_nightlife":{"type":"boolean","title":"Boost Nightlife","default":false},"boost_family":{"type":"boolean","title":"Boost Family","default":false},"boost_value":{"type":"boolean","title":"Boost Value","default":false},"boost_grocery":{"type":"boolean","title":"Boost Grocery","default":false},"user_priorities":{"items":{"type":"string"},"type":"array","title":"User Priorities"},"explanation_context":{"type":"string","title":"Explanation Context","default":""},"confidence":{"type":"number","title":"Confidence","default":0.0}},"type":"object","title":"ExtractedIntent","description":"AI-extracted intent from user inputs"},"ExtractionMetadata":{"properties":{"extracted_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Extracted At"},"source_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Url"},"extraction_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Extraction Version"}},"type":"object","title":"ExtractionMetadata"},"Fee":{"properties":{"name":{"type":"string","title":"Name"},"raw_text":{"type":"string","title":"Raw Text"},"amount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Amount"}},"type":"object","required":["name","raw_text"],"title":"Fee","description":"A single non-rent fee, kept deliberately loose. Fee disclosure is\nwildly non-standardized across apartment sites, so raw_text is the\nsource of truth for display; amount is best-effort for future\nsorting/filtering only. No frequency normalization."},"FilterPreviewRequest":{"properties":{"city":{"type":"string","title":"City","default":"Austin"},"neighborhoods":{"items":{"type":"string"},"type":"array","title":"Neighborhoods"},"lifestyle_goals":{"items":{"type":"string"},"type":"array","title":"Lifestyle Goals"},"walkability_tiers":{"items":{"type":"string"},"type":"array","title":"Walkability Tiers"},"building_ages":{"items":{"type":"string"},"type":"array","title":"Building Ages"},"min_year_built":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Min Year Built"},"min_budget":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Min Budget"},"max_budget":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Budget"},"budget_flexibility":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Budget Flexibility"},"bedrooms":{"items":{"type":"string"},"type":"array","title":"Bedrooms"},"standard_amenities":{"items":{"type":"string"},"type":"array","title":"Standard Amenities"},"min_rating":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Min Rating"},"has_special":{"type":"boolean","title":"Has Special","default":false},"senior_housing":{"type":"boolean","title":"Senior Housing","default":false},"student_housing":{"type":"boolean","title":"Student Housing","default":false},"pet_friendly":{"type":"boolean","title":"Pet Friendly","default":false}},"type":"object","title":"FilterPreviewRequest","description":"Request model for filter preview - shows counts for each option."},"FiredevApartment":{"properties":{"canonical_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Canonical Url"},"original_url_provided":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Original Url Provided"},"url_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url Status"},"apartment_name":{"type":"string","title":"Apartment Name"},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address"},"phone_numbers":{"anyOf":[{"items":{"$ref":"#/components/schemas/PhoneNumber"},"type":"array"},{"type":"null"}],"title":"Phone Numbers"},"year_built":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Year Built"},"total_units":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Units"},"stories":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Stories"},"office_hours":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Office Hours"},"pet_policy":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pet Policy"},"pet_policy_citation":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pet Policy Citation"},"leasing_specials":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Leasing Specials"},"leasing_specials_citation":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Leasing Specials Citation"},"advertised_rent_range":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Advertised Rent Range"},"parking_info":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parking Info"},"parking_info_citation":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parking Info Citation"},"application_fee":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Application Fee"},"application_fee_citation":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Application Fee Citation"},"parking_fees":{"anyOf":[{"$ref":"#/components/schemas/ParkingFees"},{"type":"null"}]},"application_fee_structured":{"anyOf":[{"$ref":"#/components/schemas/ApplicationFee"},{"type":"null"}]},"admin_fee":{"anyOf":[{"$ref":"#/components/schemas/AdminFee"},{"type":"null"}]},"virtual_tour_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Virtual Tour Url"},"lease_terms":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Lease Terms"},"image_urls":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Image Urls"},"fees":{"anyOf":[{"items":{"$ref":"#/components/schemas/Fee"},"type":"array"},{"type":"null"}],"title":"Fees"},"floorplans":{"anyOf":[{"items":{"$ref":"#/components/schemas/Floorplan"},"type":"array"},{"type":"null"}],"title":"Floorplans"},"categorized_amenities":{"anyOf":[{"items":{"$ref":"#/components/schemas/CategorizedAmenity"},"type":"array"},{"type":"null"}],"title":"Categorized Amenities"},"extraction_metadata":{"anyOf":[{"$ref":"#/components/schemas/ExtractionMetadata"},{"type":"null"}]}},"type":"object","required":["apartment_name"],"title":"FiredevApartment"},"FiredevPayload":{"properties":{"apartments":{"items":{"$ref":"#/components/schemas/FiredevApartment"},"type":"array","title":"Apartments"}},"type":"object","required":["apartments"],"title":"FiredevPayload"},"Floorplan":{"properties":{"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"plan_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Plan Name"},"bedrooms":{"anyOf":[{},{"type":"null"}],"title":"Bedrooms"},"bathrooms":{"anyOf":[{},{"type":"null"}],"title":"Bathrooms"},"sq_ft":{"anyOf":[{},{"type":"null"}],"title":"Sq Ft"},"sq_ft_low":{"anyOf":[{},{"type":"null"}],"title":"Sq Ft Low"},"sq_ft_high":{"anyOf":[{},{"type":"null"}],"title":"Sq Ft High"},"starting_price":{"anyOf":[{},{"type":"null"}],"title":"Starting Price"},"price_low":{"anyOf":[{},{"type":"null"}],"title":"Price Low"},"price_high":{"anyOf":[{},{"type":"null"}],"title":"Price High"},"is_call_for_pricing":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Call For Pricing"},"units_available_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Units Available Count"},"available_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Available Date"},"availability":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Availability"},"plan_image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Plan Image Url"}},"type":"object","title":"Floorplan"},"FloorplanUpdate":{"properties":{"starting_prices":{"additionalProperties":true,"type":"object","title":"Starting Prices"}},"type":"object","required":["starting_prices"],"title":"FloorplanUpdate","description":"Full floorplan update — replaces starting_prices + starting_prices_display."},"FullDossier":{"properties":{"dossier":{"$ref":"#/components/schemas/UserDossier"},"saved_apartments":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Saved Apartments"},"apartment_notes":{"additionalProperties":true,"type":"object","title":"Apartment Notes"},"saved_count":{"type":"integer","title":"Saved Count","default":0}},"type":"object","required":["dossier"],"title":"FullDossier","description":"The complete Dossier per CONTEXT.md — everything we remember about a\nrenter, assembled from all storage locations by\n`services.dossier_service.get_full_dossier()`.\n\n- `dossier`: criteria + locator context (the `user_dossiers` doc)\n- `saved_apartments`: live-merged saved list per ADR-0008 (renter fields\n  `user_notes` / `saved_at` / `source` preserved from the saved row)\n- `apartment_notes`: `{apartment_id: note_text}` from `user_notes`"},"GenerateTestsRequest":{"properties":{"metro":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Metro"},"count":{"type":"integer","title":"Count","default":10}},"type":"object","title":"GenerateTestsRequest"},"GoogleOAuthCallbackRequest":{"properties":{"code":{"type":"string","title":"Code"},"redirect_uri":{"type":"string","title":"Redirect Uri"},"signup_source":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Signup Source"}},"type":"object","required":["code","redirect_uri"],"title":"GoogleOAuthCallbackRequest","description":"Body for /auth/google/callback — the front-end POSTs the one-time\n`code` it received from Google plus the exact `redirect_uri` it used in\nthe initial redirect (Google requires the values to match)."},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ImportResult":{"properties":{"success":{"type":"boolean","title":"Success"},"total_rows":{"type":"integer","title":"Total Rows"},"updated":{"type":"integer","title":"Updated"},"errors":{"items":{"type":"string"},"type":"array","title":"Errors"},"skipped":{"type":"integer","title":"Skipped"}},"type":"object","required":["success","total_rows","updated","errors","skipped"],"title":"ImportResult"},"IngestFeedbackRequest":{"properties":{"run_id":{"type":"string","title":"Run Id"}},"type":"object","required":["run_id"],"title":"IngestFeedbackRequest"},"IntentExtractionRequest":{"properties":{"natural_language":{"type":"string","title":"Natural Language"},"current_filters":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Current Filters"}},"type":"object","required":["natural_language"],"title":"IntentExtractionRequest"},"IssueReport":{"properties":{"session_id":{"type":"string","title":"Session Id"},"issue_type":{"type":"string","title":"Issue Type","description":"category: wrong_results | missing_results | wrong_neighborhood | bad_response | extraction_fail | other"},"description":{"type":"string","maxLength":2000,"minLength":1,"title":"Description"},"conversation":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Conversation","description":"Full chat history"},"criteria":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Criteria"},"apartments_returned":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Apartments Returned"},"city":{"type":"string","title":"City","default":"Austin"}},"type":"object","required":["session_id","issue_type","description"],"title":"IssueReport"},"IssueUpdate":{"properties":{"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"admin_notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Admin Notes"}},"type":"object","title":"IssueUpdate"},"KnowledgeEntry":{"properties":{"category":{"type":"string","title":"Category"},"metro":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Metro"},"content":{"type":"string","title":"Content"},"tags":{"items":{"type":"string"},"type":"array","title":"Tags","default":[]},"neighborhoods":{"items":{"type":"string"},"type":"array","title":"Neighborhoods","default":[]},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"voice_exemplar":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Voice Exemplar"}},"type":"object","required":["category","content"],"title":"KnowledgeEntry"},"KnowledgeUpdate":{"properties":{"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"metro":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Metro"},"content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tags"},"neighborhoods":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Neighborhoods"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"voice_exemplar":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Voice Exemplar"}},"type":"object","title":"KnowledgeUpdate"},"L9RunRequest":{"properties":{"runs":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Runs"},"test_case_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Test Case Ids"},"city":{"type":"string","title":"City","default":"Austin"}},"type":"object","title":"L9RunRequest"},"LeadSubmission":{"properties":{"name":{"type":"string","title":"Name"},"email":{"type":"string","title":"Email"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"},"move_in_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Move In Date"},"budget":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Budget"},"bedrooms":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bedrooms"},"preferred_neighborhoods":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Preferred Neighborhoods"},"must_haves":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Must Haves"},"deal_breakers":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Deal Breakers"},"additional_notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Additional Notes"}},"type":"object","required":["name","email"],"title":"LeadSubmission","description":"Lead submission from intake form."},"LifestyleQuizAnswers":{"properties":{"walkability":{"anyOf":[{"type":"integer","maximum":10.0,"minimum":1.0},{"type":"null"}],"title":"Walkability"},"nightlife_social":{"anyOf":[{"type":"integer","maximum":10.0,"minimum":1.0},{"type":"null"}],"title":"Nightlife Social"},"outdoor_recreation":{"anyOf":[{"type":"integer","maximum":10.0,"minimum":1.0},{"type":"null"}],"title":"Outdoor Recreation"},"quiet_peaceful":{"anyOf":[{"type":"integer","maximum":10.0,"minimum":1.0},{"type":"null"}],"title":"Quiet Peaceful"},"foodie_dining":{"anyOf":[{"type":"integer","maximum":10.0,"minimum":1.0},{"type":"null"}],"title":"Foodie Dining"},"pet_friendly":{"anyOf":[{"type":"integer","maximum":10.0,"minimum":1.0},{"type":"null"}],"title":"Pet Friendly"},"luxury_upscale":{"anyOf":[{"type":"integer","maximum":10.0,"minimum":1.0},{"type":"null"}],"title":"Luxury Upscale"},"affordability":{"anyOf":[{"type":"integer","maximum":10.0,"minimum":1.0},{"type":"null"}],"title":"Affordability"},"work_location":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Work Location"},"max_commute_minutes":{"anyOf":[{"type":"integer","maximum":90.0,"minimum":5.0},{"type":"null"}],"title":"Max Commute Minutes"},"max_budget":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Budget"},"quick_profile":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Quick Profile"},"lifestyle_profiles":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Lifestyle Profiles"},"vibe_words":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Vibe Words"},"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City","default":"Austin"}},"type":"object","title":"LifestyleQuizAnswers","description":"User's answers from the lifestyle quiz."},"LinkSessionRequest":{"properties":{"session_id":{"type":"string","title":"Session Id"}},"type":"object","required":["session_id"],"title":"LinkSessionRequest"},"LoadMoreByNeighborhoodRequest":{"properties":{"city":{"type":"string","title":"City","default":"Austin"},"neighborhood":{"type":"string","title":"Neighborhood"},"exclude_names":{"items":{"type":"string"},"type":"array","title":"Exclude Names","default":[]},"max_budget":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Budget"},"bedrooms":{"items":{"type":"string"},"type":"array","title":"Bedrooms","default":[]},"lifestyle_goals":{"items":{"type":"string"},"type":"array","title":"Lifestyle Goals","default":[]},"limit":{"type":"integer","title":"Limit","default":10},"user_preferences":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"User Preferences"},"work_coords":{"anyOf":[{"additionalProperties":{"type":"number"},"type":"object"},{"type":"null"}],"title":"Work Coords"}},"type":"object","required":["neighborhood"],"title":"LoadMoreByNeighborhoodRequest","description":"Request model for loading more apartments from a specific neighborhood."},"LocatorContext":{"properties":{"research_stage":{"anyOf":[{"type":"string","enum":["just_beginning","some_research","extensive"]},{"type":"null"}],"title":"Research Stage"},"moving_from":{"anyOf":[{"type":"string","enum":["local","out_of_state","out_of_country"]},{"type":"null"}],"title":"Moving From"},"why_austin":{"items":{"type":"string"},"type":"array","title":"Why Austin"},"household":{"anyOf":[{"type":"string","enum":["solo","partner","roommates","family"]},{"type":"null"}],"title":"Household"},"move_in_timeline":{"anyOf":[{"type":"string","enum":["asap","1-2months","2plus","exploring","custom"]},{"type":"null"}],"title":"Move In Timeline"},"custom_move_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Custom Move Date"},"lease_term":{"anyOf":[{"type":"string","enum":["short","standard","flexible"]},{"type":"null"}],"title":"Lease Term"},"roadblocks":{"items":{"type":"string"},"type":"array","title":"Roadblocks"},"anything_else":{"type":"string","title":"Anything Else","default":""}},"type":"object","title":"LocatorContext","description":"Locator-relevant fields. Never flow into search. Used by the admin\nClient Dossier view and as context for follow-up locator calls."},"ManualAddApartmentRequest":{"properties":{"name":{"type":"string","title":"Name"},"city":{"type":"string","title":"City","default":"Austin"},"address":{"type":"string","title":"Address"},"neighborhood":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Neighborhood"},"property_manager":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Property Manager"},"website":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website"}},"type":"object","required":["name","address"],"title":"ManualAddApartmentRequest"},"ManualDataUpdate":{"properties":{"starting_price":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Starting Price"},"price_ranges":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Price Ranges"},"pricing_confidence":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pricing Confidence"},"pets_allowed":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Pets Allowed"},"dogs_allowed":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Dogs Allowed"},"cats_allowed":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Cats Allowed"},"all_breeds_allowed":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"All Breeds Allowed"},"pet_notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pet Notes"},"parking_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parking Type"},"parking_cost":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parking Cost"},"specials":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Specials"},"property_tier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Property Tier"},"neighborhood":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Neighborhood"}},"type":"object","title":"ManualDataUpdate","description":"Manual updates for apartment data."},"ManualPriceUpdate":{"properties":{"apartment_name":{"type":"string","title":"Apartment Name"},"starting_price":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Starting Price"},"price_range_low":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Price Range Low"},"price_range_high":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Price Range High"},"studio_price":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Studio Price"},"one_br_price":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"One Br Price"},"two_br_price":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Two Br Price"},"three_br_price":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Three Br Price"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","required":["apartment_name"],"title":"ManualPriceUpdate"},"ManualReviewStateUpdateRequest":{"properties":{"apartment_id":{"type":"string","title":"Apartment Id"},"status":{"type":"string","title":"Status"},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note"}},"type":"object","required":["apartment_id","status"],"title":"ManualReviewStateUpdateRequest"},"MapBoundsSearch":{"properties":{"north":{"type":"number","title":"North"},"south":{"type":"number","title":"South"},"east":{"type":"number","title":"East"},"west":{"type":"number","title":"West"},"walkability_tiers":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Walkability Tiers"},"max_budget":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Budget"},"min_rating":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Min Rating"},"pet_friendly":{"type":"boolean","title":"Pet Friendly","default":false},"bedrooms":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Bedrooms"},"amenities":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Amenities"},"limit":{"type":"integer","title":"Limit","default":50}},"type":"object","required":["north","south","east","west"],"title":"MapBoundsSearch","description":"Search parameters based on visible map bounds"},"ModelConfigUpdate":{"properties":{"primary_model":{"type":"string","title":"Primary Model"},"primary_provider":{"type":"string","title":"Primary Provider"},"fallback_model":{"type":"string","title":"Fallback Model","default":""},"fallback_provider":{"type":"string","title":"Fallback Provider","default":""},"temperature":{"type":"number","title":"Temperature","default":0.7},"max_tokens":{"type":"integer","title":"Max Tokens","default":2000}},"type":"object","required":["primary_model","primary_provider"],"title":"ModelConfigUpdate"},"NameEntry":{"properties":{"name":{"type":"string","title":"Name"},"source_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Url"},"website":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website"},"income_restricted":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Income Restricted"},"income_restriction_note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Income Restriction Note"},"build_to_rent":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Build To Rent"}},"type":"object","required":["name"],"title":"NameEntry","description":"One discovered property. `source_url` records WHERE it was found (a\nlisting page, a broker sheet, a neighborhood sweep) so a bad source can be\ntraced later; `website` short-circuits Wave 1's website hunt and gives it\nsomething to verify Google Places against, exactly like the CSV path."},"NeighborhoodProfileUpdate":{"properties":{"lifestyle_scores":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Lifestyle Scores"},"typical_rent":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Typical Rent"},"ideal_for":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Ideal For"},"less_ideal_for":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Less Ideal For"},"vibe_tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Vibe Tags"},"taco_notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Taco Notes"}},"type":"object","title":"NeighborhoodProfileUpdate"},"OnboardNamesRequest":{"properties":{"names":{"anyOf":[{"type":"string"},{"items":{"anyOf":[{"$ref":"#/components/schemas/NameEntry"},{"type":"string"}]},"type":"array"}],"title":"Names"},"city":{"type":"string","title":"City"},"dry_run":{"type":"boolean","title":"Dry Run","default":true},"added_via":{"type":"string","title":"Added Via","default":"name_onboard"}},"type":"object","required":["names","city"],"title":"OnboardNamesRequest"},"POICreate":{"properties":{"city":{"type":"string","title":"City"},"name":{"type":"string","title":"Name"},"category":{"type":"string","title":"Category"},"subcategory":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subcategory"},"lat":{"type":"number","title":"Lat"},"lng":{"type":"number","title":"Lng"},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"taco_notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Taco Notes"},"is_taco_favorite":{"type":"boolean","title":"Is Taco Favorite","default":false},"employees_approx":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Employees Approx"},"metro":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Metro"},"google_place_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Google Place Id"},"photo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Photo Url"},"website":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website"},"rating":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Rating"}},"type":"object","required":["city","name","category","lat","lng"],"title":"POICreate"},"POIUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"subcategory":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subcategory"},"lat":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lat"},"lng":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lng"},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"taco_notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Taco Notes"},"is_taco_favorite":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Taco Favorite"},"employees_approx":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Employees Approx"},"photo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Photo Url"},"website":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website"},"rating":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Rating"}},"type":"object","title":"POIUpdate"},"ParkingFeeItem":{"properties":{"type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type"},"amount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Amount"},"frequency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Frequency","default":"monthly"}},"type":"object","title":"ParkingFeeItem"},"ParkingFees":{"properties":{"raw_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Raw Text"},"parsed":{"anyOf":[{"items":{"$ref":"#/components/schemas/ParkingFeeItem"},"type":"array"},{"type":"null"}],"title":"Parsed"},"citation":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Citation"}},"type":"object","title":"ParkingFees"},"PhoneNumber":{"properties":{"number":{"type":"string","title":"Number"},"type":{"type":"string","title":"Type","default":"general"},"citation":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Citation"}},"type":"object","required":["number"],"title":"PhoneNumber"},"PricingReviewLoopRequest":{"properties":{"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City"},"limit":{"type":"integer","title":"Limit","default":100},"lanes":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Lanes"},"include_manual":{"type":"boolean","title":"Include Manual","default":false},"refresh_from_db":{"type":"boolean","title":"Refresh From Db","default":true},"background":{"type":"boolean","title":"Background","default":true},"source":{"type":"string","title":"Source","default":"website_first"}},"type":"object","title":"PricingReviewLoopRequest"},"PricingReviewRunnerRequest":{"properties":{"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City"},"limit":{"type":"integer","title":"Limit","default":100},"lanes":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Lanes"},"include_manual":{"type":"boolean","title":"Include Manual","default":false},"refresh_from_db":{"type":"boolean","title":"Refresh From Db","default":true},"source":{"type":"string","title":"Source","default":"website_first"},"mode":{"type":"string","title":"Mode","default":"cadence"},"interval_seconds":{"type":"integer","title":"Interval Seconds","default":300},"idle_poll_seconds":{"type":"integer","title":"Idle Poll Seconds","default":60}},"type":"object","title":"PricingReviewRunnerRequest"},"ProfileUpdateRequest":{"properties":{"lifestyle_scores":{"anyOf":[{"additionalProperties":{"type":"integer"},"type":"object"},{"type":"null"}],"title":"Lifestyle Scores"},"typical_rent":{"anyOf":[{"additionalProperties":{"items":{"type":"integer"},"type":"array"},"type":"object"},{"type":"null"}],"title":"Typical Rent"},"ideal_for":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Ideal For"},"less_ideal_for":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Less Ideal For"},"vibe_tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Vibe Tags"},"taco_street_notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Taco Street Notes"}},"type":"object","title":"ProfileUpdateRequest","description":"Request to update a neighborhood profile (admin)."},"PromptTestResponse":{"properties":{"apartment_name":{"type":"string","title":"Apartment Name"},"mode":{"type":"string","title":"Mode"},"model":{"type":"string","title":"Model"},"system_prompt":{"type":"string","title":"System Prompt"},"user_prompt":{"type":"string","title":"User Prompt"},"recommendation":{"type":"string","title":"Recommendation"},"word_count":{"type":"integer","title":"Word Count"},"generation_time_ms":{"type":"integer","title":"Generation Time Ms"}},"type":"object","required":["apartment_name","mode","model","system_prompt","user_prompt","recommendation","word_count","generation_time_ms"],"title":"PromptTestResponse","description":"Response model for prompt test."},"PromptUpdateRequest":{"properties":{"system_prompt":{"type":"string","title":"System Prompt"},"notes":{"type":"string","title":"Notes","default":""}},"type":"object","required":["system_prompt"],"title":"PromptUpdateRequest"},"PublishRequest":{"properties":{"ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Ids"},"only_ready":{"type":"boolean","title":"Only Ready","default":true}},"type":"object","title":"PublishRequest"},"PurgeReEnrichRequest":{"properties":{"apartment_names":{"items":{"type":"string"},"type":"array","title":"Apartment Names"},"apartment_ids":{"items":{"type":"string"},"type":"array","title":"Apartment Ids"},"source":{"type":"string","title":"Source","default":"website_first"},"dry_run":{"type":"boolean","title":"Dry Run","default":false},"reason":{"type":"string","title":"Reason","default":"synthetic_pricing_pattern"}},"type":"object","title":"PurgeReEnrichRequest"},"QuarantineAction":{"properties":{"apartment_name":{"type":"string","title":"Apartment Name"},"override_prices":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Override Prices"}},"type":"object","required":["apartment_name"],"title":"QuarantineAction"},"QuickSearch":{"properties":{"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"icon":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon"},"filters":{"additionalProperties":true,"type":"object","title":"Filters"},"pinned_apartments":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Pinned Apartments"},"is_active":{"type":"boolean","title":"Is Active","default":true},"sort_order":{"type":"integer","title":"Sort Order","default":0}},"type":"object","required":["name","filters"],"title":"QuickSearch"},"QuizV2Request":{"properties":{"city":{"type":"string","title":"City","default":"Austin"},"scenario_answers":{"additionalProperties":{"items":{"type":"string"},"type":"array"},"type":"object","title":"Scenario Answers"},"vibe_words":{"items":{"type":"string"},"type":"array","title":"Vibe Words"},"commute_anchor":{"anyOf":[{"$ref":"#/components/schemas/CommuteAnchorLite"},{"type":"null"}]},"max_budget":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Budget"},"top_n_parent_regions":{"type":"integer","title":"Top N Parent Regions","default":5},"include_fine_grained":{"type":"boolean","title":"Include Fine Grained","default":true}},"type":"object","title":"QuizV2Request"},"RegionCategoryCreate":{"properties":{"region":{"type":"string","title":"Region"},"neighborhoods":{"items":{"type":"string"},"type":"array","title":"Neighborhoods","default":[]}},"type":"object","required":["region"],"title":"RegionCategoryCreate"},"RegionCategoryUpdate":{"properties":{"region":{"type":"string","title":"Region"},"neighborhoods":{"items":{"type":"string"},"type":"array","title":"Neighborhoods","default":[]},"order":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Order"}},"type":"object","required":["region"],"title":"RegionCategoryUpdate"},"RegionReadEdit":{"properties":{"character":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Character"},"getting_around":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Getting Around"},"price_level":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Price Level"},"tradeoffs":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tradeoffs"},"caveats":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Caveats"},"pockets":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pockets"},"verified":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Verified"}},"type":"object","title":"RegionReadEdit"},"RegressionCaseRequest":{"properties":{"case_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Case Id"},"name":{"type":"string","title":"Name"},"query":{"type":"string","title":"Query"},"target_metro":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target Metro"},"tags":{"items":{"type":"string"},"type":"array","title":"Tags","default":[]},"assertions":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Assertions","default":[]},"enabled":{"type":"boolean","title":"Enabled","default":true},"origin":{"additionalProperties":true,"type":"object","title":"Origin","default":{}}},"type":"object","required":["name","query"],"title":"RegressionCaseRequest"},"RegressionRunRequest":{"properties":{"gold_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Gold Ids"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"}},"type":"object","title":"RegressionRunRequest"},"RejectRequest":{"properties":{"ids":{"items":{"type":"string"},"type":"array","title":"Ids"}},"type":"object","required":["ids"],"title":"RejectRequest"},"RequestPasswordResetRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"}},"type":"object","required":["email"],"title":"RequestPasswordResetRequest"},"RerunRequest":{"properties":{"original_run_id":{"type":"string","title":"Original Run Id"}},"type":"object","required":["original_run_id"],"title":"RerunRequest"},"ResetPasswordRequest":{"properties":{"token":{"type":"string","title":"Token"},"new_password":{"type":"string","title":"New Password"}},"type":"object","required":["token","new_password"],"title":"ResetPasswordRequest"},"ResolveRequest":{"properties":{"names":{"items":{"type":"string"},"type":"array","title":"Names"},"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City"}},"type":"object","required":["names"],"title":"ResolveRequest"},"ResumeRatingRequest":{"properties":{"ratings":{"additionalProperties":true,"type":"object","title":"Ratings","default":{}},"skip_feedback":{"type":"boolean","title":"Skip Feedback","default":false}},"type":"object","title":"ResumeRatingRequest"},"ResumeRequest":{"properties":{"approved_fix_indices":{"items":{"type":"integer"},"type":"array","title":"Approved Fix Indices","default":[]},"fix_edits":{"additionalProperties":true,"type":"object","title":"Fix Edits","default":{}},"rejected_all":{"type":"boolean","title":"Rejected All","default":false},"review_notes":{"type":"string","title":"Review Notes","default":""}},"type":"object","title":"ResumeRequest"},"ResumeRulesRequest":{"properties":{"approved_rule_indices":{"items":{"type":"integer"},"type":"array","title":"Approved Rule Indices","default":[]},"rule_edits":{"additionalProperties":true,"type":"object","title":"Rule Edits","default":{}},"rejected":{"type":"boolean","title":"Rejected","default":false},"review_notes":{"type":"string","title":"Review Notes","default":""}},"type":"object","title":"ResumeRulesRequest"},"RetagApplyRequest":{"properties":{"retags":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Retags"}},"type":"object","required":["retags"],"title":"RetagApplyRequest"},"RunBuilding":{"properties":{"input_name":{"type":"string","title":"Input Name"},"apartment_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Apartment Id"}},"type":"object","required":["input_name"],"title":"RunBuilding"},"RunEvalRequest":{"properties":{"test_cases":{"items":{"$ref":"#/components/schemas/EvalTestCase"},"type":"array","title":"Test Cases","default":[]},"metro_filter":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Metro Filter"}},"type":"object","title":"RunEvalRequest"},"RunRequest":{"properties":{"client_name":{"type":"string","title":"Client Name"},"criteria":{"$ref":"#/components/schemas/Criteria"},"buildings":{"items":{"$ref":"#/components/schemas/RunBuilding"},"type":"array","title":"Buildings"},"sheet":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sheet"}},"type":"object","required":["client_name","criteria","buildings"],"title":"RunRequest"},"RunSentimentRequest":{"properties":{"city":{"type":"string","title":"City","default":"Austin"},"mode":{"type":"string","title":"Mode","default":"sentiment"},"limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Limit"}},"type":"object","title":"RunSentimentRequest"},"RunValidationRequest":{"properties":{"city":{"type":"string","title":"City","default":"Dallas"},"mode":{"type":"string","title":"Mode","default":"missing"},"limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Limit"},"max_credits":{"type":"integer","title":"Max Credits","default":2000}},"type":"object","title":"RunValidationRequest"},"SameAddressRemediationRequest":{"properties":{"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City"},"limit":{"type":"integer","title":"Limit","default":10},"offset":{"type":"integer","title":"Offset","default":0},"dry_run":{"type":"boolean","title":"Dry Run","default":true}},"type":"object","title":"SameAddressRemediationRequest"},"SaveApartmentRequest":{"properties":{"apartment_data":{"additionalProperties":true,"type":"object","title":"Apartment Data"},"user_notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Notes"},"ranking_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ranking Source"},"session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id"},"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City"}},"type":"object","required":["apartment_data"],"title":"SaveApartmentRequest"},"SaveCommentRequest":{"properties":{"run_id":{"type":"string","title":"Run Id"},"test_id":{"type":"string","title":"Test Id"},"comment":{"type":"string","title":"Comment"},"rating":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Rating"}},"type":"object","required":["run_id","test_id","comment"],"title":"SaveCommentRequest"},"SaveNoteRequest":{"properties":{"apartment_id":{"type":"string","title":"Apartment Id"},"note":{"type":"string","title":"Note"},"session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id"}},"type":"object","required":["apartment_id","note"],"title":"SaveNoteRequest"},"SaveRunRequest":{"properties":{"run_id":{"type":"string","title":"Run Id"},"comments":{"additionalProperties":true,"type":"object","title":"Comments","default":{}}},"type":"object","required":["run_id"],"title":"SaveRunRequest"},"SaveSearchRequest":{"properties":{"name":{"type":"string","title":"Name"},"criteria":{"additionalProperties":true,"type":"object","title":"Criteria"}},"type":"object","required":["name","criteria"],"title":"SaveSearchRequest","description":"Request to save a search."},"SearchCriteria":{"properties":{"city":{"type":"string","title":"City","default":"Austin"},"bedrooms":{"items":{"type":"string"},"type":"array","title":"Bedrooms"},"budget_max":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Budget Max"},"budget_min":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Budget Min"},"budget_flexibility":{"type":"string","enum":["strict","some","lots"],"title":"Budget Flexibility","default":"some"},"neighborhoods":{"items":{"type":"string"},"type":"array","title":"Neighborhoods"},"lifestyle_profiles":{"items":{"type":"string"},"type":"array","title":"Lifestyle Profiles"},"vibe_words":{"items":{"type":"string"},"type":"array","title":"Vibe Words"},"building_ages":{"items":{"type":"string"},"type":"array","title":"Building Ages"},"community_amenities":{"items":{"type":"string"},"type":"array","title":"Community Amenities"},"apartment_amenities":{"items":{"type":"string"},"type":"array","title":"Apartment Amenities"},"must_haves":{"items":{"type":"string"},"type":"array","title":"Must Haves"},"min_sqft":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Min Sqft"},"pet_type":{"anyOf":[{"type":"string","enum":["none","dog","restricted_breed","cat"]},{"type":"null"}],"title":"Pet Type"},"min_rating":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Min Rating"},"commute":{"anyOf":[{"$ref":"#/components/schemas/CommuteAnchor"},{"type":"null"}]},"natural_language":{"type":"string","title":"Natural Language","default":""}},"type":"object","title":"SearchCriteria","description":"Algorithm-relevant fields. These map 1:1 onto `SearchFilters`\nvia `build_search_filters_from_dossier()` and directly shape results."},"SearchFilters":{"properties":{"city":{"type":"string","title":"City","default":"Austin"},"neighborhoods":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Neighborhoods"},"property_tiers":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Property Tiers"},"min_walk_score":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Min Walk Score"},"max_walk_score":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Walk Score"},"walkability_tiers":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Walkability Tiers"},"building_types":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Building Types"},"min_rating":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Min Rating"},"pet_friendly":{"type":"boolean","title":"Pet Friendly","default":false},"pet_types":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Pet Types"},"bedrooms":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Bedrooms"},"minBudget":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Minbudget"},"maxBudget":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Maxbudget"},"budget_flexibility":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Budget Flexibility"},"amenities":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Amenities"},"desired_amenities":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Desired Amenities"},"standard_amenities":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Standard Amenities"},"has_special":{"type":"boolean","title":"Has Special","default":false},"senior_housing":{"type":"boolean","title":"Senior Housing","default":false},"student_housing":{"type":"boolean","title":"Student Housing","default":false},"sort_by":{"type":"string","title":"Sort By","default":"rating"},"limit":{"type":"integer","maximum":200.0,"minimum":1.0,"title":"Limit","default":15},"offset":{"type":"integer","title":"Offset","default":0},"lean":{"type":"boolean","title":"Lean","default":false},"natural_language":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Natural Language"},"work_location":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Work Location"},"work_coords":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Work Coords"},"work_location_lat":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Work Location Lat"},"work_location_lng":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Work Location Lng"},"max_commute_minutes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Commute Minutes"},"deal_breakers":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Deal Breakers"},"exclude_names":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Exclude Names"},"min_year_built":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Min Year Built"},"max_year_built":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Year Built"},"move_in_timeline":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Move In Timeline"},"household":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Household"},"why_austin":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Why Austin"},"lease_term":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lease Term"},"parking_needs":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parking Needs"},"commute_importance":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Commute Importance"},"no_ground_floor":{"type":"boolean","title":"No Ground Floor","default":false},"no_street_facing":{"type":"boolean","title":"No Street Facing","default":false},"must_have_covered_parking":{"type":"boolean","title":"Must Have Covered Parking","default":false},"must_allow_large_dogs":{"type":"boolean","title":"Must Allow Large Dogs","default":false},"lifestyle_profiles":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Lifestyle Profiles"},"vibe_words":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Vibe Words"},"building_ages":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Building Ages"},"moving_from":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Moving From"},"selected_neighborhoods":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Selected Neighborhoods"},"pinned_apartment_names":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Pinned Apartment Names"},"with_explanations":{"type":"boolean","title":"With Explanations","default":false},"ai_curated":{"type":"boolean","title":"Ai Curated","default":false},"south_lat":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"South Lat"},"north_lat":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"North Lat"},"west_lng":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"West Lng"},"east_lng":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"East Lng"},"min_sqft":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Min Sqft"},"user_profile":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"User Profile"}},"type":"object","title":"SearchFilters","description":"Search filters that map directly to database fields."},"SessionMessageRequest":{"properties":{"message":{"type":"string","title":"Message"}},"type":"object","required":["message"],"title":"SessionMessageRequest"},"SiteContentUpdate":{"properties":{"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"body":{"type":"string","title":"Body"},"cta_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cta Text"},"cta_link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cta Link"},"is_visible":{"type":"boolean","title":"Is Visible","default":true}},"type":"object","required":["body"],"title":"SiteContentUpdate"},"SmartRecommendationRequest":{"properties":{"saved_apartments":{"items":{"type":"string"},"type":"array","title":"Saved Apartments"},"user_criteria":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"User Criteria"},"limit":{"type":"integer","title":"Limit","default":8}},"type":"object","required":["saved_apartments"],"title":"SmartRecommendationRequest"},"SourceEvent":{"properties":{"source":{"type":"string","enum":["criteria_search","vibe_search","map_browse","quiz","explicit","admin"],"title":"Source"},"ts":{"type":"string","format":"date-time","title":"Ts"},"fields":{"items":{"type":"string"},"type":"array","title":"Fields"},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note"}},"type":"object","required":["source"],"title":"SourceEvent","description":"Audit-log entry: records which surface set/updated a given field."},"StartSessionRequest":{"properties":{"query":{"type":"string","title":"Query"},"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City","default":"Austin"},"apartments":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Apartments","default":[]},"eval_run_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Eval Run Id"},"source":{"type":"string","title":"Source","default":"vibe_eval"}},"type":"object","required":["query"],"title":"StartSessionRequest"},"SuggestFromSearchRequest":{"properties":{"selected_neighborhoods":{"items":{"type":"string"},"type":"array","title":"Selected Neighborhoods"},"budget":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Budget"},"lifestyles":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Lifestyles"}},"type":"object","required":["selected_neighborhoods"],"title":"SuggestFromSearchRequest","description":"Request body for suggest-from-search endpoint."},"SummaryRequest":{"properties":{"criteria":{"additionalProperties":true,"type":"object","title":"Criteria"},"apartments":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Apartments"},"user_message":{"type":"string","title":"User Message"},"city":{"type":"string","title":"City","default":"Austin"},"unparsed_requirements":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Unparsed Requirements"},"relaxed_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Relaxed Label"},"session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id"},"user_profile":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"User Profile"},"actions":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Actions"}},"type":"object","required":["criteria","apartments","user_message"],"title":"SummaryRequest"},"TaguchiBatchRequest":{"properties":{"runs":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Runs"},"test_case_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Test Case Ids"},"city":{"type":"string","title":"City","default":"Austin"}},"type":"object","title":"TaguchiBatchRequest"},"TieredExplanationRequest":{"properties":{"apartment":{"$ref":"#/components/schemas/ApartmentForExplanation"},"user_context":{"additionalProperties":true,"type":"object","title":"User Context","default":{}},"force_tier2":{"type":"boolean","title":"Force Tier2","default":false}},"type":"object","required":["apartment"],"title":"TieredExplanationRequest","description":"Request for tiered AI explanation"},"ToggleRuleRequest":{"properties":{"rule_id":{"type":"string","title":"Rule Id"},"enabled":{"type":"boolean","title":"Enabled"}},"type":"object","required":["rule_id","enabled"],"title":"ToggleRuleRequest"},"TourRequestCreate":{"properties":{"apartments":{"items":{"type":"string"},"type":"array","title":"Apartments"},"name":{"type":"string","title":"Name"},"email":{"type":"string","title":"Email"},"phone":{"type":"string","title":"Phone"},"request_type":{"type":"string","enum":["tour","price_report"],"title":"Request Type","default":"tour"},"tour_type":{"anyOf":[{"type":"string","enum":["in_person","virtual","undecided"]},{"type":"null"}],"title":"Tour Type"},"budget":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Budget"},"budget_min":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Budget Min"},"budget_max":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Budget Max"},"bedroom_count":{"items":{"type":"string"},"type":"array","title":"Bedroom Count"},"date_range":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Date Range"},"time_slots":{"items":{"type":"string"},"type":"array","title":"Time Slots"},"move_in_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Move In Date"},"availability":{"items":{"type":"string"},"type":"array","title":"Availability"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"roadblocks":{"items":{"type":"string"},"type":"array","title":"Roadblocks"},"saved_apartments":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Saved Apartments"}},"type":"object","required":["apartments","name","email","phone"],"title":"TourRequestCreate"},"TourRequestUpdate":{"properties":{"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"admin_notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Admin Notes"},"assigned_to":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Assigned To"}},"type":"object","title":"TourRequestUpdate"},"TrackEventRequest":{"properties":{"event":{"type":"string","title":"Event"},"source":{"type":"string","title":"Source"},"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City"},"session_id":{"type":"string","title":"Session Id"},"user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Id"},"meta":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Meta"}},"type":"object","required":["event","source","session_id"],"title":"TrackEventRequest"},"TrainRequest":{"properties":{"message":{"type":"string","title":"Message"},"session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id"},"mode":{"type":"string","title":"Mode","default":"freeform"}},"type":"object","required":["message"],"title":"TrainRequest"},"TuningChatRequest":{"properties":{"message":{"type":"string","title":"Message"},"session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id"},"run_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Run Id"},"mode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mode","default":"general"},"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City"}},"type":"object","required":["message"],"title":"TuningChatRequest"},"UpdateNeighborhoodRequest":{"properties":{"aliases":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Aliases"},"parent_region":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parent Region"},"centroid":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Centroid"},"radius_mi":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Radius Mi"},"street_patterns":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Street Patterns"},"co_proximity":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Co Proximity"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tags"}},"type":"object","title":"UpdateNeighborhoodRequest"},"UpdateNotesRequest":{"properties":{"user_notes":{"type":"string","title":"User Notes"}},"type":"object","required":["user_notes"],"title":"UpdateNotesRequest"},"UserDossier":{"properties":{"user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Id"},"session_id":{"type":"string","title":"Session Id"},"criteria":{"$ref":"#/components/schemas/SearchCriteria"},"locator_context":{"$ref":"#/components/schemas/LocatorContext"},"source_events":{"items":{"$ref":"#/components/schemas/SourceEvent"},"type":"array","title":"Source Events"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["session_id"],"title":"UserDossier","description":"Root dossier — one document per `session_id`."},"UserInputs":{"properties":{"natural_language":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Natural Language"},"neighborhoods":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Neighborhoods"},"lifestyles":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Lifestyles"},"walkability_tiers":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Walkability Tiers"},"max_budget":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Budget"},"bedrooms":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Bedrooms"},"pet_types":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Pet Types"},"amenities":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Amenities"},"desired_amenities":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Desired Amenities"},"work_location":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Work Location"},"austin_familiarity":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Austin Familiarity"},"moving_from":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Moving From"}},"type":"object","title":"UserInputs","description":"All inputs from the user's search form"},"UserLoginRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"password":{"type":"string","title":"Password"},"keep_signed_in":{"type":"boolean","title":"Keep Signed In","default":false}},"type":"object","required":["email","password"],"title":"UserLoginRequest","description":"Request model for email/password login."},"UserPreferences":{"properties":{"budget_min":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Budget Min"},"budget_max":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Budget Max"},"bedrooms":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Bedrooms"},"areas":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Areas"},"pets":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Pets"},"amenities":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Amenities"},"priorities":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Priorities"},"natural_language":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Natural Language"},"move_in_timeline":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Move In Timeline"},"work_location":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Work Location"},"commute_priority":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Commute Priority"},"must_haves":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Must Haves"},"lifestyles":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Lifestyles"},"desired_amenities":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Desired Amenities"}},"type":"object","title":"UserPreferences","description":"Structured user preferences for matching"},"UserProfileUpdate":{"properties":{"first_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Name"},"last_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Name"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"},"move_in_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Move In Date"},"budget":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Budget"},"preferred_city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Preferred City"},"preferred_neighborhoods":{"items":{"type":"string"},"type":"array","title":"Preferred Neighborhoods"},"freeform_notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Freeform Notes"},"preferred_bedrooms":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Preferred Bedrooms"},"vibe_words":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Vibe Words"},"lifestyle_goals":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Lifestyle Goals"},"pet_friendly_needed":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Pet Friendly Needed"},"max_commute_minutes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Commute Minutes"},"work_location_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Work Location Name"}},"type":"object","title":"UserProfileUpdate"},"UserRegisterRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"password":{"type":"string","minLength":8,"title":"Password","description":"Password must be at least 8 characters"},"name":{"type":"string","maxLength":100,"minLength":1,"title":"Name"},"preferred_city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Preferred City"},"turnstile_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Turnstile Token"},"signup_source":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Signup Source"}},"type":"object","required":["email","password","name"],"title":"UserRegisterRequest","description":"Request model for email/password registration."},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"VerifyApartmentRequest":{"properties":{"name":{"type":"string","title":"Name"},"city":{"type":"string","title":"City","default":"Austin"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"}},"type":"object","required":["name"],"title":"VerifyApartmentRequest"},"VerifyEmailRequest":{"properties":{"token":{"type":"string","title":"Token"}},"type":"object","required":["token"],"title":"VerifyEmailRequest"},"VerifyRequest":{"properties":{"reason":{"type":"string","title":"Reason","default":""}},"type":"object","title":"VerifyRequest"},"VibeLeadRequest":{"properties":{"session_id":{"type":"string","title":"Session Id"},"name":{"type":"string","title":"Name","default":""},"contact":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contact"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"}},"type":"object","required":["session_id"],"title":"VibeLeadRequest","description":"A renter handing us their details from inside the conversation.\n\nTwo accepted shapes: the one-field capture card sends `contact` (a phone\nnumber OR an email — we work out which), older clients send\nname+phone/email. Name is optional either way: the follow-up call is what\nmatters, and asking for a name measurably costs submits."},"VibeSearchRequest":{"properties":{"session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id"},"tracking_session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tracking Session Id"},"message":{"type":"string","title":"Message"},"history":{"items":{"$ref":"#/components/schemas/ChatMessage"},"type":"array","title":"History"},"city":{"type":"string","title":"City","default":"Austin"},"map_context":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Map Context"},"user_profile":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"User Profile"},"current_filters":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Current Filters"},"from_action":{"type":"boolean","title":"From Action","default":false}},"type":"object","required":["message"],"title":"VibeSearchRequest"},"WhyFitsRequest":{"properties":{"preferences":{"$ref":"#/components/schemas/UserPreferences"},"apartments":{"items":{"$ref":"#/components/schemas/ApartmentSummary"},"type":"array","title":"Apartments"}},"type":"object","required":["preferences","apartments"],"title":"WhyFitsRequest","description":"Request for Why This Fits explanations"},"routes__admin__apartments_enrichment__ReEnrichRequest":{"properties":{"skip_google":{"type":"boolean","title":"Skip Google","default":false},"skip_walkscore":{"type":"boolean","title":"Skip Walkscore","default":false},"skip_ai_description":{"type":"boolean","title":"Skip Ai Description","default":false},"skip_firecrawl":{"type":"boolean","title":"Skip Firecrawl","default":true},"deep_scrape":{"type":"boolean","title":"Deep Scrape","default":true}},"type":"object","title":"ReEnrichRequest","description":"Request for re-enriching an existing apartment."},"routes__admin__batch_enrich__StartRequest":{"properties":{"city":{"type":"string","title":"City","default":"Dallas"},"wave":{"type":"integer","title":"Wave","default":1},"batch_size":{"type":"integer","title":"Batch Size","default":50},"max_apartments":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Apartments"}},"type":"object","title":"StartRequest"},"routes__admin__eval_tuning_graph__StartRequest":{"properties":{"test_queries":{"items":{"type":"string"},"type":"array","title":"Test Queries"},"city":{"type":"string","title":"City","default":"Austin"},"run_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Run Id"}},"type":"object","required":["test_queries"],"title":"StartRequest"},"routes__ai_lab__PromptTestRequest":{"properties":{"service_key":{"type":"string","title":"Service Key"},"apartment_name":{"type":"string","title":"Apartment Name"},"system_prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"System Prompt"},"user_criteria":{"additionalProperties":true,"type":"object","title":"User Criteria"},"mode":{"type":"string","title":"Mode","default":"standard"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model"},"provider":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider"},"temperature":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Temperature"}},"type":"object","required":["service_key","apartment_name"],"title":"PromptTestRequest"},"routes__prompt_lab__PromptTestRequest":{"properties":{"apartment_name":{"type":"string","title":"Apartment Name"},"bedrooms":{"items":{"type":"string"},"type":"array","title":"Bedrooms"},"lifestyle_goals":{"items":{"type":"string"},"type":"array","title":"Lifestyle Goals"},"vibe_words":{"items":{"type":"string"},"type":"array","title":"Vibe Words"},"work_location":{"type":"string","title":"Work Location","default":""},"commute_preference":{"type":"string","title":"Commute Preference","default":""},"pets":{"type":"string","title":"Pets","default":""},"neighborhoods":{"items":{"type":"string"},"type":"array","title":"Neighborhoods"},"why_austin":{"items":{"type":"string"},"type":"array","title":"Why Austin"},"free_text":{"type":"string","title":"Free Text","default":""},"mode":{"type":"string","title":"Mode","default":"standard"},"model":{"type":"string","title":"Model","default":"gpt-5.2"}},"type":"object","required":["apartment_name"],"title":"PromptTestRequest","description":"Request model for testing prompts."},"services__pricing_reenrich__ReEnrichRequest":{"properties":{"apartment_names":{"items":{"type":"string"},"type":"array","title":"Apartment Names"},"apartment_ids":{"items":{"type":"string"},"type":"array","title":"Apartment Ids"},"source":{"type":"string","title":"Source","default":"website_first"},"marketplace_signature_baseline":{"additionalProperties":{"items":{"additionalProperties":true,"type":"object"},"type":"array"},"type":"object","title":"Marketplace Signature Baseline"}},"type":"object","title":"ReEnrichRequest"}}}}