{"openapi":"3.1.0","info":{"title":"CleverTech API Gateway","description":"Curated location-intelligence v2 contract plus registered municipal and national dataset APIs present in this process.","version":"2.0.0","x-clevertech-openapi-mode":"compact"},"paths":{"/api/v1/convert/gps-to-dls":{"post":{"tags":["Conversion"],"summary":"Convert GPS coordinates to DLS","description":"Convert lat/lon to DLS format. Costs 5 calls from daily allowance if authenticated. Free for anonymous users (limited).","operationId":"convert_gps_to_dls_api_v1_convert_gps_to_dls_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GPSToDLSRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GPSToDLSResponse"}}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"402":{"description":"Insufficient credits","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"No result found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Conversion failed — input parsed but could not be resolved","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/convert/dls-to-gps":{"post":{"tags":["Conversion"],"summary":"Convert DLS to GPS coordinates","description":"Convert DLS string to lat/lon. Costs 5 calls from daily allowance if authenticated. Free for anonymous users (limited).","operationId":"convert_dls_to_gps_api_v1_convert_dls_to_gps_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DLSToGPSRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DLSToGPSResponse"}}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"402":{"description":"Insufficient credits","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"No result found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Conversion failed — input parsed but could not be resolved","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/batch/gps-to-dls":{"post":{"tags":["Batch Processing"],"summary":"Batch convert GPS coordinates to DLS","description":"Convert multiple GPS coordinates to DLS format. Costs 5 calls per item from daily allowance. Batch limits: Developer=10, Pro=100, Team=10,000.","operationId":"batch_convert_gps_to_dls_api_v1_batch_gps_to_dls_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BatchGPSToDLSRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BatchResponse"}}}},"400":{"description":"Invalid request or batch limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"402":{"description":"Insufficient credits","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/batch/dls-to-gps":{"post":{"tags":["Batch Processing"],"summary":"Batch convert DLS to GPS coordinates","description":"Convert multiple DLS strings to GPS coordinates. Costs 5 calls per item from daily allowance. Batch limits: Developer=10, Pro=100, Team=10,000.","operationId":"batch_convert_dls_to_gps_api_v1_batch_dls_to_gps_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BatchDLSToGPSRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BatchResponse"}}}},"400":{"description":"Invalid request or batch limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"402":{"description":"Insufficient credits","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/telecom/search":{"get":{"tags":["telecom"],"summary":"Search Towers Endpoint","description":"Search towers with multiple filters.\n\nSupports filtering by carrier, technology, location, height, and frequency.\nAll filters are optional and combined with AND logic.","operationId":"search_towers_endpoint_api_telecom_search_get","parameters":[{"name":"carrier","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by carrier name","title":"Carrier"},"description":"Filter by carrier name"},{"name":"technology","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by technology (5G, LTE, etc.)","title":"Technology"},"description":"Filter by technology (5G, LTE, etc.)"},{"name":"city","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by city","title":"City"},"description":"Filter by city"},{"name":"province","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by province","title":"Province"},"description":"Filter by province"},{"name":"min_height","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum tower height in meters","title":"Min Height"},"description":"Minimum tower height in meters"},{"name":"max_height","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum tower height in meters","title":"Max Height"},"description":"Maximum tower height in meters"},{"name":"min_frequency","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum frequency in MHz","title":"Min Frequency"},"description":"Minimum frequency in MHz"},{"name":"max_frequency","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum frequency in MHz","title":"Max Frequency"},"description":"Maximum frequency in MHz"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","description":"Maximum number of results","default":500,"title":"Limit"},"description":"Maximum number of results"},{"name":"exclude_non_telecom","in":"query","required":false,"schema":{"type":"boolean","description":"Exclude non-telecom towers (railway, utilities, etc.)","default":true,"title":"Exclude Non Telecom"},"description":"Exclude non-telecom towers (railway, utilities, etc.)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TowerResponse"},"title":"Response Search Towers Endpoint Api Telecom Search Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/telecom/towers/search":{"get":{"tags":["telecom"],"summary":"Search Towers Endpoint","description":"Search towers with multiple filters.\n\nSupports filtering by carrier, technology, location, height, and frequency.\nAll filters are optional and combined with AND logic.","operationId":"search_towers_endpoint_api_telecom_towers_search_get","parameters":[{"name":"carrier","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by carrier name","title":"Carrier"},"description":"Filter by carrier name"},{"name":"technology","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by technology (5G, LTE, etc.)","title":"Technology"},"description":"Filter by technology (5G, LTE, etc.)"},{"name":"city","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by city","title":"City"},"description":"Filter by city"},{"name":"province","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by province","title":"Province"},"description":"Filter by province"},{"name":"min_height","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum tower height in meters","title":"Min Height"},"description":"Minimum tower height in meters"},{"name":"max_height","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum tower height in meters","title":"Max Height"},"description":"Maximum tower height in meters"},{"name":"min_frequency","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum frequency in MHz","title":"Min Frequency"},"description":"Minimum frequency in MHz"},{"name":"max_frequency","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum frequency in MHz","title":"Max Frequency"},"description":"Maximum frequency in MHz"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","description":"Maximum number of results","default":500,"title":"Limit"},"description":"Maximum number of results"},{"name":"exclude_non_telecom","in":"query","required":false,"schema":{"type":"boolean","description":"Exclude non-telecom towers (railway, utilities, etc.)","default":true,"title":"Exclude Non Telecom"},"description":"Exclude non-telecom towers (railway, utilities, etc.)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TowerResponse"},"title":"Response Search Towers Endpoint Api Telecom Towers Search Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/telecom/towers/nearby":{"get":{"tags":["telecom"],"summary":"Get Towers Nearby","description":"Get towers near a geographic point.\n\nUses PostGIS for efficient geospatial queries.\nReturns towers sorted by distance from the point.","operationId":"get_towers_nearby_api_telecom_towers_nearby_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","description":"Latitude coordinate","title":"Lat"},"description":"Latitude coordinate"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","description":"Longitude coordinate","title":"Lon"},"description":"Longitude coordinate"},{"name":"radius_km","in":"query","required":false,"schema":{"type":"number","description":"Search radius in kilometers","default":5,"title":"Radius Km"},"description":"Search radius in kilometers"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","description":"Maximum number of results","default":100,"title":"Limit"},"description":"Maximum number of results"},{"name":"exclude_non_telecom","in":"query","required":false,"schema":{"type":"boolean","description":"Exclude non-telecom towers (railway, utilities, etc.)","default":true,"title":"Exclude Non Telecom"},"description":"Exclude non-telecom towers (railway, utilities, etc.)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TowerResponse"},"title":"Response Get Towers Nearby Api Telecom Towers Nearby Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/telecom/towers":{"get":{"tags":["telecom"],"summary":"Get Towers","description":"Tower locations — documented public entry point.\n\nWith ``lat`` and ``lon``, returns towers near a point (same as ``/towers/nearby``).\nWithout coordinates, returns towers matching optional filters (same as ``/towers/search``).","operationId":"get_towers_api_telecom_towers_get","parameters":[{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude coordinate (with lon for nearby search)","title":"Lat"},"description":"Latitude coordinate (with lon for nearby search)"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude coordinate (with lat for nearby search)","title":"Lon"},"description":"Longitude coordinate (with lat for nearby search)"},{"name":"radius_km","in":"query","required":false,"schema":{"type":"number","description":"Search radius in kilometers","default":5,"title":"Radius Km"},"description":"Search radius in kilometers"},{"name":"carrier","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by carrier name","title":"Carrier"},"description":"Filter by carrier name"},{"name":"technology","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by technology (5G, LTE, etc.)","title":"Technology"},"description":"Filter by technology (5G, LTE, etc.)"},{"name":"city","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by city","title":"City"},"description":"Filter by city"},{"name":"province","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by province","title":"Province"},"description":"Filter by province"},{"name":"min_height","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum tower height in meters","title":"Min Height"},"description":"Minimum tower height in meters"},{"name":"max_height","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum tower height in meters","title":"Max Height"},"description":"Maximum tower height in meters"},{"name":"min_frequency","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum frequency in MHz","title":"Min Frequency"},"description":"Minimum frequency in MHz"},{"name":"max_frequency","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum frequency in MHz","title":"Max Frequency"},"description":"Maximum frequency in MHz"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","description":"Maximum number of results","default":100,"title":"Limit"},"description":"Maximum number of results"},{"name":"exclude_non_telecom","in":"query","required":false,"schema":{"type":"boolean","description":"Exclude non-telecom towers (railway, utilities, etc.)","default":true,"title":"Exclude Non Telecom"},"description":"Exclude non-telecom towers (railway, utilities, etc.)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TowerResponse"},"title":"Response Get Towers Api Telecom Towers Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/telecom/health":{"get":{"tags":["telecom"],"summary":"Health Check","description":"Health check endpoint for telecom API.\nReturns database connection status and basic stats.","operationId":"health_check_api_telecom_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthResponse"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/telecom/towers/stats":{"get":{"tags":["telecom"],"summary":"Get Stats","description":"Get tower statistics.\n\nReturns counts and aggregations for towers matching the filters.\nIncludes total count, unique carriers/technologies, and height statistics.","operationId":"get_stats_api_telecom_towers_stats_get","parameters":[{"name":"city","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by city","title":"City"},"description":"Filter by city"},{"name":"carrier","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by carrier","title":"Carrier"},"description":"Filter by carrier"},{"name":"province","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by province","title":"Province"},"description":"Filter by province"},{"name":"exclude_non_telecom","in":"query","required":false,"schema":{"type":"boolean","description":"Exclude non-telecom towers (railway, utilities, etc.)","default":true,"title":"Exclude Non Telecom"},"description":"Exclude non-telecom towers (railway, utilities, etc.)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TowerStatsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/telecom/stats":{"get":{"tags":["telecom"],"summary":"Get Stats","description":"Get tower statistics.\n\nReturns counts and aggregations for towers matching the filters.\nIncludes total count, unique carriers/technologies, and height statistics.","operationId":"get_stats_api_telecom_stats_get","parameters":[{"name":"city","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by city","title":"City"},"description":"Filter by city"},{"name":"carrier","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by carrier","title":"Carrier"},"description":"Filter by carrier"},{"name":"province","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by province","title":"Province"},"description":"Filter by province"},{"name":"exclude_non_telecom","in":"query","required":false,"schema":{"type":"boolean","description":"Exclude non-telecom towers (railway, utilities, etc.)","default":true,"title":"Exclude Non Telecom"},"description":"Exclude non-telecom towers (railway, utilities, etc.)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TowerStatsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/telecom/towers/carriers":{"get":{"tags":["telecom"],"summary":"Get Carriers","description":"Get tower count breakdown by carrier.\n\nOptionally filtered by geographic location.\nReturns carrier name, tower count, and technologies used.","operationId":"get_carriers_api_telecom_towers_carriers_get","parameters":[{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude for location filter","title":"Lat"},"description":"Latitude for location filter"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude for location filter","title":"Lon"},"description":"Longitude for location filter"},{"name":"radius_km","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Radius in km for location filter","title":"Radius Km"},"description":"Radius in km for location filter"},{"name":"exclude_non_telecom","in":"query","required":false,"schema":{"type":"boolean","description":"Exclude non-telecom towers (railway, utilities, etc.)","default":true,"title":"Exclude Non Telecom"},"description":"Exclude non-telecom towers (railway, utilities, etc.)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/telecom/towers/technologies":{"get":{"tags":["telecom"],"summary":"Get Technologies","description":"Get tower count breakdown by technology.\n\nReturns technology type and tower count for each.","operationId":"get_technologies_api_telecom_towers_technologies_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/telecom/towers/viewport/summary":{"get":{"tags":["telecom"],"summary":"Get Towers In Viewport Summary","description":"Get towers within a map viewport bounding box (summary/lightweight).\n\nOptimized for map rendering with clustering and filters.\nThis is the primary endpoint used by the map frontend on pan/zoom.","operationId":"get_towers_in_viewport_summary_api_telecom_towers_viewport_summary_get","parameters":[{"name":"north","in":"query","required":true,"schema":{"type":"number","description":"North boundary latitude","title":"North"},"description":"North boundary latitude"},{"name":"south","in":"query","required":true,"schema":{"type":"number","description":"South boundary latitude","title":"South"},"description":"South boundary latitude"},{"name":"east","in":"query","required":true,"schema":{"type":"number","description":"East boundary longitude","title":"East"},"description":"East boundary longitude"},{"name":"west","in":"query","required":true,"schema":{"type":"number","description":"West boundary longitude","title":"West"},"description":"West boundary longitude"},{"name":"zoom","in":"query","required":false,"schema":{"type":"integer","maximum":22,"minimum":1,"description":"Map zoom level for clustering","default":10,"title":"Zoom"},"description":"Map zoom level for clustering"},{"name":"carrier","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by carrier","title":"Carrier"},"description":"Filter by carrier"},{"name":"technology","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by technology","title":"Technology"},"description":"Filter by technology"},{"name":"province","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by province","title":"Province"},"description":"Filter by province"},{"name":"city","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by city","title":"City"},"description":"Filter by city"},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Free-text search","title":"Q"},"description":"Free-text search"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","description":"Maximum number of results","default":20000,"title":"Limit"},"description":"Maximum number of results"},{"name":"exclude_non_telecom","in":"query","required":false,"schema":{"type":"boolean","description":"Exclude non-telecom towers (railway, utilities, etc.)","default":true,"title":"Exclude Non Telecom"},"description":"Exclude non-telecom towers (railway, utilities, etc.)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/telecom/towers/details":{"get":{"tags":["telecom"],"summary":"Get Tower Details","description":"Return full member rows for a single grid cluster identified by tower_key.\n\nThe zoom parameter must match the zoom level that was used to generate\nthe tower_key in the viewport/summary endpoint (same grid precision).","operationId":"get_tower_details_api_telecom_towers_details_get","parameters":[{"name":"tower_key","in":"query","required":true,"schema":{"type":"string","description":"Grid cell tower key from viewport/summary","title":"Tower Key"},"description":"Grid cell tower key from viewport/summary"},{"name":"zoom","in":"query","required":false,"schema":{"type":"integer","maximum":22,"minimum":1,"description":"Zoom level used to generate the key","default":13,"title":"Zoom"},"description":"Zoom level used to generate the key"},{"name":"exclude_non_telecom","in":"query","required":false,"schema":{"type":"boolean","description":"Exclude non-telecom towers (railway, utilities, etc.)","default":true,"title":"Exclude Non Telecom"},"description":"Exclude non-telecom towers (railway, utilities, etc.)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/telecom/towers/viewport":{"get":{"tags":["telecom"],"summary":"Get Towers In Viewport","description":"Get towers within a map viewport bounding box.\n\nOptimized for map rendering with reasonable limits.\nReturns simplified tower data for marker display.","operationId":"get_towers_in_viewport_api_telecom_towers_viewport_get","parameters":[{"name":"north","in":"query","required":true,"schema":{"type":"number","description":"North boundary latitude","title":"North"},"description":"North boundary latitude"},{"name":"south","in":"query","required":true,"schema":{"type":"number","description":"South boundary latitude","title":"South"},"description":"South boundary latitude"},{"name":"east","in":"query","required":true,"schema":{"type":"number","description":"East boundary longitude","title":"East"},"description":"East boundary longitude"},{"name":"west","in":"query","required":true,"schema":{"type":"number","description":"West boundary longitude","title":"West"},"description":"West boundary longitude"},{"name":"zoom","in":"query","required":false,"schema":{"type":"integer","maximum":22,"minimum":1,"description":"Map zoom level for clustering","default":10,"title":"Zoom"},"description":"Map zoom level for clustering"},{"name":"carrier","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by carrier","title":"Carrier"},"description":"Filter by carrier"},{"name":"technology","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by technology","title":"Technology"},"description":"Filter by technology"},{"name":"province","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by province","title":"Province"},"description":"Filter by province"},{"name":"city","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by city","title":"City"},"description":"Filter by city"},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Free-text search","title":"Q"},"description":"Free-text search"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","description":"Maximum number of results","default":20000,"title":"Limit"},"description":"Maximum number of results"},{"name":"exclude_non_telecom","in":"query","required":false,"schema":{"type":"boolean","description":"Exclude non-telecom towers (railway, utilities, etc.)","default":true,"title":"Exclude Non Telecom"},"description":"Exclude non-telecom towers (railway, utilities, etc.)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/telecom/towers/by-id/{tower_id}":{"get":{"tags":["telecom"],"summary":"Get Tower By Id Endpoint","description":"Get tower by ID (alternative endpoint for search functionality).","operationId":"get_tower_by_id_endpoint_api_telecom_towers_by_id__tower_id__get","parameters":[{"name":"tower_id","in":"path","required":true,"schema":{"type":"string","title":"Tower Id"},"description":"Unique telecom tower identifier"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/telecom/towers/export":{"get":{"tags":["telecom"],"summary":"Export Towers","description":"Export tower data as CSV or GeoJSON.\n\nSupports bounding box filtering and carrier/technology filters.","operationId":"export_towers_api_telecom_towers_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"north","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"North boundary latitude","title":"North"},"description":"North boundary latitude"},{"name":"south","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"South boundary latitude","title":"South"},"description":"South boundary latitude"},{"name":"east","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"East boundary longitude","title":"East"},"description":"East boundary longitude"},{"name":"west","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"West boundary longitude","title":"West"},"description":"West boundary longitude"},{"name":"carrier","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by carrier","title":"Carrier"},"description":"Filter by carrier"},{"name":"technology","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by technology","title":"Technology"},"description":"Filter by technology"},{"name":"exclude_non_telecom","in":"query","required":false,"schema":{"type":"boolean","description":"Exclude non-telecom infrastructure (railways, utilities, etc.)","default":true,"title":"Exclude Non Telecom"},"description":"Exclude non-telecom infrastructure (railways, utilities, etc.)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/telecom/towers/{tower_id}":{"get":{"tags":["telecom"],"summary":"Get Tower","description":"Get detailed information about a specific tower.\n\nReturns all available fields for the tower including\ncarrier, technology, frequencies, and physical characteristics.","operationId":"get_tower_api_telecom_towers__tower_id__get","parameters":[{"name":"tower_id","in":"path","required":true,"schema":{"type":"string","title":"Tower Id"},"description":"Unique telecom tower identifier"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TowerResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/canada/telecom/search":{"get":{"tags":["telecom"],"summary":"Search Towers Endpoint","description":"Search towers with multiple filters.\n\nSupports filtering by carrier, technology, location, height, and frequency.\nAll filters are optional and combined with AND logic.","operationId":"search_towers_endpoint_api_canada_telecom_search_get","parameters":[{"name":"carrier","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by carrier name","title":"Carrier"},"description":"Filter by carrier name"},{"name":"technology","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by technology (5G, LTE, etc.)","title":"Technology"},"description":"Filter by technology (5G, LTE, etc.)"},{"name":"city","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by city","title":"City"},"description":"Filter by city"},{"name":"province","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by province","title":"Province"},"description":"Filter by province"},{"name":"min_height","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum tower height in meters","title":"Min Height"},"description":"Minimum tower height in meters"},{"name":"max_height","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum tower height in meters","title":"Max Height"},"description":"Maximum tower height in meters"},{"name":"min_frequency","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum frequency in MHz","title":"Min Frequency"},"description":"Minimum frequency in MHz"},{"name":"max_frequency","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum frequency in MHz","title":"Max Frequency"},"description":"Maximum frequency in MHz"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","description":"Maximum number of results","default":500,"title":"Limit"},"description":"Maximum number of results"},{"name":"exclude_non_telecom","in":"query","required":false,"schema":{"type":"boolean","description":"Exclude non-telecom towers (railway, utilities, etc.)","default":true,"title":"Exclude Non Telecom"},"description":"Exclude non-telecom towers (railway, utilities, etc.)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TowerResponse"},"title":"Response Search Towers Endpoint Api Canada Telecom Search Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/canada/telecom/towers/search":{"get":{"tags":["telecom"],"summary":"Search Towers Endpoint","description":"Search towers with multiple filters.\n\nSupports filtering by carrier, technology, location, height, and frequency.\nAll filters are optional and combined with AND logic.","operationId":"search_towers_endpoint_api_canada_telecom_towers_search_get","parameters":[{"name":"carrier","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by carrier name","title":"Carrier"},"description":"Filter by carrier name"},{"name":"technology","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by technology (5G, LTE, etc.)","title":"Technology"},"description":"Filter by technology (5G, LTE, etc.)"},{"name":"city","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by city","title":"City"},"description":"Filter by city"},{"name":"province","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by province","title":"Province"},"description":"Filter by province"},{"name":"min_height","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum tower height in meters","title":"Min Height"},"description":"Minimum tower height in meters"},{"name":"max_height","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum tower height in meters","title":"Max Height"},"description":"Maximum tower height in meters"},{"name":"min_frequency","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum frequency in MHz","title":"Min Frequency"},"description":"Minimum frequency in MHz"},{"name":"max_frequency","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum frequency in MHz","title":"Max Frequency"},"description":"Maximum frequency in MHz"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","description":"Maximum number of results","default":500,"title":"Limit"},"description":"Maximum number of results"},{"name":"exclude_non_telecom","in":"query","required":false,"schema":{"type":"boolean","description":"Exclude non-telecom towers (railway, utilities, etc.)","default":true,"title":"Exclude Non Telecom"},"description":"Exclude non-telecom towers (railway, utilities, etc.)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TowerResponse"},"title":"Response Search Towers Endpoint Api Canada Telecom Towers Search Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/canada/telecom/towers/nearby":{"get":{"tags":["telecom"],"summary":"Get Towers Nearby","description":"Get towers near a geographic point.\n\nUses PostGIS for efficient geospatial queries.\nReturns towers sorted by distance from the point.","operationId":"get_towers_nearby_api_canada_telecom_towers_nearby_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","description":"Latitude coordinate","title":"Lat"},"description":"Latitude coordinate"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","description":"Longitude coordinate","title":"Lon"},"description":"Longitude coordinate"},{"name":"radius_km","in":"query","required":false,"schema":{"type":"number","description":"Search radius in kilometers","default":5,"title":"Radius Km"},"description":"Search radius in kilometers"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","description":"Maximum number of results","default":100,"title":"Limit"},"description":"Maximum number of results"},{"name":"exclude_non_telecom","in":"query","required":false,"schema":{"type":"boolean","description":"Exclude non-telecom towers (railway, utilities, etc.)","default":true,"title":"Exclude Non Telecom"},"description":"Exclude non-telecom towers (railway, utilities, etc.)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TowerResponse"},"title":"Response Get Towers Nearby Api Canada Telecom Towers Nearby Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/canada/telecom/towers":{"get":{"tags":["telecom"],"summary":"Get Towers","description":"Tower locations — documented public entry point.\n\nWith ``lat`` and ``lon``, returns towers near a point (same as ``/towers/nearby``).\nWithout coordinates, returns towers matching optional filters (same as ``/towers/search``).","operationId":"get_towers_api_canada_telecom_towers_get","parameters":[{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude coordinate (with lon for nearby search)","title":"Lat"},"description":"Latitude coordinate (with lon for nearby search)"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude coordinate (with lat for nearby search)","title":"Lon"},"description":"Longitude coordinate (with lat for nearby search)"},{"name":"radius_km","in":"query","required":false,"schema":{"type":"number","description":"Search radius in kilometers","default":5,"title":"Radius Km"},"description":"Search radius in kilometers"},{"name":"carrier","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by carrier name","title":"Carrier"},"description":"Filter by carrier name"},{"name":"technology","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by technology (5G, LTE, etc.)","title":"Technology"},"description":"Filter by technology (5G, LTE, etc.)"},{"name":"city","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by city","title":"City"},"description":"Filter by city"},{"name":"province","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by province","title":"Province"},"description":"Filter by province"},{"name":"min_height","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum tower height in meters","title":"Min Height"},"description":"Minimum tower height in meters"},{"name":"max_height","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum tower height in meters","title":"Max Height"},"description":"Maximum tower height in meters"},{"name":"min_frequency","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum frequency in MHz","title":"Min Frequency"},"description":"Minimum frequency in MHz"},{"name":"max_frequency","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum frequency in MHz","title":"Max Frequency"},"description":"Maximum frequency in MHz"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","description":"Maximum number of results","default":100,"title":"Limit"},"description":"Maximum number of results"},{"name":"exclude_non_telecom","in":"query","required":false,"schema":{"type":"boolean","description":"Exclude non-telecom towers (railway, utilities, etc.)","default":true,"title":"Exclude Non Telecom"},"description":"Exclude non-telecom towers (railway, utilities, etc.)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TowerResponse"},"title":"Response Get Towers Api Canada Telecom Towers Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/canada/telecom/health":{"get":{"tags":["telecom"],"summary":"Health Check","description":"Health check endpoint for telecom API.\nReturns database connection status and basic stats.","operationId":"health_check_api_canada_telecom_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthResponse"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/canada/telecom/towers/stats":{"get":{"tags":["telecom"],"summary":"Get Stats","description":"Get tower statistics.\n\nReturns counts and aggregations for towers matching the filters.\nIncludes total count, unique carriers/technologies, and height statistics.","operationId":"get_stats_api_canada_telecom_towers_stats_get","parameters":[{"name":"city","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by city","title":"City"},"description":"Filter by city"},{"name":"carrier","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by carrier","title":"Carrier"},"description":"Filter by carrier"},{"name":"province","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by province","title":"Province"},"description":"Filter by province"},{"name":"exclude_non_telecom","in":"query","required":false,"schema":{"type":"boolean","description":"Exclude non-telecom towers (railway, utilities, etc.)","default":true,"title":"Exclude Non Telecom"},"description":"Exclude non-telecom towers (railway, utilities, etc.)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TowerStatsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/canada/telecom/stats":{"get":{"tags":["telecom"],"summary":"Get Stats","description":"Get tower statistics.\n\nReturns counts and aggregations for towers matching the filters.\nIncludes total count, unique carriers/technologies, and height statistics.","operationId":"get_stats_api_canada_telecom_stats_get","parameters":[{"name":"city","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by city","title":"City"},"description":"Filter by city"},{"name":"carrier","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by carrier","title":"Carrier"},"description":"Filter by carrier"},{"name":"province","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by province","title":"Province"},"description":"Filter by province"},{"name":"exclude_non_telecom","in":"query","required":false,"schema":{"type":"boolean","description":"Exclude non-telecom towers (railway, utilities, etc.)","default":true,"title":"Exclude Non Telecom"},"description":"Exclude non-telecom towers (railway, utilities, etc.)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TowerStatsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/canada/telecom/towers/carriers":{"get":{"tags":["telecom"],"summary":"Get Carriers","description":"Get tower count breakdown by carrier.\n\nOptionally filtered by geographic location.\nReturns carrier name, tower count, and technologies used.","operationId":"get_carriers_api_canada_telecom_towers_carriers_get","parameters":[{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude for location filter","title":"Lat"},"description":"Latitude for location filter"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude for location filter","title":"Lon"},"description":"Longitude for location filter"},{"name":"radius_km","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Radius in km for location filter","title":"Radius Km"},"description":"Radius in km for location filter"},{"name":"exclude_non_telecom","in":"query","required":false,"schema":{"type":"boolean","description":"Exclude non-telecom towers (railway, utilities, etc.)","default":true,"title":"Exclude Non Telecom"},"description":"Exclude non-telecom towers (railway, utilities, etc.)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/canada/telecom/towers/technologies":{"get":{"tags":["telecom"],"summary":"Get Technologies","description":"Get tower count breakdown by technology.\n\nReturns technology type and tower count for each.","operationId":"get_technologies_api_canada_telecom_towers_technologies_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/canada/telecom/towers/viewport/summary":{"get":{"tags":["telecom"],"summary":"Get Towers In Viewport Summary","description":"Get towers within a map viewport bounding box (summary/lightweight).\n\nOptimized for map rendering with clustering and filters.\nThis is the primary endpoint used by the map frontend on pan/zoom.","operationId":"get_towers_in_viewport_summary_api_canada_telecom_towers_viewport_summary_get","parameters":[{"name":"north","in":"query","required":true,"schema":{"type":"number","description":"North boundary latitude","title":"North"},"description":"North boundary latitude"},{"name":"south","in":"query","required":true,"schema":{"type":"number","description":"South boundary latitude","title":"South"},"description":"South boundary latitude"},{"name":"east","in":"query","required":true,"schema":{"type":"number","description":"East boundary longitude","title":"East"},"description":"East boundary longitude"},{"name":"west","in":"query","required":true,"schema":{"type":"number","description":"West boundary longitude","title":"West"},"description":"West boundary longitude"},{"name":"zoom","in":"query","required":false,"schema":{"type":"integer","maximum":22,"minimum":1,"description":"Map zoom level for clustering","default":10,"title":"Zoom"},"description":"Map zoom level for clustering"},{"name":"carrier","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by carrier","title":"Carrier"},"description":"Filter by carrier"},{"name":"technology","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by technology","title":"Technology"},"description":"Filter by technology"},{"name":"province","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by province","title":"Province"},"description":"Filter by province"},{"name":"city","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by city","title":"City"},"description":"Filter by city"},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Free-text search","title":"Q"},"description":"Free-text search"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","description":"Maximum number of results","default":20000,"title":"Limit"},"description":"Maximum number of results"},{"name":"exclude_non_telecom","in":"query","required":false,"schema":{"type":"boolean","description":"Exclude non-telecom towers (railway, utilities, etc.)","default":true,"title":"Exclude Non Telecom"},"description":"Exclude non-telecom towers (railway, utilities, etc.)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/canada/telecom/towers/details":{"get":{"tags":["telecom"],"summary":"Get Tower Details","description":"Return full member rows for a single grid cluster identified by tower_key.\n\nThe zoom parameter must match the zoom level that was used to generate\nthe tower_key in the viewport/summary endpoint (same grid precision).","operationId":"get_tower_details_api_canada_telecom_towers_details_get","parameters":[{"name":"tower_key","in":"query","required":true,"schema":{"type":"string","description":"Grid cell tower key from viewport/summary","title":"Tower Key"},"description":"Grid cell tower key from viewport/summary"},{"name":"zoom","in":"query","required":false,"schema":{"type":"integer","maximum":22,"minimum":1,"description":"Zoom level used to generate the key","default":13,"title":"Zoom"},"description":"Zoom level used to generate the key"},{"name":"exclude_non_telecom","in":"query","required":false,"schema":{"type":"boolean","description":"Exclude non-telecom towers (railway, utilities, etc.)","default":true,"title":"Exclude Non Telecom"},"description":"Exclude non-telecom towers (railway, utilities, etc.)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/canada/telecom/towers/viewport":{"get":{"tags":["telecom"],"summary":"Get Towers In Viewport","description":"Get towers within a map viewport bounding box.\n\nOptimized for map rendering with reasonable limits.\nReturns simplified tower data for marker display.","operationId":"get_towers_in_viewport_api_canada_telecom_towers_viewport_get","parameters":[{"name":"north","in":"query","required":true,"schema":{"type":"number","description":"North boundary latitude","title":"North"},"description":"North boundary latitude"},{"name":"south","in":"query","required":true,"schema":{"type":"number","description":"South boundary latitude","title":"South"},"description":"South boundary latitude"},{"name":"east","in":"query","required":true,"schema":{"type":"number","description":"East boundary longitude","title":"East"},"description":"East boundary longitude"},{"name":"west","in":"query","required":true,"schema":{"type":"number","description":"West boundary longitude","title":"West"},"description":"West boundary longitude"},{"name":"zoom","in":"query","required":false,"schema":{"type":"integer","maximum":22,"minimum":1,"description":"Map zoom level for clustering","default":10,"title":"Zoom"},"description":"Map zoom level for clustering"},{"name":"carrier","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by carrier","title":"Carrier"},"description":"Filter by carrier"},{"name":"technology","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by technology","title":"Technology"},"description":"Filter by technology"},{"name":"province","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by province","title":"Province"},"description":"Filter by province"},{"name":"city","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by city","title":"City"},"description":"Filter by city"},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Free-text search","title":"Q"},"description":"Free-text search"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","description":"Maximum number of results","default":20000,"title":"Limit"},"description":"Maximum number of results"},{"name":"exclude_non_telecom","in":"query","required":false,"schema":{"type":"boolean","description":"Exclude non-telecom towers (railway, utilities, etc.)","default":true,"title":"Exclude Non Telecom"},"description":"Exclude non-telecom towers (railway, utilities, etc.)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/canada/telecom/towers/by-id/{tower_id}":{"get":{"tags":["telecom"],"summary":"Get Tower By Id Endpoint","description":"Get tower by ID (alternative endpoint for search functionality).","operationId":"get_tower_by_id_endpoint_api_canada_telecom_towers_by_id__tower_id__get","parameters":[{"name":"tower_id","in":"path","required":true,"schema":{"type":"string","title":"Tower Id"},"description":"Unique telecom tower identifier"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/canada/telecom/towers/export":{"get":{"tags":["telecom"],"summary":"Export Towers","description":"Export tower data as CSV or GeoJSON.\n\nSupports bounding box filtering and carrier/technology filters.","operationId":"export_towers_api_canada_telecom_towers_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"north","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"North boundary latitude","title":"North"},"description":"North boundary latitude"},{"name":"south","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"South boundary latitude","title":"South"},"description":"South boundary latitude"},{"name":"east","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"East boundary longitude","title":"East"},"description":"East boundary longitude"},{"name":"west","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"West boundary longitude","title":"West"},"description":"West boundary longitude"},{"name":"carrier","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by carrier","title":"Carrier"},"description":"Filter by carrier"},{"name":"technology","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by technology","title":"Technology"},"description":"Filter by technology"},{"name":"exclude_non_telecom","in":"query","required":false,"schema":{"type":"boolean","description":"Exclude non-telecom infrastructure (railways, utilities, etc.)","default":true,"title":"Exclude Non Telecom"},"description":"Exclude non-telecom infrastructure (railways, utilities, etc.)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/canada/telecom/towers/{tower_id}":{"get":{"tags":["telecom"],"summary":"Get Tower","description":"Get detailed information about a specific tower.\n\nReturns all available fields for the tower including\ncarrier, technology, frequencies, and physical characteristics.","operationId":"get_tower_api_canada_telecom_towers__tower_id__get","parameters":[{"name":"tower_id","in":"path","required":true,"schema":{"type":"string","title":"Tower Id"},"description":"Unique telecom tower identifier"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TowerResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/microwave/health":{"get":{"tags":["microwave"],"summary":"Health","operationId":"health_api_microwave_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/microwave/stats":{"get":{"tags":["microwave"],"summary":"Stats","operationId":"stats_api_microwave_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/microwave/provinces":{"get":{"tags":["microwave"],"summary":"Provinces","operationId":"provinces_api_microwave_provinces_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/microwave/bands":{"get":{"tags":["microwave"],"summary":"Bands","operationId":"bands_api_microwave_bands_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/microwave/licensees":{"get":{"tags":["microwave"],"summary":"Licensees","operationId":"licensees_api_microwave_licensees_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"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"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/microwave/licensee/search":{"get":{"tags":["microwave"],"summary":"Licensee Search","operationId":"licensee_search_api_microwave_licensee_search_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":1,"title":"Q"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"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"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/microwave/licensee/{licensee_name}":{"get":{"tags":["microwave"],"summary":"Licensee Profile","operationId":"licensee_profile_api_microwave_licensee__licensee_name__get","parameters":[{"name":"licensee_name","in":"path","required":true,"schema":{"type":"string","title":"Licensee Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/microwave/search":{"get":{"tags":["microwave"],"summary":"Search","operationId":"search_api_microwave_search_get","parameters":[{"name":"frequency_band","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Frequency Band"}},{"name":"province","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Province"}},{"name":"licensee","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Licensee"}},{"name":"min_lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number","maximum":90,"minimum":-90},{"type":"null"}],"title":"Min Lat"}},{"name":"max_lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number","maximum":90,"minimum":-90},{"type":"null"}],"title":"Max Lat"}},{"name":"min_lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number","maximum":180,"minimum":-180},{"type":"null"}],"title":"Min Lon"}},{"name":"max_lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number","maximum":180,"minimum":-180},{"type":"null"}],"title":"Max Lon"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":2000,"minimum":1,"default":500,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/microwave/bbox":{"get":{"tags":["microwave"],"summary":"Bbox","operationId":"bbox_api_microwave_bbox_get","parameters":[{"name":"min_lat","in":"query","required":true,"schema":{"type":"number","maximum":90,"minimum":-90,"title":"Min Lat"}},{"name":"max_lat","in":"query","required":true,"schema":{"type":"number","maximum":90,"minimum":-90,"title":"Max Lat"}},{"name":"min_lon","in":"query","required":true,"schema":{"type":"number","maximum":180,"minimum":-180,"title":"Min Lon"}},{"name":"max_lon","in":"query","required":true,"schema":{"type":"number","maximum":180,"minimum":-180,"title":"Max Lon"}},{"name":"frequency_band","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Frequency Band"}},{"name":"province","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Province"}},{"name":"licensee","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Licensee"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":2000,"minimum":1,"default":500,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/microwave/radius":{"get":{"tags":["microwave"],"summary":"Radius","operationId":"radius_api_microwave_radius_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90,"minimum":-90,"title":"Lat"}},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":180,"minimum":-180,"title":"Lon"}},{"name":"radius_km","in":"query","required":false,"schema":{"type":"number","maximum":500,"minimum":1,"default":100,"title":"Radius Km"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"default":5000,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/microwave/authorization/{authorization_number}":{"get":{"tags":["microwave"],"summary":"Authorization Detail","operationId":"authorization_detail_api_microwave_authorization__authorization_number__get","parameters":[{"name":"authorization_number","in":"path","required":true,"schema":{"type":"string","title":"Authorization Number"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/microwave/links":{"get":{"tags":["microwave"],"summary":"Links","operationId":"links_api_microwave_links_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"freq_min","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Freq Min"}},{"name":"freq_max","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Freq Max"}},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lat"}},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lon"}},{"name":"radius_km","in":"query","required":false,"schema":{"anyOf":[{"type":"number","maximum":500,"minimum":0},{"type":"null"}],"title":"Radius Km"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/microwave/elevation-profile":{"get":{"tags":["microwave"],"summary":"Elevation Profile","description":"Compute SRTM elevation profile along the path between two microwave link endpoints.\n\nOptionally include antenna tower heights to render line-of-sight clearance.\nCost: 1 API call per 5km of link distance (minimum 1 call).\nA 10km link costs 2 calls; a 100km link costs 20 calls.","operationId":"elevation_profile_api_microwave_elevation_profile_get","parameters":[{"name":"lat1","in":"query","required":true,"schema":{"type":"number","maximum":90,"minimum":-90,"description":"Start latitude (TX site)","title":"Lat1"},"description":"Start latitude (TX site)"},{"name":"lon1","in":"query","required":true,"schema":{"type":"number","maximum":180,"minimum":-180,"description":"Start longitude (TX site)","title":"Lon1"},"description":"Start longitude (TX site)"},{"name":"lat2","in":"query","required":true,"schema":{"type":"number","maximum":90,"minimum":-90,"description":"End latitude (RX site)","title":"Lat2"},"description":"End latitude (RX site)"},{"name":"lon2","in":"query","required":true,"schema":{"type":"number","maximum":180,"minimum":-180,"description":"End longitude (RX site)","title":"Lon2"},"description":"End longitude (RX site)"},{"name":"num_points","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":10,"description":"Number of sample points","default":50,"title":"Num Points"},"description":"Number of sample points"},{"name":"tx_height_m","in":"query","required":false,"schema":{"anyOf":[{"type":"number","maximum":1000,"minimum":0},{"type":"null"}],"description":"TX antenna height in meters (for line-of-sight overlay)","title":"Tx Height M"},"description":"TX antenna height in meters (for line-of-sight overlay)"},{"name":"rx_height_m","in":"query","required":false,"schema":{"anyOf":[{"type":"number","maximum":1000,"minimum":0},{"type":"null"}],"description":"RX antenna height in meters (for line-of-sight overlay)","title":"Rx Height M"},"description":"RX antenna height in meters (for line-of-sight overlay)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/microwave/interference":{"get":{"tags":["microwave"],"summary":"Interference Check","description":"Check for potential microwave link interference at a given location and frequency.\n\nSearches for existing microwave links near the proposed site that operate\non similar frequencies and could cause or experience interference.\n\nReturns a risk summary (CRITICAL/HIGH/MEDIUM/LOW/NONE), list of interfering\nlinks with per-link risk assessments, and a safe-frequency band analysis\nshowing the best alternative frequencies in the area.","operationId":"interference_check_api_microwave_interference_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90,"minimum":-90,"description":"Proposed site latitude","title":"Lat"},"description":"Proposed site latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":180,"minimum":-180,"description":"Proposed site longitude","title":"Lon"},"description":"Proposed site longitude"},{"name":"frequency_mhz","in":"query","required":true,"schema":{"type":"number","exclusiveMinimum":0,"description":"Proposed operating frequency in MHz","title":"Frequency Mhz"},"description":"Proposed operating frequency in MHz"},{"name":"radius_km","in":"query","required":false,"schema":{"type":"number","maximum":500,"minimum":1,"description":"Geographic search radius in km","default":80.0,"title":"Radius Km"},"description":"Geographic search radius in km"},{"name":"freq_tolerance_mhz","in":"query","required":false,"schema":{"type":"number","maximum":1000,"minimum":1,"description":"Max frequency deviation to consider","default":200.0,"title":"Freq Tolerance Mhz"},"description":"Max frequency deviation to consider"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"Max interfering links to return","default":100,"title":"Limit"},"description":"Max interfering links to return"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/v1/analytics/infrastructure-gaps/health":{"get":{"tags":["analytics"],"summary":"Gaps Health","description":"Quick health check — verifies DB access and grid build.","operationId":"gaps_health_api_v1_analytics_infrastructure_gaps_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/v1/analytics/infrastructure-gaps":{"get":{"tags":["analytics"],"summary":"Infrastructure Gaps","description":"Score dissemination areas by infrastructure coverage gaps.\nHigh gap score = dense population + few nearby cell radios.","operationId":"infrastructure_gaps_api_v1_analytics_infrastructure_gaps_get","parameters":[{"name":"city","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"City slug (e.g., calgary, toronto)","title":"City"},"description":"City slug (e.g., calgary, toronto)"},{"name":"min_population","in":"query","required":false,"schema":{"type":"integer","description":"Minimum DA population","default":0,"title":"Min Population"},"description":"Minimum DA population"},{"name":"severity","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter: CRITICAL, HIGH, MEDIUM, LOW","title":"Severity"},"description":"Filter: CRITICAL, HIGH, MEDIUM, LOW"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"Max results","default":50,"title":"Limit"},"description":"Max results"},{"name":"sort","in":"query","required":false,"schema":{"type":"string","description":"Sort by: gap_score, population","default":"gap_score","title":"Sort"},"description":"Sort by: gap_score, population"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/GapResult"},"title":"Response Infrastructure Gaps Api V1 Analytics Infrastructure Gaps Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/v1/analytics/infrastructure-gaps/summary":{"get":{"tags":["analytics"],"summary":"Infrastructure Gaps Summary","description":"Get summary statistics for infrastructure gaps per city.","operationId":"infrastructure_gaps_summary_api_v1_analytics_infrastructure_gaps_summary_get","parameters":[{"name":"city","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"City slug, or omit for all","title":"City"},"description":"City slug, or omit for all"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/GapSummary"},"title":"Response Infrastructure Gaps Summary Api V1 Analytics Infrastructure Gaps Summary Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/v2/locations/resolve":{"post":{"tags":["location-v2"],"summary":"Resolve address, GPS, or DLS","operationId":"resolve_endpoint_api_v2_locations_resolve_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LocationRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LocationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/v2/locations/context":{"post":{"tags":["location-v2"],"summary":"Resolve a location and query available datasets","operationId":"context_endpoint_api_v2_locations_context_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContextRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Context Endpoint Api V2 Locations Context Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]},"get":{"tags":["location-v2"],"summary":"Query location context from GPS coordinates","operationId":"context_by_coordinates_api_v2_locations_context_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":84.0,"minimum":41.0,"title":"Lat"}},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":-52.0,"minimum":-142.0,"title":"Lon"}},{"name":"city","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^[a-z0-9-]+$"},{"type":"null"}],"title":"City"}},{"name":"radius_m","in":"query","required":false,"schema":{"type":"integer","maximum":50000,"minimum":1,"default":1000,"title":"Radius M"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Context By Coordinates Api V2 Locations Context Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/v2/safety/summary":{"get":{"tags":["safety-v2"],"summary":"Safety Summary","operationId":"safety_summary_api_v2_safety_summary_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Safety Summary Api V2 Safety Summary Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/v1/checkout/overage":{"get":{"summary":"Create Overage Checkout","description":"Create a Stripe checkout session for a one-time overage pack purchase.\n\nRequires authentication. Valid pack sizes come from OVERAGE_PACKS.\nRedirects to Stripe Checkout for payment.","operationId":"create_overage_checkout_api_v1_checkout_overage_get","parameters":[{"name":"pack","in":"query","required":false,"schema":{"type":"string","default":"2000","title":"Pack"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/v1/usage":{"get":{"summary":"Api Usage","description":"Get current API usage stats for the authenticated user.\n\nReturns daily allowance, used today, remaining, tier info.\nRequires authentication via X-API-Key header or JWT cookie.","operationId":"api_usage_api_v1_usage_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/v1/databases":{"get":{"summary":"Databases Api","operationId":"databases_api_api_v1_databases_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/analytics/summary":{"get":{"summary":"Analytics Summary","description":"Analytics summary — PostHog visitor metrics. Admin-only (X-Admin-Secret).\nRequires POSTHOG_PERSONAL_API_KEY and POSTHOG_PROJECT_ID env vars.\nReturns empty/default data if not configured.","operationId":"analytics_summary_api_analytics_summary_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/cities":{"get":{"summary":"List Cities","description":"List all available cities — HTML page for browsers, JSON for API clients.","operationId":"list_cities_api_cities_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/calgary/entries/{kind}":{"get":{"summary":"List Entries","operationId":"list_entries_api_calgary_entries__kind__get","parameters":[{"name":"kind","in":"path","required":true,"schema":{"type":"string","description":"Canonical entry kind: property, permit, zoning, or safety","title":"Kind"},"description":"Canonical entry kind: property, permit, zoning, or safety"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"_services","in":"query","required":false,"schema":{"title":" Services"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Entries Api Calgary Entries  Kind  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/calgary/property/search":{"get":{"summary":"Search Property","description":"Search for properties by address, or browse all if no address specified.\nSupports sorting by assessed_value, address, year_built, community, or lot_size_sqft.\nSupports value range filtering with min_value and max_value.\n Supports property_type and year range filters.","operationId":"search_property_api_calgary_property_search_get","parameters":[{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Street address to search (omit to browse all)","title":"Address"},"description":"Street address to search (omit to browse all)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max results to return (up to 1000 for map browse)","default":10,"title":"Limit"},"description":"Max results to return (up to 1000 for map browse)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset for pagination","default":0,"title":"Offset"},"description":"Results offset for pagination"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft","title":"Sort By"},"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"asc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"},{"name":"property_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property type filter (e.g. RE, Residential)","title":"Property Type"},"description":"Property type filter (e.g. RE, Residential)"},{"name":"min_year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter: minimum year built","title":"Min Year"},"description":"Filter: minimum year built"},{"name":"max_year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter: maximum year built","title":"Max Year"},"description":"Filter: maximum year built"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertySearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/calgary/property/list":{"get":{"summary":"List Property","description":"List all properties with pagination, sorting, and value range filtering.\n\nUse this endpoint to browse available property records and discover valid roll numbers.\nReturns paginated results with total count for client-side pagination.\nSort by assessed_value with order=desc to find the most expensive properties.","operationId":"list_property_api_calgary_property_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft","title":"Sort By"},"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"asc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Property Api Calgary Property List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/calgary/property/geojson":{"get":{"summary":"Property Geojson","operationId":"property_geojson_api_calgary_property_geojson_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500000,"minimum":1,"description":"Max features to return (cap prevents browser overload for large cities)","default":50000,"title":"Limit"},"description":"Max features to return (cap prevents browser overload for large cities)"},{"name":"sw_lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport south-west latitude","title":"Sw Lat"},"description":"Viewport south-west latitude"},{"name":"sw_lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport south-west longitude","title":"Sw Lon"},"description":"Viewport south-west longitude"},{"name":"ne_lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport north-east latitude","title":"Ne Lat"},"description":"Viewport north-east latitude"},{"name":"ne_lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport north-east longitude","title":"Ne Lon"},"description":"Viewport north-east longitude"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Offset for pagination through viewport results (use with limit)","default":0,"title":"Offset"},"description":"Offset for pagination through viewport results (use with limit)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/calgary/property/top":{"get":{"summary":"Top Property","description":"Get top-N properties sorted by any numeric column.\n\nConvenience endpoint for AI agents and dashboards. Returns the top\nN properties sorted by the given column. Defaults to most expensive\n(assessed_value descending). Combine with min_value/max_value to\nfind e.g. the most expensive residential properties.","operationId":"top_property_api_calgary_property_top_get","parameters":[{"name":"n","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Number of top properties to return","default":10,"title":"N"},"description":"Number of top properties to return"},{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","description":"Sort column: assessed_value, year_built, lot_size_sqft","default":"assessed_value","title":"Sort By"},"description":"Sort column: assessed_value, year_built, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"desc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Top Property Api Calgary Property Top Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/calgary/property/stats":{"get":{"summary":"Property Stats","description":"Get property assessment statistics.","operationId":"property_stats_api_calgary_property_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/calgary/property/autocomplete":{"get":{"summary":"Property Autocomplete","description":"Get address and roll number suggestions for typeahead search.","operationId":"property_autocomplete_api_calgary_property_autocomplete_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"description":"Search query for address/roll number suggestions","title":"Q"},"description":"Search query for address/roll number suggestions"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":25,"minimum":1,"description":"Max suggestions to return","default":10,"title":"Limit"},"description":"Max suggestions to return"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/calgary/property/geocode":{"post":{"summary":"Property Geocode","description":"Geocode property addresses to lat/lon coordinates.\n\nAccepts a JSON body with 'addresses' (list of address strings, max 50).\nReturns cached results instantly; uncached addresses are geocoded via Nominatim.\n\nExample: {\"addresses\": [\"123 Main St\", \"456 Oak Ave\"]}","operationId":"property_geocode_api_calgary_property_geocode_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/calgary/property/by-dls":{"get":{"summary":"Get Property By Dls","description":"Get property assessment by DLS coordinates.","operationId":"get_property_by_dls_api_calgary_property_by_dls_get","parameters":[{"name":"quarter","in":"query","required":true,"schema":{"type":"string","description":"Quarter section (e.g., SW)","title":"Quarter"},"description":"Quarter section (e.g., SW)"},{"name":"section","in":"query","required":true,"schema":{"type":"integer","description":"Section number","title":"Section"},"description":"Section number"},{"name":"township","in":"query","required":true,"schema":{"type":"integer","description":"Township number","title":"Township"},"description":"Township number"},{"name":"range","in":"query","required":true,"schema":{"type":"integer","description":"Range number","title":"Range"},"description":"Range number"},{"name":"meridian","in":"query","required":true,"schema":{"type":"integer","description":"Meridian number","title":"Meridian"},"description":"Meridian number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyAssessment"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/calgary/property/by-gps":{"get":{"summary":"Get Property By Gps","description":"Find coordinate-bearing assessment records nearest a GPS point.\n\nResults are point-nearness matches unless the municipal source supplies\nparcel polygons; clients should not interpret proximity as legal parcel\ncontainment.","operationId":"get_property_by_gps_api_calgary_property_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":84.0,"minimum":41.0,"description":"Canadian latitude","title":"Lat"},"description":"Canadian latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":-52.0,"minimum":-142.0,"description":"Canadian longitude","title":"Lon"},"description":"Canadian longitude"},{"name":"radius_m","in":"query","required":false,"schema":{"type":"integer","maximum":5000,"minimum":1,"description":"Maximum point distance","default":100,"title":"Radius M"},"description":"Maximum point distance"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":10,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Property By Gps Api Calgary Property By Gps Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/calgary/property/by-roll/{roll_number}":{"get":{"summary":"Get Property By Roll","description":"Get property assessment by roll number.","operationId":"get_property_by_roll_api_calgary_property_by_roll__roll_number__get","parameters":[{"name":"roll_number","in":"path","required":true,"schema":{"type":"string","description":"Property roll number","title":"Roll Number"},"description":"Property roll number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyAssessment"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/calgary/property/report":{"get":{"summary":"Property Report Lookup","description":"Consolidated report by roll number, address, or GPS.","operationId":"property_report_lookup_api_calgary_property_report_get","parameters":[{"name":"roll_number","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property roll number","title":"Roll Number"},"description":"Property roll number"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Street address","title":"Address"},"description":"Street address"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyReport"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/calgary/property/report/{roll_number}":{"get":{"summary":"Property Report","description":"Get consolidated property report: assessment + building permits + zoning + DLS.","operationId":"property_report_api_calgary_property_report__roll_number__get","parameters":[{"name":"roll_number","in":"path","required":true,"schema":{"type":"string","description":"Property roll number","title":"Roll Number"},"description":"Property roll number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyReport"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/calgary/property/batch":{"post":{"summary":"Get Properties Batch","description":"Get multiple properties by roll numbers in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of roll numbers.\nExample: {\"ids\": [\"123456789\", \"987654321\"]}\nMaximum 100 roll numbers per request.","operationId":"get_properties_batch_api_calgary_property_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Properties Batch Api Calgary Property Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/calgary/property/export":{"get":{"summary":"Export Properties","description":"Export property data as CSV or GeoJSON.\n\nSupports filtering by address, property type, and assessed value range.\nMaximum 10,000 records per export.","operationId":"export_properties_api_calgary_property_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Address filter","title":"Address"},"description":"Address filter"},{"name":"property_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property type filter","title":"Property Type"},"description":"Property type filter"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum assessed value","title":"Min Value"},"description":"Minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum assessed value","title":"Max Value"},"description":"Maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/calgary/census/profile":{"get":{"summary":"Get Census Profile","description":"Get census profile for a specific Dissemination Area.\n\nProvide either da_id directly, OR lat+lon to find the nearest DA automatically.","operationId":"get_census_profile_api_calgary_census_profile_get","parameters":[{"name":"da_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Dissemination Area ID (e.g., 48820001)","title":"Da Id"},"description":"Dissemination Area ID (e.g., 48820001)"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude for nearest-DA lookup","title":"Lat"},"description":"Latitude for nearest-DA lookup"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude for nearest-DA lookup","title":"Lon"},"description":"Longitude for nearest-DA lookup"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusProfile"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/calgary/census/batch":{"post":{"summary":"Get Census Batch","description":"Get multiple census profiles by DA IDs in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of DA IDs.\nExample: {\"ids\": [\"48820001\", \"48820002\"]}\nMaximum 100 DA IDs per request.","operationId":"get_census_batch_api_calgary_census_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Census Batch Api Calgary Census Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/calgary/census/export":{"get":{"summary":"Export Census","description":"Export census data as CSV.\n\nSupports filtering by population range and geography type.\nMaximum 10,000 records per export.","operationId":"export_census_api_calgary_census_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv only","default":"csv","title":"Format"},"description":"Export format: csv only"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"min_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Minimum population filter","title":"Min Population"},"description":"Minimum population filter"},{"name":"max_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Maximum population filter","title":"Max Population"},"description":"Maximum population filter"},{"name":"geography_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Geography type filter (DA, CT, CMA)","title":"Geography Type"},"description":"Geography type filter (DA, CT, CMA)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/calgary/census/list":{"get":{"summary":"List Census Profiles","description":"List all census profiles with pagination.\n\nUse this endpoint to browse available census profiles and discover valid DA IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_census_profiles_api_calgary_census_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Census Profiles Api Calgary Census List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/calgary/census/by-gps":{"get":{"summary":"Get Census By Gps","description":"Get census data for GPS coordinates.","operationId":"get_census_by_gps_api_calgary_census_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90,"minimum":-90,"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":180,"minimum":-180,"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/calgary/census/by-dls":{"get":{"summary":"Get Census By Dls","description":"Get census data for DLS coordinates.","operationId":"get_census_by_dls_api_calgary_census_by_dls_get","parameters":[{"name":"dls","in":"query","required":true,"schema":{"type":"string","description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)","title":"Dls"},"description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/calgary/census/map-data":{"get":{"summary":"Get Census Map Data","description":"Get lightweight DA points for choropleth map rendering.\n\nReturns centroid coordinates and key metrics (income, age, population,\nhousehold size, employment rate) for all DAs in the city.\nUsed by the census dashboard to render color-coded maps.","operationId":"get_census_map_data_api_calgary_census_map_data_get","parameters":[{"name":"year","in":"query","required":false,"schema":{"type":"integer","description":"Census year for DA map data","default":2021,"title":"Year"},"description":"Census year for DA map data"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/calgary/census/stats":{"get":{"summary":"Census Stats","description":"Get census data statistics.","operationId":"census_stats_api_calgary_census_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/calgary/census/compare":{"get":{"summary":"Census Compare","description":"Compare key census metrics across multiple years.\n\nReturns side-by-side comparison of population, households,\navg_income, median_age, density, and land_area for each requested year.\nYears without data return null for that year's values.","operationId":"census_compare_api_calgary_census_compare_get","parameters":[{"name":"years","in":"query","required":false,"schema":{"type":"string","description":"Comma-separated census years (e.g., 2016,2021)","default":"2021","title":"Years"},"description":"Comma-separated census years (e.g., 2016,2021)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/calgary/census/time-series":{"get":{"summary":"Census Timeseries","description":"Get year-by-year census trends for this city.\n\nReturns population, income, age, and household trends across all\navailable census years. Useful for spotting long-term demographic shifts.","operationId":"census_timeseries_api_calgary_census_time_series_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/calgary/geography/list":{"get":{"summary":"Geography List","description":"List geography boundaries for this city.","operationId":"geography_list_api_calgary_geography_list_get","parameters":[{"name":"type","in":"query","required":false,"schema":{"type":"string","title":"Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/calgary/geography/by-gps":{"get":{"summary":"Geography By Gps","description":"Find the geography boundary containing a GPS point.","operationId":"geography_by_gps_api_calgary_geography_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","title":"Lat"}},{"name":"lon","in":"query","required":true,"schema":{"type":"number","title":"Lon"}},{"name":"type","in":"query","required":false,"schema":{"type":"string","default":"DA","title":"Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/calgary/geography/stats":{"get":{"summary":"Geography Stats","description":"Get geography statistics for this city.","operationId":"geography_stats_api_calgary_geography_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/calgary/geography/{geoid}":{"get":{"summary":"Geography Boundary","description":"Get a specific geography boundary by geoid, including GeoJSON polygon.","operationId":"geography_boundary_api_calgary_geography__geoid__get","parameters":[{"name":"geoid","in":"path","required":true,"schema":{"type":"string","title":"Geoid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/calgary/census/rental/list":{"get":{"summary":"List Rental Prices","description":"List rental price records for this city, with optional unit type filter.","operationId":"list_rental_prices_api_calgary_census_rental_list_get","parameters":[{"name":"unit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":50,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalPriceListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/calgary/census/rental/trend":{"get":{"summary":"Get Rental Trend","description":"Get rental price time series for a specific unit type.","operationId":"get_rental_trend_api_calgary_census_rental_trend_get","parameters":[{"name":"unit_type","in":"query","required":true,"schema":{"type":"string","description":"Rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Rental unit type (e.g. 'Apartment - 1 bedroom')"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalTrendResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/calgary/census/rental/types":{"get":{"summary":"Get Rental Types","description":"Get available rental unit types for this city.","operationId":"get_rental_types_api_calgary_census_rental_types_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/calgary/zoning/by-gps":{"get":{"summary":"Get Zoning By Gps","description":"Get zoning district for GPS coordinates.","operationId":"get_zoning_by_gps_api_calgary_zoning_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZoningByGPSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/calgary/zoning/by-id/{district_id}":{"get":{"summary":"Get Zoning By Id","description":"Get a single zoning district by its numeric ID.","operationId":"get_zoning_by_id_api_calgary_zoning_by_id__district_id__get","parameters":[{"name":"district_id","in":"path","required":true,"schema":{"type":"integer","description":"Zoning district numeric ID","title":"District Id"},"description":"Zoning district numeric ID"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning By Id Api Calgary Zoning By Id  District Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/calgary/zoning/by-code/{code}":{"get":{"summary":"Get Zoning By Code","description":"Get all districts with a specific zone code.","operationId":"get_zoning_by_code_api_calgary_zoning_by_code__code__get","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","description":"Zone code (e.g., C-C1, R-G)","title":"Code"},"description":"Zone code (e.g., C-C1, R-G)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoningDistrict"},"title":"Response Get Zoning By Code Api Calgary Zoning By Code  Code  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/calgary/zoning/batch":{"post":{"summary":"Get Zoning Batch","description":"Get multiple zoning districts by zone codes in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of zone codes.\nExample: {\"ids\": [\"CR20-C20/R20\", \"C-C1\", \"R-G\"]}\nMaximum 100 zone codes per request.","operationId":"get_zoning_batch_api_calgary_zoning_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning Batch Api Calgary Zoning Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/calgary/zoning/list":{"get":{"summary":"List Zoning Districts","description":"List all zoning districts with pagination.\n\nUse this endpoint to browse available zoning districts and discover valid IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_zoning_districts_api_calgary_zoning_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Zoning Districts Api Calgary Zoning List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/calgary/zoning/codes":{"get":{"summary":"List Zone Codes","description":"List all zone codes with descriptions.","operationId":"list_zone_codes_api_calgary_zoning_codes_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"type":"string","description":"Filter by major category (e.g., Commercial, Residential)","title":"Category"},"description":"Filter by major category (e.g., Commercial, Residential)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoneCodeInfo"},"title":"Response List Zone Codes Api Calgary Zoning Codes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/calgary/zoning/stats":{"get":{"summary":"Zoning Stats","description":"Get zoning statistics.","operationId":"zoning_stats_api_calgary_zoning_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/calgary/zoning/export":{"get":{"summary":"Export Zoning","description":"Export zoning district data as CSV or GeoJSON.\n\nSupports filtering by zone code, category, and area range.\nMaximum 10,000 records per export.","operationId":"export_zoning_api_calgary_zoning_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"zone_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Zone code filter (e.g., CR2)","title":"Zone Code"},"description":"Zone code filter (e.g., CR2)"},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Major category filter","title":"Category"},"description":"Major category filter"},{"name":"min_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum area in sq km","title":"Min Area"},"description":"Minimum area in sq km"},{"name":"max_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum area in sq km","title":"Max Area"},"description":"Maximum area in sq km"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/calgary/permits/stats":{"get":{"summary":"Building Stats","description":"Get building permit statistics.","operationId":"building_stats_api_calgary_permits_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/calgary/permits/search":{"get":{"summary":"Search Building Permits","description":"Search building permits by address, contractor, applicant, permit number, and/or permit type.","operationId":"search_building_permits_api_calgary_permits_search_get","parameters":[{"name":"address","in":"query","required":false,"schema":{"type":"string","description":"Address to search","title":"Address"},"description":"Address to search"},{"name":"q","in":"query","required":false,"schema":{"type":"string","description":"General text search (address, contractor, applicant, permit #)","title":"Q"},"description":"General text search (address, contractor, applicant, permit #)"},{"name":"permit_type","in":"query","required":false,"schema":{"type":"string","description":"Filter by permit type","title":"Permit Type"},"description":"Filter by permit type"},{"name":"bbox","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bounding box: min_lon,min_lat,max_lon,max_lat","title":"Bbox"},"description":"Bounding box: min_lon,min_lat,max_lon,max_lat"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max results","default":20,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset","default":0,"title":"Offset"},"description":"Results offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/calgary/permits/nearby":{"get":{"summary":"Nearby Building Permits","description":"Coordinate-first alias for nearby building permits.","operationId":"nearby_building_permits_api_calgary_permits_nearby_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":84.0,"minimum":41.0,"description":"Canadian latitude","title":"Lat"},"description":"Canadian latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":-52.0,"minimum":-142.0,"description":"Canadian longitude","title":"Lon"},"description":"Canadian longitude"},{"name":"radius_m","in":"query","required":false,"schema":{"type":"integer","maximum":50000,"minimum":1,"default":1000,"title":"Radius M"}},{"name":"permit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Permit Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/calgary/permits/export":{"get":{"summary":"Export Building Permits","description":"Export building permit data as CSV or GeoJSON.\n\nSupports filtering by address, permit type, and date range.\nMaximum 10,000 records per export.","operationId":"export_building_permits_api_calgary_permits_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Address filter","title":"Address"},"description":"Address filter"},{"name":"permit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Permit type filter","title":"Permit Type"},"description":"Permit type filter"},{"name":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Start date (YYYY-MM-DD)","title":"Date From"},"description":"Start date (YYYY-MM-DD)"},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"End date (YYYY-MM-DD)","title":"Date To"},"description":"End date (YYYY-MM-DD)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/calgary/permits/recent":{"get":{"summary":"Recent Building Permits","description":"Get recent building permits sorted by application date (newest first).\n\nUse this to see where construction activity is happening right now.","operationId":"recent_building_permits_api_calgary_permits_recent_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Max results","default":20,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset","default":0,"title":"Offset"},"description":"Results offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/calgary/permits/batch":{"post":{"summary":"Get Building Permits Batch","description":"Get multiple building permits by permit numbers in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of permit numbers.\nExample: {\"ids\": [\"BP123456\", \"BP789012\"]}\nMaximum 100 permit numbers per request.","operationId":"get_building_permits_batch_api_calgary_permits_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Building Permits Batch Api Calgary Permits Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/calgary/permits/{permit_number}":{"get":{"summary":"Get Building Permit","description":"Get building permit details by permit number.\n\nServes HTML for browsers, JSON for API clients.","operationId":"get_building_permit_api_calgary_permits__permit_number__get","parameters":[{"name":"permit_number","in":"path","required":true,"schema":{"type":"string","description":"Permit number","title":"Permit Number"},"description":"Permit number"},{"name":"_city_name","in":"query","required":false,"schema":{"default":"Calgary","title":" City Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/calgary/business_license/stats":{"get":{"summary":"Business License Stats","operationId":"business_license_stats_api_calgary_business_license_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/calgary/business_license/search":{"get":{"summary":"Search Business Licenses","operationId":"search_business_licenses_api_calgary_business_license_search_get","parameters":[{"name":"query","in":"query","required":false,"schema":{"type":"string","description":"Business name or address","title":"Query"},"description":"Business name or address"},{"name":"business_type","in":"query","required":false,"schema":{"type":"string","description":"License category filter","title":"Business Type"},"description":"License category filter"},{"name":"status","in":"query","required":false,"schema":{"type":"string","description":"Status filter","title":"Status"},"description":"Status filter"},{"name":"local_area","in":"query","required":false,"schema":{"type":"string","description":"Neighbourhood filter","title":"Local Area"},"description":"Neighbourhood filter"},{"name":"lat","in":"query","required":false,"schema":{"type":"number","description":"Latitude for GPS radius search","title":"Lat"},"description":"Latitude for GPS radius search"},{"name":"lon","in":"query","required":false,"schema":{"type":"number","description":"Longitude for GPS radius search","title":"Lon"},"description":"Longitude for GPS radius search"},{"name":"radius_km","in":"query","required":false,"schema":{"type":"number","description":"Search radius in km","default":5.0,"title":"Radius Km"},"description":"Search radius in km"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/calgary/business_license/by-gps":{"get":{"summary":"Business License By Gps","operationId":"business_license_by_gps_api_calgary_business_license_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","title":"Lat"}},{"name":"lon","in":"query","required":true,"schema":{"type":"number","title":"Lon"}},{"name":"radius_km","in":"query","required":false,"schema":{"type":"number","maximum":50.0,"minimum":0.1,"default":1.0,"title":"Radius Km"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"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"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/calgary/business_license/{license_id}":{"get":{"summary":"Get Business License","operationId":"get_business_license_api_calgary_business_license__license_id__get","parameters":[{"name":"license_id","in":"path","required":true,"schema":{"type":"string","title":"License Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/calgary/health":{"get":{"summary":"City Health","description":"City-specific health check.","operationId":"city_health_api_calgary_health_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/halifax/entries/{kind}":{"get":{"summary":"List Entries","operationId":"list_entries_api_halifax_entries__kind__get","parameters":[{"name":"kind","in":"path","required":true,"schema":{"type":"string","description":"Canonical entry kind: property, permit, zoning, or safety","title":"Kind"},"description":"Canonical entry kind: property, permit, zoning, or safety"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"_services","in":"query","required":false,"schema":{"title":" Services"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Entries Api Halifax Entries  Kind  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/halifax/property/search":{"get":{"summary":"Search Property","description":"Search for properties by address, or browse all if no address specified.\nSupports sorting by assessed_value, address, year_built, community, or lot_size_sqft.\nSupports value range filtering with min_value and max_value.\n Supports property_type and year range filters.","operationId":"search_property_api_halifax_property_search_get","parameters":[{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Street address to search (omit to browse all)","title":"Address"},"description":"Street address to search (omit to browse all)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max results to return (up to 1000 for map browse)","default":10,"title":"Limit"},"description":"Max results to return (up to 1000 for map browse)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset for pagination","default":0,"title":"Offset"},"description":"Results offset for pagination"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft","title":"Sort By"},"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"asc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"},{"name":"property_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property type filter (e.g. RE, Residential)","title":"Property Type"},"description":"Property type filter (e.g. RE, Residential)"},{"name":"min_year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter: minimum year built","title":"Min Year"},"description":"Filter: minimum year built"},{"name":"max_year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter: maximum year built","title":"Max Year"},"description":"Filter: maximum year built"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertySearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/halifax/property/list":{"get":{"summary":"List Property","description":"List all properties with pagination, sorting, and value range filtering.\n\nUse this endpoint to browse available property records and discover valid roll numbers.\nReturns paginated results with total count for client-side pagination.\nSort by assessed_value with order=desc to find the most expensive properties.","operationId":"list_property_api_halifax_property_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft","title":"Sort By"},"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"asc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Property Api Halifax Property List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/halifax/property/geojson":{"get":{"summary":"Property Geojson","operationId":"property_geojson_api_halifax_property_geojson_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500000,"minimum":1,"description":"Max features to return (cap prevents browser overload for large cities)","default":50000,"title":"Limit"},"description":"Max features to return (cap prevents browser overload for large cities)"},{"name":"sw_lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport south-west latitude","title":"Sw Lat"},"description":"Viewport south-west latitude"},{"name":"sw_lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport south-west longitude","title":"Sw Lon"},"description":"Viewport south-west longitude"},{"name":"ne_lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport north-east latitude","title":"Ne Lat"},"description":"Viewport north-east latitude"},{"name":"ne_lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport north-east longitude","title":"Ne Lon"},"description":"Viewport north-east longitude"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Offset for pagination through viewport results (use with limit)","default":0,"title":"Offset"},"description":"Offset for pagination through viewport results (use with limit)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/halifax/property/top":{"get":{"summary":"Top Property","description":"Get top-N properties sorted by any numeric column.\n\nConvenience endpoint for AI agents and dashboards. Returns the top\nN properties sorted by the given column. Defaults to most expensive\n(assessed_value descending). Combine with min_value/max_value to\nfind e.g. the most expensive residential properties.","operationId":"top_property_api_halifax_property_top_get","parameters":[{"name":"n","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Number of top properties to return","default":10,"title":"N"},"description":"Number of top properties to return"},{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","description":"Sort column: assessed_value, year_built, lot_size_sqft","default":"assessed_value","title":"Sort By"},"description":"Sort column: assessed_value, year_built, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"desc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Top Property Api Halifax Property Top Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/halifax/property/stats":{"get":{"summary":"Property Stats","description":"Get property assessment statistics.","operationId":"property_stats_api_halifax_property_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/halifax/property/autocomplete":{"get":{"summary":"Property Autocomplete","description":"Get address and roll number suggestions for typeahead search.","operationId":"property_autocomplete_api_halifax_property_autocomplete_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"description":"Search query for address/roll number suggestions","title":"Q"},"description":"Search query for address/roll number suggestions"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":25,"minimum":1,"description":"Max suggestions to return","default":10,"title":"Limit"},"description":"Max suggestions to return"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/halifax/property/geocode":{"post":{"summary":"Property Geocode","description":"Geocode property addresses to lat/lon coordinates.\n\nAccepts a JSON body with 'addresses' (list of address strings, max 50).\nReturns cached results instantly; uncached addresses are geocoded via Nominatim.\n\nExample: {\"addresses\": [\"123 Main St\", \"456 Oak Ave\"]}","operationId":"property_geocode_api_halifax_property_geocode_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/halifax/property/by-dls":{"get":{"summary":"Get Property By Dls","description":"Get property assessment by DLS coordinates.","operationId":"get_property_by_dls_api_halifax_property_by_dls_get","parameters":[{"name":"quarter","in":"query","required":true,"schema":{"type":"string","description":"Quarter section (e.g., SW)","title":"Quarter"},"description":"Quarter section (e.g., SW)"},{"name":"section","in":"query","required":true,"schema":{"type":"integer","description":"Section number","title":"Section"},"description":"Section number"},{"name":"township","in":"query","required":true,"schema":{"type":"integer","description":"Township number","title":"Township"},"description":"Township number"},{"name":"range","in":"query","required":true,"schema":{"type":"integer","description":"Range number","title":"Range"},"description":"Range number"},{"name":"meridian","in":"query","required":true,"schema":{"type":"integer","description":"Meridian number","title":"Meridian"},"description":"Meridian number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyAssessment"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/halifax/property/by-gps":{"get":{"summary":"Get Property By Gps","description":"Find coordinate-bearing assessment records nearest a GPS point.\n\nResults are point-nearness matches unless the municipal source supplies\nparcel polygons; clients should not interpret proximity as legal parcel\ncontainment.","operationId":"get_property_by_gps_api_halifax_property_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":84.0,"minimum":41.0,"description":"Canadian latitude","title":"Lat"},"description":"Canadian latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":-52.0,"minimum":-142.0,"description":"Canadian longitude","title":"Lon"},"description":"Canadian longitude"},{"name":"radius_m","in":"query","required":false,"schema":{"type":"integer","maximum":5000,"minimum":1,"description":"Maximum point distance","default":100,"title":"Radius M"},"description":"Maximum point distance"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":10,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Property By Gps Api Halifax Property By Gps Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/halifax/property/by-roll/{roll_number}":{"get":{"summary":"Get Property By Roll","description":"Get property assessment by roll number.","operationId":"get_property_by_roll_api_halifax_property_by_roll__roll_number__get","parameters":[{"name":"roll_number","in":"path","required":true,"schema":{"type":"string","description":"Property roll number","title":"Roll Number"},"description":"Property roll number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyAssessment"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/halifax/property/report":{"get":{"summary":"Property Report Lookup","description":"Consolidated report by roll number, address, or GPS.","operationId":"property_report_lookup_api_halifax_property_report_get","parameters":[{"name":"roll_number","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property roll number","title":"Roll Number"},"description":"Property roll number"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Street address","title":"Address"},"description":"Street address"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyReport"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/halifax/property/report/{roll_number}":{"get":{"summary":"Property Report","description":"Get consolidated property report: assessment + building permits + zoning + DLS.","operationId":"property_report_api_halifax_property_report__roll_number__get","parameters":[{"name":"roll_number","in":"path","required":true,"schema":{"type":"string","description":"Property roll number","title":"Roll Number"},"description":"Property roll number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyReport"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/halifax/property/batch":{"post":{"summary":"Get Properties Batch","description":"Get multiple properties by roll numbers in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of roll numbers.\nExample: {\"ids\": [\"123456789\", \"987654321\"]}\nMaximum 100 roll numbers per request.","operationId":"get_properties_batch_api_halifax_property_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Properties Batch Api Halifax Property Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/halifax/property/export":{"get":{"summary":"Export Properties","description":"Export property data as CSV or GeoJSON.\n\nSupports filtering by address, property type, and assessed value range.\nMaximum 10,000 records per export.","operationId":"export_properties_api_halifax_property_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Address filter","title":"Address"},"description":"Address filter"},{"name":"property_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property type filter","title":"Property Type"},"description":"Property type filter"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum assessed value","title":"Min Value"},"description":"Minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum assessed value","title":"Max Value"},"description":"Maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/halifax/census/profile":{"get":{"summary":"Get Census Profile","description":"Get census profile for a specific Dissemination Area.\n\nProvide either da_id directly, OR lat+lon to find the nearest DA automatically.","operationId":"get_census_profile_api_halifax_census_profile_get","parameters":[{"name":"da_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Dissemination Area ID (e.g., 48820001)","title":"Da Id"},"description":"Dissemination Area ID (e.g., 48820001)"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude for nearest-DA lookup","title":"Lat"},"description":"Latitude for nearest-DA lookup"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude for nearest-DA lookup","title":"Lon"},"description":"Longitude for nearest-DA lookup"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusProfile"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/halifax/census/batch":{"post":{"summary":"Get Census Batch","description":"Get multiple census profiles by DA IDs in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of DA IDs.\nExample: {\"ids\": [\"48820001\", \"48820002\"]}\nMaximum 100 DA IDs per request.","operationId":"get_census_batch_api_halifax_census_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Census Batch Api Halifax Census Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/halifax/census/export":{"get":{"summary":"Export Census","description":"Export census data as CSV.\n\nSupports filtering by population range and geography type.\nMaximum 10,000 records per export.","operationId":"export_census_api_halifax_census_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv only","default":"csv","title":"Format"},"description":"Export format: csv only"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"min_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Minimum population filter","title":"Min Population"},"description":"Minimum population filter"},{"name":"max_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Maximum population filter","title":"Max Population"},"description":"Maximum population filter"},{"name":"geography_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Geography type filter (DA, CT, CMA)","title":"Geography Type"},"description":"Geography type filter (DA, CT, CMA)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/halifax/census/list":{"get":{"summary":"List Census Profiles","description":"List all census profiles with pagination.\n\nUse this endpoint to browse available census profiles and discover valid DA IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_census_profiles_api_halifax_census_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Census Profiles Api Halifax Census List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/halifax/census/by-gps":{"get":{"summary":"Get Census By Gps","description":"Get census data for GPS coordinates.","operationId":"get_census_by_gps_api_halifax_census_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90,"minimum":-90,"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":180,"minimum":-180,"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/halifax/census/by-dls":{"get":{"summary":"Get Census By Dls","description":"Get census data for DLS coordinates.","operationId":"get_census_by_dls_api_halifax_census_by_dls_get","parameters":[{"name":"dls","in":"query","required":true,"schema":{"type":"string","description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)","title":"Dls"},"description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/halifax/census/map-data":{"get":{"summary":"Get Census Map Data","description":"Get lightweight DA points for choropleth map rendering.\n\nReturns centroid coordinates and key metrics (income, age, population,\nhousehold size, employment rate) for all DAs in the city.\nUsed by the census dashboard to render color-coded maps.","operationId":"get_census_map_data_api_halifax_census_map_data_get","parameters":[{"name":"year","in":"query","required":false,"schema":{"type":"integer","description":"Census year for DA map data","default":2021,"title":"Year"},"description":"Census year for DA map data"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/halifax/census/stats":{"get":{"summary":"Census Stats","description":"Get census data statistics.","operationId":"census_stats_api_halifax_census_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/halifax/census/compare":{"get":{"summary":"Census Compare","description":"Compare key census metrics across multiple years.\n\nReturns side-by-side comparison of population, households,\navg_income, median_age, density, and land_area for each requested year.\nYears without data return null for that year's values.","operationId":"census_compare_api_halifax_census_compare_get","parameters":[{"name":"years","in":"query","required":false,"schema":{"type":"string","description":"Comma-separated census years (e.g., 2016,2021)","default":"2021","title":"Years"},"description":"Comma-separated census years (e.g., 2016,2021)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/halifax/census/time-series":{"get":{"summary":"Census Timeseries","description":"Get year-by-year census trends for this city.\n\nReturns population, income, age, and household trends across all\navailable census years. Useful for spotting long-term demographic shifts.","operationId":"census_timeseries_api_halifax_census_time_series_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/halifax/geography/list":{"get":{"summary":"Geography List","description":"List geography boundaries for this city.","operationId":"geography_list_api_halifax_geography_list_get","parameters":[{"name":"type","in":"query","required":false,"schema":{"type":"string","title":"Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/halifax/geography/by-gps":{"get":{"summary":"Geography By Gps","description":"Find the geography boundary containing a GPS point.","operationId":"geography_by_gps_api_halifax_geography_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","title":"Lat"}},{"name":"lon","in":"query","required":true,"schema":{"type":"number","title":"Lon"}},{"name":"type","in":"query","required":false,"schema":{"type":"string","default":"DA","title":"Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/halifax/geography/stats":{"get":{"summary":"Geography Stats","description":"Get geography statistics for this city.","operationId":"geography_stats_api_halifax_geography_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/halifax/geography/{geoid}":{"get":{"summary":"Geography Boundary","description":"Get a specific geography boundary by geoid, including GeoJSON polygon.","operationId":"geography_boundary_api_halifax_geography__geoid__get","parameters":[{"name":"geoid","in":"path","required":true,"schema":{"type":"string","title":"Geoid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/halifax/census/rental/list":{"get":{"summary":"List Rental Prices","description":"List rental price records for this city, with optional unit type filter.","operationId":"list_rental_prices_api_halifax_census_rental_list_get","parameters":[{"name":"unit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":50,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalPriceListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/halifax/census/rental/trend":{"get":{"summary":"Get Rental Trend","description":"Get rental price time series for a specific unit type.","operationId":"get_rental_trend_api_halifax_census_rental_trend_get","parameters":[{"name":"unit_type","in":"query","required":true,"schema":{"type":"string","description":"Rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Rental unit type (e.g. 'Apartment - 1 bedroom')"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalTrendResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/halifax/census/rental/types":{"get":{"summary":"Get Rental Types","description":"Get available rental unit types for this city.","operationId":"get_rental_types_api_halifax_census_rental_types_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/halifax/zoning/by-gps":{"get":{"summary":"Get Zoning By Gps","description":"Get zoning district for GPS coordinates.","operationId":"get_zoning_by_gps_api_halifax_zoning_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZoningByGPSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/halifax/zoning/by-id/{district_id}":{"get":{"summary":"Get Zoning By Id","description":"Get a single zoning district by its numeric ID.","operationId":"get_zoning_by_id_api_halifax_zoning_by_id__district_id__get","parameters":[{"name":"district_id","in":"path","required":true,"schema":{"type":"integer","description":"Zoning district numeric ID","title":"District Id"},"description":"Zoning district numeric ID"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning By Id Api Halifax Zoning By Id  District Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/halifax/zoning/by-code/{code}":{"get":{"summary":"Get Zoning By Code","description":"Get all districts with a specific zone code.","operationId":"get_zoning_by_code_api_halifax_zoning_by_code__code__get","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","description":"Zone code (e.g., C-C1, R-G)","title":"Code"},"description":"Zone code (e.g., C-C1, R-G)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoningDistrict"},"title":"Response Get Zoning By Code Api Halifax Zoning By Code  Code  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/halifax/zoning/batch":{"post":{"summary":"Get Zoning Batch","description":"Get multiple zoning districts by zone codes in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of zone codes.\nExample: {\"ids\": [\"CR20-C20/R20\", \"C-C1\", \"R-G\"]}\nMaximum 100 zone codes per request.","operationId":"get_zoning_batch_api_halifax_zoning_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning Batch Api Halifax Zoning Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/halifax/zoning/list":{"get":{"summary":"List Zoning Districts","description":"List all zoning districts with pagination.\n\nUse this endpoint to browse available zoning districts and discover valid IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_zoning_districts_api_halifax_zoning_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Zoning Districts Api Halifax Zoning List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/halifax/zoning/codes":{"get":{"summary":"List Zone Codes","description":"List all zone codes with descriptions.","operationId":"list_zone_codes_api_halifax_zoning_codes_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"type":"string","description":"Filter by major category (e.g., Commercial, Residential)","title":"Category"},"description":"Filter by major category (e.g., Commercial, Residential)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoneCodeInfo"},"title":"Response List Zone Codes Api Halifax Zoning Codes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/halifax/zoning/stats":{"get":{"summary":"Zoning Stats","description":"Get zoning statistics.","operationId":"zoning_stats_api_halifax_zoning_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/halifax/zoning/export":{"get":{"summary":"Export Zoning","description":"Export zoning district data as CSV or GeoJSON.\n\nSupports filtering by zone code, category, and area range.\nMaximum 10,000 records per export.","operationId":"export_zoning_api_halifax_zoning_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"zone_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Zone code filter (e.g., CR2)","title":"Zone Code"},"description":"Zone code filter (e.g., CR2)"},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Major category filter","title":"Category"},"description":"Major category filter"},{"name":"min_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum area in sq km","title":"Min Area"},"description":"Minimum area in sq km"},{"name":"max_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum area in sq km","title":"Max Area"},"description":"Maximum area in sq km"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/halifax/permits/stats":{"get":{"summary":"Building Stats","description":"Get building permit statistics.","operationId":"building_stats_api_halifax_permits_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/halifax/permits/search":{"get":{"summary":"Search Building Permits","description":"Search building permits by address, contractor, applicant, permit number, and/or permit type.","operationId":"search_building_permits_api_halifax_permits_search_get","parameters":[{"name":"address","in":"query","required":false,"schema":{"type":"string","description":"Address to search","title":"Address"},"description":"Address to search"},{"name":"q","in":"query","required":false,"schema":{"type":"string","description":"General text search (address, contractor, applicant, permit #)","title":"Q"},"description":"General text search (address, contractor, applicant, permit #)"},{"name":"permit_type","in":"query","required":false,"schema":{"type":"string","description":"Filter by permit type","title":"Permit Type"},"description":"Filter by permit type"},{"name":"bbox","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bounding box: min_lon,min_lat,max_lon,max_lat","title":"Bbox"},"description":"Bounding box: min_lon,min_lat,max_lon,max_lat"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max results","default":20,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset","default":0,"title":"Offset"},"description":"Results offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/halifax/permits/nearby":{"get":{"summary":"Nearby Building Permits","description":"Coordinate-first alias for nearby building permits.","operationId":"nearby_building_permits_api_halifax_permits_nearby_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":84.0,"minimum":41.0,"description":"Canadian latitude","title":"Lat"},"description":"Canadian latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":-52.0,"minimum":-142.0,"description":"Canadian longitude","title":"Lon"},"description":"Canadian longitude"},{"name":"radius_m","in":"query","required":false,"schema":{"type":"integer","maximum":50000,"minimum":1,"default":1000,"title":"Radius M"}},{"name":"permit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Permit Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/halifax/permits/export":{"get":{"summary":"Export Building Permits","description":"Export building permit data as CSV or GeoJSON.\n\nSupports filtering by address, permit type, and date range.\nMaximum 10,000 records per export.","operationId":"export_building_permits_api_halifax_permits_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Address filter","title":"Address"},"description":"Address filter"},{"name":"permit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Permit type filter","title":"Permit Type"},"description":"Permit type filter"},{"name":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Start date (YYYY-MM-DD)","title":"Date From"},"description":"Start date (YYYY-MM-DD)"},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"End date (YYYY-MM-DD)","title":"Date To"},"description":"End date (YYYY-MM-DD)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/halifax/permits/recent":{"get":{"summary":"Recent Building Permits","description":"Get recent building permits sorted by application date (newest first).\n\nUse this to see where construction activity is happening right now.","operationId":"recent_building_permits_api_halifax_permits_recent_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Max results","default":20,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset","default":0,"title":"Offset"},"description":"Results offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/halifax/permits/batch":{"post":{"summary":"Get Building Permits Batch","description":"Get multiple building permits by permit numbers in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of permit numbers.\nExample: {\"ids\": [\"BP123456\", \"BP789012\"]}\nMaximum 100 permit numbers per request.","operationId":"get_building_permits_batch_api_halifax_permits_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Building Permits Batch Api Halifax Permits Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/halifax/permits/{permit_number}":{"get":{"summary":"Get Building Permit","description":"Get building permit details by permit number.\n\nServes HTML for browsers, JSON for API clients.","operationId":"get_building_permit_api_halifax_permits__permit_number__get","parameters":[{"name":"permit_number","in":"path","required":true,"schema":{"type":"string","description":"Permit number","title":"Permit Number"},"description":"Permit number"},{"name":"_city_name","in":"query","required":false,"schema":{"default":"Halifax","title":" City Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/halifax/safety/search":{"get":{"summary":"Search Safety","operationId":"search_safety_api_halifax_safety_search_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Q"}},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"}},{"name":"neighbourhood","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Neighbourhood"}},{"name":"start","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Start"}},{"name":"end","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"End"}},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lat"}},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lon"}},{"name":"radius_m","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Radius M"}},{"name":"bbox","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bbox"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SafetySearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/halifax/safety/nearby":{"get":{"summary":"Nearby Safety","description":"Coordinate-first alias for nearby public safety records.","operationId":"nearby_safety_api_halifax_safety_nearby_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":84.0,"minimum":41.0,"description":"Canadian latitude","title":"Lat"},"description":"Canadian latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":-52.0,"minimum":-142.0,"description":"Canadian longitude","title":"Lon"},"description":"Canadian longitude"},{"name":"radius_m","in":"query","required":false,"schema":{"type":"integer","maximum":50000,"minimum":1,"default":1000,"title":"Radius M"}},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"}},{"name":"start","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Start"}},{"name":"end","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"End"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SafetySearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/halifax/safety/stats":{"get":{"summary":"Safety Stats","operationId":"safety_stats_api_halifax_safety_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SafetyStats"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/halifax/safety/{source_record_id}":{"get":{"summary":"Safety By Id","operationId":"safety_by_id_api_halifax_safety__source_record_id__get","parameters":[{"name":"source_record_id","in":"path","required":true,"schema":{"type":"string","title":"Source Record Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/halifax/health":{"get":{"summary":"City Health","description":"City-specific health check.","operationId":"city_health_api_halifax_health_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saskatoon/entries/{kind}":{"get":{"summary":"List Entries","operationId":"list_entries_api_saskatoon_entries__kind__get","parameters":[{"name":"kind","in":"path","required":true,"schema":{"type":"string","description":"Canonical entry kind: property, permit, zoning, or safety","title":"Kind"},"description":"Canonical entry kind: property, permit, zoning, or safety"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"_services","in":"query","required":false,"schema":{"title":" Services"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Entries Api Saskatoon Entries  Kind  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saskatoon/property/search":{"get":{"summary":"Search Property","description":"Search for properties by address, or browse all if no address specified.\nSupports sorting by assessed_value, address, year_built, community, or lot_size_sqft.\nSupports value range filtering with min_value and max_value.\n Supports property_type and year range filters.","operationId":"search_property_api_saskatoon_property_search_get","parameters":[{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Street address to search (omit to browse all)","title":"Address"},"description":"Street address to search (omit to browse all)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max results to return (up to 1000 for map browse)","default":10,"title":"Limit"},"description":"Max results to return (up to 1000 for map browse)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset for pagination","default":0,"title":"Offset"},"description":"Results offset for pagination"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft","title":"Sort By"},"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"asc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"},{"name":"property_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property type filter (e.g. RE, Residential)","title":"Property Type"},"description":"Property type filter (e.g. RE, Residential)"},{"name":"min_year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter: minimum year built","title":"Min Year"},"description":"Filter: minimum year built"},{"name":"max_year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter: maximum year built","title":"Max Year"},"description":"Filter: maximum year built"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertySearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saskatoon/property/list":{"get":{"summary":"List Property","description":"List all properties with pagination, sorting, and value range filtering.\n\nUse this endpoint to browse available property records and discover valid roll numbers.\nReturns paginated results with total count for client-side pagination.\nSort by assessed_value with order=desc to find the most expensive properties.","operationId":"list_property_api_saskatoon_property_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft","title":"Sort By"},"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"asc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Property Api Saskatoon Property List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saskatoon/property/geojson":{"get":{"summary":"Property Geojson","operationId":"property_geojson_api_saskatoon_property_geojson_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500000,"minimum":1,"description":"Max features to return (cap prevents browser overload for large cities)","default":50000,"title":"Limit"},"description":"Max features to return (cap prevents browser overload for large cities)"},{"name":"sw_lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport south-west latitude","title":"Sw Lat"},"description":"Viewport south-west latitude"},{"name":"sw_lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport south-west longitude","title":"Sw Lon"},"description":"Viewport south-west longitude"},{"name":"ne_lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport north-east latitude","title":"Ne Lat"},"description":"Viewport north-east latitude"},{"name":"ne_lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport north-east longitude","title":"Ne Lon"},"description":"Viewport north-east longitude"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Offset for pagination through viewport results (use with limit)","default":0,"title":"Offset"},"description":"Offset for pagination through viewport results (use with limit)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saskatoon/property/top":{"get":{"summary":"Top Property","description":"Get top-N properties sorted by any numeric column.\n\nConvenience endpoint for AI agents and dashboards. Returns the top\nN properties sorted by the given column. Defaults to most expensive\n(assessed_value descending). Combine with min_value/max_value to\nfind e.g. the most expensive residential properties.","operationId":"top_property_api_saskatoon_property_top_get","parameters":[{"name":"n","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Number of top properties to return","default":10,"title":"N"},"description":"Number of top properties to return"},{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","description":"Sort column: assessed_value, year_built, lot_size_sqft","default":"assessed_value","title":"Sort By"},"description":"Sort column: assessed_value, year_built, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"desc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Top Property Api Saskatoon Property Top Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saskatoon/property/stats":{"get":{"summary":"Property Stats","description":"Get property assessment statistics.","operationId":"property_stats_api_saskatoon_property_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saskatoon/property/autocomplete":{"get":{"summary":"Property Autocomplete","description":"Get address and roll number suggestions for typeahead search.","operationId":"property_autocomplete_api_saskatoon_property_autocomplete_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"description":"Search query for address/roll number suggestions","title":"Q"},"description":"Search query for address/roll number suggestions"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":25,"minimum":1,"description":"Max suggestions to return","default":10,"title":"Limit"},"description":"Max suggestions to return"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saskatoon/property/geocode":{"post":{"summary":"Property Geocode","description":"Geocode property addresses to lat/lon coordinates.\n\nAccepts a JSON body with 'addresses' (list of address strings, max 50).\nReturns cached results instantly; uncached addresses are geocoded via Nominatim.\n\nExample: {\"addresses\": [\"123 Main St\", \"456 Oak Ave\"]}","operationId":"property_geocode_api_saskatoon_property_geocode_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saskatoon/property/by-dls":{"get":{"summary":"Get Property By Dls","description":"Get property assessment by DLS coordinates.","operationId":"get_property_by_dls_api_saskatoon_property_by_dls_get","parameters":[{"name":"quarter","in":"query","required":true,"schema":{"type":"string","description":"Quarter section (e.g., SW)","title":"Quarter"},"description":"Quarter section (e.g., SW)"},{"name":"section","in":"query","required":true,"schema":{"type":"integer","description":"Section number","title":"Section"},"description":"Section number"},{"name":"township","in":"query","required":true,"schema":{"type":"integer","description":"Township number","title":"Township"},"description":"Township number"},{"name":"range","in":"query","required":true,"schema":{"type":"integer","description":"Range number","title":"Range"},"description":"Range number"},{"name":"meridian","in":"query","required":true,"schema":{"type":"integer","description":"Meridian number","title":"Meridian"},"description":"Meridian number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyAssessment"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saskatoon/property/by-gps":{"get":{"summary":"Get Property By Gps","description":"Find coordinate-bearing assessment records nearest a GPS point.\n\nResults are point-nearness matches unless the municipal source supplies\nparcel polygons; clients should not interpret proximity as legal parcel\ncontainment.","operationId":"get_property_by_gps_api_saskatoon_property_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":84.0,"minimum":41.0,"description":"Canadian latitude","title":"Lat"},"description":"Canadian latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":-52.0,"minimum":-142.0,"description":"Canadian longitude","title":"Lon"},"description":"Canadian longitude"},{"name":"radius_m","in":"query","required":false,"schema":{"type":"integer","maximum":5000,"minimum":1,"description":"Maximum point distance","default":100,"title":"Radius M"},"description":"Maximum point distance"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":10,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Property By Gps Api Saskatoon Property By Gps Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saskatoon/property/by-roll/{roll_number}":{"get":{"summary":"Get Property By Roll","description":"Get property assessment by roll number.","operationId":"get_property_by_roll_api_saskatoon_property_by_roll__roll_number__get","parameters":[{"name":"roll_number","in":"path","required":true,"schema":{"type":"string","description":"Property roll number","title":"Roll Number"},"description":"Property roll number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyAssessment"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saskatoon/property/report":{"get":{"summary":"Property Report Lookup","description":"Consolidated report by roll number, address, or GPS.","operationId":"property_report_lookup_api_saskatoon_property_report_get","parameters":[{"name":"roll_number","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property roll number","title":"Roll Number"},"description":"Property roll number"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Street address","title":"Address"},"description":"Street address"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyReport"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saskatoon/property/report/{roll_number}":{"get":{"summary":"Property Report","description":"Get consolidated property report: assessment + building permits + zoning + DLS.","operationId":"property_report_api_saskatoon_property_report__roll_number__get","parameters":[{"name":"roll_number","in":"path","required":true,"schema":{"type":"string","description":"Property roll number","title":"Roll Number"},"description":"Property roll number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyReport"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saskatoon/property/batch":{"post":{"summary":"Get Properties Batch","description":"Get multiple properties by roll numbers in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of roll numbers.\nExample: {\"ids\": [\"123456789\", \"987654321\"]}\nMaximum 100 roll numbers per request.","operationId":"get_properties_batch_api_saskatoon_property_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Properties Batch Api Saskatoon Property Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saskatoon/property/export":{"get":{"summary":"Export Properties","description":"Export property data as CSV or GeoJSON.\n\nSupports filtering by address, property type, and assessed value range.\nMaximum 10,000 records per export.","operationId":"export_properties_api_saskatoon_property_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Address filter","title":"Address"},"description":"Address filter"},{"name":"property_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property type filter","title":"Property Type"},"description":"Property type filter"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum assessed value","title":"Min Value"},"description":"Minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum assessed value","title":"Max Value"},"description":"Maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saskatoon/census/profile":{"get":{"summary":"Get Census Profile","description":"Get census profile for a specific Dissemination Area.\n\nProvide either da_id directly, OR lat+lon to find the nearest DA automatically.","operationId":"get_census_profile_api_saskatoon_census_profile_get","parameters":[{"name":"da_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Dissemination Area ID (e.g., 48820001)","title":"Da Id"},"description":"Dissemination Area ID (e.g., 48820001)"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude for nearest-DA lookup","title":"Lat"},"description":"Latitude for nearest-DA lookup"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude for nearest-DA lookup","title":"Lon"},"description":"Longitude for nearest-DA lookup"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusProfile"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saskatoon/census/batch":{"post":{"summary":"Get Census Batch","description":"Get multiple census profiles by DA IDs in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of DA IDs.\nExample: {\"ids\": [\"48820001\", \"48820002\"]}\nMaximum 100 DA IDs per request.","operationId":"get_census_batch_api_saskatoon_census_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Census Batch Api Saskatoon Census Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saskatoon/census/export":{"get":{"summary":"Export Census","description":"Export census data as CSV.\n\nSupports filtering by population range and geography type.\nMaximum 10,000 records per export.","operationId":"export_census_api_saskatoon_census_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv only","default":"csv","title":"Format"},"description":"Export format: csv only"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"min_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Minimum population filter","title":"Min Population"},"description":"Minimum population filter"},{"name":"max_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Maximum population filter","title":"Max Population"},"description":"Maximum population filter"},{"name":"geography_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Geography type filter (DA, CT, CMA)","title":"Geography Type"},"description":"Geography type filter (DA, CT, CMA)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saskatoon/census/list":{"get":{"summary":"List Census Profiles","description":"List all census profiles with pagination.\n\nUse this endpoint to browse available census profiles and discover valid DA IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_census_profiles_api_saskatoon_census_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Census Profiles Api Saskatoon Census List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saskatoon/census/by-gps":{"get":{"summary":"Get Census By Gps","description":"Get census data for GPS coordinates.","operationId":"get_census_by_gps_api_saskatoon_census_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90,"minimum":-90,"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":180,"minimum":-180,"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saskatoon/census/by-dls":{"get":{"summary":"Get Census By Dls","description":"Get census data for DLS coordinates.","operationId":"get_census_by_dls_api_saskatoon_census_by_dls_get","parameters":[{"name":"dls","in":"query","required":true,"schema":{"type":"string","description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)","title":"Dls"},"description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saskatoon/census/map-data":{"get":{"summary":"Get Census Map Data","description":"Get lightweight DA points for choropleth map rendering.\n\nReturns centroid coordinates and key metrics (income, age, population,\nhousehold size, employment rate) for all DAs in the city.\nUsed by the census dashboard to render color-coded maps.","operationId":"get_census_map_data_api_saskatoon_census_map_data_get","parameters":[{"name":"year","in":"query","required":false,"schema":{"type":"integer","description":"Census year for DA map data","default":2021,"title":"Year"},"description":"Census year for DA map data"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saskatoon/census/stats":{"get":{"summary":"Census Stats","description":"Get census data statistics.","operationId":"census_stats_api_saskatoon_census_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saskatoon/census/compare":{"get":{"summary":"Census Compare","description":"Compare key census metrics across multiple years.\n\nReturns side-by-side comparison of population, households,\navg_income, median_age, density, and land_area for each requested year.\nYears without data return null for that year's values.","operationId":"census_compare_api_saskatoon_census_compare_get","parameters":[{"name":"years","in":"query","required":false,"schema":{"type":"string","description":"Comma-separated census years (e.g., 2016,2021)","default":"2021","title":"Years"},"description":"Comma-separated census years (e.g., 2016,2021)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saskatoon/census/time-series":{"get":{"summary":"Census Timeseries","description":"Get year-by-year census trends for this city.\n\nReturns population, income, age, and household trends across all\navailable census years. Useful for spotting long-term demographic shifts.","operationId":"census_timeseries_api_saskatoon_census_time_series_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saskatoon/geography/list":{"get":{"summary":"Geography List","description":"List geography boundaries for this city.","operationId":"geography_list_api_saskatoon_geography_list_get","parameters":[{"name":"type","in":"query","required":false,"schema":{"type":"string","title":"Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saskatoon/geography/by-gps":{"get":{"summary":"Geography By Gps","description":"Find the geography boundary containing a GPS point.","operationId":"geography_by_gps_api_saskatoon_geography_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","title":"Lat"}},{"name":"lon","in":"query","required":true,"schema":{"type":"number","title":"Lon"}},{"name":"type","in":"query","required":false,"schema":{"type":"string","default":"DA","title":"Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saskatoon/geography/stats":{"get":{"summary":"Geography Stats","description":"Get geography statistics for this city.","operationId":"geography_stats_api_saskatoon_geography_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saskatoon/geography/{geoid}":{"get":{"summary":"Geography Boundary","description":"Get a specific geography boundary by geoid, including GeoJSON polygon.","operationId":"geography_boundary_api_saskatoon_geography__geoid__get","parameters":[{"name":"geoid","in":"path","required":true,"schema":{"type":"string","title":"Geoid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saskatoon/census/rental/list":{"get":{"summary":"List Rental Prices","description":"List rental price records for this city, with optional unit type filter.","operationId":"list_rental_prices_api_saskatoon_census_rental_list_get","parameters":[{"name":"unit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":50,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalPriceListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saskatoon/census/rental/trend":{"get":{"summary":"Get Rental Trend","description":"Get rental price time series for a specific unit type.","operationId":"get_rental_trend_api_saskatoon_census_rental_trend_get","parameters":[{"name":"unit_type","in":"query","required":true,"schema":{"type":"string","description":"Rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Rental unit type (e.g. 'Apartment - 1 bedroom')"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalTrendResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saskatoon/census/rental/types":{"get":{"summary":"Get Rental Types","description":"Get available rental unit types for this city.","operationId":"get_rental_types_api_saskatoon_census_rental_types_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saskatoon/zoning/by-gps":{"get":{"summary":"Get Zoning By Gps","description":"Get zoning district for GPS coordinates.","operationId":"get_zoning_by_gps_api_saskatoon_zoning_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZoningByGPSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saskatoon/zoning/by-id/{district_id}":{"get":{"summary":"Get Zoning By Id","description":"Get a single zoning district by its numeric ID.","operationId":"get_zoning_by_id_api_saskatoon_zoning_by_id__district_id__get","parameters":[{"name":"district_id","in":"path","required":true,"schema":{"type":"integer","description":"Zoning district numeric ID","title":"District Id"},"description":"Zoning district numeric ID"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning By Id Api Saskatoon Zoning By Id  District Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saskatoon/zoning/by-code/{code}":{"get":{"summary":"Get Zoning By Code","description":"Get all districts with a specific zone code.","operationId":"get_zoning_by_code_api_saskatoon_zoning_by_code__code__get","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","description":"Zone code (e.g., C-C1, R-G)","title":"Code"},"description":"Zone code (e.g., C-C1, R-G)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoningDistrict"},"title":"Response Get Zoning By Code Api Saskatoon Zoning By Code  Code  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saskatoon/zoning/batch":{"post":{"summary":"Get Zoning Batch","description":"Get multiple zoning districts by zone codes in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of zone codes.\nExample: {\"ids\": [\"CR20-C20/R20\", \"C-C1\", \"R-G\"]}\nMaximum 100 zone codes per request.","operationId":"get_zoning_batch_api_saskatoon_zoning_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning Batch Api Saskatoon Zoning Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saskatoon/zoning/list":{"get":{"summary":"List Zoning Districts","description":"List all zoning districts with pagination.\n\nUse this endpoint to browse available zoning districts and discover valid IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_zoning_districts_api_saskatoon_zoning_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Zoning Districts Api Saskatoon Zoning List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saskatoon/zoning/codes":{"get":{"summary":"List Zone Codes","description":"List all zone codes with descriptions.","operationId":"list_zone_codes_api_saskatoon_zoning_codes_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"type":"string","description":"Filter by major category (e.g., Commercial, Residential)","title":"Category"},"description":"Filter by major category (e.g., Commercial, Residential)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoneCodeInfo"},"title":"Response List Zone Codes Api Saskatoon Zoning Codes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saskatoon/zoning/stats":{"get":{"summary":"Zoning Stats","description":"Get zoning statistics.","operationId":"zoning_stats_api_saskatoon_zoning_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saskatoon/zoning/export":{"get":{"summary":"Export Zoning","description":"Export zoning district data as CSV or GeoJSON.\n\nSupports filtering by zone code, category, and area range.\nMaximum 10,000 records per export.","operationId":"export_zoning_api_saskatoon_zoning_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"zone_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Zone code filter (e.g., CR2)","title":"Zone Code"},"description":"Zone code filter (e.g., CR2)"},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Major category filter","title":"Category"},"description":"Major category filter"},{"name":"min_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum area in sq km","title":"Min Area"},"description":"Minimum area in sq km"},{"name":"max_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum area in sq km","title":"Max Area"},"description":"Maximum area in sq km"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saskatoon/permits/stats":{"get":{"summary":"Building Stats","description":"Get building permit statistics.","operationId":"building_stats_api_saskatoon_permits_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saskatoon/permits/search":{"get":{"summary":"Search Building Permits","description":"Search building permits by address, contractor, applicant, permit number, and/or permit type.","operationId":"search_building_permits_api_saskatoon_permits_search_get","parameters":[{"name":"address","in":"query","required":false,"schema":{"type":"string","description":"Address to search","title":"Address"},"description":"Address to search"},{"name":"q","in":"query","required":false,"schema":{"type":"string","description":"General text search (address, contractor, applicant, permit #)","title":"Q"},"description":"General text search (address, contractor, applicant, permit #)"},{"name":"permit_type","in":"query","required":false,"schema":{"type":"string","description":"Filter by permit type","title":"Permit Type"},"description":"Filter by permit type"},{"name":"bbox","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bounding box: min_lon,min_lat,max_lon,max_lat","title":"Bbox"},"description":"Bounding box: min_lon,min_lat,max_lon,max_lat"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max results","default":20,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset","default":0,"title":"Offset"},"description":"Results offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saskatoon/permits/nearby":{"get":{"summary":"Nearby Building Permits","description":"Coordinate-first alias for nearby building permits.","operationId":"nearby_building_permits_api_saskatoon_permits_nearby_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":84.0,"minimum":41.0,"description":"Canadian latitude","title":"Lat"},"description":"Canadian latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":-52.0,"minimum":-142.0,"description":"Canadian longitude","title":"Lon"},"description":"Canadian longitude"},{"name":"radius_m","in":"query","required":false,"schema":{"type":"integer","maximum":50000,"minimum":1,"default":1000,"title":"Radius M"}},{"name":"permit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Permit Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saskatoon/permits/export":{"get":{"summary":"Export Building Permits","description":"Export building permit data as CSV or GeoJSON.\n\nSupports filtering by address, permit type, and date range.\nMaximum 10,000 records per export.","operationId":"export_building_permits_api_saskatoon_permits_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Address filter","title":"Address"},"description":"Address filter"},{"name":"permit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Permit type filter","title":"Permit Type"},"description":"Permit type filter"},{"name":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Start date (YYYY-MM-DD)","title":"Date From"},"description":"Start date (YYYY-MM-DD)"},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"End date (YYYY-MM-DD)","title":"Date To"},"description":"End date (YYYY-MM-DD)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saskatoon/permits/recent":{"get":{"summary":"Recent Building Permits","description":"Get recent building permits sorted by application date (newest first).\n\nUse this to see where construction activity is happening right now.","operationId":"recent_building_permits_api_saskatoon_permits_recent_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Max results","default":20,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset","default":0,"title":"Offset"},"description":"Results offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saskatoon/permits/batch":{"post":{"summary":"Get Building Permits Batch","description":"Get multiple building permits by permit numbers in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of permit numbers.\nExample: {\"ids\": [\"BP123456\", \"BP789012\"]}\nMaximum 100 permit numbers per request.","operationId":"get_building_permits_batch_api_saskatoon_permits_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Building Permits Batch Api Saskatoon Permits Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saskatoon/permits/{permit_number}":{"get":{"summary":"Get Building Permit","description":"Get building permit details by permit number.\n\nServes HTML for browsers, JSON for API clients.","operationId":"get_building_permit_api_saskatoon_permits__permit_number__get","parameters":[{"name":"permit_number","in":"path","required":true,"schema":{"type":"string","description":"Permit number","title":"Permit Number"},"description":"Permit number"},{"name":"_city_name","in":"query","required":false,"schema":{"default":"Saskatoon","title":" City Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saskatoon/health":{"get":{"summary":"City Health","description":"City-specific health check.","operationId":"city_health_api_saskatoon_health_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/toronto/entries/{kind}":{"get":{"summary":"List Entries","operationId":"list_entries_api_toronto_entries__kind__get","parameters":[{"name":"kind","in":"path","required":true,"schema":{"type":"string","description":"Canonical entry kind: property, permit, zoning, or safety","title":"Kind"},"description":"Canonical entry kind: property, permit, zoning, or safety"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"_services","in":"query","required":false,"schema":{"title":" Services"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Entries Api Toronto Entries  Kind  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/toronto/property/search":{"get":{"summary":"Search Property","description":"Search for properties by address, or browse all if no address specified.\nSupports sorting by assessed_value, address, year_built, community, or lot_size_sqft.\nSupports value range filtering with min_value and max_value.\n Supports property_type and year range filters.","operationId":"search_property_api_toronto_property_search_get","parameters":[{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Street address to search (omit to browse all)","title":"Address"},"description":"Street address to search (omit to browse all)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max results to return (up to 1000 for map browse)","default":10,"title":"Limit"},"description":"Max results to return (up to 1000 for map browse)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset for pagination","default":0,"title":"Offset"},"description":"Results offset for pagination"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft","title":"Sort By"},"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"asc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"},{"name":"property_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property type filter (e.g. RE, Residential)","title":"Property Type"},"description":"Property type filter (e.g. RE, Residential)"},{"name":"min_year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter: minimum year built","title":"Min Year"},"description":"Filter: minimum year built"},{"name":"max_year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter: maximum year built","title":"Max Year"},"description":"Filter: maximum year built"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertySearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/toronto/property/list":{"get":{"summary":"List Property","description":"List all properties with pagination, sorting, and value range filtering.\n\nUse this endpoint to browse available property records and discover valid roll numbers.\nReturns paginated results with total count for client-side pagination.\nSort by assessed_value with order=desc to find the most expensive properties.","operationId":"list_property_api_toronto_property_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft","title":"Sort By"},"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"asc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Property Api Toronto Property List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/toronto/property/geojson":{"get":{"summary":"Property Geojson","operationId":"property_geojson_api_toronto_property_geojson_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500000,"minimum":1,"description":"Max features to return (cap prevents browser overload for large cities)","default":50000,"title":"Limit"},"description":"Max features to return (cap prevents browser overload for large cities)"},{"name":"sw_lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport south-west latitude","title":"Sw Lat"},"description":"Viewport south-west latitude"},{"name":"sw_lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport south-west longitude","title":"Sw Lon"},"description":"Viewport south-west longitude"},{"name":"ne_lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport north-east latitude","title":"Ne Lat"},"description":"Viewport north-east latitude"},{"name":"ne_lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport north-east longitude","title":"Ne Lon"},"description":"Viewport north-east longitude"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Offset for pagination through viewport results (use with limit)","default":0,"title":"Offset"},"description":"Offset for pagination through viewport results (use with limit)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/toronto/property/top":{"get":{"summary":"Top Property","description":"Get top-N properties sorted by any numeric column.\n\nConvenience endpoint for AI agents and dashboards. Returns the top\nN properties sorted by the given column. Defaults to most expensive\n(assessed_value descending). Combine with min_value/max_value to\nfind e.g. the most expensive residential properties.","operationId":"top_property_api_toronto_property_top_get","parameters":[{"name":"n","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Number of top properties to return","default":10,"title":"N"},"description":"Number of top properties to return"},{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","description":"Sort column: assessed_value, year_built, lot_size_sqft","default":"assessed_value","title":"Sort By"},"description":"Sort column: assessed_value, year_built, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"desc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Top Property Api Toronto Property Top Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/toronto/property/stats":{"get":{"summary":"Property Stats","description":"Get property assessment statistics.","operationId":"property_stats_api_toronto_property_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/toronto/property/autocomplete":{"get":{"summary":"Property Autocomplete","description":"Get address and roll number suggestions for typeahead search.","operationId":"property_autocomplete_api_toronto_property_autocomplete_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"description":"Search query for address/roll number suggestions","title":"Q"},"description":"Search query for address/roll number suggestions"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":25,"minimum":1,"description":"Max suggestions to return","default":10,"title":"Limit"},"description":"Max suggestions to return"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/toronto/property/geocode":{"post":{"summary":"Property Geocode","description":"Geocode property addresses to lat/lon coordinates.\n\nAccepts a JSON body with 'addresses' (list of address strings, max 50).\nReturns cached results instantly; uncached addresses are geocoded via Nominatim.\n\nExample: {\"addresses\": [\"123 Main St\", \"456 Oak Ave\"]}","operationId":"property_geocode_api_toronto_property_geocode_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/toronto/property/by-dls":{"get":{"summary":"Get Property By Dls","description":"Get property assessment by DLS coordinates.","operationId":"get_property_by_dls_api_toronto_property_by_dls_get","parameters":[{"name":"quarter","in":"query","required":true,"schema":{"type":"string","description":"Quarter section (e.g., SW)","title":"Quarter"},"description":"Quarter section (e.g., SW)"},{"name":"section","in":"query","required":true,"schema":{"type":"integer","description":"Section number","title":"Section"},"description":"Section number"},{"name":"township","in":"query","required":true,"schema":{"type":"integer","description":"Township number","title":"Township"},"description":"Township number"},{"name":"range","in":"query","required":true,"schema":{"type":"integer","description":"Range number","title":"Range"},"description":"Range number"},{"name":"meridian","in":"query","required":true,"schema":{"type":"integer","description":"Meridian number","title":"Meridian"},"description":"Meridian number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyAssessment"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/toronto/property/by-gps":{"get":{"summary":"Get Property By Gps","description":"Find coordinate-bearing assessment records nearest a GPS point.\n\nResults are point-nearness matches unless the municipal source supplies\nparcel polygons; clients should not interpret proximity as legal parcel\ncontainment.","operationId":"get_property_by_gps_api_toronto_property_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":84.0,"minimum":41.0,"description":"Canadian latitude","title":"Lat"},"description":"Canadian latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":-52.0,"minimum":-142.0,"description":"Canadian longitude","title":"Lon"},"description":"Canadian longitude"},{"name":"radius_m","in":"query","required":false,"schema":{"type":"integer","maximum":5000,"minimum":1,"description":"Maximum point distance","default":100,"title":"Radius M"},"description":"Maximum point distance"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":10,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Property By Gps Api Toronto Property By Gps Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/toronto/property/by-roll/{roll_number}":{"get":{"summary":"Get Property By Roll","description":"Get property assessment by roll number.","operationId":"get_property_by_roll_api_toronto_property_by_roll__roll_number__get","parameters":[{"name":"roll_number","in":"path","required":true,"schema":{"type":"string","description":"Property roll number","title":"Roll Number"},"description":"Property roll number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyAssessment"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/toronto/property/report":{"get":{"summary":"Property Report Lookup","description":"Consolidated report by roll number, address, or GPS.","operationId":"property_report_lookup_api_toronto_property_report_get","parameters":[{"name":"roll_number","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property roll number","title":"Roll Number"},"description":"Property roll number"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Street address","title":"Address"},"description":"Street address"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyReport"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/toronto/property/report/{roll_number}":{"get":{"summary":"Property Report","description":"Get consolidated property report: assessment + building permits + zoning + DLS.","operationId":"property_report_api_toronto_property_report__roll_number__get","parameters":[{"name":"roll_number","in":"path","required":true,"schema":{"type":"string","description":"Property roll number","title":"Roll Number"},"description":"Property roll number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyReport"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/toronto/property/batch":{"post":{"summary":"Get Properties Batch","description":"Get multiple properties by roll numbers in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of roll numbers.\nExample: {\"ids\": [\"123456789\", \"987654321\"]}\nMaximum 100 roll numbers per request.","operationId":"get_properties_batch_api_toronto_property_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Properties Batch Api Toronto Property Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/toronto/property/export":{"get":{"summary":"Export Properties","description":"Export property data as CSV or GeoJSON.\n\nSupports filtering by address, property type, and assessed value range.\nMaximum 10,000 records per export.","operationId":"export_properties_api_toronto_property_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Address filter","title":"Address"},"description":"Address filter"},{"name":"property_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property type filter","title":"Property Type"},"description":"Property type filter"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum assessed value","title":"Min Value"},"description":"Minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum assessed value","title":"Max Value"},"description":"Maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/toronto/census/profile":{"get":{"summary":"Get Census Profile","description":"Get census profile for a specific Dissemination Area.\n\nProvide either da_id directly, OR lat+lon to find the nearest DA automatically.","operationId":"get_census_profile_api_toronto_census_profile_get","parameters":[{"name":"da_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Dissemination Area ID (e.g., 48820001)","title":"Da Id"},"description":"Dissemination Area ID (e.g., 48820001)"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude for nearest-DA lookup","title":"Lat"},"description":"Latitude for nearest-DA lookup"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude for nearest-DA lookup","title":"Lon"},"description":"Longitude for nearest-DA lookup"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusProfile"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/toronto/census/batch":{"post":{"summary":"Get Census Batch","description":"Get multiple census profiles by DA IDs in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of DA IDs.\nExample: {\"ids\": [\"48820001\", \"48820002\"]}\nMaximum 100 DA IDs per request.","operationId":"get_census_batch_api_toronto_census_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Census Batch Api Toronto Census Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/toronto/census/export":{"get":{"summary":"Export Census","description":"Export census data as CSV.\n\nSupports filtering by population range and geography type.\nMaximum 10,000 records per export.","operationId":"export_census_api_toronto_census_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv only","default":"csv","title":"Format"},"description":"Export format: csv only"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"min_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Minimum population filter","title":"Min Population"},"description":"Minimum population filter"},{"name":"max_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Maximum population filter","title":"Max Population"},"description":"Maximum population filter"},{"name":"geography_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Geography type filter (DA, CT, CMA)","title":"Geography Type"},"description":"Geography type filter (DA, CT, CMA)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/toronto/census/list":{"get":{"summary":"List Census Profiles","description":"List all census profiles with pagination.\n\nUse this endpoint to browse available census profiles and discover valid DA IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_census_profiles_api_toronto_census_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Census Profiles Api Toronto Census List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/toronto/census/by-gps":{"get":{"summary":"Get Census By Gps","description":"Get census data for GPS coordinates.","operationId":"get_census_by_gps_api_toronto_census_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90,"minimum":-90,"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":180,"minimum":-180,"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/toronto/census/by-dls":{"get":{"summary":"Get Census By Dls","description":"Get census data for DLS coordinates.","operationId":"get_census_by_dls_api_toronto_census_by_dls_get","parameters":[{"name":"dls","in":"query","required":true,"schema":{"type":"string","description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)","title":"Dls"},"description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/toronto/census/map-data":{"get":{"summary":"Get Census Map Data","description":"Get lightweight DA points for choropleth map rendering.\n\nReturns centroid coordinates and key metrics (income, age, population,\nhousehold size, employment rate) for all DAs in the city.\nUsed by the census dashboard to render color-coded maps.","operationId":"get_census_map_data_api_toronto_census_map_data_get","parameters":[{"name":"year","in":"query","required":false,"schema":{"type":"integer","description":"Census year for DA map data","default":2021,"title":"Year"},"description":"Census year for DA map data"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/toronto/census/stats":{"get":{"summary":"Census Stats","description":"Get census data statistics.","operationId":"census_stats_api_toronto_census_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/toronto/census/compare":{"get":{"summary":"Census Compare","description":"Compare key census metrics across multiple years.\n\nReturns side-by-side comparison of population, households,\navg_income, median_age, density, and land_area for each requested year.\nYears without data return null for that year's values.","operationId":"census_compare_api_toronto_census_compare_get","parameters":[{"name":"years","in":"query","required":false,"schema":{"type":"string","description":"Comma-separated census years (e.g., 2016,2021)","default":"2021","title":"Years"},"description":"Comma-separated census years (e.g., 2016,2021)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/toronto/census/time-series":{"get":{"summary":"Census Timeseries","description":"Get year-by-year census trends for this city.\n\nReturns population, income, age, and household trends across all\navailable census years. Useful for spotting long-term demographic shifts.","operationId":"census_timeseries_api_toronto_census_time_series_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/toronto/geography/list":{"get":{"summary":"Geography List","description":"List geography boundaries for this city.","operationId":"geography_list_api_toronto_geography_list_get","parameters":[{"name":"type","in":"query","required":false,"schema":{"type":"string","title":"Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/toronto/geography/by-gps":{"get":{"summary":"Geography By Gps","description":"Find the geography boundary containing a GPS point.","operationId":"geography_by_gps_api_toronto_geography_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","title":"Lat"}},{"name":"lon","in":"query","required":true,"schema":{"type":"number","title":"Lon"}},{"name":"type","in":"query","required":false,"schema":{"type":"string","default":"DA","title":"Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/toronto/geography/stats":{"get":{"summary":"Geography Stats","description":"Get geography statistics for this city.","operationId":"geography_stats_api_toronto_geography_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/toronto/geography/{geoid}":{"get":{"summary":"Geography Boundary","description":"Get a specific geography boundary by geoid, including GeoJSON polygon.","operationId":"geography_boundary_api_toronto_geography__geoid__get","parameters":[{"name":"geoid","in":"path","required":true,"schema":{"type":"string","title":"Geoid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/toronto/census/rental/list":{"get":{"summary":"List Rental Prices","description":"List rental price records for this city, with optional unit type filter.","operationId":"list_rental_prices_api_toronto_census_rental_list_get","parameters":[{"name":"unit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":50,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalPriceListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/toronto/census/rental/trend":{"get":{"summary":"Get Rental Trend","description":"Get rental price time series for a specific unit type.","operationId":"get_rental_trend_api_toronto_census_rental_trend_get","parameters":[{"name":"unit_type","in":"query","required":true,"schema":{"type":"string","description":"Rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Rental unit type (e.g. 'Apartment - 1 bedroom')"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalTrendResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/toronto/census/rental/types":{"get":{"summary":"Get Rental Types","description":"Get available rental unit types for this city.","operationId":"get_rental_types_api_toronto_census_rental_types_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/toronto/zoning/by-gps":{"get":{"summary":"Get Zoning By Gps","description":"Get zoning district for GPS coordinates.","operationId":"get_zoning_by_gps_api_toronto_zoning_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZoningByGPSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/toronto/zoning/by-id/{district_id}":{"get":{"summary":"Get Zoning By Id","description":"Get a single zoning district by its numeric ID.","operationId":"get_zoning_by_id_api_toronto_zoning_by_id__district_id__get","parameters":[{"name":"district_id","in":"path","required":true,"schema":{"type":"integer","description":"Zoning district numeric ID","title":"District Id"},"description":"Zoning district numeric ID"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning By Id Api Toronto Zoning By Id  District Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/toronto/zoning/by-code/{code}":{"get":{"summary":"Get Zoning By Code","description":"Get all districts with a specific zone code.","operationId":"get_zoning_by_code_api_toronto_zoning_by_code__code__get","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","description":"Zone code (e.g., C-C1, R-G)","title":"Code"},"description":"Zone code (e.g., C-C1, R-G)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoningDistrict"},"title":"Response Get Zoning By Code Api Toronto Zoning By Code  Code  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/toronto/zoning/batch":{"post":{"summary":"Get Zoning Batch","description":"Get multiple zoning districts by zone codes in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of zone codes.\nExample: {\"ids\": [\"CR20-C20/R20\", \"C-C1\", \"R-G\"]}\nMaximum 100 zone codes per request.","operationId":"get_zoning_batch_api_toronto_zoning_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning Batch Api Toronto Zoning Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/toronto/zoning/list":{"get":{"summary":"List Zoning Districts","description":"List all zoning districts with pagination.\n\nUse this endpoint to browse available zoning districts and discover valid IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_zoning_districts_api_toronto_zoning_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Zoning Districts Api Toronto Zoning List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/toronto/zoning/codes":{"get":{"summary":"List Zone Codes","description":"List all zone codes with descriptions.","operationId":"list_zone_codes_api_toronto_zoning_codes_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"type":"string","description":"Filter by major category (e.g., Commercial, Residential)","title":"Category"},"description":"Filter by major category (e.g., Commercial, Residential)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoneCodeInfo"},"title":"Response List Zone Codes Api Toronto Zoning Codes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/toronto/zoning/stats":{"get":{"summary":"Zoning Stats","description":"Get zoning statistics.","operationId":"zoning_stats_api_toronto_zoning_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/toronto/zoning/export":{"get":{"summary":"Export Zoning","description":"Export zoning district data as CSV or GeoJSON.\n\nSupports filtering by zone code, category, and area range.\nMaximum 10,000 records per export.","operationId":"export_zoning_api_toronto_zoning_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"zone_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Zone code filter (e.g., CR2)","title":"Zone Code"},"description":"Zone code filter (e.g., CR2)"},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Major category filter","title":"Category"},"description":"Major category filter"},{"name":"min_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum area in sq km","title":"Min Area"},"description":"Minimum area in sq km"},{"name":"max_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum area in sq km","title":"Max Area"},"description":"Maximum area in sq km"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/toronto/permits/stats":{"get":{"summary":"Building Stats","description":"Get building permit statistics.","operationId":"building_stats_api_toronto_permits_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/toronto/permits/search":{"get":{"summary":"Search Building Permits","description":"Search building permits by address, contractor, applicant, permit number, and/or permit type.","operationId":"search_building_permits_api_toronto_permits_search_get","parameters":[{"name":"address","in":"query","required":false,"schema":{"type":"string","description":"Address to search","title":"Address"},"description":"Address to search"},{"name":"q","in":"query","required":false,"schema":{"type":"string","description":"General text search (address, contractor, applicant, permit #)","title":"Q"},"description":"General text search (address, contractor, applicant, permit #)"},{"name":"permit_type","in":"query","required":false,"schema":{"type":"string","description":"Filter by permit type","title":"Permit Type"},"description":"Filter by permit type"},{"name":"bbox","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bounding box: min_lon,min_lat,max_lon,max_lat","title":"Bbox"},"description":"Bounding box: min_lon,min_lat,max_lon,max_lat"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max results","default":20,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset","default":0,"title":"Offset"},"description":"Results offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/toronto/permits/nearby":{"get":{"summary":"Nearby Building Permits","description":"Coordinate-first alias for nearby building permits.","operationId":"nearby_building_permits_api_toronto_permits_nearby_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":84.0,"minimum":41.0,"description":"Canadian latitude","title":"Lat"},"description":"Canadian latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":-52.0,"minimum":-142.0,"description":"Canadian longitude","title":"Lon"},"description":"Canadian longitude"},{"name":"radius_m","in":"query","required":false,"schema":{"type":"integer","maximum":50000,"minimum":1,"default":1000,"title":"Radius M"}},{"name":"permit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Permit Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/toronto/permits/export":{"get":{"summary":"Export Building Permits","description":"Export building permit data as CSV or GeoJSON.\n\nSupports filtering by address, permit type, and date range.\nMaximum 10,000 records per export.","operationId":"export_building_permits_api_toronto_permits_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Address filter","title":"Address"},"description":"Address filter"},{"name":"permit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Permit type filter","title":"Permit Type"},"description":"Permit type filter"},{"name":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Start date (YYYY-MM-DD)","title":"Date From"},"description":"Start date (YYYY-MM-DD)"},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"End date (YYYY-MM-DD)","title":"Date To"},"description":"End date (YYYY-MM-DD)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/toronto/permits/recent":{"get":{"summary":"Recent Building Permits","description":"Get recent building permits sorted by application date (newest first).\n\nUse this to see where construction activity is happening right now.","operationId":"recent_building_permits_api_toronto_permits_recent_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Max results","default":20,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset","default":0,"title":"Offset"},"description":"Results offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/toronto/permits/batch":{"post":{"summary":"Get Building Permits Batch","description":"Get multiple building permits by permit numbers in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of permit numbers.\nExample: {\"ids\": [\"BP123456\", \"BP789012\"]}\nMaximum 100 permit numbers per request.","operationId":"get_building_permits_batch_api_toronto_permits_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Building Permits Batch Api Toronto Permits Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/toronto/permits/{permit_number}":{"get":{"summary":"Get Building Permit","description":"Get building permit details by permit number.\n\nServes HTML for browsers, JSON for API clients.","operationId":"get_building_permit_api_toronto_permits__permit_number__get","parameters":[{"name":"permit_number","in":"path","required":true,"schema":{"type":"string","description":"Permit number","title":"Permit Number"},"description":"Permit number"},{"name":"_city_name","in":"query","required":false,"schema":{"default":"Toronto","title":" City Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/toronto/safety/search":{"get":{"summary":"Search Safety","operationId":"search_safety_api_toronto_safety_search_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Q"}},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"}},{"name":"neighbourhood","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Neighbourhood"}},{"name":"start","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Start"}},{"name":"end","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"End"}},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lat"}},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lon"}},{"name":"radius_m","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Radius M"}},{"name":"bbox","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bbox"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SafetySearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/toronto/safety/nearby":{"get":{"summary":"Nearby Safety","description":"Coordinate-first alias for nearby public safety records.","operationId":"nearby_safety_api_toronto_safety_nearby_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":84.0,"minimum":41.0,"description":"Canadian latitude","title":"Lat"},"description":"Canadian latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":-52.0,"minimum":-142.0,"description":"Canadian longitude","title":"Lon"},"description":"Canadian longitude"},{"name":"radius_m","in":"query","required":false,"schema":{"type":"integer","maximum":50000,"minimum":1,"default":1000,"title":"Radius M"}},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"}},{"name":"start","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Start"}},{"name":"end","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"End"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SafetySearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/toronto/safety/stats":{"get":{"summary":"Safety Stats","operationId":"safety_stats_api_toronto_safety_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SafetyStats"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/toronto/safety/{source_record_id}":{"get":{"summary":"Safety By Id","operationId":"safety_by_id_api_toronto_safety__source_record_id__get","parameters":[{"name":"source_record_id","in":"path","required":true,"schema":{"type":"string","title":"Source Record Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/toronto/health":{"get":{"summary":"City Health","description":"City-specific health check.","operationId":"city_health_api_toronto_health_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/montreal/entries/{kind}":{"get":{"summary":"List Entries","operationId":"list_entries_api_montreal_entries__kind__get","parameters":[{"name":"kind","in":"path","required":true,"schema":{"type":"string","description":"Canonical entry kind: property, permit, zoning, or safety","title":"Kind"},"description":"Canonical entry kind: property, permit, zoning, or safety"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"_services","in":"query","required":false,"schema":{"title":" Services"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Entries Api Montreal Entries  Kind  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/montreal/property/search":{"get":{"summary":"Search Property","description":"Search for properties by address, or browse all if no address specified.\nSupports sorting by assessed_value, address, year_built, community, or lot_size_sqft.\nSupports value range filtering with min_value and max_value.\n Supports property_type and year range filters.","operationId":"search_property_api_montreal_property_search_get","parameters":[{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Street address to search (omit to browse all)","title":"Address"},"description":"Street address to search (omit to browse all)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max results to return (up to 1000 for map browse)","default":10,"title":"Limit"},"description":"Max results to return (up to 1000 for map browse)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset for pagination","default":0,"title":"Offset"},"description":"Results offset for pagination"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft","title":"Sort By"},"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"asc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"},{"name":"property_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property type filter (e.g. RE, Residential)","title":"Property Type"},"description":"Property type filter (e.g. RE, Residential)"},{"name":"min_year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter: minimum year built","title":"Min Year"},"description":"Filter: minimum year built"},{"name":"max_year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter: maximum year built","title":"Max Year"},"description":"Filter: maximum year built"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertySearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/montreal/property/list":{"get":{"summary":"List Property","description":"List all properties with pagination, sorting, and value range filtering.\n\nUse this endpoint to browse available property records and discover valid roll numbers.\nReturns paginated results with total count for client-side pagination.\nSort by assessed_value with order=desc to find the most expensive properties.","operationId":"list_property_api_montreal_property_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft","title":"Sort By"},"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"asc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Property Api Montreal Property List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/montreal/property/geojson":{"get":{"summary":"Property Geojson","operationId":"property_geojson_api_montreal_property_geojson_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500000,"minimum":1,"description":"Max features to return (cap prevents browser overload for large cities)","default":50000,"title":"Limit"},"description":"Max features to return (cap prevents browser overload for large cities)"},{"name":"sw_lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport south-west latitude","title":"Sw Lat"},"description":"Viewport south-west latitude"},{"name":"sw_lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport south-west longitude","title":"Sw Lon"},"description":"Viewport south-west longitude"},{"name":"ne_lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport north-east latitude","title":"Ne Lat"},"description":"Viewport north-east latitude"},{"name":"ne_lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport north-east longitude","title":"Ne Lon"},"description":"Viewport north-east longitude"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Offset for pagination through viewport results (use with limit)","default":0,"title":"Offset"},"description":"Offset for pagination through viewport results (use with limit)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/montreal/property/top":{"get":{"summary":"Top Property","description":"Get top-N properties sorted by any numeric column.\n\nConvenience endpoint for AI agents and dashboards. Returns the top\nN properties sorted by the given column. Defaults to most expensive\n(assessed_value descending). Combine with min_value/max_value to\nfind e.g. the most expensive residential properties.","operationId":"top_property_api_montreal_property_top_get","parameters":[{"name":"n","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Number of top properties to return","default":10,"title":"N"},"description":"Number of top properties to return"},{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","description":"Sort column: assessed_value, year_built, lot_size_sqft","default":"assessed_value","title":"Sort By"},"description":"Sort column: assessed_value, year_built, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"desc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Top Property Api Montreal Property Top Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/montreal/property/stats":{"get":{"summary":"Property Stats","description":"Get property assessment statistics.","operationId":"property_stats_api_montreal_property_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/montreal/property/autocomplete":{"get":{"summary":"Property Autocomplete","description":"Get address and roll number suggestions for typeahead search.","operationId":"property_autocomplete_api_montreal_property_autocomplete_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"description":"Search query for address/roll number suggestions","title":"Q"},"description":"Search query for address/roll number suggestions"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":25,"minimum":1,"description":"Max suggestions to return","default":10,"title":"Limit"},"description":"Max suggestions to return"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/montreal/property/geocode":{"post":{"summary":"Property Geocode","description":"Geocode property addresses to lat/lon coordinates.\n\nAccepts a JSON body with 'addresses' (list of address strings, max 50).\nReturns cached results instantly; uncached addresses are geocoded via Nominatim.\n\nExample: {\"addresses\": [\"123 Main St\", \"456 Oak Ave\"]}","operationId":"property_geocode_api_montreal_property_geocode_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/montreal/property/by-dls":{"get":{"summary":"Get Property By Dls","description":"Get property assessment by DLS coordinates.","operationId":"get_property_by_dls_api_montreal_property_by_dls_get","parameters":[{"name":"quarter","in":"query","required":true,"schema":{"type":"string","description":"Quarter section (e.g., SW)","title":"Quarter"},"description":"Quarter section (e.g., SW)"},{"name":"section","in":"query","required":true,"schema":{"type":"integer","description":"Section number","title":"Section"},"description":"Section number"},{"name":"township","in":"query","required":true,"schema":{"type":"integer","description":"Township number","title":"Township"},"description":"Township number"},{"name":"range","in":"query","required":true,"schema":{"type":"integer","description":"Range number","title":"Range"},"description":"Range number"},{"name":"meridian","in":"query","required":true,"schema":{"type":"integer","description":"Meridian number","title":"Meridian"},"description":"Meridian number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyAssessment"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/montreal/property/by-gps":{"get":{"summary":"Get Property By Gps","description":"Find coordinate-bearing assessment records nearest a GPS point.\n\nResults are point-nearness matches unless the municipal source supplies\nparcel polygons; clients should not interpret proximity as legal parcel\ncontainment.","operationId":"get_property_by_gps_api_montreal_property_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":84.0,"minimum":41.0,"description":"Canadian latitude","title":"Lat"},"description":"Canadian latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":-52.0,"minimum":-142.0,"description":"Canadian longitude","title":"Lon"},"description":"Canadian longitude"},{"name":"radius_m","in":"query","required":false,"schema":{"type":"integer","maximum":5000,"minimum":1,"description":"Maximum point distance","default":100,"title":"Radius M"},"description":"Maximum point distance"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":10,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Property By Gps Api Montreal Property By Gps Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/montreal/property/by-roll/{roll_number}":{"get":{"summary":"Get Property By Roll","description":"Get property assessment by roll number.","operationId":"get_property_by_roll_api_montreal_property_by_roll__roll_number__get","parameters":[{"name":"roll_number","in":"path","required":true,"schema":{"type":"string","description":"Property roll number","title":"Roll Number"},"description":"Property roll number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyAssessment"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/montreal/property/report":{"get":{"summary":"Property Report Lookup","description":"Consolidated report by roll number, address, or GPS.","operationId":"property_report_lookup_api_montreal_property_report_get","parameters":[{"name":"roll_number","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property roll number","title":"Roll Number"},"description":"Property roll number"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Street address","title":"Address"},"description":"Street address"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyReport"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/montreal/property/report/{roll_number}":{"get":{"summary":"Property Report","description":"Get consolidated property report: assessment + building permits + zoning + DLS.","operationId":"property_report_api_montreal_property_report__roll_number__get","parameters":[{"name":"roll_number","in":"path","required":true,"schema":{"type":"string","description":"Property roll number","title":"Roll Number"},"description":"Property roll number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyReport"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/montreal/property/batch":{"post":{"summary":"Get Properties Batch","description":"Get multiple properties by roll numbers in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of roll numbers.\nExample: {\"ids\": [\"123456789\", \"987654321\"]}\nMaximum 100 roll numbers per request.","operationId":"get_properties_batch_api_montreal_property_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Properties Batch Api Montreal Property Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/montreal/property/export":{"get":{"summary":"Export Properties","description":"Export property data as CSV or GeoJSON.\n\nSupports filtering by address, property type, and assessed value range.\nMaximum 10,000 records per export.","operationId":"export_properties_api_montreal_property_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Address filter","title":"Address"},"description":"Address filter"},{"name":"property_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property type filter","title":"Property Type"},"description":"Property type filter"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum assessed value","title":"Min Value"},"description":"Minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum assessed value","title":"Max Value"},"description":"Maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/montreal/census/profile":{"get":{"summary":"Get Census Profile","description":"Get census profile for a specific Dissemination Area.\n\nProvide either da_id directly, OR lat+lon to find the nearest DA automatically.","operationId":"get_census_profile_api_montreal_census_profile_get","parameters":[{"name":"da_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Dissemination Area ID (e.g., 48820001)","title":"Da Id"},"description":"Dissemination Area ID (e.g., 48820001)"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude for nearest-DA lookup","title":"Lat"},"description":"Latitude for nearest-DA lookup"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude for nearest-DA lookup","title":"Lon"},"description":"Longitude for nearest-DA lookup"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusProfile"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/montreal/census/batch":{"post":{"summary":"Get Census Batch","description":"Get multiple census profiles by DA IDs in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of DA IDs.\nExample: {\"ids\": [\"48820001\", \"48820002\"]}\nMaximum 100 DA IDs per request.","operationId":"get_census_batch_api_montreal_census_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Census Batch Api Montreal Census Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/montreal/census/export":{"get":{"summary":"Export Census","description":"Export census data as CSV.\n\nSupports filtering by population range and geography type.\nMaximum 10,000 records per export.","operationId":"export_census_api_montreal_census_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv only","default":"csv","title":"Format"},"description":"Export format: csv only"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"min_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Minimum population filter","title":"Min Population"},"description":"Minimum population filter"},{"name":"max_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Maximum population filter","title":"Max Population"},"description":"Maximum population filter"},{"name":"geography_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Geography type filter (DA, CT, CMA)","title":"Geography Type"},"description":"Geography type filter (DA, CT, CMA)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/montreal/census/list":{"get":{"summary":"List Census Profiles","description":"List all census profiles with pagination.\n\nUse this endpoint to browse available census profiles and discover valid DA IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_census_profiles_api_montreal_census_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Census Profiles Api Montreal Census List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/montreal/census/by-gps":{"get":{"summary":"Get Census By Gps","description":"Get census data for GPS coordinates.","operationId":"get_census_by_gps_api_montreal_census_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90,"minimum":-90,"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":180,"minimum":-180,"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/montreal/census/by-dls":{"get":{"summary":"Get Census By Dls","description":"Get census data for DLS coordinates.","operationId":"get_census_by_dls_api_montreal_census_by_dls_get","parameters":[{"name":"dls","in":"query","required":true,"schema":{"type":"string","description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)","title":"Dls"},"description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/montreal/census/map-data":{"get":{"summary":"Get Census Map Data","description":"Get lightweight DA points for choropleth map rendering.\n\nReturns centroid coordinates and key metrics (income, age, population,\nhousehold size, employment rate) for all DAs in the city.\nUsed by the census dashboard to render color-coded maps.","operationId":"get_census_map_data_api_montreal_census_map_data_get","parameters":[{"name":"year","in":"query","required":false,"schema":{"type":"integer","description":"Census year for DA map data","default":2021,"title":"Year"},"description":"Census year for DA map data"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/montreal/census/stats":{"get":{"summary":"Census Stats","description":"Get census data statistics.","operationId":"census_stats_api_montreal_census_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/montreal/census/compare":{"get":{"summary":"Census Compare","description":"Compare key census metrics across multiple years.\n\nReturns side-by-side comparison of population, households,\navg_income, median_age, density, and land_area for each requested year.\nYears without data return null for that year's values.","operationId":"census_compare_api_montreal_census_compare_get","parameters":[{"name":"years","in":"query","required":false,"schema":{"type":"string","description":"Comma-separated census years (e.g., 2016,2021)","default":"2021","title":"Years"},"description":"Comma-separated census years (e.g., 2016,2021)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/montreal/census/time-series":{"get":{"summary":"Census Timeseries","description":"Get year-by-year census trends for this city.\n\nReturns population, income, age, and household trends across all\navailable census years. Useful for spotting long-term demographic shifts.","operationId":"census_timeseries_api_montreal_census_time_series_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/montreal/geography/list":{"get":{"summary":"Geography List","description":"List geography boundaries for this city.","operationId":"geography_list_api_montreal_geography_list_get","parameters":[{"name":"type","in":"query","required":false,"schema":{"type":"string","title":"Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/montreal/geography/by-gps":{"get":{"summary":"Geography By Gps","description":"Find the geography boundary containing a GPS point.","operationId":"geography_by_gps_api_montreal_geography_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","title":"Lat"}},{"name":"lon","in":"query","required":true,"schema":{"type":"number","title":"Lon"}},{"name":"type","in":"query","required":false,"schema":{"type":"string","default":"DA","title":"Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/montreal/geography/stats":{"get":{"summary":"Geography Stats","description":"Get geography statistics for this city.","operationId":"geography_stats_api_montreal_geography_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/montreal/geography/{geoid}":{"get":{"summary":"Geography Boundary","description":"Get a specific geography boundary by geoid, including GeoJSON polygon.","operationId":"geography_boundary_api_montreal_geography__geoid__get","parameters":[{"name":"geoid","in":"path","required":true,"schema":{"type":"string","title":"Geoid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/montreal/census/rental/list":{"get":{"summary":"List Rental Prices","description":"List rental price records for this city, with optional unit type filter.","operationId":"list_rental_prices_api_montreal_census_rental_list_get","parameters":[{"name":"unit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":50,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalPriceListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/montreal/census/rental/trend":{"get":{"summary":"Get Rental Trend","description":"Get rental price time series for a specific unit type.","operationId":"get_rental_trend_api_montreal_census_rental_trend_get","parameters":[{"name":"unit_type","in":"query","required":true,"schema":{"type":"string","description":"Rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Rental unit type (e.g. 'Apartment - 1 bedroom')"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalTrendResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/montreal/census/rental/types":{"get":{"summary":"Get Rental Types","description":"Get available rental unit types for this city.","operationId":"get_rental_types_api_montreal_census_rental_types_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/montreal/zoning/by-gps":{"get":{"summary":"Get Zoning By Gps","description":"Get zoning district for GPS coordinates.","operationId":"get_zoning_by_gps_api_montreal_zoning_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZoningByGPSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/montreal/zoning/by-id/{district_id}":{"get":{"summary":"Get Zoning By Id","description":"Get a single zoning district by its numeric ID.","operationId":"get_zoning_by_id_api_montreal_zoning_by_id__district_id__get","parameters":[{"name":"district_id","in":"path","required":true,"schema":{"type":"integer","description":"Zoning district numeric ID","title":"District Id"},"description":"Zoning district numeric ID"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning By Id Api Montreal Zoning By Id  District Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/montreal/zoning/by-code/{code}":{"get":{"summary":"Get Zoning By Code","description":"Get all districts with a specific zone code.","operationId":"get_zoning_by_code_api_montreal_zoning_by_code__code__get","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","description":"Zone code (e.g., C-C1, R-G)","title":"Code"},"description":"Zone code (e.g., C-C1, R-G)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoningDistrict"},"title":"Response Get Zoning By Code Api Montreal Zoning By Code  Code  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/montreal/zoning/batch":{"post":{"summary":"Get Zoning Batch","description":"Get multiple zoning districts by zone codes in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of zone codes.\nExample: {\"ids\": [\"CR20-C20/R20\", \"C-C1\", \"R-G\"]}\nMaximum 100 zone codes per request.","operationId":"get_zoning_batch_api_montreal_zoning_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning Batch Api Montreal Zoning Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/montreal/zoning/list":{"get":{"summary":"List Zoning Districts","description":"List all zoning districts with pagination.\n\nUse this endpoint to browse available zoning districts and discover valid IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_zoning_districts_api_montreal_zoning_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Zoning Districts Api Montreal Zoning List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/montreal/zoning/codes":{"get":{"summary":"List Zone Codes","description":"List all zone codes with descriptions.","operationId":"list_zone_codes_api_montreal_zoning_codes_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"type":"string","description":"Filter by major category (e.g., Commercial, Residential)","title":"Category"},"description":"Filter by major category (e.g., Commercial, Residential)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoneCodeInfo"},"title":"Response List Zone Codes Api Montreal Zoning Codes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/montreal/zoning/stats":{"get":{"summary":"Zoning Stats","description":"Get zoning statistics.","operationId":"zoning_stats_api_montreal_zoning_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/montreal/zoning/export":{"get":{"summary":"Export Zoning","description":"Export zoning district data as CSV or GeoJSON.\n\nSupports filtering by zone code, category, and area range.\nMaximum 10,000 records per export.","operationId":"export_zoning_api_montreal_zoning_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"zone_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Zone code filter (e.g., CR2)","title":"Zone Code"},"description":"Zone code filter (e.g., CR2)"},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Major category filter","title":"Category"},"description":"Major category filter"},{"name":"min_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum area in sq km","title":"Min Area"},"description":"Minimum area in sq km"},{"name":"max_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum area in sq km","title":"Max Area"},"description":"Maximum area in sq km"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/montreal/permits/stats":{"get":{"summary":"Building Stats","description":"Get building permit statistics.","operationId":"building_stats_api_montreal_permits_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/montreal/permits/search":{"get":{"summary":"Search Building Permits","description":"Search building permits by address, contractor, applicant, permit number, and/or permit type.","operationId":"search_building_permits_api_montreal_permits_search_get","parameters":[{"name":"address","in":"query","required":false,"schema":{"type":"string","description":"Address to search","title":"Address"},"description":"Address to search"},{"name":"q","in":"query","required":false,"schema":{"type":"string","description":"General text search (address, contractor, applicant, permit #)","title":"Q"},"description":"General text search (address, contractor, applicant, permit #)"},{"name":"permit_type","in":"query","required":false,"schema":{"type":"string","description":"Filter by permit type","title":"Permit Type"},"description":"Filter by permit type"},{"name":"bbox","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bounding box: min_lon,min_lat,max_lon,max_lat","title":"Bbox"},"description":"Bounding box: min_lon,min_lat,max_lon,max_lat"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max results","default":20,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset","default":0,"title":"Offset"},"description":"Results offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/montreal/permits/nearby":{"get":{"summary":"Nearby Building Permits","description":"Coordinate-first alias for nearby building permits.","operationId":"nearby_building_permits_api_montreal_permits_nearby_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":84.0,"minimum":41.0,"description":"Canadian latitude","title":"Lat"},"description":"Canadian latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":-52.0,"minimum":-142.0,"description":"Canadian longitude","title":"Lon"},"description":"Canadian longitude"},{"name":"radius_m","in":"query","required":false,"schema":{"type":"integer","maximum":50000,"minimum":1,"default":1000,"title":"Radius M"}},{"name":"permit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Permit Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/montreal/permits/export":{"get":{"summary":"Export Building Permits","description":"Export building permit data as CSV or GeoJSON.\n\nSupports filtering by address, permit type, and date range.\nMaximum 10,000 records per export.","operationId":"export_building_permits_api_montreal_permits_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Address filter","title":"Address"},"description":"Address filter"},{"name":"permit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Permit type filter","title":"Permit Type"},"description":"Permit type filter"},{"name":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Start date (YYYY-MM-DD)","title":"Date From"},"description":"Start date (YYYY-MM-DD)"},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"End date (YYYY-MM-DD)","title":"Date To"},"description":"End date (YYYY-MM-DD)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/montreal/permits/recent":{"get":{"summary":"Recent Building Permits","description":"Get recent building permits sorted by application date (newest first).\n\nUse this to see where construction activity is happening right now.","operationId":"recent_building_permits_api_montreal_permits_recent_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Max results","default":20,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset","default":0,"title":"Offset"},"description":"Results offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/montreal/permits/batch":{"post":{"summary":"Get Building Permits Batch","description":"Get multiple building permits by permit numbers in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of permit numbers.\nExample: {\"ids\": [\"BP123456\", \"BP789012\"]}\nMaximum 100 permit numbers per request.","operationId":"get_building_permits_batch_api_montreal_permits_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Building Permits Batch Api Montreal Permits Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/montreal/permits/{permit_number}":{"get":{"summary":"Get Building Permit","description":"Get building permit details by permit number.\n\nServes HTML for browsers, JSON for API clients.","operationId":"get_building_permit_api_montreal_permits__permit_number__get","parameters":[{"name":"permit_number","in":"path","required":true,"schema":{"type":"string","description":"Permit number","title":"Permit Number"},"description":"Permit number"},{"name":"_city_name","in":"query","required":false,"schema":{"default":"Montreal","title":" City Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/montreal/permits/by-borough":{"get":{"summary":"Search Building By Borough","description":"Search Montreal building permits by arrondissement (borough).","operationId":"search_building_by_borough_api_montreal_permits_by_borough_get","parameters":[{"name":"borough","in":"query","required":true,"schema":{"type":"string","description":"Arrondissement/borough name","title":"Borough"},"description":"Arrondissement/borough name"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Max results","default":20,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset","default":0,"title":"Offset"},"description":"Results offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Search Building By Borough Api Montreal Permits By Borough Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/montreal/permits/by-type":{"get":{"summary":"Search Mtl Building By Type","description":"Search Montreal building permits by building type.","operationId":"search_mtl_building_by_type_api_montreal_permits_by_type_get","parameters":[{"name":"building_type","in":"query","required":true,"schema":{"type":"string","description":"Building type (e.g., Résidentiel, Commercial)","title":"Building Type"},"description":"Building type (e.g., Résidentiel, Commercial)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Max results","default":20,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset","default":0,"title":"Offset"},"description":"Results offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Search Mtl Building By Type Api Montreal Permits By Type Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/montreal/safety/search":{"get":{"summary":"Search Safety","operationId":"search_safety_api_montreal_safety_search_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Q"}},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"}},{"name":"neighbourhood","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Neighbourhood"}},{"name":"start","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Start"}},{"name":"end","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"End"}},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lat"}},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lon"}},{"name":"radius_m","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Radius M"}},{"name":"bbox","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bbox"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SafetySearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/montreal/safety/nearby":{"get":{"summary":"Nearby Safety","description":"Coordinate-first alias for nearby public safety records.","operationId":"nearby_safety_api_montreal_safety_nearby_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":84.0,"minimum":41.0,"description":"Canadian latitude","title":"Lat"},"description":"Canadian latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":-52.0,"minimum":-142.0,"description":"Canadian longitude","title":"Lon"},"description":"Canadian longitude"},{"name":"radius_m","in":"query","required":false,"schema":{"type":"integer","maximum":50000,"minimum":1,"default":1000,"title":"Radius M"}},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"}},{"name":"start","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Start"}},{"name":"end","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"End"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SafetySearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/montreal/safety/stats":{"get":{"summary":"Safety Stats","operationId":"safety_stats_api_montreal_safety_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SafetyStats"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/montreal/safety/{source_record_id}":{"get":{"summary":"Safety By Id","operationId":"safety_by_id_api_montreal_safety__source_record_id__get","parameters":[{"name":"source_record_id","in":"path","required":true,"schema":{"type":"string","title":"Source Record Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/montreal/health":{"get":{"summary":"City Health","description":"City-specific health check.","operationId":"city_health_api_montreal_health_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vancouver/entries/{kind}":{"get":{"summary":"List Entries","operationId":"list_entries_api_vancouver_entries__kind__get","parameters":[{"name":"kind","in":"path","required":true,"schema":{"type":"string","description":"Canonical entry kind: property, permit, zoning, or safety","title":"Kind"},"description":"Canonical entry kind: property, permit, zoning, or safety"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"_services","in":"query","required":false,"schema":{"title":" Services"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Entries Api Vancouver Entries  Kind  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vancouver/property/search":{"get":{"summary":"Search Property","description":"Search for properties by address, or browse all if no address specified.\nSupports sorting by assessed_value, address, year_built, community, or lot_size_sqft.\nSupports value range filtering with min_value and max_value.\n Supports property_type and year range filters.","operationId":"search_property_api_vancouver_property_search_get","parameters":[{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Street address to search (omit to browse all)","title":"Address"},"description":"Street address to search (omit to browse all)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max results to return (up to 1000 for map browse)","default":10,"title":"Limit"},"description":"Max results to return (up to 1000 for map browse)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset for pagination","default":0,"title":"Offset"},"description":"Results offset for pagination"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft","title":"Sort By"},"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"asc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"},{"name":"property_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property type filter (e.g. RE, Residential)","title":"Property Type"},"description":"Property type filter (e.g. RE, Residential)"},{"name":"min_year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter: minimum year built","title":"Min Year"},"description":"Filter: minimum year built"},{"name":"max_year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter: maximum year built","title":"Max Year"},"description":"Filter: maximum year built"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertySearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vancouver/property/list":{"get":{"summary":"List Property","description":"List all properties with pagination, sorting, and value range filtering.\n\nUse this endpoint to browse available property records and discover valid roll numbers.\nReturns paginated results with total count for client-side pagination.\nSort by assessed_value with order=desc to find the most expensive properties.","operationId":"list_property_api_vancouver_property_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft","title":"Sort By"},"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"asc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Property Api Vancouver Property List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vancouver/property/geojson":{"get":{"summary":"Property Geojson","operationId":"property_geojson_api_vancouver_property_geojson_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500000,"minimum":1,"description":"Max features to return (cap prevents browser overload for large cities)","default":50000,"title":"Limit"},"description":"Max features to return (cap prevents browser overload for large cities)"},{"name":"sw_lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport south-west latitude","title":"Sw Lat"},"description":"Viewport south-west latitude"},{"name":"sw_lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport south-west longitude","title":"Sw Lon"},"description":"Viewport south-west longitude"},{"name":"ne_lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport north-east latitude","title":"Ne Lat"},"description":"Viewport north-east latitude"},{"name":"ne_lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport north-east longitude","title":"Ne Lon"},"description":"Viewport north-east longitude"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Offset for pagination through viewport results (use with limit)","default":0,"title":"Offset"},"description":"Offset for pagination through viewport results (use with limit)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vancouver/property/top":{"get":{"summary":"Top Property","description":"Get top-N properties sorted by any numeric column.\n\nConvenience endpoint for AI agents and dashboards. Returns the top\nN properties sorted by the given column. Defaults to most expensive\n(assessed_value descending). Combine with min_value/max_value to\nfind e.g. the most expensive residential properties.","operationId":"top_property_api_vancouver_property_top_get","parameters":[{"name":"n","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Number of top properties to return","default":10,"title":"N"},"description":"Number of top properties to return"},{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","description":"Sort column: assessed_value, year_built, lot_size_sqft","default":"assessed_value","title":"Sort By"},"description":"Sort column: assessed_value, year_built, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"desc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Top Property Api Vancouver Property Top Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vancouver/property/stats":{"get":{"summary":"Property Stats","description":"Get property assessment statistics.","operationId":"property_stats_api_vancouver_property_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vancouver/property/autocomplete":{"get":{"summary":"Property Autocomplete","description":"Get address and roll number suggestions for typeahead search.","operationId":"property_autocomplete_api_vancouver_property_autocomplete_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"description":"Search query for address/roll number suggestions","title":"Q"},"description":"Search query for address/roll number suggestions"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":25,"minimum":1,"description":"Max suggestions to return","default":10,"title":"Limit"},"description":"Max suggestions to return"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vancouver/property/geocode":{"post":{"summary":"Property Geocode","description":"Geocode property addresses to lat/lon coordinates.\n\nAccepts a JSON body with 'addresses' (list of address strings, max 50).\nReturns cached results instantly; uncached addresses are geocoded via Nominatim.\n\nExample: {\"addresses\": [\"123 Main St\", \"456 Oak Ave\"]}","operationId":"property_geocode_api_vancouver_property_geocode_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vancouver/property/by-dls":{"get":{"summary":"Get Property By Dls","description":"Get property assessment by DLS coordinates.","operationId":"get_property_by_dls_api_vancouver_property_by_dls_get","parameters":[{"name":"quarter","in":"query","required":true,"schema":{"type":"string","description":"Quarter section (e.g., SW)","title":"Quarter"},"description":"Quarter section (e.g., SW)"},{"name":"section","in":"query","required":true,"schema":{"type":"integer","description":"Section number","title":"Section"},"description":"Section number"},{"name":"township","in":"query","required":true,"schema":{"type":"integer","description":"Township number","title":"Township"},"description":"Township number"},{"name":"range","in":"query","required":true,"schema":{"type":"integer","description":"Range number","title":"Range"},"description":"Range number"},{"name":"meridian","in":"query","required":true,"schema":{"type":"integer","description":"Meridian number","title":"Meridian"},"description":"Meridian number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyAssessment"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vancouver/property/by-gps":{"get":{"summary":"Get Property By Gps","description":"Find coordinate-bearing assessment records nearest a GPS point.\n\nResults are point-nearness matches unless the municipal source supplies\nparcel polygons; clients should not interpret proximity as legal parcel\ncontainment.","operationId":"get_property_by_gps_api_vancouver_property_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":84.0,"minimum":41.0,"description":"Canadian latitude","title":"Lat"},"description":"Canadian latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":-52.0,"minimum":-142.0,"description":"Canadian longitude","title":"Lon"},"description":"Canadian longitude"},{"name":"radius_m","in":"query","required":false,"schema":{"type":"integer","maximum":5000,"minimum":1,"description":"Maximum point distance","default":100,"title":"Radius M"},"description":"Maximum point distance"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":10,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Property By Gps Api Vancouver Property By Gps Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vancouver/property/by-roll/{roll_number}":{"get":{"summary":"Get Property By Roll","description":"Get property assessment by roll number.","operationId":"get_property_by_roll_api_vancouver_property_by_roll__roll_number__get","parameters":[{"name":"roll_number","in":"path","required":true,"schema":{"type":"string","description":"Property roll number","title":"Roll Number"},"description":"Property roll number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyAssessment"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vancouver/property/report":{"get":{"summary":"Property Report Lookup","description":"Consolidated report by roll number, address, or GPS.","operationId":"property_report_lookup_api_vancouver_property_report_get","parameters":[{"name":"roll_number","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property roll number","title":"Roll Number"},"description":"Property roll number"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Street address","title":"Address"},"description":"Street address"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyReport"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vancouver/property/report/{roll_number}":{"get":{"summary":"Property Report","description":"Get consolidated property report: assessment + building permits + zoning + DLS.","operationId":"property_report_api_vancouver_property_report__roll_number__get","parameters":[{"name":"roll_number","in":"path","required":true,"schema":{"type":"string","description":"Property roll number","title":"Roll Number"},"description":"Property roll number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyReport"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vancouver/property/batch":{"post":{"summary":"Get Properties Batch","description":"Get multiple properties by roll numbers in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of roll numbers.\nExample: {\"ids\": [\"123456789\", \"987654321\"]}\nMaximum 100 roll numbers per request.","operationId":"get_properties_batch_api_vancouver_property_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Properties Batch Api Vancouver Property Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vancouver/property/export":{"get":{"summary":"Export Properties","description":"Export property data as CSV or GeoJSON.\n\nSupports filtering by address, property type, and assessed value range.\nMaximum 10,000 records per export.","operationId":"export_properties_api_vancouver_property_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Address filter","title":"Address"},"description":"Address filter"},{"name":"property_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property type filter","title":"Property Type"},"description":"Property type filter"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum assessed value","title":"Min Value"},"description":"Minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum assessed value","title":"Max Value"},"description":"Maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vancouver/census/profile":{"get":{"summary":"Get Census Profile","description":"Get census profile for a specific Dissemination Area.\n\nProvide either da_id directly, OR lat+lon to find the nearest DA automatically.","operationId":"get_census_profile_api_vancouver_census_profile_get","parameters":[{"name":"da_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Dissemination Area ID (e.g., 48820001)","title":"Da Id"},"description":"Dissemination Area ID (e.g., 48820001)"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude for nearest-DA lookup","title":"Lat"},"description":"Latitude for nearest-DA lookup"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude for nearest-DA lookup","title":"Lon"},"description":"Longitude for nearest-DA lookup"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusProfile"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vancouver/census/batch":{"post":{"summary":"Get Census Batch","description":"Get multiple census profiles by DA IDs in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of DA IDs.\nExample: {\"ids\": [\"48820001\", \"48820002\"]}\nMaximum 100 DA IDs per request.","operationId":"get_census_batch_api_vancouver_census_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Census Batch Api Vancouver Census Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vancouver/census/export":{"get":{"summary":"Export Census","description":"Export census data as CSV.\n\nSupports filtering by population range and geography type.\nMaximum 10,000 records per export.","operationId":"export_census_api_vancouver_census_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv only","default":"csv","title":"Format"},"description":"Export format: csv only"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"min_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Minimum population filter","title":"Min Population"},"description":"Minimum population filter"},{"name":"max_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Maximum population filter","title":"Max Population"},"description":"Maximum population filter"},{"name":"geography_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Geography type filter (DA, CT, CMA)","title":"Geography Type"},"description":"Geography type filter (DA, CT, CMA)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vancouver/census/list":{"get":{"summary":"List Census Profiles","description":"List all census profiles with pagination.\n\nUse this endpoint to browse available census profiles and discover valid DA IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_census_profiles_api_vancouver_census_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Census Profiles Api Vancouver Census List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vancouver/census/by-gps":{"get":{"summary":"Get Census By Gps","description":"Get census data for GPS coordinates.","operationId":"get_census_by_gps_api_vancouver_census_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90,"minimum":-90,"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":180,"minimum":-180,"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vancouver/census/by-dls":{"get":{"summary":"Get Census By Dls","description":"Get census data for DLS coordinates.","operationId":"get_census_by_dls_api_vancouver_census_by_dls_get","parameters":[{"name":"dls","in":"query","required":true,"schema":{"type":"string","description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)","title":"Dls"},"description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vancouver/census/map-data":{"get":{"summary":"Get Census Map Data","description":"Get lightweight DA points for choropleth map rendering.\n\nReturns centroid coordinates and key metrics (income, age, population,\nhousehold size, employment rate) for all DAs in the city.\nUsed by the census dashboard to render color-coded maps.","operationId":"get_census_map_data_api_vancouver_census_map_data_get","parameters":[{"name":"year","in":"query","required":false,"schema":{"type":"integer","description":"Census year for DA map data","default":2021,"title":"Year"},"description":"Census year for DA map data"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vancouver/census/stats":{"get":{"summary":"Census Stats","description":"Get census data statistics.","operationId":"census_stats_api_vancouver_census_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vancouver/census/compare":{"get":{"summary":"Census Compare","description":"Compare key census metrics across multiple years.\n\nReturns side-by-side comparison of population, households,\navg_income, median_age, density, and land_area for each requested year.\nYears without data return null for that year's values.","operationId":"census_compare_api_vancouver_census_compare_get","parameters":[{"name":"years","in":"query","required":false,"schema":{"type":"string","description":"Comma-separated census years (e.g., 2016,2021)","default":"2021","title":"Years"},"description":"Comma-separated census years (e.g., 2016,2021)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vancouver/census/time-series":{"get":{"summary":"Census Timeseries","description":"Get year-by-year census trends for this city.\n\nReturns population, income, age, and household trends across all\navailable census years. Useful for spotting long-term demographic shifts.","operationId":"census_timeseries_api_vancouver_census_time_series_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vancouver/geography/list":{"get":{"summary":"Geography List","description":"List geography boundaries for this city.","operationId":"geography_list_api_vancouver_geography_list_get","parameters":[{"name":"type","in":"query","required":false,"schema":{"type":"string","title":"Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vancouver/geography/by-gps":{"get":{"summary":"Geography By Gps","description":"Find the geography boundary containing a GPS point.","operationId":"geography_by_gps_api_vancouver_geography_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","title":"Lat"}},{"name":"lon","in":"query","required":true,"schema":{"type":"number","title":"Lon"}},{"name":"type","in":"query","required":false,"schema":{"type":"string","default":"DA","title":"Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vancouver/geography/stats":{"get":{"summary":"Geography Stats","description":"Get geography statistics for this city.","operationId":"geography_stats_api_vancouver_geography_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vancouver/geography/{geoid}":{"get":{"summary":"Geography Boundary","description":"Get a specific geography boundary by geoid, including GeoJSON polygon.","operationId":"geography_boundary_api_vancouver_geography__geoid__get","parameters":[{"name":"geoid","in":"path","required":true,"schema":{"type":"string","title":"Geoid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vancouver/census/rental/list":{"get":{"summary":"List Rental Prices","description":"List rental price records for this city, with optional unit type filter.","operationId":"list_rental_prices_api_vancouver_census_rental_list_get","parameters":[{"name":"unit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":50,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalPriceListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vancouver/census/rental/trend":{"get":{"summary":"Get Rental Trend","description":"Get rental price time series for a specific unit type.","operationId":"get_rental_trend_api_vancouver_census_rental_trend_get","parameters":[{"name":"unit_type","in":"query","required":true,"schema":{"type":"string","description":"Rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Rental unit type (e.g. 'Apartment - 1 bedroom')"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalTrendResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vancouver/census/rental/types":{"get":{"summary":"Get Rental Types","description":"Get available rental unit types for this city.","operationId":"get_rental_types_api_vancouver_census_rental_types_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vancouver/zoning/by-gps":{"get":{"summary":"Get Zoning By Gps","description":"Get zoning district for GPS coordinates.","operationId":"get_zoning_by_gps_api_vancouver_zoning_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZoningByGPSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vancouver/zoning/by-id/{district_id}":{"get":{"summary":"Get Zoning By Id","description":"Get a single zoning district by its numeric ID.","operationId":"get_zoning_by_id_api_vancouver_zoning_by_id__district_id__get","parameters":[{"name":"district_id","in":"path","required":true,"schema":{"type":"integer","description":"Zoning district numeric ID","title":"District Id"},"description":"Zoning district numeric ID"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning By Id Api Vancouver Zoning By Id  District Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vancouver/zoning/by-code/{code}":{"get":{"summary":"Get Zoning By Code","description":"Get all districts with a specific zone code.","operationId":"get_zoning_by_code_api_vancouver_zoning_by_code__code__get","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","description":"Zone code (e.g., C-C1, R-G)","title":"Code"},"description":"Zone code (e.g., C-C1, R-G)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoningDistrict"},"title":"Response Get Zoning By Code Api Vancouver Zoning By Code  Code  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vancouver/zoning/batch":{"post":{"summary":"Get Zoning Batch","description":"Get multiple zoning districts by zone codes in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of zone codes.\nExample: {\"ids\": [\"CR20-C20/R20\", \"C-C1\", \"R-G\"]}\nMaximum 100 zone codes per request.","operationId":"get_zoning_batch_api_vancouver_zoning_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning Batch Api Vancouver Zoning Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vancouver/zoning/list":{"get":{"summary":"List Zoning Districts","description":"List all zoning districts with pagination.\n\nUse this endpoint to browse available zoning districts and discover valid IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_zoning_districts_api_vancouver_zoning_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Zoning Districts Api Vancouver Zoning List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vancouver/zoning/codes":{"get":{"summary":"List Zone Codes","description":"List all zone codes with descriptions.","operationId":"list_zone_codes_api_vancouver_zoning_codes_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"type":"string","description":"Filter by major category (e.g., Commercial, Residential)","title":"Category"},"description":"Filter by major category (e.g., Commercial, Residential)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoneCodeInfo"},"title":"Response List Zone Codes Api Vancouver Zoning Codes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vancouver/zoning/stats":{"get":{"summary":"Zoning Stats","description":"Get zoning statistics.","operationId":"zoning_stats_api_vancouver_zoning_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vancouver/zoning/export":{"get":{"summary":"Export Zoning","description":"Export zoning district data as CSV or GeoJSON.\n\nSupports filtering by zone code, category, and area range.\nMaximum 10,000 records per export.","operationId":"export_zoning_api_vancouver_zoning_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"zone_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Zone code filter (e.g., CR2)","title":"Zone Code"},"description":"Zone code filter (e.g., CR2)"},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Major category filter","title":"Category"},"description":"Major category filter"},{"name":"min_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum area in sq km","title":"Min Area"},"description":"Minimum area in sq km"},{"name":"max_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum area in sq km","title":"Max Area"},"description":"Maximum area in sq km"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vancouver/permits/stats":{"get":{"summary":"Building Stats","description":"Get building permit statistics.","operationId":"building_stats_api_vancouver_permits_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vancouver/permits/search":{"get":{"summary":"Search Building Permits","description":"Search building permits by address, contractor, applicant, permit number, and/or permit type.","operationId":"search_building_permits_api_vancouver_permits_search_get","parameters":[{"name":"address","in":"query","required":false,"schema":{"type":"string","description":"Address to search","title":"Address"},"description":"Address to search"},{"name":"q","in":"query","required":false,"schema":{"type":"string","description":"General text search (address, contractor, applicant, permit #)","title":"Q"},"description":"General text search (address, contractor, applicant, permit #)"},{"name":"permit_type","in":"query","required":false,"schema":{"type":"string","description":"Filter by permit type","title":"Permit Type"},"description":"Filter by permit type"},{"name":"bbox","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bounding box: min_lon,min_lat,max_lon,max_lat","title":"Bbox"},"description":"Bounding box: min_lon,min_lat,max_lon,max_lat"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max results","default":20,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset","default":0,"title":"Offset"},"description":"Results offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vancouver/permits/nearby":{"get":{"summary":"Nearby Building Permits","description":"Coordinate-first alias for nearby building permits.","operationId":"nearby_building_permits_api_vancouver_permits_nearby_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":84.0,"minimum":41.0,"description":"Canadian latitude","title":"Lat"},"description":"Canadian latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":-52.0,"minimum":-142.0,"description":"Canadian longitude","title":"Lon"},"description":"Canadian longitude"},{"name":"radius_m","in":"query","required":false,"schema":{"type":"integer","maximum":50000,"minimum":1,"default":1000,"title":"Radius M"}},{"name":"permit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Permit Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vancouver/permits/export":{"get":{"summary":"Export Building Permits","description":"Export building permit data as CSV or GeoJSON.\n\nSupports filtering by address, permit type, and date range.\nMaximum 10,000 records per export.","operationId":"export_building_permits_api_vancouver_permits_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Address filter","title":"Address"},"description":"Address filter"},{"name":"permit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Permit type filter","title":"Permit Type"},"description":"Permit type filter"},{"name":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Start date (YYYY-MM-DD)","title":"Date From"},"description":"Start date (YYYY-MM-DD)"},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"End date (YYYY-MM-DD)","title":"Date To"},"description":"End date (YYYY-MM-DD)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vancouver/permits/recent":{"get":{"summary":"Recent Building Permits","description":"Get recent building permits sorted by application date (newest first).\n\nUse this to see where construction activity is happening right now.","operationId":"recent_building_permits_api_vancouver_permits_recent_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Max results","default":20,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset","default":0,"title":"Offset"},"description":"Results offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vancouver/permits/batch":{"post":{"summary":"Get Building Permits Batch","description":"Get multiple building permits by permit numbers in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of permit numbers.\nExample: {\"ids\": [\"BP123456\", \"BP789012\"]}\nMaximum 100 permit numbers per request.","operationId":"get_building_permits_batch_api_vancouver_permits_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Building Permits Batch Api Vancouver Permits Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vancouver/permits/{permit_number}":{"get":{"summary":"Get Building Permit","description":"Get building permit details by permit number.\n\nServes HTML for browsers, JSON for API clients.","operationId":"get_building_permit_api_vancouver_permits__permit_number__get","parameters":[{"name":"permit_number","in":"path","required":true,"schema":{"type":"string","description":"Permit number","title":"Permit Number"},"description":"Permit number"},{"name":"_city_name","in":"query","required":false,"schema":{"default":"Vancouver","title":" City Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vancouver/business_license/stats":{"get":{"summary":"Business License Stats","operationId":"business_license_stats_api_vancouver_business_license_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vancouver/business_license/search":{"get":{"summary":"Search Business Licenses","operationId":"search_business_licenses_api_vancouver_business_license_search_get","parameters":[{"name":"query","in":"query","required":false,"schema":{"type":"string","description":"Business name or address","title":"Query"},"description":"Business name or address"},{"name":"business_type","in":"query","required":false,"schema":{"type":"string","description":"License category filter","title":"Business Type"},"description":"License category filter"},{"name":"status","in":"query","required":false,"schema":{"type":"string","description":"Status filter","title":"Status"},"description":"Status filter"},{"name":"local_area","in":"query","required":false,"schema":{"type":"string","description":"Neighbourhood filter","title":"Local Area"},"description":"Neighbourhood filter"},{"name":"lat","in":"query","required":false,"schema":{"type":"number","description":"Latitude for GPS radius search","title":"Lat"},"description":"Latitude for GPS radius search"},{"name":"lon","in":"query","required":false,"schema":{"type":"number","description":"Longitude for GPS radius search","title":"Lon"},"description":"Longitude for GPS radius search"},{"name":"radius_km","in":"query","required":false,"schema":{"type":"number","description":"Search radius in km","default":5.0,"title":"Radius Km"},"description":"Search radius in km"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vancouver/business_license/by-gps":{"get":{"summary":"Business License By Gps","operationId":"business_license_by_gps_api_vancouver_business_license_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","title":"Lat"}},{"name":"lon","in":"query","required":true,"schema":{"type":"number","title":"Lon"}},{"name":"radius_km","in":"query","required":false,"schema":{"type":"number","maximum":50.0,"minimum":0.1,"default":1.0,"title":"Radius Km"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"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"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vancouver/business_license/{license_id}":{"get":{"summary":"Get Business License","operationId":"get_business_license_api_vancouver_business_license__license_id__get","parameters":[{"name":"license_id","in":"path","required":true,"schema":{"type":"string","title":"License Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vancouver/health":{"get":{"summary":"City Health","description":"City-specific health check.","operationId":"city_health_api_vancouver_health_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/edmonton/entries/{kind}":{"get":{"summary":"List Entries","operationId":"list_entries_api_edmonton_entries__kind__get","parameters":[{"name":"kind","in":"path","required":true,"schema":{"type":"string","description":"Canonical entry kind: property, permit, zoning, or safety","title":"Kind"},"description":"Canonical entry kind: property, permit, zoning, or safety"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"_services","in":"query","required":false,"schema":{"title":" Services"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Entries Api Edmonton Entries  Kind  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/edmonton/property/search":{"get":{"summary":"Search Property","description":"Search for properties by address, or browse all if no address specified.\nSupports sorting by assessed_value, address, year_built, community, or lot_size_sqft.\nSupports value range filtering with min_value and max_value.\n Supports property_type and year range filters.","operationId":"search_property_api_edmonton_property_search_get","parameters":[{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Street address to search (omit to browse all)","title":"Address"},"description":"Street address to search (omit to browse all)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max results to return (up to 1000 for map browse)","default":10,"title":"Limit"},"description":"Max results to return (up to 1000 for map browse)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset for pagination","default":0,"title":"Offset"},"description":"Results offset for pagination"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft","title":"Sort By"},"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"asc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"},{"name":"property_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property type filter (e.g. RE, Residential)","title":"Property Type"},"description":"Property type filter (e.g. RE, Residential)"},{"name":"min_year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter: minimum year built","title":"Min Year"},"description":"Filter: minimum year built"},{"name":"max_year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter: maximum year built","title":"Max Year"},"description":"Filter: maximum year built"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertySearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/edmonton/property/list":{"get":{"summary":"List Property","description":"List all properties with pagination, sorting, and value range filtering.\n\nUse this endpoint to browse available property records and discover valid roll numbers.\nReturns paginated results with total count for client-side pagination.\nSort by assessed_value with order=desc to find the most expensive properties.","operationId":"list_property_api_edmonton_property_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft","title":"Sort By"},"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"asc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Property Api Edmonton Property List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/edmonton/property/geojson":{"get":{"summary":"Property Geojson","operationId":"property_geojson_api_edmonton_property_geojson_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500000,"minimum":1,"description":"Max features to return (cap prevents browser overload for large cities)","default":50000,"title":"Limit"},"description":"Max features to return (cap prevents browser overload for large cities)"},{"name":"sw_lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport south-west latitude","title":"Sw Lat"},"description":"Viewport south-west latitude"},{"name":"sw_lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport south-west longitude","title":"Sw Lon"},"description":"Viewport south-west longitude"},{"name":"ne_lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport north-east latitude","title":"Ne Lat"},"description":"Viewport north-east latitude"},{"name":"ne_lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport north-east longitude","title":"Ne Lon"},"description":"Viewport north-east longitude"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Offset for pagination through viewport results (use with limit)","default":0,"title":"Offset"},"description":"Offset for pagination through viewport results (use with limit)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/edmonton/property/top":{"get":{"summary":"Top Property","description":"Get top-N properties sorted by any numeric column.\n\nConvenience endpoint for AI agents and dashboards. Returns the top\nN properties sorted by the given column. Defaults to most expensive\n(assessed_value descending). Combine with min_value/max_value to\nfind e.g. the most expensive residential properties.","operationId":"top_property_api_edmonton_property_top_get","parameters":[{"name":"n","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Number of top properties to return","default":10,"title":"N"},"description":"Number of top properties to return"},{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","description":"Sort column: assessed_value, year_built, lot_size_sqft","default":"assessed_value","title":"Sort By"},"description":"Sort column: assessed_value, year_built, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"desc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Top Property Api Edmonton Property Top Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/edmonton/property/stats":{"get":{"summary":"Property Stats","description":"Get property assessment statistics.","operationId":"property_stats_api_edmonton_property_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/edmonton/property/autocomplete":{"get":{"summary":"Property Autocomplete","description":"Get address and roll number suggestions for typeahead search.","operationId":"property_autocomplete_api_edmonton_property_autocomplete_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"description":"Search query for address/roll number suggestions","title":"Q"},"description":"Search query for address/roll number suggestions"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":25,"minimum":1,"description":"Max suggestions to return","default":10,"title":"Limit"},"description":"Max suggestions to return"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/edmonton/property/geocode":{"post":{"summary":"Property Geocode","description":"Geocode property addresses to lat/lon coordinates.\n\nAccepts a JSON body with 'addresses' (list of address strings, max 50).\nReturns cached results instantly; uncached addresses are geocoded via Nominatim.\n\nExample: {\"addresses\": [\"123 Main St\", \"456 Oak Ave\"]}","operationId":"property_geocode_api_edmonton_property_geocode_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/edmonton/property/by-dls":{"get":{"summary":"Get Property By Dls","description":"Get property assessment by DLS coordinates.","operationId":"get_property_by_dls_api_edmonton_property_by_dls_get","parameters":[{"name":"quarter","in":"query","required":true,"schema":{"type":"string","description":"Quarter section (e.g., SW)","title":"Quarter"},"description":"Quarter section (e.g., SW)"},{"name":"section","in":"query","required":true,"schema":{"type":"integer","description":"Section number","title":"Section"},"description":"Section number"},{"name":"township","in":"query","required":true,"schema":{"type":"integer","description":"Township number","title":"Township"},"description":"Township number"},{"name":"range","in":"query","required":true,"schema":{"type":"integer","description":"Range number","title":"Range"},"description":"Range number"},{"name":"meridian","in":"query","required":true,"schema":{"type":"integer","description":"Meridian number","title":"Meridian"},"description":"Meridian number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyAssessment"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/edmonton/property/by-gps":{"get":{"summary":"Get Property By Gps","description":"Find coordinate-bearing assessment records nearest a GPS point.\n\nResults are point-nearness matches unless the municipal source supplies\nparcel polygons; clients should not interpret proximity as legal parcel\ncontainment.","operationId":"get_property_by_gps_api_edmonton_property_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":84.0,"minimum":41.0,"description":"Canadian latitude","title":"Lat"},"description":"Canadian latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":-52.0,"minimum":-142.0,"description":"Canadian longitude","title":"Lon"},"description":"Canadian longitude"},{"name":"radius_m","in":"query","required":false,"schema":{"type":"integer","maximum":5000,"minimum":1,"description":"Maximum point distance","default":100,"title":"Radius M"},"description":"Maximum point distance"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":10,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Property By Gps Api Edmonton Property By Gps Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/edmonton/property/by-roll/{roll_number}":{"get":{"summary":"Get Property By Roll","description":"Get property assessment by roll number.","operationId":"get_property_by_roll_api_edmonton_property_by_roll__roll_number__get","parameters":[{"name":"roll_number","in":"path","required":true,"schema":{"type":"string","description":"Property roll number","title":"Roll Number"},"description":"Property roll number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyAssessment"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/edmonton/property/report":{"get":{"summary":"Property Report Lookup","description":"Consolidated report by roll number, address, or GPS.","operationId":"property_report_lookup_api_edmonton_property_report_get","parameters":[{"name":"roll_number","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property roll number","title":"Roll Number"},"description":"Property roll number"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Street address","title":"Address"},"description":"Street address"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyReport"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/edmonton/property/report/{roll_number}":{"get":{"summary":"Property Report","description":"Get consolidated property report: assessment + building permits + zoning + DLS.","operationId":"property_report_api_edmonton_property_report__roll_number__get","parameters":[{"name":"roll_number","in":"path","required":true,"schema":{"type":"string","description":"Property roll number","title":"Roll Number"},"description":"Property roll number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyReport"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/edmonton/property/batch":{"post":{"summary":"Get Properties Batch","description":"Get multiple properties by roll numbers in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of roll numbers.\nExample: {\"ids\": [\"123456789\", \"987654321\"]}\nMaximum 100 roll numbers per request.","operationId":"get_properties_batch_api_edmonton_property_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Properties Batch Api Edmonton Property Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/edmonton/property/export":{"get":{"summary":"Export Properties","description":"Export property data as CSV or GeoJSON.\n\nSupports filtering by address, property type, and assessed value range.\nMaximum 10,000 records per export.","operationId":"export_properties_api_edmonton_property_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Address filter","title":"Address"},"description":"Address filter"},{"name":"property_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property type filter","title":"Property Type"},"description":"Property type filter"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum assessed value","title":"Min Value"},"description":"Minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum assessed value","title":"Max Value"},"description":"Maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/edmonton/census/profile":{"get":{"summary":"Get Census Profile","description":"Get census profile for a specific Dissemination Area.\n\nProvide either da_id directly, OR lat+lon to find the nearest DA automatically.","operationId":"get_census_profile_api_edmonton_census_profile_get","parameters":[{"name":"da_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Dissemination Area ID (e.g., 48820001)","title":"Da Id"},"description":"Dissemination Area ID (e.g., 48820001)"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude for nearest-DA lookup","title":"Lat"},"description":"Latitude for nearest-DA lookup"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude for nearest-DA lookup","title":"Lon"},"description":"Longitude for nearest-DA lookup"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusProfile"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/edmonton/census/batch":{"post":{"summary":"Get Census Batch","description":"Get multiple census profiles by DA IDs in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of DA IDs.\nExample: {\"ids\": [\"48820001\", \"48820002\"]}\nMaximum 100 DA IDs per request.","operationId":"get_census_batch_api_edmonton_census_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Census Batch Api Edmonton Census Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/edmonton/census/export":{"get":{"summary":"Export Census","description":"Export census data as CSV.\n\nSupports filtering by population range and geography type.\nMaximum 10,000 records per export.","operationId":"export_census_api_edmonton_census_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv only","default":"csv","title":"Format"},"description":"Export format: csv only"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"min_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Minimum population filter","title":"Min Population"},"description":"Minimum population filter"},{"name":"max_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Maximum population filter","title":"Max Population"},"description":"Maximum population filter"},{"name":"geography_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Geography type filter (DA, CT, CMA)","title":"Geography Type"},"description":"Geography type filter (DA, CT, CMA)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/edmonton/census/list":{"get":{"summary":"List Census Profiles","description":"List all census profiles with pagination.\n\nUse this endpoint to browse available census profiles and discover valid DA IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_census_profiles_api_edmonton_census_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Census Profiles Api Edmonton Census List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/edmonton/census/by-gps":{"get":{"summary":"Get Census By Gps","description":"Get census data for GPS coordinates.","operationId":"get_census_by_gps_api_edmonton_census_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90,"minimum":-90,"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":180,"minimum":-180,"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/edmonton/census/by-dls":{"get":{"summary":"Get Census By Dls","description":"Get census data for DLS coordinates.","operationId":"get_census_by_dls_api_edmonton_census_by_dls_get","parameters":[{"name":"dls","in":"query","required":true,"schema":{"type":"string","description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)","title":"Dls"},"description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/edmonton/census/map-data":{"get":{"summary":"Get Census Map Data","description":"Get lightweight DA points for choropleth map rendering.\n\nReturns centroid coordinates and key metrics (income, age, population,\nhousehold size, employment rate) for all DAs in the city.\nUsed by the census dashboard to render color-coded maps.","operationId":"get_census_map_data_api_edmonton_census_map_data_get","parameters":[{"name":"year","in":"query","required":false,"schema":{"type":"integer","description":"Census year for DA map data","default":2021,"title":"Year"},"description":"Census year for DA map data"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/edmonton/census/stats":{"get":{"summary":"Census Stats","description":"Get census data statistics.","operationId":"census_stats_api_edmonton_census_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/edmonton/census/compare":{"get":{"summary":"Census Compare","description":"Compare key census metrics across multiple years.\n\nReturns side-by-side comparison of population, households,\navg_income, median_age, density, and land_area for each requested year.\nYears without data return null for that year's values.","operationId":"census_compare_api_edmonton_census_compare_get","parameters":[{"name":"years","in":"query","required":false,"schema":{"type":"string","description":"Comma-separated census years (e.g., 2016,2021)","default":"2021","title":"Years"},"description":"Comma-separated census years (e.g., 2016,2021)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/edmonton/census/time-series":{"get":{"summary":"Census Timeseries","description":"Get year-by-year census trends for this city.\n\nReturns population, income, age, and household trends across all\navailable census years. Useful for spotting long-term demographic shifts.","operationId":"census_timeseries_api_edmonton_census_time_series_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/edmonton/geography/list":{"get":{"summary":"Geography List","description":"List geography boundaries for this city.","operationId":"geography_list_api_edmonton_geography_list_get","parameters":[{"name":"type","in":"query","required":false,"schema":{"type":"string","title":"Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/edmonton/geography/by-gps":{"get":{"summary":"Geography By Gps","description":"Find the geography boundary containing a GPS point.","operationId":"geography_by_gps_api_edmonton_geography_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","title":"Lat"}},{"name":"lon","in":"query","required":true,"schema":{"type":"number","title":"Lon"}},{"name":"type","in":"query","required":false,"schema":{"type":"string","default":"DA","title":"Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/edmonton/geography/stats":{"get":{"summary":"Geography Stats","description":"Get geography statistics for this city.","operationId":"geography_stats_api_edmonton_geography_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/edmonton/geography/{geoid}":{"get":{"summary":"Geography Boundary","description":"Get a specific geography boundary by geoid, including GeoJSON polygon.","operationId":"geography_boundary_api_edmonton_geography__geoid__get","parameters":[{"name":"geoid","in":"path","required":true,"schema":{"type":"string","title":"Geoid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/edmonton/census/rental/list":{"get":{"summary":"List Rental Prices","description":"List rental price records for this city, with optional unit type filter.","operationId":"list_rental_prices_api_edmonton_census_rental_list_get","parameters":[{"name":"unit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":50,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalPriceListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/edmonton/census/rental/trend":{"get":{"summary":"Get Rental Trend","description":"Get rental price time series for a specific unit type.","operationId":"get_rental_trend_api_edmonton_census_rental_trend_get","parameters":[{"name":"unit_type","in":"query","required":true,"schema":{"type":"string","description":"Rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Rental unit type (e.g. 'Apartment - 1 bedroom')"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalTrendResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/edmonton/census/rental/types":{"get":{"summary":"Get Rental Types","description":"Get available rental unit types for this city.","operationId":"get_rental_types_api_edmonton_census_rental_types_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/edmonton/zoning/by-gps":{"get":{"summary":"Get Zoning By Gps","description":"Get zoning district for GPS coordinates.","operationId":"get_zoning_by_gps_api_edmonton_zoning_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZoningByGPSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/edmonton/zoning/by-id/{district_id}":{"get":{"summary":"Get Zoning By Id","description":"Get a single zoning district by its numeric ID.","operationId":"get_zoning_by_id_api_edmonton_zoning_by_id__district_id__get","parameters":[{"name":"district_id","in":"path","required":true,"schema":{"type":"integer","description":"Zoning district numeric ID","title":"District Id"},"description":"Zoning district numeric ID"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning By Id Api Edmonton Zoning By Id  District Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/edmonton/zoning/by-code/{code}":{"get":{"summary":"Get Zoning By Code","description":"Get all districts with a specific zone code.","operationId":"get_zoning_by_code_api_edmonton_zoning_by_code__code__get","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","description":"Zone code (e.g., C-C1, R-G)","title":"Code"},"description":"Zone code (e.g., C-C1, R-G)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoningDistrict"},"title":"Response Get Zoning By Code Api Edmonton Zoning By Code  Code  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/edmonton/zoning/batch":{"post":{"summary":"Get Zoning Batch","description":"Get multiple zoning districts by zone codes in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of zone codes.\nExample: {\"ids\": [\"CR20-C20/R20\", \"C-C1\", \"R-G\"]}\nMaximum 100 zone codes per request.","operationId":"get_zoning_batch_api_edmonton_zoning_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning Batch Api Edmonton Zoning Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/edmonton/zoning/list":{"get":{"summary":"List Zoning Districts","description":"List all zoning districts with pagination.\n\nUse this endpoint to browse available zoning districts and discover valid IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_zoning_districts_api_edmonton_zoning_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Zoning Districts Api Edmonton Zoning List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/edmonton/zoning/codes":{"get":{"summary":"List Zone Codes","description":"List all zone codes with descriptions.","operationId":"list_zone_codes_api_edmonton_zoning_codes_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"type":"string","description":"Filter by major category (e.g., Commercial, Residential)","title":"Category"},"description":"Filter by major category (e.g., Commercial, Residential)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoneCodeInfo"},"title":"Response List Zone Codes Api Edmonton Zoning Codes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/edmonton/zoning/stats":{"get":{"summary":"Zoning Stats","description":"Get zoning statistics.","operationId":"zoning_stats_api_edmonton_zoning_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/edmonton/zoning/export":{"get":{"summary":"Export Zoning","description":"Export zoning district data as CSV or GeoJSON.\n\nSupports filtering by zone code, category, and area range.\nMaximum 10,000 records per export.","operationId":"export_zoning_api_edmonton_zoning_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"zone_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Zone code filter (e.g., CR2)","title":"Zone Code"},"description":"Zone code filter (e.g., CR2)"},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Major category filter","title":"Category"},"description":"Major category filter"},{"name":"min_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum area in sq km","title":"Min Area"},"description":"Minimum area in sq km"},{"name":"max_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum area in sq km","title":"Max Area"},"description":"Maximum area in sq km"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/edmonton/permits/stats":{"get":{"summary":"Building Stats","description":"Get building permit statistics.","operationId":"building_stats_api_edmonton_permits_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/edmonton/permits/search":{"get":{"summary":"Search Building Permits","description":"Search building permits by address, contractor, applicant, permit number, and/or permit type.","operationId":"search_building_permits_api_edmonton_permits_search_get","parameters":[{"name":"address","in":"query","required":false,"schema":{"type":"string","description":"Address to search","title":"Address"},"description":"Address to search"},{"name":"q","in":"query","required":false,"schema":{"type":"string","description":"General text search (address, contractor, applicant, permit #)","title":"Q"},"description":"General text search (address, contractor, applicant, permit #)"},{"name":"permit_type","in":"query","required":false,"schema":{"type":"string","description":"Filter by permit type","title":"Permit Type"},"description":"Filter by permit type"},{"name":"bbox","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bounding box: min_lon,min_lat,max_lon,max_lat","title":"Bbox"},"description":"Bounding box: min_lon,min_lat,max_lon,max_lat"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max results","default":20,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset","default":0,"title":"Offset"},"description":"Results offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/edmonton/permits/nearby":{"get":{"summary":"Nearby Building Permits","description":"Coordinate-first alias for nearby building permits.","operationId":"nearby_building_permits_api_edmonton_permits_nearby_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":84.0,"minimum":41.0,"description":"Canadian latitude","title":"Lat"},"description":"Canadian latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":-52.0,"minimum":-142.0,"description":"Canadian longitude","title":"Lon"},"description":"Canadian longitude"},{"name":"radius_m","in":"query","required":false,"schema":{"type":"integer","maximum":50000,"minimum":1,"default":1000,"title":"Radius M"}},{"name":"permit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Permit Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/edmonton/permits/export":{"get":{"summary":"Export Building Permits","description":"Export building permit data as CSV or GeoJSON.\n\nSupports filtering by address, permit type, and date range.\nMaximum 10,000 records per export.","operationId":"export_building_permits_api_edmonton_permits_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Address filter","title":"Address"},"description":"Address filter"},{"name":"permit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Permit type filter","title":"Permit Type"},"description":"Permit type filter"},{"name":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Start date (YYYY-MM-DD)","title":"Date From"},"description":"Start date (YYYY-MM-DD)"},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"End date (YYYY-MM-DD)","title":"Date To"},"description":"End date (YYYY-MM-DD)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/edmonton/permits/recent":{"get":{"summary":"Recent Building Permits","description":"Get recent building permits sorted by application date (newest first).\n\nUse this to see where construction activity is happening right now.","operationId":"recent_building_permits_api_edmonton_permits_recent_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Max results","default":20,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset","default":0,"title":"Offset"},"description":"Results offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/edmonton/permits/batch":{"post":{"summary":"Get Building Permits Batch","description":"Get multiple building permits by permit numbers in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of permit numbers.\nExample: {\"ids\": [\"BP123456\", \"BP789012\"]}\nMaximum 100 permit numbers per request.","operationId":"get_building_permits_batch_api_edmonton_permits_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Building Permits Batch Api Edmonton Permits Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/edmonton/permits/{permit_number}":{"get":{"summary":"Get Building Permit","description":"Get building permit details by permit number.\n\nServes HTML for browsers, JSON for API clients.","operationId":"get_building_permit_api_edmonton_permits__permit_number__get","parameters":[{"name":"permit_number","in":"path","required":true,"schema":{"type":"string","description":"Permit number","title":"Permit Number"},"description":"Permit number"},{"name":"_city_name","in":"query","required":false,"schema":{"default":"Edmonton","title":" City Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/edmonton/business_license/stats":{"get":{"summary":"Business License Stats","operationId":"business_license_stats_api_edmonton_business_license_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/edmonton/business_license/search":{"get":{"summary":"Search Business Licenses","operationId":"search_business_licenses_api_edmonton_business_license_search_get","parameters":[{"name":"query","in":"query","required":false,"schema":{"type":"string","description":"Business name or address","title":"Query"},"description":"Business name or address"},{"name":"business_type","in":"query","required":false,"schema":{"type":"string","description":"License category filter","title":"Business Type"},"description":"License category filter"},{"name":"status","in":"query","required":false,"schema":{"type":"string","description":"Status filter","title":"Status"},"description":"Status filter"},{"name":"local_area","in":"query","required":false,"schema":{"type":"string","description":"Neighbourhood filter","title":"Local Area"},"description":"Neighbourhood filter"},{"name":"lat","in":"query","required":false,"schema":{"type":"number","description":"Latitude for GPS radius search","title":"Lat"},"description":"Latitude for GPS radius search"},{"name":"lon","in":"query","required":false,"schema":{"type":"number","description":"Longitude for GPS radius search","title":"Lon"},"description":"Longitude for GPS radius search"},{"name":"radius_km","in":"query","required":false,"schema":{"type":"number","description":"Search radius in km","default":5.0,"title":"Radius Km"},"description":"Search radius in km"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/edmonton/business_license/by-gps":{"get":{"summary":"Business License By Gps","operationId":"business_license_by_gps_api_edmonton_business_license_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","title":"Lat"}},{"name":"lon","in":"query","required":true,"schema":{"type":"number","title":"Lon"}},{"name":"radius_km","in":"query","required":false,"schema":{"type":"number","maximum":50.0,"minimum":0.1,"default":1.0,"title":"Radius Km"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"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"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/edmonton/business_license/{license_id}":{"get":{"summary":"Get Business License","operationId":"get_business_license_api_edmonton_business_license__license_id__get","parameters":[{"name":"license_id","in":"path","required":true,"schema":{"type":"string","title":"License Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/edmonton/safety/search":{"get":{"summary":"Search Safety","operationId":"search_safety_api_edmonton_safety_search_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Q"}},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"}},{"name":"neighbourhood","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Neighbourhood"}},{"name":"start","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Start"}},{"name":"end","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"End"}},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lat"}},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lon"}},{"name":"radius_m","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Radius M"}},{"name":"bbox","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bbox"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SafetySearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/edmonton/safety/nearby":{"get":{"summary":"Nearby Safety","description":"Coordinate-first alias for nearby public safety records.","operationId":"nearby_safety_api_edmonton_safety_nearby_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":84.0,"minimum":41.0,"description":"Canadian latitude","title":"Lat"},"description":"Canadian latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":-52.0,"minimum":-142.0,"description":"Canadian longitude","title":"Lon"},"description":"Canadian longitude"},{"name":"radius_m","in":"query","required":false,"schema":{"type":"integer","maximum":50000,"minimum":1,"default":1000,"title":"Radius M"}},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"}},{"name":"start","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Start"}},{"name":"end","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"End"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SafetySearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/edmonton/safety/stats":{"get":{"summary":"Safety Stats","operationId":"safety_stats_api_edmonton_safety_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SafetyStats"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/edmonton/safety/{source_record_id}":{"get":{"summary":"Safety By Id","operationId":"safety_by_id_api_edmonton_safety__source_record_id__get","parameters":[{"name":"source_record_id","in":"path","required":true,"schema":{"type":"string","title":"Source Record Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/edmonton/health":{"get":{"summary":"City Health","description":"City-specific health check.","operationId":"city_health_api_edmonton_health_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/ottawa/entries/{kind}":{"get":{"summary":"List Entries","operationId":"list_entries_api_ottawa_entries__kind__get","parameters":[{"name":"kind","in":"path","required":true,"schema":{"type":"string","description":"Canonical entry kind: property, permit, zoning, or safety","title":"Kind"},"description":"Canonical entry kind: property, permit, zoning, or safety"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"_services","in":"query","required":false,"schema":{"title":" Services"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Entries Api Ottawa Entries  Kind  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/ottawa/property/search":{"get":{"summary":"Search Property","description":"Search for properties by address, or browse all if no address specified.\nSupports sorting by assessed_value, address, year_built, community, or lot_size_sqft.\nSupports value range filtering with min_value and max_value.\n Supports property_type and year range filters.","operationId":"search_property_api_ottawa_property_search_get","parameters":[{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Street address to search (omit to browse all)","title":"Address"},"description":"Street address to search (omit to browse all)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max results to return (up to 1000 for map browse)","default":10,"title":"Limit"},"description":"Max results to return (up to 1000 for map browse)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset for pagination","default":0,"title":"Offset"},"description":"Results offset for pagination"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft","title":"Sort By"},"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"asc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"},{"name":"property_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property type filter (e.g. RE, Residential)","title":"Property Type"},"description":"Property type filter (e.g. RE, Residential)"},{"name":"min_year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter: minimum year built","title":"Min Year"},"description":"Filter: minimum year built"},{"name":"max_year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter: maximum year built","title":"Max Year"},"description":"Filter: maximum year built"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertySearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/ottawa/property/list":{"get":{"summary":"List Property","description":"List all properties with pagination, sorting, and value range filtering.\n\nUse this endpoint to browse available property records and discover valid roll numbers.\nReturns paginated results with total count for client-side pagination.\nSort by assessed_value with order=desc to find the most expensive properties.","operationId":"list_property_api_ottawa_property_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft","title":"Sort By"},"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"asc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Property Api Ottawa Property List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/ottawa/property/geojson":{"get":{"summary":"Property Geojson","operationId":"property_geojson_api_ottawa_property_geojson_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500000,"minimum":1,"description":"Max features to return (cap prevents browser overload for large cities)","default":50000,"title":"Limit"},"description":"Max features to return (cap prevents browser overload for large cities)"},{"name":"sw_lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport south-west latitude","title":"Sw Lat"},"description":"Viewport south-west latitude"},{"name":"sw_lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport south-west longitude","title":"Sw Lon"},"description":"Viewport south-west longitude"},{"name":"ne_lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport north-east latitude","title":"Ne Lat"},"description":"Viewport north-east latitude"},{"name":"ne_lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport north-east longitude","title":"Ne Lon"},"description":"Viewport north-east longitude"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Offset for pagination through viewport results (use with limit)","default":0,"title":"Offset"},"description":"Offset for pagination through viewport results (use with limit)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/ottawa/property/top":{"get":{"summary":"Top Property","description":"Get top-N properties sorted by any numeric column.\n\nConvenience endpoint for AI agents and dashboards. Returns the top\nN properties sorted by the given column. Defaults to most expensive\n(assessed_value descending). Combine with min_value/max_value to\nfind e.g. the most expensive residential properties.","operationId":"top_property_api_ottawa_property_top_get","parameters":[{"name":"n","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Number of top properties to return","default":10,"title":"N"},"description":"Number of top properties to return"},{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","description":"Sort column: assessed_value, year_built, lot_size_sqft","default":"assessed_value","title":"Sort By"},"description":"Sort column: assessed_value, year_built, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"desc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Top Property Api Ottawa Property Top Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/ottawa/property/stats":{"get":{"summary":"Property Stats","description":"Get property assessment statistics.","operationId":"property_stats_api_ottawa_property_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/ottawa/property/autocomplete":{"get":{"summary":"Property Autocomplete","description":"Get address and roll number suggestions for typeahead search.","operationId":"property_autocomplete_api_ottawa_property_autocomplete_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"description":"Search query for address/roll number suggestions","title":"Q"},"description":"Search query for address/roll number suggestions"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":25,"minimum":1,"description":"Max suggestions to return","default":10,"title":"Limit"},"description":"Max suggestions to return"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/ottawa/property/geocode":{"post":{"summary":"Property Geocode","description":"Geocode property addresses to lat/lon coordinates.\n\nAccepts a JSON body with 'addresses' (list of address strings, max 50).\nReturns cached results instantly; uncached addresses are geocoded via Nominatim.\n\nExample: {\"addresses\": [\"123 Main St\", \"456 Oak Ave\"]}","operationId":"property_geocode_api_ottawa_property_geocode_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/ottawa/property/by-dls":{"get":{"summary":"Get Property By Dls","description":"Get property assessment by DLS coordinates.","operationId":"get_property_by_dls_api_ottawa_property_by_dls_get","parameters":[{"name":"quarter","in":"query","required":true,"schema":{"type":"string","description":"Quarter section (e.g., SW)","title":"Quarter"},"description":"Quarter section (e.g., SW)"},{"name":"section","in":"query","required":true,"schema":{"type":"integer","description":"Section number","title":"Section"},"description":"Section number"},{"name":"township","in":"query","required":true,"schema":{"type":"integer","description":"Township number","title":"Township"},"description":"Township number"},{"name":"range","in":"query","required":true,"schema":{"type":"integer","description":"Range number","title":"Range"},"description":"Range number"},{"name":"meridian","in":"query","required":true,"schema":{"type":"integer","description":"Meridian number","title":"Meridian"},"description":"Meridian number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyAssessment"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/ottawa/property/by-gps":{"get":{"summary":"Get Property By Gps","description":"Find coordinate-bearing assessment records nearest a GPS point.\n\nResults are point-nearness matches unless the municipal source supplies\nparcel polygons; clients should not interpret proximity as legal parcel\ncontainment.","operationId":"get_property_by_gps_api_ottawa_property_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":84.0,"minimum":41.0,"description":"Canadian latitude","title":"Lat"},"description":"Canadian latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":-52.0,"minimum":-142.0,"description":"Canadian longitude","title":"Lon"},"description":"Canadian longitude"},{"name":"radius_m","in":"query","required":false,"schema":{"type":"integer","maximum":5000,"minimum":1,"description":"Maximum point distance","default":100,"title":"Radius M"},"description":"Maximum point distance"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":10,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Property By Gps Api Ottawa Property By Gps Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/ottawa/property/by-roll/{roll_number}":{"get":{"summary":"Get Property By Roll","description":"Get property assessment by roll number.","operationId":"get_property_by_roll_api_ottawa_property_by_roll__roll_number__get","parameters":[{"name":"roll_number","in":"path","required":true,"schema":{"type":"string","description":"Property roll number","title":"Roll Number"},"description":"Property roll number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyAssessment"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/ottawa/property/report":{"get":{"summary":"Property Report Lookup","description":"Consolidated report by roll number, address, or GPS.","operationId":"property_report_lookup_api_ottawa_property_report_get","parameters":[{"name":"roll_number","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property roll number","title":"Roll Number"},"description":"Property roll number"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Street address","title":"Address"},"description":"Street address"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyReport"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/ottawa/property/report/{roll_number}":{"get":{"summary":"Property Report","description":"Get consolidated property report: assessment + building permits + zoning + DLS.","operationId":"property_report_api_ottawa_property_report__roll_number__get","parameters":[{"name":"roll_number","in":"path","required":true,"schema":{"type":"string","description":"Property roll number","title":"Roll Number"},"description":"Property roll number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyReport"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/ottawa/property/batch":{"post":{"summary":"Get Properties Batch","description":"Get multiple properties by roll numbers in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of roll numbers.\nExample: {\"ids\": [\"123456789\", \"987654321\"]}\nMaximum 100 roll numbers per request.","operationId":"get_properties_batch_api_ottawa_property_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Properties Batch Api Ottawa Property Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/ottawa/property/export":{"get":{"summary":"Export Properties","description":"Export property data as CSV or GeoJSON.\n\nSupports filtering by address, property type, and assessed value range.\nMaximum 10,000 records per export.","operationId":"export_properties_api_ottawa_property_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Address filter","title":"Address"},"description":"Address filter"},{"name":"property_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property type filter","title":"Property Type"},"description":"Property type filter"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum assessed value","title":"Min Value"},"description":"Minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum assessed value","title":"Max Value"},"description":"Maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/ottawa/census/profile":{"get":{"summary":"Get Census Profile","description":"Get census profile for a specific Dissemination Area.\n\nProvide either da_id directly, OR lat+lon to find the nearest DA automatically.","operationId":"get_census_profile_api_ottawa_census_profile_get","parameters":[{"name":"da_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Dissemination Area ID (e.g., 48820001)","title":"Da Id"},"description":"Dissemination Area ID (e.g., 48820001)"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude for nearest-DA lookup","title":"Lat"},"description":"Latitude for nearest-DA lookup"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude for nearest-DA lookup","title":"Lon"},"description":"Longitude for nearest-DA lookup"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusProfile"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/ottawa/census/batch":{"post":{"summary":"Get Census Batch","description":"Get multiple census profiles by DA IDs in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of DA IDs.\nExample: {\"ids\": [\"48820001\", \"48820002\"]}\nMaximum 100 DA IDs per request.","operationId":"get_census_batch_api_ottawa_census_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Census Batch Api Ottawa Census Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/ottawa/census/export":{"get":{"summary":"Export Census","description":"Export census data as CSV.\n\nSupports filtering by population range and geography type.\nMaximum 10,000 records per export.","operationId":"export_census_api_ottawa_census_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv only","default":"csv","title":"Format"},"description":"Export format: csv only"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"min_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Minimum population filter","title":"Min Population"},"description":"Minimum population filter"},{"name":"max_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Maximum population filter","title":"Max Population"},"description":"Maximum population filter"},{"name":"geography_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Geography type filter (DA, CT, CMA)","title":"Geography Type"},"description":"Geography type filter (DA, CT, CMA)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/ottawa/census/list":{"get":{"summary":"List Census Profiles","description":"List all census profiles with pagination.\n\nUse this endpoint to browse available census profiles and discover valid DA IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_census_profiles_api_ottawa_census_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Census Profiles Api Ottawa Census List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/ottawa/census/by-gps":{"get":{"summary":"Get Census By Gps","description":"Get census data for GPS coordinates.","operationId":"get_census_by_gps_api_ottawa_census_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90,"minimum":-90,"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":180,"minimum":-180,"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/ottawa/census/by-dls":{"get":{"summary":"Get Census By Dls","description":"Get census data for DLS coordinates.","operationId":"get_census_by_dls_api_ottawa_census_by_dls_get","parameters":[{"name":"dls","in":"query","required":true,"schema":{"type":"string","description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)","title":"Dls"},"description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/ottawa/census/map-data":{"get":{"summary":"Get Census Map Data","description":"Get lightweight DA points for choropleth map rendering.\n\nReturns centroid coordinates and key metrics (income, age, population,\nhousehold size, employment rate) for all DAs in the city.\nUsed by the census dashboard to render color-coded maps.","operationId":"get_census_map_data_api_ottawa_census_map_data_get","parameters":[{"name":"year","in":"query","required":false,"schema":{"type":"integer","description":"Census year for DA map data","default":2021,"title":"Year"},"description":"Census year for DA map data"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/ottawa/census/stats":{"get":{"summary":"Census Stats","description":"Get census data statistics.","operationId":"census_stats_api_ottawa_census_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/ottawa/census/compare":{"get":{"summary":"Census Compare","description":"Compare key census metrics across multiple years.\n\nReturns side-by-side comparison of population, households,\navg_income, median_age, density, and land_area for each requested year.\nYears without data return null for that year's values.","operationId":"census_compare_api_ottawa_census_compare_get","parameters":[{"name":"years","in":"query","required":false,"schema":{"type":"string","description":"Comma-separated census years (e.g., 2016,2021)","default":"2021","title":"Years"},"description":"Comma-separated census years (e.g., 2016,2021)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/ottawa/census/time-series":{"get":{"summary":"Census Timeseries","description":"Get year-by-year census trends for this city.\n\nReturns population, income, age, and household trends across all\navailable census years. Useful for spotting long-term demographic shifts.","operationId":"census_timeseries_api_ottawa_census_time_series_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/ottawa/geography/list":{"get":{"summary":"Geography List","description":"List geography boundaries for this city.","operationId":"geography_list_api_ottawa_geography_list_get","parameters":[{"name":"type","in":"query","required":false,"schema":{"type":"string","title":"Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/ottawa/geography/by-gps":{"get":{"summary":"Geography By Gps","description":"Find the geography boundary containing a GPS point.","operationId":"geography_by_gps_api_ottawa_geography_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","title":"Lat"}},{"name":"lon","in":"query","required":true,"schema":{"type":"number","title":"Lon"}},{"name":"type","in":"query","required":false,"schema":{"type":"string","default":"DA","title":"Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/ottawa/geography/stats":{"get":{"summary":"Geography Stats","description":"Get geography statistics for this city.","operationId":"geography_stats_api_ottawa_geography_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/ottawa/geography/{geoid}":{"get":{"summary":"Geography Boundary","description":"Get a specific geography boundary by geoid, including GeoJSON polygon.","operationId":"geography_boundary_api_ottawa_geography__geoid__get","parameters":[{"name":"geoid","in":"path","required":true,"schema":{"type":"string","title":"Geoid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/ottawa/census/rental/list":{"get":{"summary":"List Rental Prices","description":"List rental price records for this city, with optional unit type filter.","operationId":"list_rental_prices_api_ottawa_census_rental_list_get","parameters":[{"name":"unit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":50,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalPriceListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/ottawa/census/rental/trend":{"get":{"summary":"Get Rental Trend","description":"Get rental price time series for a specific unit type.","operationId":"get_rental_trend_api_ottawa_census_rental_trend_get","parameters":[{"name":"unit_type","in":"query","required":true,"schema":{"type":"string","description":"Rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Rental unit type (e.g. 'Apartment - 1 bedroom')"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalTrendResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/ottawa/census/rental/types":{"get":{"summary":"Get Rental Types","description":"Get available rental unit types for this city.","operationId":"get_rental_types_api_ottawa_census_rental_types_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/ottawa/zoning/by-gps":{"get":{"summary":"Get Zoning By Gps","description":"Get zoning district for GPS coordinates.","operationId":"get_zoning_by_gps_api_ottawa_zoning_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZoningByGPSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/ottawa/zoning/by-id/{district_id}":{"get":{"summary":"Get Zoning By Id","description":"Get a single zoning district by its numeric ID.","operationId":"get_zoning_by_id_api_ottawa_zoning_by_id__district_id__get","parameters":[{"name":"district_id","in":"path","required":true,"schema":{"type":"integer","description":"Zoning district numeric ID","title":"District Id"},"description":"Zoning district numeric ID"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning By Id Api Ottawa Zoning By Id  District Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/ottawa/zoning/by-code/{code}":{"get":{"summary":"Get Zoning By Code","description":"Get all districts with a specific zone code.","operationId":"get_zoning_by_code_api_ottawa_zoning_by_code__code__get","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","description":"Zone code (e.g., C-C1, R-G)","title":"Code"},"description":"Zone code (e.g., C-C1, R-G)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoningDistrict"},"title":"Response Get Zoning By Code Api Ottawa Zoning By Code  Code  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/ottawa/zoning/batch":{"post":{"summary":"Get Zoning Batch","description":"Get multiple zoning districts by zone codes in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of zone codes.\nExample: {\"ids\": [\"CR20-C20/R20\", \"C-C1\", \"R-G\"]}\nMaximum 100 zone codes per request.","operationId":"get_zoning_batch_api_ottawa_zoning_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning Batch Api Ottawa Zoning Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/ottawa/zoning/list":{"get":{"summary":"List Zoning Districts","description":"List all zoning districts with pagination.\n\nUse this endpoint to browse available zoning districts and discover valid IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_zoning_districts_api_ottawa_zoning_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Zoning Districts Api Ottawa Zoning List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/ottawa/zoning/codes":{"get":{"summary":"List Zone Codes","description":"List all zone codes with descriptions.","operationId":"list_zone_codes_api_ottawa_zoning_codes_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"type":"string","description":"Filter by major category (e.g., Commercial, Residential)","title":"Category"},"description":"Filter by major category (e.g., Commercial, Residential)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoneCodeInfo"},"title":"Response List Zone Codes Api Ottawa Zoning Codes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/ottawa/zoning/stats":{"get":{"summary":"Zoning Stats","description":"Get zoning statistics.","operationId":"zoning_stats_api_ottawa_zoning_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/ottawa/zoning/export":{"get":{"summary":"Export Zoning","description":"Export zoning district data as CSV or GeoJSON.\n\nSupports filtering by zone code, category, and area range.\nMaximum 10,000 records per export.","operationId":"export_zoning_api_ottawa_zoning_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"zone_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Zone code filter (e.g., CR2)","title":"Zone Code"},"description":"Zone code filter (e.g., CR2)"},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Major category filter","title":"Category"},"description":"Major category filter"},{"name":"min_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum area in sq km","title":"Min Area"},"description":"Minimum area in sq km"},{"name":"max_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum area in sq km","title":"Max Area"},"description":"Maximum area in sq km"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/ottawa/permits/stats":{"get":{"summary":"Building Stats","description":"Get building permit statistics.","operationId":"building_stats_api_ottawa_permits_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/ottawa/permits/search":{"get":{"summary":"Search Building Permits","description":"Search building permits by address, contractor, applicant, permit number, and/or permit type.","operationId":"search_building_permits_api_ottawa_permits_search_get","parameters":[{"name":"address","in":"query","required":false,"schema":{"type":"string","description":"Address to search","title":"Address"},"description":"Address to search"},{"name":"q","in":"query","required":false,"schema":{"type":"string","description":"General text search (address, contractor, applicant, permit #)","title":"Q"},"description":"General text search (address, contractor, applicant, permit #)"},{"name":"permit_type","in":"query","required":false,"schema":{"type":"string","description":"Filter by permit type","title":"Permit Type"},"description":"Filter by permit type"},{"name":"bbox","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bounding box: min_lon,min_lat,max_lon,max_lat","title":"Bbox"},"description":"Bounding box: min_lon,min_lat,max_lon,max_lat"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max results","default":20,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset","default":0,"title":"Offset"},"description":"Results offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/ottawa/permits/nearby":{"get":{"summary":"Nearby Building Permits","description":"Coordinate-first alias for nearby building permits.","operationId":"nearby_building_permits_api_ottawa_permits_nearby_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":84.0,"minimum":41.0,"description":"Canadian latitude","title":"Lat"},"description":"Canadian latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":-52.0,"minimum":-142.0,"description":"Canadian longitude","title":"Lon"},"description":"Canadian longitude"},{"name":"radius_m","in":"query","required":false,"schema":{"type":"integer","maximum":50000,"minimum":1,"default":1000,"title":"Radius M"}},{"name":"permit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Permit Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/ottawa/permits/export":{"get":{"summary":"Export Building Permits","description":"Export building permit data as CSV or GeoJSON.\n\nSupports filtering by address, permit type, and date range.\nMaximum 10,000 records per export.","operationId":"export_building_permits_api_ottawa_permits_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Address filter","title":"Address"},"description":"Address filter"},{"name":"permit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Permit type filter","title":"Permit Type"},"description":"Permit type filter"},{"name":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Start date (YYYY-MM-DD)","title":"Date From"},"description":"Start date (YYYY-MM-DD)"},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"End date (YYYY-MM-DD)","title":"Date To"},"description":"End date (YYYY-MM-DD)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/ottawa/permits/recent":{"get":{"summary":"Recent Building Permits","description":"Get recent building permits sorted by application date (newest first).\n\nUse this to see where construction activity is happening right now.","operationId":"recent_building_permits_api_ottawa_permits_recent_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Max results","default":20,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset","default":0,"title":"Offset"},"description":"Results offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/ottawa/permits/batch":{"post":{"summary":"Get Building Permits Batch","description":"Get multiple building permits by permit numbers in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of permit numbers.\nExample: {\"ids\": [\"BP123456\", \"BP789012\"]}\nMaximum 100 permit numbers per request.","operationId":"get_building_permits_batch_api_ottawa_permits_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Building Permits Batch Api Ottawa Permits Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/ottawa/permits/{permit_number}":{"get":{"summary":"Get Building Permit","description":"Get building permit details by permit number.\n\nServes HTML for browsers, JSON for API clients.","operationId":"get_building_permit_api_ottawa_permits__permit_number__get","parameters":[{"name":"permit_number","in":"path","required":true,"schema":{"type":"string","description":"Permit number","title":"Permit Number"},"description":"Permit number"},{"name":"_city_name","in":"query","required":false,"schema":{"default":"Ottawa","title":" City Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/ottawa/permits/by-community":{"get":{"summary":"Search Building By Community","description":"Search Ottawa building permits by community or municipality.","operationId":"search_building_by_community_api_ottawa_permits_by_community_get","parameters":[{"name":"community","in":"query","required":true,"schema":{"type":"string","description":"Community/municipality name","title":"Community"},"description":"Community/municipality name"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Max results","default":20,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset","default":0,"title":"Offset"},"description":"Results offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Search Building By Community Api Ottawa Permits By Community Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/ottawa/permits/by-type":{"get":{"summary":"Search Building By Type","description":"Search Ottawa building permits by building type.","operationId":"search_building_by_type_api_ottawa_permits_by_type_get","parameters":[{"name":"building_type","in":"query","required":true,"schema":{"type":"string","description":"Building type (e.g., Single, Apartment, Retail)","title":"Building Type"},"description":"Building type (e.g., Single, Apartment, Retail)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Max results","default":20,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset","default":0,"title":"Offset"},"description":"Results offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Search Building By Type Api Ottawa Permits By Type Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/ottawa/safety/search":{"get":{"summary":"Search Safety","operationId":"search_safety_api_ottawa_safety_search_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Q"}},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"}},{"name":"neighbourhood","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Neighbourhood"}},{"name":"start","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Start"}},{"name":"end","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"End"}},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lat"}},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lon"}},{"name":"radius_m","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Radius M"}},{"name":"bbox","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bbox"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SafetySearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/ottawa/safety/nearby":{"get":{"summary":"Nearby Safety","description":"Coordinate-first alias for nearby public safety records.","operationId":"nearby_safety_api_ottawa_safety_nearby_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":84.0,"minimum":41.0,"description":"Canadian latitude","title":"Lat"},"description":"Canadian latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":-52.0,"minimum":-142.0,"description":"Canadian longitude","title":"Lon"},"description":"Canadian longitude"},{"name":"radius_m","in":"query","required":false,"schema":{"type":"integer","maximum":50000,"minimum":1,"default":1000,"title":"Radius M"}},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"}},{"name":"start","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Start"}},{"name":"end","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"End"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SafetySearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/ottawa/safety/stats":{"get":{"summary":"Safety Stats","operationId":"safety_stats_api_ottawa_safety_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SafetyStats"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/ottawa/safety/{source_record_id}":{"get":{"summary":"Safety By Id","operationId":"safety_by_id_api_ottawa_safety__source_record_id__get","parameters":[{"name":"source_record_id","in":"path","required":true,"schema":{"type":"string","title":"Source Record Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/ottawa/health":{"get":{"summary":"City Health","description":"City-specific health check.","operationId":"city_health_api_ottawa_health_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/winnipeg/entries/{kind}":{"get":{"summary":"List Entries","operationId":"list_entries_api_winnipeg_entries__kind__get","parameters":[{"name":"kind","in":"path","required":true,"schema":{"type":"string","description":"Canonical entry kind: property, permit, zoning, or safety","title":"Kind"},"description":"Canonical entry kind: property, permit, zoning, or safety"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"_services","in":"query","required":false,"schema":{"title":" Services"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Entries Api Winnipeg Entries  Kind  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/winnipeg/property/search":{"get":{"summary":"Search Property","description":"Search for properties by address, or browse all if no address specified.\nSupports sorting by assessed_value, address, year_built, community, or lot_size_sqft.\nSupports value range filtering with min_value and max_value.\n Supports property_type and year range filters.","operationId":"search_property_api_winnipeg_property_search_get","parameters":[{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Street address to search (omit to browse all)","title":"Address"},"description":"Street address to search (omit to browse all)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max results to return (up to 1000 for map browse)","default":10,"title":"Limit"},"description":"Max results to return (up to 1000 for map browse)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset for pagination","default":0,"title":"Offset"},"description":"Results offset for pagination"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft","title":"Sort By"},"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"asc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"},{"name":"property_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property type filter (e.g. RE, Residential)","title":"Property Type"},"description":"Property type filter (e.g. RE, Residential)"},{"name":"min_year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter: minimum year built","title":"Min Year"},"description":"Filter: minimum year built"},{"name":"max_year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter: maximum year built","title":"Max Year"},"description":"Filter: maximum year built"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertySearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/winnipeg/property/list":{"get":{"summary":"List Property","description":"List all properties with pagination, sorting, and value range filtering.\n\nUse this endpoint to browse available property records and discover valid roll numbers.\nReturns paginated results with total count for client-side pagination.\nSort by assessed_value with order=desc to find the most expensive properties.","operationId":"list_property_api_winnipeg_property_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft","title":"Sort By"},"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"asc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Property Api Winnipeg Property List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/winnipeg/property/geojson":{"get":{"summary":"Property Geojson","operationId":"property_geojson_api_winnipeg_property_geojson_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500000,"minimum":1,"description":"Max features to return (cap prevents browser overload for large cities)","default":50000,"title":"Limit"},"description":"Max features to return (cap prevents browser overload for large cities)"},{"name":"sw_lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport south-west latitude","title":"Sw Lat"},"description":"Viewport south-west latitude"},{"name":"sw_lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport south-west longitude","title":"Sw Lon"},"description":"Viewport south-west longitude"},{"name":"ne_lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport north-east latitude","title":"Ne Lat"},"description":"Viewport north-east latitude"},{"name":"ne_lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport north-east longitude","title":"Ne Lon"},"description":"Viewport north-east longitude"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Offset for pagination through viewport results (use with limit)","default":0,"title":"Offset"},"description":"Offset for pagination through viewport results (use with limit)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/winnipeg/property/top":{"get":{"summary":"Top Property","description":"Get top-N properties sorted by any numeric column.\n\nConvenience endpoint for AI agents and dashboards. Returns the top\nN properties sorted by the given column. Defaults to most expensive\n(assessed_value descending). Combine with min_value/max_value to\nfind e.g. the most expensive residential properties.","operationId":"top_property_api_winnipeg_property_top_get","parameters":[{"name":"n","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Number of top properties to return","default":10,"title":"N"},"description":"Number of top properties to return"},{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","description":"Sort column: assessed_value, year_built, lot_size_sqft","default":"assessed_value","title":"Sort By"},"description":"Sort column: assessed_value, year_built, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"desc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Top Property Api Winnipeg Property Top Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/winnipeg/property/stats":{"get":{"summary":"Property Stats","description":"Get property assessment statistics.","operationId":"property_stats_api_winnipeg_property_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/winnipeg/property/autocomplete":{"get":{"summary":"Property Autocomplete","description":"Get address and roll number suggestions for typeahead search.","operationId":"property_autocomplete_api_winnipeg_property_autocomplete_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"description":"Search query for address/roll number suggestions","title":"Q"},"description":"Search query for address/roll number suggestions"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":25,"minimum":1,"description":"Max suggestions to return","default":10,"title":"Limit"},"description":"Max suggestions to return"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/winnipeg/property/geocode":{"post":{"summary":"Property Geocode","description":"Geocode property addresses to lat/lon coordinates.\n\nAccepts a JSON body with 'addresses' (list of address strings, max 50).\nReturns cached results instantly; uncached addresses are geocoded via Nominatim.\n\nExample: {\"addresses\": [\"123 Main St\", \"456 Oak Ave\"]}","operationId":"property_geocode_api_winnipeg_property_geocode_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/winnipeg/property/by-dls":{"get":{"summary":"Get Property By Dls","description":"Get property assessment by DLS coordinates.","operationId":"get_property_by_dls_api_winnipeg_property_by_dls_get","parameters":[{"name":"quarter","in":"query","required":true,"schema":{"type":"string","description":"Quarter section (e.g., SW)","title":"Quarter"},"description":"Quarter section (e.g., SW)"},{"name":"section","in":"query","required":true,"schema":{"type":"integer","description":"Section number","title":"Section"},"description":"Section number"},{"name":"township","in":"query","required":true,"schema":{"type":"integer","description":"Township number","title":"Township"},"description":"Township number"},{"name":"range","in":"query","required":true,"schema":{"type":"integer","description":"Range number","title":"Range"},"description":"Range number"},{"name":"meridian","in":"query","required":true,"schema":{"type":"integer","description":"Meridian number","title":"Meridian"},"description":"Meridian number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyAssessment"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/winnipeg/property/by-gps":{"get":{"summary":"Get Property By Gps","description":"Find coordinate-bearing assessment records nearest a GPS point.\n\nResults are point-nearness matches unless the municipal source supplies\nparcel polygons; clients should not interpret proximity as legal parcel\ncontainment.","operationId":"get_property_by_gps_api_winnipeg_property_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":84.0,"minimum":41.0,"description":"Canadian latitude","title":"Lat"},"description":"Canadian latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":-52.0,"minimum":-142.0,"description":"Canadian longitude","title":"Lon"},"description":"Canadian longitude"},{"name":"radius_m","in":"query","required":false,"schema":{"type":"integer","maximum":5000,"minimum":1,"description":"Maximum point distance","default":100,"title":"Radius M"},"description":"Maximum point distance"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":10,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Property By Gps Api Winnipeg Property By Gps Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/winnipeg/property/by-roll/{roll_number}":{"get":{"summary":"Get Property By Roll","description":"Get property assessment by roll number.","operationId":"get_property_by_roll_api_winnipeg_property_by_roll__roll_number__get","parameters":[{"name":"roll_number","in":"path","required":true,"schema":{"type":"string","description":"Property roll number","title":"Roll Number"},"description":"Property roll number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyAssessment"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/winnipeg/property/report":{"get":{"summary":"Property Report Lookup","description":"Consolidated report by roll number, address, or GPS.","operationId":"property_report_lookup_api_winnipeg_property_report_get","parameters":[{"name":"roll_number","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property roll number","title":"Roll Number"},"description":"Property roll number"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Street address","title":"Address"},"description":"Street address"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyReport"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/winnipeg/property/report/{roll_number}":{"get":{"summary":"Property Report","description":"Get consolidated property report: assessment + building permits + zoning + DLS.","operationId":"property_report_api_winnipeg_property_report__roll_number__get","parameters":[{"name":"roll_number","in":"path","required":true,"schema":{"type":"string","description":"Property roll number","title":"Roll Number"},"description":"Property roll number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyReport"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/winnipeg/property/batch":{"post":{"summary":"Get Properties Batch","description":"Get multiple properties by roll numbers in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of roll numbers.\nExample: {\"ids\": [\"123456789\", \"987654321\"]}\nMaximum 100 roll numbers per request.","operationId":"get_properties_batch_api_winnipeg_property_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Properties Batch Api Winnipeg Property Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/winnipeg/property/export":{"get":{"summary":"Export Properties","description":"Export property data as CSV or GeoJSON.\n\nSupports filtering by address, property type, and assessed value range.\nMaximum 10,000 records per export.","operationId":"export_properties_api_winnipeg_property_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Address filter","title":"Address"},"description":"Address filter"},{"name":"property_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property type filter","title":"Property Type"},"description":"Property type filter"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum assessed value","title":"Min Value"},"description":"Minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum assessed value","title":"Max Value"},"description":"Maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/winnipeg/census/profile":{"get":{"summary":"Get Census Profile","description":"Get census profile for a specific Dissemination Area.\n\nProvide either da_id directly, OR lat+lon to find the nearest DA automatically.","operationId":"get_census_profile_api_winnipeg_census_profile_get","parameters":[{"name":"da_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Dissemination Area ID (e.g., 48820001)","title":"Da Id"},"description":"Dissemination Area ID (e.g., 48820001)"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude for nearest-DA lookup","title":"Lat"},"description":"Latitude for nearest-DA lookup"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude for nearest-DA lookup","title":"Lon"},"description":"Longitude for nearest-DA lookup"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusProfile"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/winnipeg/census/batch":{"post":{"summary":"Get Census Batch","description":"Get multiple census profiles by DA IDs in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of DA IDs.\nExample: {\"ids\": [\"48820001\", \"48820002\"]}\nMaximum 100 DA IDs per request.","operationId":"get_census_batch_api_winnipeg_census_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Census Batch Api Winnipeg Census Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/winnipeg/census/export":{"get":{"summary":"Export Census","description":"Export census data as CSV.\n\nSupports filtering by population range and geography type.\nMaximum 10,000 records per export.","operationId":"export_census_api_winnipeg_census_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv only","default":"csv","title":"Format"},"description":"Export format: csv only"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"min_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Minimum population filter","title":"Min Population"},"description":"Minimum population filter"},{"name":"max_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Maximum population filter","title":"Max Population"},"description":"Maximum population filter"},{"name":"geography_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Geography type filter (DA, CT, CMA)","title":"Geography Type"},"description":"Geography type filter (DA, CT, CMA)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/winnipeg/census/list":{"get":{"summary":"List Census Profiles","description":"List all census profiles with pagination.\n\nUse this endpoint to browse available census profiles and discover valid DA IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_census_profiles_api_winnipeg_census_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Census Profiles Api Winnipeg Census List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/winnipeg/census/by-gps":{"get":{"summary":"Get Census By Gps","description":"Get census data for GPS coordinates.","operationId":"get_census_by_gps_api_winnipeg_census_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90,"minimum":-90,"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":180,"minimum":-180,"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/winnipeg/census/by-dls":{"get":{"summary":"Get Census By Dls","description":"Get census data for DLS coordinates.","operationId":"get_census_by_dls_api_winnipeg_census_by_dls_get","parameters":[{"name":"dls","in":"query","required":true,"schema":{"type":"string","description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)","title":"Dls"},"description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/winnipeg/census/map-data":{"get":{"summary":"Get Census Map Data","description":"Get lightweight DA points for choropleth map rendering.\n\nReturns centroid coordinates and key metrics (income, age, population,\nhousehold size, employment rate) for all DAs in the city.\nUsed by the census dashboard to render color-coded maps.","operationId":"get_census_map_data_api_winnipeg_census_map_data_get","parameters":[{"name":"year","in":"query","required":false,"schema":{"type":"integer","description":"Census year for DA map data","default":2021,"title":"Year"},"description":"Census year for DA map data"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/winnipeg/census/stats":{"get":{"summary":"Census Stats","description":"Get census data statistics.","operationId":"census_stats_api_winnipeg_census_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/winnipeg/census/compare":{"get":{"summary":"Census Compare","description":"Compare key census metrics across multiple years.\n\nReturns side-by-side comparison of population, households,\navg_income, median_age, density, and land_area for each requested year.\nYears without data return null for that year's values.","operationId":"census_compare_api_winnipeg_census_compare_get","parameters":[{"name":"years","in":"query","required":false,"schema":{"type":"string","description":"Comma-separated census years (e.g., 2016,2021)","default":"2021","title":"Years"},"description":"Comma-separated census years (e.g., 2016,2021)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/winnipeg/census/time-series":{"get":{"summary":"Census Timeseries","description":"Get year-by-year census trends for this city.\n\nReturns population, income, age, and household trends across all\navailable census years. Useful for spotting long-term demographic shifts.","operationId":"census_timeseries_api_winnipeg_census_time_series_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/winnipeg/geography/list":{"get":{"summary":"Geography List","description":"List geography boundaries for this city.","operationId":"geography_list_api_winnipeg_geography_list_get","parameters":[{"name":"type","in":"query","required":false,"schema":{"type":"string","title":"Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/winnipeg/geography/by-gps":{"get":{"summary":"Geography By Gps","description":"Find the geography boundary containing a GPS point.","operationId":"geography_by_gps_api_winnipeg_geography_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","title":"Lat"}},{"name":"lon","in":"query","required":true,"schema":{"type":"number","title":"Lon"}},{"name":"type","in":"query","required":false,"schema":{"type":"string","default":"DA","title":"Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/winnipeg/geography/stats":{"get":{"summary":"Geography Stats","description":"Get geography statistics for this city.","operationId":"geography_stats_api_winnipeg_geography_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/winnipeg/geography/{geoid}":{"get":{"summary":"Geography Boundary","description":"Get a specific geography boundary by geoid, including GeoJSON polygon.","operationId":"geography_boundary_api_winnipeg_geography__geoid__get","parameters":[{"name":"geoid","in":"path","required":true,"schema":{"type":"string","title":"Geoid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/winnipeg/census/rental/list":{"get":{"summary":"List Rental Prices","description":"List rental price records for this city, with optional unit type filter.","operationId":"list_rental_prices_api_winnipeg_census_rental_list_get","parameters":[{"name":"unit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":50,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalPriceListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/winnipeg/census/rental/trend":{"get":{"summary":"Get Rental Trend","description":"Get rental price time series for a specific unit type.","operationId":"get_rental_trend_api_winnipeg_census_rental_trend_get","parameters":[{"name":"unit_type","in":"query","required":true,"schema":{"type":"string","description":"Rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Rental unit type (e.g. 'Apartment - 1 bedroom')"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalTrendResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/winnipeg/census/rental/types":{"get":{"summary":"Get Rental Types","description":"Get available rental unit types for this city.","operationId":"get_rental_types_api_winnipeg_census_rental_types_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/winnipeg/zoning/by-gps":{"get":{"summary":"Get Zoning By Gps","description":"Get zoning district for GPS coordinates.","operationId":"get_zoning_by_gps_api_winnipeg_zoning_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZoningByGPSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/winnipeg/zoning/by-id/{district_id}":{"get":{"summary":"Get Zoning By Id","description":"Get a single zoning district by its numeric ID.","operationId":"get_zoning_by_id_api_winnipeg_zoning_by_id__district_id__get","parameters":[{"name":"district_id","in":"path","required":true,"schema":{"type":"integer","description":"Zoning district numeric ID","title":"District Id"},"description":"Zoning district numeric ID"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning By Id Api Winnipeg Zoning By Id  District Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/winnipeg/zoning/by-code/{code}":{"get":{"summary":"Get Zoning By Code","description":"Get all districts with a specific zone code.","operationId":"get_zoning_by_code_api_winnipeg_zoning_by_code__code__get","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","description":"Zone code (e.g., C-C1, R-G)","title":"Code"},"description":"Zone code (e.g., C-C1, R-G)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoningDistrict"},"title":"Response Get Zoning By Code Api Winnipeg Zoning By Code  Code  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/winnipeg/zoning/batch":{"post":{"summary":"Get Zoning Batch","description":"Get multiple zoning districts by zone codes in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of zone codes.\nExample: {\"ids\": [\"CR20-C20/R20\", \"C-C1\", \"R-G\"]}\nMaximum 100 zone codes per request.","operationId":"get_zoning_batch_api_winnipeg_zoning_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning Batch Api Winnipeg Zoning Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/winnipeg/zoning/list":{"get":{"summary":"List Zoning Districts","description":"List all zoning districts with pagination.\n\nUse this endpoint to browse available zoning districts and discover valid IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_zoning_districts_api_winnipeg_zoning_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Zoning Districts Api Winnipeg Zoning List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/winnipeg/zoning/codes":{"get":{"summary":"List Zone Codes","description":"List all zone codes with descriptions.","operationId":"list_zone_codes_api_winnipeg_zoning_codes_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"type":"string","description":"Filter by major category (e.g., Commercial, Residential)","title":"Category"},"description":"Filter by major category (e.g., Commercial, Residential)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoneCodeInfo"},"title":"Response List Zone Codes Api Winnipeg Zoning Codes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/winnipeg/zoning/stats":{"get":{"summary":"Zoning Stats","description":"Get zoning statistics.","operationId":"zoning_stats_api_winnipeg_zoning_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/winnipeg/zoning/export":{"get":{"summary":"Export Zoning","description":"Export zoning district data as CSV or GeoJSON.\n\nSupports filtering by zone code, category, and area range.\nMaximum 10,000 records per export.","operationId":"export_zoning_api_winnipeg_zoning_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"zone_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Zone code filter (e.g., CR2)","title":"Zone Code"},"description":"Zone code filter (e.g., CR2)"},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Major category filter","title":"Category"},"description":"Major category filter"},{"name":"min_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum area in sq km","title":"Min Area"},"description":"Minimum area in sq km"},{"name":"max_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum area in sq km","title":"Max Area"},"description":"Maximum area in sq km"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/winnipeg/permits/stats":{"get":{"summary":"Building Stats","description":"Get building permit statistics.","operationId":"building_stats_api_winnipeg_permits_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/winnipeg/permits/search":{"get":{"summary":"Search Building Permits","description":"Search building permits by address, contractor, applicant, permit number, and/or permit type.","operationId":"search_building_permits_api_winnipeg_permits_search_get","parameters":[{"name":"address","in":"query","required":false,"schema":{"type":"string","description":"Address to search","title":"Address"},"description":"Address to search"},{"name":"q","in":"query","required":false,"schema":{"type":"string","description":"General text search (address, contractor, applicant, permit #)","title":"Q"},"description":"General text search (address, contractor, applicant, permit #)"},{"name":"permit_type","in":"query","required":false,"schema":{"type":"string","description":"Filter by permit type","title":"Permit Type"},"description":"Filter by permit type"},{"name":"bbox","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bounding box: min_lon,min_lat,max_lon,max_lat","title":"Bbox"},"description":"Bounding box: min_lon,min_lat,max_lon,max_lat"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max results","default":20,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset","default":0,"title":"Offset"},"description":"Results offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/winnipeg/permits/nearby":{"get":{"summary":"Nearby Building Permits","description":"Coordinate-first alias for nearby building permits.","operationId":"nearby_building_permits_api_winnipeg_permits_nearby_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":84.0,"minimum":41.0,"description":"Canadian latitude","title":"Lat"},"description":"Canadian latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":-52.0,"minimum":-142.0,"description":"Canadian longitude","title":"Lon"},"description":"Canadian longitude"},{"name":"radius_m","in":"query","required":false,"schema":{"type":"integer","maximum":50000,"minimum":1,"default":1000,"title":"Radius M"}},{"name":"permit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Permit Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/winnipeg/permits/export":{"get":{"summary":"Export Building Permits","description":"Export building permit data as CSV or GeoJSON.\n\nSupports filtering by address, permit type, and date range.\nMaximum 10,000 records per export.","operationId":"export_building_permits_api_winnipeg_permits_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Address filter","title":"Address"},"description":"Address filter"},{"name":"permit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Permit type filter","title":"Permit Type"},"description":"Permit type filter"},{"name":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Start date (YYYY-MM-DD)","title":"Date From"},"description":"Start date (YYYY-MM-DD)"},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"End date (YYYY-MM-DD)","title":"Date To"},"description":"End date (YYYY-MM-DD)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/winnipeg/permits/recent":{"get":{"summary":"Recent Building Permits","description":"Get recent building permits sorted by application date (newest first).\n\nUse this to see where construction activity is happening right now.","operationId":"recent_building_permits_api_winnipeg_permits_recent_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Max results","default":20,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset","default":0,"title":"Offset"},"description":"Results offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/winnipeg/permits/batch":{"post":{"summary":"Get Building Permits Batch","description":"Get multiple building permits by permit numbers in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of permit numbers.\nExample: {\"ids\": [\"BP123456\", \"BP789012\"]}\nMaximum 100 permit numbers per request.","operationId":"get_building_permits_batch_api_winnipeg_permits_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Building Permits Batch Api Winnipeg Permits Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/winnipeg/permits/{permit_number}":{"get":{"summary":"Get Building Permit","description":"Get building permit details by permit number.\n\nServes HTML for browsers, JSON for API clients.","operationId":"get_building_permit_api_winnipeg_permits__permit_number__get","parameters":[{"name":"permit_number","in":"path","required":true,"schema":{"type":"string","description":"Permit number","title":"Permit Number"},"description":"Permit number"},{"name":"_city_name","in":"query","required":false,"schema":{"default":"Winnipeg","title":" City Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/winnipeg/business_license/stats":{"get":{"summary":"Business License Stats","operationId":"business_license_stats_api_winnipeg_business_license_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/winnipeg/business_license/search":{"get":{"summary":"Search Business Licenses","operationId":"search_business_licenses_api_winnipeg_business_license_search_get","parameters":[{"name":"query","in":"query","required":false,"schema":{"type":"string","description":"Business name or address","title":"Query"},"description":"Business name or address"},{"name":"business_type","in":"query","required":false,"schema":{"type":"string","description":"License category filter","title":"Business Type"},"description":"License category filter"},{"name":"status","in":"query","required":false,"schema":{"type":"string","description":"Status filter","title":"Status"},"description":"Status filter"},{"name":"local_area","in":"query","required":false,"schema":{"type":"string","description":"Neighbourhood filter","title":"Local Area"},"description":"Neighbourhood filter"},{"name":"lat","in":"query","required":false,"schema":{"type":"number","description":"Latitude for GPS radius search","title":"Lat"},"description":"Latitude for GPS radius search"},{"name":"lon","in":"query","required":false,"schema":{"type":"number","description":"Longitude for GPS radius search","title":"Lon"},"description":"Longitude for GPS radius search"},{"name":"radius_km","in":"query","required":false,"schema":{"type":"number","description":"Search radius in km","default":5.0,"title":"Radius Km"},"description":"Search radius in km"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/winnipeg/business_license/by-gps":{"get":{"summary":"Business License By Gps","operationId":"business_license_by_gps_api_winnipeg_business_license_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","title":"Lat"}},{"name":"lon","in":"query","required":true,"schema":{"type":"number","title":"Lon"}},{"name":"radius_km","in":"query","required":false,"schema":{"type":"number","maximum":50.0,"minimum":0.1,"default":1.0,"title":"Radius Km"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"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"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/winnipeg/business_license/{license_id}":{"get":{"summary":"Get Business License","operationId":"get_business_license_api_winnipeg_business_license__license_id__get","parameters":[{"name":"license_id","in":"path","required":true,"schema":{"type":"string","title":"License Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/winnipeg/safety/search":{"get":{"summary":"Search Safety","operationId":"search_safety_api_winnipeg_safety_search_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Q"}},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"}},{"name":"neighbourhood","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Neighbourhood"}},{"name":"start","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Start"}},{"name":"end","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"End"}},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lat"}},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lon"}},{"name":"radius_m","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Radius M"}},{"name":"bbox","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bbox"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SafetySearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/winnipeg/safety/nearby":{"get":{"summary":"Nearby Safety","description":"Coordinate-first alias for nearby public safety records.","operationId":"nearby_safety_api_winnipeg_safety_nearby_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":84.0,"minimum":41.0,"description":"Canadian latitude","title":"Lat"},"description":"Canadian latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":-52.0,"minimum":-142.0,"description":"Canadian longitude","title":"Lon"},"description":"Canadian longitude"},{"name":"radius_m","in":"query","required":false,"schema":{"type":"integer","maximum":50000,"minimum":1,"default":1000,"title":"Radius M"}},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"}},{"name":"start","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Start"}},{"name":"end","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"End"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SafetySearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/winnipeg/safety/stats":{"get":{"summary":"Safety Stats","operationId":"safety_stats_api_winnipeg_safety_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SafetyStats"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/winnipeg/safety/{source_record_id}":{"get":{"summary":"Safety By Id","operationId":"safety_by_id_api_winnipeg_safety__source_record_id__get","parameters":[{"name":"source_record_id","in":"path","required":true,"schema":{"type":"string","title":"Source Record Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/winnipeg/health":{"get":{"summary":"City Health","description":"City-specific health check.","operationId":"city_health_api_winnipeg_health_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/quebec-city/entries/{kind}":{"get":{"summary":"List Entries","operationId":"list_entries_api_quebec_city_entries__kind__get","parameters":[{"name":"kind","in":"path","required":true,"schema":{"type":"string","description":"Canonical entry kind: property, permit, zoning, or safety","title":"Kind"},"description":"Canonical entry kind: property, permit, zoning, or safety"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"_services","in":"query","required":false,"schema":{"title":" Services"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Entries Api Quebec City Entries  Kind  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/quebec-city/property/search":{"get":{"summary":"Search Property","description":"Search for properties by address, or browse all if no address specified.\nSupports sorting by assessed_value, address, year_built, community, or lot_size_sqft.\nSupports value range filtering with min_value and max_value.\n Supports property_type and year range filters.","operationId":"search_property_api_quebec_city_property_search_get","parameters":[{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Street address to search (omit to browse all)","title":"Address"},"description":"Street address to search (omit to browse all)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max results to return (up to 1000 for map browse)","default":10,"title":"Limit"},"description":"Max results to return (up to 1000 for map browse)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset for pagination","default":0,"title":"Offset"},"description":"Results offset for pagination"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft","title":"Sort By"},"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"asc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"},{"name":"property_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property type filter (e.g. RE, Residential)","title":"Property Type"},"description":"Property type filter (e.g. RE, Residential)"},{"name":"min_year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter: minimum year built","title":"Min Year"},"description":"Filter: minimum year built"},{"name":"max_year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter: maximum year built","title":"Max Year"},"description":"Filter: maximum year built"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertySearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/quebec-city/property/list":{"get":{"summary":"List Property","description":"List all properties with pagination, sorting, and value range filtering.\n\nUse this endpoint to browse available property records and discover valid roll numbers.\nReturns paginated results with total count for client-side pagination.\nSort by assessed_value with order=desc to find the most expensive properties.","operationId":"list_property_api_quebec_city_property_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft","title":"Sort By"},"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"asc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Property Api Quebec City Property List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/quebec-city/property/geojson":{"get":{"summary":"Property Geojson","operationId":"property_geojson_api_quebec_city_property_geojson_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500000,"minimum":1,"description":"Max features to return (cap prevents browser overload for large cities)","default":50000,"title":"Limit"},"description":"Max features to return (cap prevents browser overload for large cities)"},{"name":"sw_lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport south-west latitude","title":"Sw Lat"},"description":"Viewport south-west latitude"},{"name":"sw_lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport south-west longitude","title":"Sw Lon"},"description":"Viewport south-west longitude"},{"name":"ne_lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport north-east latitude","title":"Ne Lat"},"description":"Viewport north-east latitude"},{"name":"ne_lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport north-east longitude","title":"Ne Lon"},"description":"Viewport north-east longitude"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Offset for pagination through viewport results (use with limit)","default":0,"title":"Offset"},"description":"Offset for pagination through viewport results (use with limit)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/quebec-city/property/top":{"get":{"summary":"Top Property","description":"Get top-N properties sorted by any numeric column.\n\nConvenience endpoint for AI agents and dashboards. Returns the top\nN properties sorted by the given column. Defaults to most expensive\n(assessed_value descending). Combine with min_value/max_value to\nfind e.g. the most expensive residential properties.","operationId":"top_property_api_quebec_city_property_top_get","parameters":[{"name":"n","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Number of top properties to return","default":10,"title":"N"},"description":"Number of top properties to return"},{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","description":"Sort column: assessed_value, year_built, lot_size_sqft","default":"assessed_value","title":"Sort By"},"description":"Sort column: assessed_value, year_built, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"desc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Top Property Api Quebec City Property Top Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/quebec-city/property/stats":{"get":{"summary":"Property Stats","description":"Get property assessment statistics.","operationId":"property_stats_api_quebec_city_property_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/quebec-city/property/autocomplete":{"get":{"summary":"Property Autocomplete","description":"Get address and roll number suggestions for typeahead search.","operationId":"property_autocomplete_api_quebec_city_property_autocomplete_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"description":"Search query for address/roll number suggestions","title":"Q"},"description":"Search query for address/roll number suggestions"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":25,"minimum":1,"description":"Max suggestions to return","default":10,"title":"Limit"},"description":"Max suggestions to return"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/quebec-city/property/geocode":{"post":{"summary":"Property Geocode","description":"Geocode property addresses to lat/lon coordinates.\n\nAccepts a JSON body with 'addresses' (list of address strings, max 50).\nReturns cached results instantly; uncached addresses are geocoded via Nominatim.\n\nExample: {\"addresses\": [\"123 Main St\", \"456 Oak Ave\"]}","operationId":"property_geocode_api_quebec_city_property_geocode_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/quebec-city/property/by-dls":{"get":{"summary":"Get Property By Dls","description":"Get property assessment by DLS coordinates.","operationId":"get_property_by_dls_api_quebec_city_property_by_dls_get","parameters":[{"name":"quarter","in":"query","required":true,"schema":{"type":"string","description":"Quarter section (e.g., SW)","title":"Quarter"},"description":"Quarter section (e.g., SW)"},{"name":"section","in":"query","required":true,"schema":{"type":"integer","description":"Section number","title":"Section"},"description":"Section number"},{"name":"township","in":"query","required":true,"schema":{"type":"integer","description":"Township number","title":"Township"},"description":"Township number"},{"name":"range","in":"query","required":true,"schema":{"type":"integer","description":"Range number","title":"Range"},"description":"Range number"},{"name":"meridian","in":"query","required":true,"schema":{"type":"integer","description":"Meridian number","title":"Meridian"},"description":"Meridian number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyAssessment"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/quebec-city/property/by-gps":{"get":{"summary":"Get Property By Gps","description":"Find coordinate-bearing assessment records nearest a GPS point.\n\nResults are point-nearness matches unless the municipal source supplies\nparcel polygons; clients should not interpret proximity as legal parcel\ncontainment.","operationId":"get_property_by_gps_api_quebec_city_property_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":84.0,"minimum":41.0,"description":"Canadian latitude","title":"Lat"},"description":"Canadian latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":-52.0,"minimum":-142.0,"description":"Canadian longitude","title":"Lon"},"description":"Canadian longitude"},{"name":"radius_m","in":"query","required":false,"schema":{"type":"integer","maximum":5000,"minimum":1,"description":"Maximum point distance","default":100,"title":"Radius M"},"description":"Maximum point distance"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":10,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Property By Gps Api Quebec City Property By Gps Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/quebec-city/property/by-roll/{roll_number}":{"get":{"summary":"Get Property By Roll","description":"Get property assessment by roll number.","operationId":"get_property_by_roll_api_quebec_city_property_by_roll__roll_number__get","parameters":[{"name":"roll_number","in":"path","required":true,"schema":{"type":"string","description":"Property roll number","title":"Roll Number"},"description":"Property roll number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyAssessment"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/quebec-city/property/report":{"get":{"summary":"Property Report Lookup","description":"Consolidated report by roll number, address, or GPS.","operationId":"property_report_lookup_api_quebec_city_property_report_get","parameters":[{"name":"roll_number","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property roll number","title":"Roll Number"},"description":"Property roll number"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Street address","title":"Address"},"description":"Street address"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyReport"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/quebec-city/property/report/{roll_number}":{"get":{"summary":"Property Report","description":"Get consolidated property report: assessment + building permits + zoning + DLS.","operationId":"property_report_api_quebec_city_property_report__roll_number__get","parameters":[{"name":"roll_number","in":"path","required":true,"schema":{"type":"string","description":"Property roll number","title":"Roll Number"},"description":"Property roll number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyReport"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/quebec-city/property/batch":{"post":{"summary":"Get Properties Batch","description":"Get multiple properties by roll numbers in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of roll numbers.\nExample: {\"ids\": [\"123456789\", \"987654321\"]}\nMaximum 100 roll numbers per request.","operationId":"get_properties_batch_api_quebec_city_property_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Properties Batch Api Quebec City Property Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/quebec-city/property/export":{"get":{"summary":"Export Properties","description":"Export property data as CSV or GeoJSON.\n\nSupports filtering by address, property type, and assessed value range.\nMaximum 10,000 records per export.","operationId":"export_properties_api_quebec_city_property_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Address filter","title":"Address"},"description":"Address filter"},{"name":"property_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property type filter","title":"Property Type"},"description":"Property type filter"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum assessed value","title":"Min Value"},"description":"Minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum assessed value","title":"Max Value"},"description":"Maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/quebec-city/census/profile":{"get":{"summary":"Get Census Profile","description":"Get census profile for a specific Dissemination Area.\n\nProvide either da_id directly, OR lat+lon to find the nearest DA automatically.","operationId":"get_census_profile_api_quebec_city_census_profile_get","parameters":[{"name":"da_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Dissemination Area ID (e.g., 48820001)","title":"Da Id"},"description":"Dissemination Area ID (e.g., 48820001)"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude for nearest-DA lookup","title":"Lat"},"description":"Latitude for nearest-DA lookup"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude for nearest-DA lookup","title":"Lon"},"description":"Longitude for nearest-DA lookup"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusProfile"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/quebec-city/census/batch":{"post":{"summary":"Get Census Batch","description":"Get multiple census profiles by DA IDs in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of DA IDs.\nExample: {\"ids\": [\"48820001\", \"48820002\"]}\nMaximum 100 DA IDs per request.","operationId":"get_census_batch_api_quebec_city_census_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Census Batch Api Quebec City Census Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/quebec-city/census/export":{"get":{"summary":"Export Census","description":"Export census data as CSV.\n\nSupports filtering by population range and geography type.\nMaximum 10,000 records per export.","operationId":"export_census_api_quebec_city_census_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv only","default":"csv","title":"Format"},"description":"Export format: csv only"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"min_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Minimum population filter","title":"Min Population"},"description":"Minimum population filter"},{"name":"max_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Maximum population filter","title":"Max Population"},"description":"Maximum population filter"},{"name":"geography_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Geography type filter (DA, CT, CMA)","title":"Geography Type"},"description":"Geography type filter (DA, CT, CMA)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/quebec-city/census/list":{"get":{"summary":"List Census Profiles","description":"List all census profiles with pagination.\n\nUse this endpoint to browse available census profiles and discover valid DA IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_census_profiles_api_quebec_city_census_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Census Profiles Api Quebec City Census List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/quebec-city/census/by-gps":{"get":{"summary":"Get Census By Gps","description":"Get census data for GPS coordinates.","operationId":"get_census_by_gps_api_quebec_city_census_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90,"minimum":-90,"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":180,"minimum":-180,"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/quebec-city/census/by-dls":{"get":{"summary":"Get Census By Dls","description":"Get census data for DLS coordinates.","operationId":"get_census_by_dls_api_quebec_city_census_by_dls_get","parameters":[{"name":"dls","in":"query","required":true,"schema":{"type":"string","description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)","title":"Dls"},"description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/quebec-city/census/map-data":{"get":{"summary":"Get Census Map Data","description":"Get lightweight DA points for choropleth map rendering.\n\nReturns centroid coordinates and key metrics (income, age, population,\nhousehold size, employment rate) for all DAs in the city.\nUsed by the census dashboard to render color-coded maps.","operationId":"get_census_map_data_api_quebec_city_census_map_data_get","parameters":[{"name":"year","in":"query","required":false,"schema":{"type":"integer","description":"Census year for DA map data","default":2021,"title":"Year"},"description":"Census year for DA map data"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/quebec-city/census/stats":{"get":{"summary":"Census Stats","description":"Get census data statistics.","operationId":"census_stats_api_quebec_city_census_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/quebec-city/census/compare":{"get":{"summary":"Census Compare","description":"Compare key census metrics across multiple years.\n\nReturns side-by-side comparison of population, households,\navg_income, median_age, density, and land_area for each requested year.\nYears without data return null for that year's values.","operationId":"census_compare_api_quebec_city_census_compare_get","parameters":[{"name":"years","in":"query","required":false,"schema":{"type":"string","description":"Comma-separated census years (e.g., 2016,2021)","default":"2021","title":"Years"},"description":"Comma-separated census years (e.g., 2016,2021)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/quebec-city/census/time-series":{"get":{"summary":"Census Timeseries","description":"Get year-by-year census trends for this city.\n\nReturns population, income, age, and household trends across all\navailable census years. Useful for spotting long-term demographic shifts.","operationId":"census_timeseries_api_quebec_city_census_time_series_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/quebec-city/geography/list":{"get":{"summary":"Geography List","description":"List geography boundaries for this city.","operationId":"geography_list_api_quebec_city_geography_list_get","parameters":[{"name":"type","in":"query","required":false,"schema":{"type":"string","title":"Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/quebec-city/geography/by-gps":{"get":{"summary":"Geography By Gps","description":"Find the geography boundary containing a GPS point.","operationId":"geography_by_gps_api_quebec_city_geography_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","title":"Lat"}},{"name":"lon","in":"query","required":true,"schema":{"type":"number","title":"Lon"}},{"name":"type","in":"query","required":false,"schema":{"type":"string","default":"DA","title":"Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/quebec-city/geography/stats":{"get":{"summary":"Geography Stats","description":"Get geography statistics for this city.","operationId":"geography_stats_api_quebec_city_geography_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/quebec-city/geography/{geoid}":{"get":{"summary":"Geography Boundary","description":"Get a specific geography boundary by geoid, including GeoJSON polygon.","operationId":"geography_boundary_api_quebec_city_geography__geoid__get","parameters":[{"name":"geoid","in":"path","required":true,"schema":{"type":"string","title":"Geoid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/quebec-city/census/rental/list":{"get":{"summary":"List Rental Prices","description":"List rental price records for this city, with optional unit type filter.","operationId":"list_rental_prices_api_quebec_city_census_rental_list_get","parameters":[{"name":"unit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":50,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalPriceListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/quebec-city/census/rental/trend":{"get":{"summary":"Get Rental Trend","description":"Get rental price time series for a specific unit type.","operationId":"get_rental_trend_api_quebec_city_census_rental_trend_get","parameters":[{"name":"unit_type","in":"query","required":true,"schema":{"type":"string","description":"Rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Rental unit type (e.g. 'Apartment - 1 bedroom')"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalTrendResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/quebec-city/census/rental/types":{"get":{"summary":"Get Rental Types","description":"Get available rental unit types for this city.","operationId":"get_rental_types_api_quebec_city_census_rental_types_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/quebec-city/zoning/by-gps":{"get":{"summary":"Get Zoning By Gps","description":"Get zoning district for GPS coordinates.","operationId":"get_zoning_by_gps_api_quebec_city_zoning_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZoningByGPSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/quebec-city/zoning/by-id/{district_id}":{"get":{"summary":"Get Zoning By Id","description":"Get a single zoning district by its numeric ID.","operationId":"get_zoning_by_id_api_quebec_city_zoning_by_id__district_id__get","parameters":[{"name":"district_id","in":"path","required":true,"schema":{"type":"integer","description":"Zoning district numeric ID","title":"District Id"},"description":"Zoning district numeric ID"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning By Id Api Quebec City Zoning By Id  District Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/quebec-city/zoning/by-code/{code}":{"get":{"summary":"Get Zoning By Code","description":"Get all districts with a specific zone code.","operationId":"get_zoning_by_code_api_quebec_city_zoning_by_code__code__get","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","description":"Zone code (e.g., C-C1, R-G)","title":"Code"},"description":"Zone code (e.g., C-C1, R-G)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoningDistrict"},"title":"Response Get Zoning By Code Api Quebec City Zoning By Code  Code  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/quebec-city/zoning/batch":{"post":{"summary":"Get Zoning Batch","description":"Get multiple zoning districts by zone codes in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of zone codes.\nExample: {\"ids\": [\"CR20-C20/R20\", \"C-C1\", \"R-G\"]}\nMaximum 100 zone codes per request.","operationId":"get_zoning_batch_api_quebec_city_zoning_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning Batch Api Quebec City Zoning Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/quebec-city/zoning/list":{"get":{"summary":"List Zoning Districts","description":"List all zoning districts with pagination.\n\nUse this endpoint to browse available zoning districts and discover valid IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_zoning_districts_api_quebec_city_zoning_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Zoning Districts Api Quebec City Zoning List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/quebec-city/zoning/codes":{"get":{"summary":"List Zone Codes","description":"List all zone codes with descriptions.","operationId":"list_zone_codes_api_quebec_city_zoning_codes_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"type":"string","description":"Filter by major category (e.g., Commercial, Residential)","title":"Category"},"description":"Filter by major category (e.g., Commercial, Residential)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoneCodeInfo"},"title":"Response List Zone Codes Api Quebec City Zoning Codes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/quebec-city/zoning/stats":{"get":{"summary":"Zoning Stats","description":"Get zoning statistics.","operationId":"zoning_stats_api_quebec_city_zoning_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/quebec-city/zoning/export":{"get":{"summary":"Export Zoning","description":"Export zoning district data as CSV or GeoJSON.\n\nSupports filtering by zone code, category, and area range.\nMaximum 10,000 records per export.","operationId":"export_zoning_api_quebec_city_zoning_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"zone_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Zone code filter (e.g., CR2)","title":"Zone Code"},"description":"Zone code filter (e.g., CR2)"},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Major category filter","title":"Category"},"description":"Major category filter"},{"name":"min_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum area in sq km","title":"Min Area"},"description":"Minimum area in sq km"},{"name":"max_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum area in sq km","title":"Max Area"},"description":"Maximum area in sq km"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/quebec-city/permits/stats":{"get":{"summary":"Building Stats","description":"Get building permit statistics.","operationId":"building_stats_api_quebec_city_permits_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/quebec-city/permits/search":{"get":{"summary":"Search Building Permits","description":"Search building permits by address, contractor, applicant, permit number, and/or permit type.","operationId":"search_building_permits_api_quebec_city_permits_search_get","parameters":[{"name":"address","in":"query","required":false,"schema":{"type":"string","description":"Address to search","title":"Address"},"description":"Address to search"},{"name":"q","in":"query","required":false,"schema":{"type":"string","description":"General text search (address, contractor, applicant, permit #)","title":"Q"},"description":"General text search (address, contractor, applicant, permit #)"},{"name":"permit_type","in":"query","required":false,"schema":{"type":"string","description":"Filter by permit type","title":"Permit Type"},"description":"Filter by permit type"},{"name":"bbox","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bounding box: min_lon,min_lat,max_lon,max_lat","title":"Bbox"},"description":"Bounding box: min_lon,min_lat,max_lon,max_lat"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max results","default":20,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset","default":0,"title":"Offset"},"description":"Results offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/quebec-city/permits/nearby":{"get":{"summary":"Nearby Building Permits","description":"Coordinate-first alias for nearby building permits.","operationId":"nearby_building_permits_api_quebec_city_permits_nearby_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":84.0,"minimum":41.0,"description":"Canadian latitude","title":"Lat"},"description":"Canadian latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":-52.0,"minimum":-142.0,"description":"Canadian longitude","title":"Lon"},"description":"Canadian longitude"},{"name":"radius_m","in":"query","required":false,"schema":{"type":"integer","maximum":50000,"minimum":1,"default":1000,"title":"Radius M"}},{"name":"permit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Permit Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/quebec-city/permits/export":{"get":{"summary":"Export Building Permits","description":"Export building permit data as CSV or GeoJSON.\n\nSupports filtering by address, permit type, and date range.\nMaximum 10,000 records per export.","operationId":"export_building_permits_api_quebec_city_permits_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Address filter","title":"Address"},"description":"Address filter"},{"name":"permit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Permit type filter","title":"Permit Type"},"description":"Permit type filter"},{"name":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Start date (YYYY-MM-DD)","title":"Date From"},"description":"Start date (YYYY-MM-DD)"},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"End date (YYYY-MM-DD)","title":"Date To"},"description":"End date (YYYY-MM-DD)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/quebec-city/permits/recent":{"get":{"summary":"Recent Building Permits","description":"Get recent building permits sorted by application date (newest first).\n\nUse this to see where construction activity is happening right now.","operationId":"recent_building_permits_api_quebec_city_permits_recent_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Max results","default":20,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset","default":0,"title":"Offset"},"description":"Results offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/quebec-city/permits/batch":{"post":{"summary":"Get Building Permits Batch","description":"Get multiple building permits by permit numbers in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of permit numbers.\nExample: {\"ids\": [\"BP123456\", \"BP789012\"]}\nMaximum 100 permit numbers per request.","operationId":"get_building_permits_batch_api_quebec_city_permits_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Building Permits Batch Api Quebec City Permits Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/quebec-city/permits/{permit_number}":{"get":{"summary":"Get Building Permit","description":"Get building permit details by permit number.\n\nServes HTML for browsers, JSON for API clients.","operationId":"get_building_permit_api_quebec_city_permits__permit_number__get","parameters":[{"name":"permit_number","in":"path","required":true,"schema":{"type":"string","description":"Permit number","title":"Permit Number"},"description":"Permit number"},{"name":"_city_name","in":"query","required":false,"schema":{"default":"Quebec City","title":" City Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/quebec-city/health":{"get":{"summary":"City Health","description":"City-specific health check.","operationId":"city_health_api_quebec_city_health_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/hamilton/entries/{kind}":{"get":{"summary":"List Entries","operationId":"list_entries_api_hamilton_entries__kind__get","parameters":[{"name":"kind","in":"path","required":true,"schema":{"type":"string","description":"Canonical entry kind: property, permit, zoning, or safety","title":"Kind"},"description":"Canonical entry kind: property, permit, zoning, or safety"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"_services","in":"query","required":false,"schema":{"title":" Services"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Entries Api Hamilton Entries  Kind  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/hamilton/property/search":{"get":{"summary":"Search Property","description":"Search for properties by address, or browse all if no address specified.\nSupports sorting by assessed_value, address, year_built, community, or lot_size_sqft.\nSupports value range filtering with min_value and max_value.\n Supports property_type and year range filters.","operationId":"search_property_api_hamilton_property_search_get","parameters":[{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Street address to search (omit to browse all)","title":"Address"},"description":"Street address to search (omit to browse all)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max results to return (up to 1000 for map browse)","default":10,"title":"Limit"},"description":"Max results to return (up to 1000 for map browse)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset for pagination","default":0,"title":"Offset"},"description":"Results offset for pagination"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft","title":"Sort By"},"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"asc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"},{"name":"property_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property type filter (e.g. RE, Residential)","title":"Property Type"},"description":"Property type filter (e.g. RE, Residential)"},{"name":"min_year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter: minimum year built","title":"Min Year"},"description":"Filter: minimum year built"},{"name":"max_year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter: maximum year built","title":"Max Year"},"description":"Filter: maximum year built"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertySearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/hamilton/property/list":{"get":{"summary":"List Property","description":"List all properties with pagination, sorting, and value range filtering.\n\nUse this endpoint to browse available property records and discover valid roll numbers.\nReturns paginated results with total count for client-side pagination.\nSort by assessed_value with order=desc to find the most expensive properties.","operationId":"list_property_api_hamilton_property_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft","title":"Sort By"},"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"asc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Property Api Hamilton Property List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/hamilton/property/geojson":{"get":{"summary":"Property Geojson","operationId":"property_geojson_api_hamilton_property_geojson_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500000,"minimum":1,"description":"Max features to return (cap prevents browser overload for large cities)","default":50000,"title":"Limit"},"description":"Max features to return (cap prevents browser overload for large cities)"},{"name":"sw_lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport south-west latitude","title":"Sw Lat"},"description":"Viewport south-west latitude"},{"name":"sw_lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport south-west longitude","title":"Sw Lon"},"description":"Viewport south-west longitude"},{"name":"ne_lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport north-east latitude","title":"Ne Lat"},"description":"Viewport north-east latitude"},{"name":"ne_lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport north-east longitude","title":"Ne Lon"},"description":"Viewport north-east longitude"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Offset for pagination through viewport results (use with limit)","default":0,"title":"Offset"},"description":"Offset for pagination through viewport results (use with limit)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/hamilton/property/top":{"get":{"summary":"Top Property","description":"Get top-N properties sorted by any numeric column.\n\nConvenience endpoint for AI agents and dashboards. Returns the top\nN properties sorted by the given column. Defaults to most expensive\n(assessed_value descending). Combine with min_value/max_value to\nfind e.g. the most expensive residential properties.","operationId":"top_property_api_hamilton_property_top_get","parameters":[{"name":"n","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Number of top properties to return","default":10,"title":"N"},"description":"Number of top properties to return"},{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","description":"Sort column: assessed_value, year_built, lot_size_sqft","default":"assessed_value","title":"Sort By"},"description":"Sort column: assessed_value, year_built, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"desc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Top Property Api Hamilton Property Top Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/hamilton/property/stats":{"get":{"summary":"Property Stats","description":"Get property assessment statistics.","operationId":"property_stats_api_hamilton_property_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/hamilton/property/autocomplete":{"get":{"summary":"Property Autocomplete","description":"Get address and roll number suggestions for typeahead search.","operationId":"property_autocomplete_api_hamilton_property_autocomplete_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"description":"Search query for address/roll number suggestions","title":"Q"},"description":"Search query for address/roll number suggestions"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":25,"minimum":1,"description":"Max suggestions to return","default":10,"title":"Limit"},"description":"Max suggestions to return"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/hamilton/property/geocode":{"post":{"summary":"Property Geocode","description":"Geocode property addresses to lat/lon coordinates.\n\nAccepts a JSON body with 'addresses' (list of address strings, max 50).\nReturns cached results instantly; uncached addresses are geocoded via Nominatim.\n\nExample: {\"addresses\": [\"123 Main St\", \"456 Oak Ave\"]}","operationId":"property_geocode_api_hamilton_property_geocode_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/hamilton/property/by-dls":{"get":{"summary":"Get Property By Dls","description":"Get property assessment by DLS coordinates.","operationId":"get_property_by_dls_api_hamilton_property_by_dls_get","parameters":[{"name":"quarter","in":"query","required":true,"schema":{"type":"string","description":"Quarter section (e.g., SW)","title":"Quarter"},"description":"Quarter section (e.g., SW)"},{"name":"section","in":"query","required":true,"schema":{"type":"integer","description":"Section number","title":"Section"},"description":"Section number"},{"name":"township","in":"query","required":true,"schema":{"type":"integer","description":"Township number","title":"Township"},"description":"Township number"},{"name":"range","in":"query","required":true,"schema":{"type":"integer","description":"Range number","title":"Range"},"description":"Range number"},{"name":"meridian","in":"query","required":true,"schema":{"type":"integer","description":"Meridian number","title":"Meridian"},"description":"Meridian number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyAssessment"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/hamilton/property/by-gps":{"get":{"summary":"Get Property By Gps","description":"Find coordinate-bearing assessment records nearest a GPS point.\n\nResults are point-nearness matches unless the municipal source supplies\nparcel polygons; clients should not interpret proximity as legal parcel\ncontainment.","operationId":"get_property_by_gps_api_hamilton_property_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":84.0,"minimum":41.0,"description":"Canadian latitude","title":"Lat"},"description":"Canadian latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":-52.0,"minimum":-142.0,"description":"Canadian longitude","title":"Lon"},"description":"Canadian longitude"},{"name":"radius_m","in":"query","required":false,"schema":{"type":"integer","maximum":5000,"minimum":1,"description":"Maximum point distance","default":100,"title":"Radius M"},"description":"Maximum point distance"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":10,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Property By Gps Api Hamilton Property By Gps Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/hamilton/property/by-roll/{roll_number}":{"get":{"summary":"Get Property By Roll","description":"Get property assessment by roll number.","operationId":"get_property_by_roll_api_hamilton_property_by_roll__roll_number__get","parameters":[{"name":"roll_number","in":"path","required":true,"schema":{"type":"string","description":"Property roll number","title":"Roll Number"},"description":"Property roll number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyAssessment"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/hamilton/property/report":{"get":{"summary":"Property Report Lookup","description":"Consolidated report by roll number, address, or GPS.","operationId":"property_report_lookup_api_hamilton_property_report_get","parameters":[{"name":"roll_number","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property roll number","title":"Roll Number"},"description":"Property roll number"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Street address","title":"Address"},"description":"Street address"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyReport"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/hamilton/property/report/{roll_number}":{"get":{"summary":"Property Report","description":"Get consolidated property report: assessment + building permits + zoning + DLS.","operationId":"property_report_api_hamilton_property_report__roll_number__get","parameters":[{"name":"roll_number","in":"path","required":true,"schema":{"type":"string","description":"Property roll number","title":"Roll Number"},"description":"Property roll number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyReport"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/hamilton/property/batch":{"post":{"summary":"Get Properties Batch","description":"Get multiple properties by roll numbers in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of roll numbers.\nExample: {\"ids\": [\"123456789\", \"987654321\"]}\nMaximum 100 roll numbers per request.","operationId":"get_properties_batch_api_hamilton_property_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Properties Batch Api Hamilton Property Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/hamilton/property/export":{"get":{"summary":"Export Properties","description":"Export property data as CSV or GeoJSON.\n\nSupports filtering by address, property type, and assessed value range.\nMaximum 10,000 records per export.","operationId":"export_properties_api_hamilton_property_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Address filter","title":"Address"},"description":"Address filter"},{"name":"property_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property type filter","title":"Property Type"},"description":"Property type filter"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum assessed value","title":"Min Value"},"description":"Minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum assessed value","title":"Max Value"},"description":"Maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/hamilton/census/profile":{"get":{"summary":"Get Census Profile","description":"Get census profile for a specific Dissemination Area.\n\nProvide either da_id directly, OR lat+lon to find the nearest DA automatically.","operationId":"get_census_profile_api_hamilton_census_profile_get","parameters":[{"name":"da_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Dissemination Area ID (e.g., 48820001)","title":"Da Id"},"description":"Dissemination Area ID (e.g., 48820001)"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude for nearest-DA lookup","title":"Lat"},"description":"Latitude for nearest-DA lookup"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude for nearest-DA lookup","title":"Lon"},"description":"Longitude for nearest-DA lookup"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusProfile"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/hamilton/census/batch":{"post":{"summary":"Get Census Batch","description":"Get multiple census profiles by DA IDs in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of DA IDs.\nExample: {\"ids\": [\"48820001\", \"48820002\"]}\nMaximum 100 DA IDs per request.","operationId":"get_census_batch_api_hamilton_census_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Census Batch Api Hamilton Census Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/hamilton/census/export":{"get":{"summary":"Export Census","description":"Export census data as CSV.\n\nSupports filtering by population range and geography type.\nMaximum 10,000 records per export.","operationId":"export_census_api_hamilton_census_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv only","default":"csv","title":"Format"},"description":"Export format: csv only"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"min_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Minimum population filter","title":"Min Population"},"description":"Minimum population filter"},{"name":"max_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Maximum population filter","title":"Max Population"},"description":"Maximum population filter"},{"name":"geography_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Geography type filter (DA, CT, CMA)","title":"Geography Type"},"description":"Geography type filter (DA, CT, CMA)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/hamilton/census/list":{"get":{"summary":"List Census Profiles","description":"List all census profiles with pagination.\n\nUse this endpoint to browse available census profiles and discover valid DA IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_census_profiles_api_hamilton_census_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Census Profiles Api Hamilton Census List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/hamilton/census/by-gps":{"get":{"summary":"Get Census By Gps","description":"Get census data for GPS coordinates.","operationId":"get_census_by_gps_api_hamilton_census_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90,"minimum":-90,"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":180,"minimum":-180,"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/hamilton/census/by-dls":{"get":{"summary":"Get Census By Dls","description":"Get census data for DLS coordinates.","operationId":"get_census_by_dls_api_hamilton_census_by_dls_get","parameters":[{"name":"dls","in":"query","required":true,"schema":{"type":"string","description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)","title":"Dls"},"description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/hamilton/census/map-data":{"get":{"summary":"Get Census Map Data","description":"Get lightweight DA points for choropleth map rendering.\n\nReturns centroid coordinates and key metrics (income, age, population,\nhousehold size, employment rate) for all DAs in the city.\nUsed by the census dashboard to render color-coded maps.","operationId":"get_census_map_data_api_hamilton_census_map_data_get","parameters":[{"name":"year","in":"query","required":false,"schema":{"type":"integer","description":"Census year for DA map data","default":2021,"title":"Year"},"description":"Census year for DA map data"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/hamilton/census/stats":{"get":{"summary":"Census Stats","description":"Get census data statistics.","operationId":"census_stats_api_hamilton_census_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/hamilton/census/compare":{"get":{"summary":"Census Compare","description":"Compare key census metrics across multiple years.\n\nReturns side-by-side comparison of population, households,\navg_income, median_age, density, and land_area for each requested year.\nYears without data return null for that year's values.","operationId":"census_compare_api_hamilton_census_compare_get","parameters":[{"name":"years","in":"query","required":false,"schema":{"type":"string","description":"Comma-separated census years (e.g., 2016,2021)","default":"2021","title":"Years"},"description":"Comma-separated census years (e.g., 2016,2021)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/hamilton/census/time-series":{"get":{"summary":"Census Timeseries","description":"Get year-by-year census trends for this city.\n\nReturns population, income, age, and household trends across all\navailable census years. Useful for spotting long-term demographic shifts.","operationId":"census_timeseries_api_hamilton_census_time_series_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/hamilton/geography/list":{"get":{"summary":"Geography List","description":"List geography boundaries for this city.","operationId":"geography_list_api_hamilton_geography_list_get","parameters":[{"name":"type","in":"query","required":false,"schema":{"type":"string","title":"Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/hamilton/geography/by-gps":{"get":{"summary":"Geography By Gps","description":"Find the geography boundary containing a GPS point.","operationId":"geography_by_gps_api_hamilton_geography_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","title":"Lat"}},{"name":"lon","in":"query","required":true,"schema":{"type":"number","title":"Lon"}},{"name":"type","in":"query","required":false,"schema":{"type":"string","default":"DA","title":"Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/hamilton/geography/stats":{"get":{"summary":"Geography Stats","description":"Get geography statistics for this city.","operationId":"geography_stats_api_hamilton_geography_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/hamilton/geography/{geoid}":{"get":{"summary":"Geography Boundary","description":"Get a specific geography boundary by geoid, including GeoJSON polygon.","operationId":"geography_boundary_api_hamilton_geography__geoid__get","parameters":[{"name":"geoid","in":"path","required":true,"schema":{"type":"string","title":"Geoid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/hamilton/census/rental/list":{"get":{"summary":"List Rental Prices","description":"List rental price records for this city, with optional unit type filter.","operationId":"list_rental_prices_api_hamilton_census_rental_list_get","parameters":[{"name":"unit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":50,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalPriceListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/hamilton/census/rental/trend":{"get":{"summary":"Get Rental Trend","description":"Get rental price time series for a specific unit type.","operationId":"get_rental_trend_api_hamilton_census_rental_trend_get","parameters":[{"name":"unit_type","in":"query","required":true,"schema":{"type":"string","description":"Rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Rental unit type (e.g. 'Apartment - 1 bedroom')"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalTrendResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/hamilton/census/rental/types":{"get":{"summary":"Get Rental Types","description":"Get available rental unit types for this city.","operationId":"get_rental_types_api_hamilton_census_rental_types_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/hamilton/zoning/by-gps":{"get":{"summary":"Get Zoning By Gps","description":"Get zoning district for GPS coordinates.","operationId":"get_zoning_by_gps_api_hamilton_zoning_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZoningByGPSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/hamilton/zoning/by-id/{district_id}":{"get":{"summary":"Get Zoning By Id","description":"Get a single zoning district by its numeric ID.","operationId":"get_zoning_by_id_api_hamilton_zoning_by_id__district_id__get","parameters":[{"name":"district_id","in":"path","required":true,"schema":{"type":"integer","description":"Zoning district numeric ID","title":"District Id"},"description":"Zoning district numeric ID"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning By Id Api Hamilton Zoning By Id  District Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/hamilton/zoning/by-code/{code}":{"get":{"summary":"Get Zoning By Code","description":"Get all districts with a specific zone code.","operationId":"get_zoning_by_code_api_hamilton_zoning_by_code__code__get","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","description":"Zone code (e.g., C-C1, R-G)","title":"Code"},"description":"Zone code (e.g., C-C1, R-G)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoningDistrict"},"title":"Response Get Zoning By Code Api Hamilton Zoning By Code  Code  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/hamilton/zoning/batch":{"post":{"summary":"Get Zoning Batch","description":"Get multiple zoning districts by zone codes in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of zone codes.\nExample: {\"ids\": [\"CR20-C20/R20\", \"C-C1\", \"R-G\"]}\nMaximum 100 zone codes per request.","operationId":"get_zoning_batch_api_hamilton_zoning_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning Batch Api Hamilton Zoning Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/hamilton/zoning/list":{"get":{"summary":"List Zoning Districts","description":"List all zoning districts with pagination.\n\nUse this endpoint to browse available zoning districts and discover valid IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_zoning_districts_api_hamilton_zoning_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Zoning Districts Api Hamilton Zoning List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/hamilton/zoning/codes":{"get":{"summary":"List Zone Codes","description":"List all zone codes with descriptions.","operationId":"list_zone_codes_api_hamilton_zoning_codes_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"type":"string","description":"Filter by major category (e.g., Commercial, Residential)","title":"Category"},"description":"Filter by major category (e.g., Commercial, Residential)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoneCodeInfo"},"title":"Response List Zone Codes Api Hamilton Zoning Codes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/hamilton/zoning/stats":{"get":{"summary":"Zoning Stats","description":"Get zoning statistics.","operationId":"zoning_stats_api_hamilton_zoning_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/hamilton/zoning/export":{"get":{"summary":"Export Zoning","description":"Export zoning district data as CSV or GeoJSON.\n\nSupports filtering by zone code, category, and area range.\nMaximum 10,000 records per export.","operationId":"export_zoning_api_hamilton_zoning_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"zone_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Zone code filter (e.g., CR2)","title":"Zone Code"},"description":"Zone code filter (e.g., CR2)"},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Major category filter","title":"Category"},"description":"Major category filter"},{"name":"min_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum area in sq km","title":"Min Area"},"description":"Minimum area in sq km"},{"name":"max_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum area in sq km","title":"Max Area"},"description":"Maximum area in sq km"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/hamilton/permits/stats":{"get":{"summary":"Building Stats","description":"Get building permit statistics.","operationId":"building_stats_api_hamilton_permits_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/hamilton/permits/search":{"get":{"summary":"Search Building Permits","description":"Search building permits by address, contractor, applicant, permit number, and/or permit type.","operationId":"search_building_permits_api_hamilton_permits_search_get","parameters":[{"name":"address","in":"query","required":false,"schema":{"type":"string","description":"Address to search","title":"Address"},"description":"Address to search"},{"name":"q","in":"query","required":false,"schema":{"type":"string","description":"General text search (address, contractor, applicant, permit #)","title":"Q"},"description":"General text search (address, contractor, applicant, permit #)"},{"name":"permit_type","in":"query","required":false,"schema":{"type":"string","description":"Filter by permit type","title":"Permit Type"},"description":"Filter by permit type"},{"name":"bbox","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bounding box: min_lon,min_lat,max_lon,max_lat","title":"Bbox"},"description":"Bounding box: min_lon,min_lat,max_lon,max_lat"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max results","default":20,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset","default":0,"title":"Offset"},"description":"Results offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/hamilton/permits/nearby":{"get":{"summary":"Nearby Building Permits","description":"Coordinate-first alias for nearby building permits.","operationId":"nearby_building_permits_api_hamilton_permits_nearby_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":84.0,"minimum":41.0,"description":"Canadian latitude","title":"Lat"},"description":"Canadian latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":-52.0,"minimum":-142.0,"description":"Canadian longitude","title":"Lon"},"description":"Canadian longitude"},{"name":"radius_m","in":"query","required":false,"schema":{"type":"integer","maximum":50000,"minimum":1,"default":1000,"title":"Radius M"}},{"name":"permit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Permit Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/hamilton/permits/export":{"get":{"summary":"Export Building Permits","description":"Export building permit data as CSV or GeoJSON.\n\nSupports filtering by address, permit type, and date range.\nMaximum 10,000 records per export.","operationId":"export_building_permits_api_hamilton_permits_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Address filter","title":"Address"},"description":"Address filter"},{"name":"permit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Permit type filter","title":"Permit Type"},"description":"Permit type filter"},{"name":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Start date (YYYY-MM-DD)","title":"Date From"},"description":"Start date (YYYY-MM-DD)"},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"End date (YYYY-MM-DD)","title":"Date To"},"description":"End date (YYYY-MM-DD)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/hamilton/permits/recent":{"get":{"summary":"Recent Building Permits","description":"Get recent building permits sorted by application date (newest first).\n\nUse this to see where construction activity is happening right now.","operationId":"recent_building_permits_api_hamilton_permits_recent_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Max results","default":20,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset","default":0,"title":"Offset"},"description":"Results offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/hamilton/permits/batch":{"post":{"summary":"Get Building Permits Batch","description":"Get multiple building permits by permit numbers in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of permit numbers.\nExample: {\"ids\": [\"BP123456\", \"BP789012\"]}\nMaximum 100 permit numbers per request.","operationId":"get_building_permits_batch_api_hamilton_permits_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Building Permits Batch Api Hamilton Permits Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/hamilton/permits/{permit_number}":{"get":{"summary":"Get Building Permit","description":"Get building permit details by permit number.\n\nServes HTML for browsers, JSON for API clients.","operationId":"get_building_permit_api_hamilton_permits__permit_number__get","parameters":[{"name":"permit_number","in":"path","required":true,"schema":{"type":"string","description":"Permit number","title":"Permit Number"},"description":"Permit number"},{"name":"_city_name","in":"query","required":false,"schema":{"default":"Hamilton","title":" City Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/hamilton/safety/search":{"get":{"summary":"Search Safety","operationId":"search_safety_api_hamilton_safety_search_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Q"}},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"}},{"name":"neighbourhood","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Neighbourhood"}},{"name":"start","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Start"}},{"name":"end","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"End"}},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lat"}},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lon"}},{"name":"radius_m","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Radius M"}},{"name":"bbox","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bbox"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SafetySearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/hamilton/safety/nearby":{"get":{"summary":"Nearby Safety","description":"Coordinate-first alias for nearby public safety records.","operationId":"nearby_safety_api_hamilton_safety_nearby_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":84.0,"minimum":41.0,"description":"Canadian latitude","title":"Lat"},"description":"Canadian latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":-52.0,"minimum":-142.0,"description":"Canadian longitude","title":"Lon"},"description":"Canadian longitude"},{"name":"radius_m","in":"query","required":false,"schema":{"type":"integer","maximum":50000,"minimum":1,"default":1000,"title":"Radius M"}},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"}},{"name":"start","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Start"}},{"name":"end","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"End"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SafetySearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/hamilton/safety/stats":{"get":{"summary":"Safety Stats","operationId":"safety_stats_api_hamilton_safety_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SafetyStats"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/hamilton/safety/{source_record_id}":{"get":{"summary":"Safety By Id","operationId":"safety_by_id_api_hamilton_safety__source_record_id__get","parameters":[{"name":"source_record_id","in":"path","required":true,"schema":{"type":"string","title":"Source Record Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/hamilton/health":{"get":{"summary":"City Health","description":"City-specific health check.","operationId":"city_health_api_hamilton_health_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kitchener/entries/{kind}":{"get":{"summary":"List Entries","operationId":"list_entries_api_kitchener_entries__kind__get","parameters":[{"name":"kind","in":"path","required":true,"schema":{"type":"string","description":"Canonical entry kind: property, permit, zoning, or safety","title":"Kind"},"description":"Canonical entry kind: property, permit, zoning, or safety"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"_services","in":"query","required":false,"schema":{"title":" Services"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Entries Api Kitchener Entries  Kind  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kitchener/property/search":{"get":{"summary":"Search Property","description":"Search for properties by address, or browse all if no address specified.\nSupports sorting by assessed_value, address, year_built, community, or lot_size_sqft.\nSupports value range filtering with min_value and max_value.\n Supports property_type and year range filters.","operationId":"search_property_api_kitchener_property_search_get","parameters":[{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Street address to search (omit to browse all)","title":"Address"},"description":"Street address to search (omit to browse all)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max results to return (up to 1000 for map browse)","default":10,"title":"Limit"},"description":"Max results to return (up to 1000 for map browse)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset for pagination","default":0,"title":"Offset"},"description":"Results offset for pagination"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft","title":"Sort By"},"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"asc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"},{"name":"property_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property type filter (e.g. RE, Residential)","title":"Property Type"},"description":"Property type filter (e.g. RE, Residential)"},{"name":"min_year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter: minimum year built","title":"Min Year"},"description":"Filter: minimum year built"},{"name":"max_year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter: maximum year built","title":"Max Year"},"description":"Filter: maximum year built"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertySearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kitchener/property/list":{"get":{"summary":"List Property","description":"List all properties with pagination, sorting, and value range filtering.\n\nUse this endpoint to browse available property records and discover valid roll numbers.\nReturns paginated results with total count for client-side pagination.\nSort by assessed_value with order=desc to find the most expensive properties.","operationId":"list_property_api_kitchener_property_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft","title":"Sort By"},"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"asc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Property Api Kitchener Property List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kitchener/property/geojson":{"get":{"summary":"Property Geojson","operationId":"property_geojson_api_kitchener_property_geojson_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500000,"minimum":1,"description":"Max features to return (cap prevents browser overload for large cities)","default":50000,"title":"Limit"},"description":"Max features to return (cap prevents browser overload for large cities)"},{"name":"sw_lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport south-west latitude","title":"Sw Lat"},"description":"Viewport south-west latitude"},{"name":"sw_lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport south-west longitude","title":"Sw Lon"},"description":"Viewport south-west longitude"},{"name":"ne_lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport north-east latitude","title":"Ne Lat"},"description":"Viewport north-east latitude"},{"name":"ne_lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport north-east longitude","title":"Ne Lon"},"description":"Viewport north-east longitude"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Offset for pagination through viewport results (use with limit)","default":0,"title":"Offset"},"description":"Offset for pagination through viewport results (use with limit)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kitchener/property/top":{"get":{"summary":"Top Property","description":"Get top-N properties sorted by any numeric column.\n\nConvenience endpoint for AI agents and dashboards. Returns the top\nN properties sorted by the given column. Defaults to most expensive\n(assessed_value descending). Combine with min_value/max_value to\nfind e.g. the most expensive residential properties.","operationId":"top_property_api_kitchener_property_top_get","parameters":[{"name":"n","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Number of top properties to return","default":10,"title":"N"},"description":"Number of top properties to return"},{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","description":"Sort column: assessed_value, year_built, lot_size_sqft","default":"assessed_value","title":"Sort By"},"description":"Sort column: assessed_value, year_built, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"desc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Top Property Api Kitchener Property Top Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kitchener/property/stats":{"get":{"summary":"Property Stats","description":"Get property assessment statistics.","operationId":"property_stats_api_kitchener_property_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kitchener/property/autocomplete":{"get":{"summary":"Property Autocomplete","description":"Get address and roll number suggestions for typeahead search.","operationId":"property_autocomplete_api_kitchener_property_autocomplete_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"description":"Search query for address/roll number suggestions","title":"Q"},"description":"Search query for address/roll number suggestions"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":25,"minimum":1,"description":"Max suggestions to return","default":10,"title":"Limit"},"description":"Max suggestions to return"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kitchener/property/geocode":{"post":{"summary":"Property Geocode","description":"Geocode property addresses to lat/lon coordinates.\n\nAccepts a JSON body with 'addresses' (list of address strings, max 50).\nReturns cached results instantly; uncached addresses are geocoded via Nominatim.\n\nExample: {\"addresses\": [\"123 Main St\", \"456 Oak Ave\"]}","operationId":"property_geocode_api_kitchener_property_geocode_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kitchener/property/by-dls":{"get":{"summary":"Get Property By Dls","description":"Get property assessment by DLS coordinates.","operationId":"get_property_by_dls_api_kitchener_property_by_dls_get","parameters":[{"name":"quarter","in":"query","required":true,"schema":{"type":"string","description":"Quarter section (e.g., SW)","title":"Quarter"},"description":"Quarter section (e.g., SW)"},{"name":"section","in":"query","required":true,"schema":{"type":"integer","description":"Section number","title":"Section"},"description":"Section number"},{"name":"township","in":"query","required":true,"schema":{"type":"integer","description":"Township number","title":"Township"},"description":"Township number"},{"name":"range","in":"query","required":true,"schema":{"type":"integer","description":"Range number","title":"Range"},"description":"Range number"},{"name":"meridian","in":"query","required":true,"schema":{"type":"integer","description":"Meridian number","title":"Meridian"},"description":"Meridian number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyAssessment"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kitchener/property/by-gps":{"get":{"summary":"Get Property By Gps","description":"Find coordinate-bearing assessment records nearest a GPS point.\n\nResults are point-nearness matches unless the municipal source supplies\nparcel polygons; clients should not interpret proximity as legal parcel\ncontainment.","operationId":"get_property_by_gps_api_kitchener_property_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":84.0,"minimum":41.0,"description":"Canadian latitude","title":"Lat"},"description":"Canadian latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":-52.0,"minimum":-142.0,"description":"Canadian longitude","title":"Lon"},"description":"Canadian longitude"},{"name":"radius_m","in":"query","required":false,"schema":{"type":"integer","maximum":5000,"minimum":1,"description":"Maximum point distance","default":100,"title":"Radius M"},"description":"Maximum point distance"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":10,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Property By Gps Api Kitchener Property By Gps Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kitchener/property/by-roll/{roll_number}":{"get":{"summary":"Get Property By Roll","description":"Get property assessment by roll number.","operationId":"get_property_by_roll_api_kitchener_property_by_roll__roll_number__get","parameters":[{"name":"roll_number","in":"path","required":true,"schema":{"type":"string","description":"Property roll number","title":"Roll Number"},"description":"Property roll number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyAssessment"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kitchener/property/report":{"get":{"summary":"Property Report Lookup","description":"Consolidated report by roll number, address, or GPS.","operationId":"property_report_lookup_api_kitchener_property_report_get","parameters":[{"name":"roll_number","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property roll number","title":"Roll Number"},"description":"Property roll number"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Street address","title":"Address"},"description":"Street address"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyReport"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kitchener/property/report/{roll_number}":{"get":{"summary":"Property Report","description":"Get consolidated property report: assessment + building permits + zoning + DLS.","operationId":"property_report_api_kitchener_property_report__roll_number__get","parameters":[{"name":"roll_number","in":"path","required":true,"schema":{"type":"string","description":"Property roll number","title":"Roll Number"},"description":"Property roll number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyReport"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kitchener/property/batch":{"post":{"summary":"Get Properties Batch","description":"Get multiple properties by roll numbers in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of roll numbers.\nExample: {\"ids\": [\"123456789\", \"987654321\"]}\nMaximum 100 roll numbers per request.","operationId":"get_properties_batch_api_kitchener_property_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Properties Batch Api Kitchener Property Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kitchener/property/export":{"get":{"summary":"Export Properties","description":"Export property data as CSV or GeoJSON.\n\nSupports filtering by address, property type, and assessed value range.\nMaximum 10,000 records per export.","operationId":"export_properties_api_kitchener_property_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Address filter","title":"Address"},"description":"Address filter"},{"name":"property_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property type filter","title":"Property Type"},"description":"Property type filter"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum assessed value","title":"Min Value"},"description":"Minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum assessed value","title":"Max Value"},"description":"Maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kitchener/property/addresses":{"get":{"summary":"Kitchener Addresses","description":"List Kitchener municipal addresses. Supports filtering by street name.","operationId":"kitchener_addresses_api_kitchener_property_addresses_get","parameters":[{"name":"street","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by street name","title":"Street"},"description":"Filter by street name"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max results to return","default":50,"title":"Limit"},"description":"Max results to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset for pagination","default":0,"title":"Offset"},"description":"Results offset for pagination"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kitchener/property/buildings":{"get":{"summary":"Kitchener Buildings","description":"List Kitchener building footprints.","operationId":"kitchener_buildings_api_kitchener_property_buildings_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max results to return","default":50,"title":"Limit"},"description":"Max results to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset for pagination","default":0,"title":"Offset"},"description":"Results offset for pagination"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kitchener/property/ownership":{"get":{"summary":"Kitchener Ownership","description":"List Kitchener property ownership records. Supports filtering by address.","operationId":"kitchener_ownership_api_kitchener_property_ownership_get","parameters":[{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by address","title":"Address"},"description":"Filter by address"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max results to return","default":50,"title":"Limit"},"description":"Max results to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset for pagination","default":0,"title":"Offset"},"description":"Results offset for pagination"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kitchener/planning/applications":{"get":{"summary":"Kitchener Planning Applications","description":"Search Kitchener planning applications. Supports filtering by type and address.","operationId":"kitchener_planning_applications_api_kitchener_planning_applications_get","parameters":[{"name":"application_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by application type","title":"Application Type"},"description":"Filter by application type"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by address","title":"Address"},"description":"Filter by address"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"Max results to return","default":50,"title":"Limit"},"description":"Max results to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset for pagination","default":0,"title":"Offset"},"description":"Results offset for pagination"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kitchener/property/addresses/count":{"get":{"summary":"Kitchener Address Count","description":"Get total count of Kitchener addresses.","operationId":"kitchener_address_count_api_kitchener_property_addresses_count_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kitchener/property/buildings/count":{"get":{"summary":"Kitchener Building Count","description":"Get total count of Kitchener buildings.","operationId":"kitchener_building_count_api_kitchener_property_buildings_count_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kitchener/property/ownership/count":{"get":{"summary":"Kitchener Ownership Count","description":"Get total count of Kitchener property ownership records.","operationId":"kitchener_ownership_count_api_kitchener_property_ownership_count_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kitchener/planning/applications/count":{"get":{"summary":"Kitchener Planning Count","description":"Get total count of Kitchener planning applications.","operationId":"kitchener_planning_count_api_kitchener_planning_applications_count_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kitchener/census/profile":{"get":{"summary":"Get Census Profile","description":"Get census profile for a specific Dissemination Area.\n\nProvide either da_id directly, OR lat+lon to find the nearest DA automatically.","operationId":"get_census_profile_api_kitchener_census_profile_get","parameters":[{"name":"da_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Dissemination Area ID (e.g., 48820001)","title":"Da Id"},"description":"Dissemination Area ID (e.g., 48820001)"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude for nearest-DA lookup","title":"Lat"},"description":"Latitude for nearest-DA lookup"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude for nearest-DA lookup","title":"Lon"},"description":"Longitude for nearest-DA lookup"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusProfile"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kitchener/census/batch":{"post":{"summary":"Get Census Batch","description":"Get multiple census profiles by DA IDs in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of DA IDs.\nExample: {\"ids\": [\"48820001\", \"48820002\"]}\nMaximum 100 DA IDs per request.","operationId":"get_census_batch_api_kitchener_census_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Census Batch Api Kitchener Census Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kitchener/census/export":{"get":{"summary":"Export Census","description":"Export census data as CSV.\n\nSupports filtering by population range and geography type.\nMaximum 10,000 records per export.","operationId":"export_census_api_kitchener_census_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv only","default":"csv","title":"Format"},"description":"Export format: csv only"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"min_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Minimum population filter","title":"Min Population"},"description":"Minimum population filter"},{"name":"max_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Maximum population filter","title":"Max Population"},"description":"Maximum population filter"},{"name":"geography_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Geography type filter (DA, CT, CMA)","title":"Geography Type"},"description":"Geography type filter (DA, CT, CMA)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kitchener/census/list":{"get":{"summary":"List Census Profiles","description":"List all census profiles with pagination.\n\nUse this endpoint to browse available census profiles and discover valid DA IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_census_profiles_api_kitchener_census_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Census Profiles Api Kitchener Census List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kitchener/census/by-gps":{"get":{"summary":"Get Census By Gps","description":"Get census data for GPS coordinates.","operationId":"get_census_by_gps_api_kitchener_census_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90,"minimum":-90,"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":180,"minimum":-180,"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kitchener/census/by-dls":{"get":{"summary":"Get Census By Dls","description":"Get census data for DLS coordinates.","operationId":"get_census_by_dls_api_kitchener_census_by_dls_get","parameters":[{"name":"dls","in":"query","required":true,"schema":{"type":"string","description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)","title":"Dls"},"description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kitchener/census/map-data":{"get":{"summary":"Get Census Map Data","description":"Get lightweight DA points for choropleth map rendering.\n\nReturns centroid coordinates and key metrics (income, age, population,\nhousehold size, employment rate) for all DAs in the city.\nUsed by the census dashboard to render color-coded maps.","operationId":"get_census_map_data_api_kitchener_census_map_data_get","parameters":[{"name":"year","in":"query","required":false,"schema":{"type":"integer","description":"Census year for DA map data","default":2021,"title":"Year"},"description":"Census year for DA map data"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kitchener/census/stats":{"get":{"summary":"Census Stats","description":"Get census data statistics.","operationId":"census_stats_api_kitchener_census_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kitchener/census/compare":{"get":{"summary":"Census Compare","description":"Compare key census metrics across multiple years.\n\nReturns side-by-side comparison of population, households,\navg_income, median_age, density, and land_area for each requested year.\nYears without data return null for that year's values.","operationId":"census_compare_api_kitchener_census_compare_get","parameters":[{"name":"years","in":"query","required":false,"schema":{"type":"string","description":"Comma-separated census years (e.g., 2016,2021)","default":"2021","title":"Years"},"description":"Comma-separated census years (e.g., 2016,2021)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kitchener/census/time-series":{"get":{"summary":"Census Timeseries","description":"Get year-by-year census trends for this city.\n\nReturns population, income, age, and household trends across all\navailable census years. Useful for spotting long-term demographic shifts.","operationId":"census_timeseries_api_kitchener_census_time_series_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kitchener/geography/list":{"get":{"summary":"Geography List","description":"List geography boundaries for this city.","operationId":"geography_list_api_kitchener_geography_list_get","parameters":[{"name":"type","in":"query","required":false,"schema":{"type":"string","title":"Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kitchener/geography/by-gps":{"get":{"summary":"Geography By Gps","description":"Find the geography boundary containing a GPS point.","operationId":"geography_by_gps_api_kitchener_geography_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","title":"Lat"}},{"name":"lon","in":"query","required":true,"schema":{"type":"number","title":"Lon"}},{"name":"type","in":"query","required":false,"schema":{"type":"string","default":"DA","title":"Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kitchener/geography/stats":{"get":{"summary":"Geography Stats","description":"Get geography statistics for this city.","operationId":"geography_stats_api_kitchener_geography_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kitchener/geography/{geoid}":{"get":{"summary":"Geography Boundary","description":"Get a specific geography boundary by geoid, including GeoJSON polygon.","operationId":"geography_boundary_api_kitchener_geography__geoid__get","parameters":[{"name":"geoid","in":"path","required":true,"schema":{"type":"string","title":"Geoid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kitchener/census/rental/list":{"get":{"summary":"List Rental Prices","description":"List rental price records for this city, with optional unit type filter.","operationId":"list_rental_prices_api_kitchener_census_rental_list_get","parameters":[{"name":"unit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":50,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalPriceListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kitchener/census/rental/trend":{"get":{"summary":"Get Rental Trend","description":"Get rental price time series for a specific unit type.","operationId":"get_rental_trend_api_kitchener_census_rental_trend_get","parameters":[{"name":"unit_type","in":"query","required":true,"schema":{"type":"string","description":"Rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Rental unit type (e.g. 'Apartment - 1 bedroom')"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalTrendResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kitchener/census/rental/types":{"get":{"summary":"Get Rental Types","description":"Get available rental unit types for this city.","operationId":"get_rental_types_api_kitchener_census_rental_types_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kitchener/zoning/by-gps":{"get":{"summary":"Get Zoning By Gps","description":"Get zoning district for GPS coordinates.","operationId":"get_zoning_by_gps_api_kitchener_zoning_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZoningByGPSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kitchener/zoning/by-id/{district_id}":{"get":{"summary":"Get Zoning By Id","description":"Get a single zoning district by its numeric ID.","operationId":"get_zoning_by_id_api_kitchener_zoning_by_id__district_id__get","parameters":[{"name":"district_id","in":"path","required":true,"schema":{"type":"integer","description":"Zoning district numeric ID","title":"District Id"},"description":"Zoning district numeric ID"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning By Id Api Kitchener Zoning By Id  District Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kitchener/zoning/by-code/{code}":{"get":{"summary":"Get Zoning By Code","description":"Get all districts with a specific zone code.","operationId":"get_zoning_by_code_api_kitchener_zoning_by_code__code__get","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","description":"Zone code (e.g., C-C1, R-G)","title":"Code"},"description":"Zone code (e.g., C-C1, R-G)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoningDistrict"},"title":"Response Get Zoning By Code Api Kitchener Zoning By Code  Code  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kitchener/zoning/batch":{"post":{"summary":"Get Zoning Batch","description":"Get multiple zoning districts by zone codes in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of zone codes.\nExample: {\"ids\": [\"CR20-C20/R20\", \"C-C1\", \"R-G\"]}\nMaximum 100 zone codes per request.","operationId":"get_zoning_batch_api_kitchener_zoning_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning Batch Api Kitchener Zoning Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kitchener/zoning/list":{"get":{"summary":"List Zoning Districts","description":"List all zoning districts with pagination.\n\nUse this endpoint to browse available zoning districts and discover valid IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_zoning_districts_api_kitchener_zoning_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Zoning Districts Api Kitchener Zoning List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kitchener/zoning/codes":{"get":{"summary":"List Zone Codes","description":"List all zone codes with descriptions.","operationId":"list_zone_codes_api_kitchener_zoning_codes_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"type":"string","description":"Filter by major category (e.g., Commercial, Residential)","title":"Category"},"description":"Filter by major category (e.g., Commercial, Residential)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoneCodeInfo"},"title":"Response List Zone Codes Api Kitchener Zoning Codes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kitchener/zoning/stats":{"get":{"summary":"Zoning Stats","description":"Get zoning statistics.","operationId":"zoning_stats_api_kitchener_zoning_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kitchener/zoning/export":{"get":{"summary":"Export Zoning","description":"Export zoning district data as CSV or GeoJSON.\n\nSupports filtering by zone code, category, and area range.\nMaximum 10,000 records per export.","operationId":"export_zoning_api_kitchener_zoning_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"zone_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Zone code filter (e.g., CR2)","title":"Zone Code"},"description":"Zone code filter (e.g., CR2)"},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Major category filter","title":"Category"},"description":"Major category filter"},{"name":"min_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum area in sq km","title":"Min Area"},"description":"Minimum area in sq km"},{"name":"max_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum area in sq km","title":"Max Area"},"description":"Maximum area in sq km"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kitchener/permits/stats":{"get":{"summary":"Building Stats","description":"Get building permit statistics.","operationId":"building_stats_api_kitchener_permits_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kitchener/permits/search":{"get":{"summary":"Search Building Permits","description":"Search building permits by address, contractor, applicant, permit number, and/or permit type.","operationId":"search_building_permits_api_kitchener_permits_search_get","parameters":[{"name":"address","in":"query","required":false,"schema":{"type":"string","description":"Address to search","title":"Address"},"description":"Address to search"},{"name":"q","in":"query","required":false,"schema":{"type":"string","description":"General text search (address, contractor, applicant, permit #)","title":"Q"},"description":"General text search (address, contractor, applicant, permit #)"},{"name":"permit_type","in":"query","required":false,"schema":{"type":"string","description":"Filter by permit type","title":"Permit Type"},"description":"Filter by permit type"},{"name":"bbox","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bounding box: min_lon,min_lat,max_lon,max_lat","title":"Bbox"},"description":"Bounding box: min_lon,min_lat,max_lon,max_lat"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max results","default":20,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset","default":0,"title":"Offset"},"description":"Results offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kitchener/permits/nearby":{"get":{"summary":"Nearby Building Permits","description":"Coordinate-first alias for nearby building permits.","operationId":"nearby_building_permits_api_kitchener_permits_nearby_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":84.0,"minimum":41.0,"description":"Canadian latitude","title":"Lat"},"description":"Canadian latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":-52.0,"minimum":-142.0,"description":"Canadian longitude","title":"Lon"},"description":"Canadian longitude"},{"name":"radius_m","in":"query","required":false,"schema":{"type":"integer","maximum":50000,"minimum":1,"default":1000,"title":"Radius M"}},{"name":"permit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Permit Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kitchener/permits/export":{"get":{"summary":"Export Building Permits","description":"Export building permit data as CSV or GeoJSON.\n\nSupports filtering by address, permit type, and date range.\nMaximum 10,000 records per export.","operationId":"export_building_permits_api_kitchener_permits_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Address filter","title":"Address"},"description":"Address filter"},{"name":"permit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Permit type filter","title":"Permit Type"},"description":"Permit type filter"},{"name":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Start date (YYYY-MM-DD)","title":"Date From"},"description":"Start date (YYYY-MM-DD)"},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"End date (YYYY-MM-DD)","title":"Date To"},"description":"End date (YYYY-MM-DD)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kitchener/permits/recent":{"get":{"summary":"Recent Building Permits","description":"Get recent building permits sorted by application date (newest first).\n\nUse this to see where construction activity is happening right now.","operationId":"recent_building_permits_api_kitchener_permits_recent_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Max results","default":20,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset","default":0,"title":"Offset"},"description":"Results offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kitchener/permits/batch":{"post":{"summary":"Get Building Permits Batch","description":"Get multiple building permits by permit numbers in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of permit numbers.\nExample: {\"ids\": [\"BP123456\", \"BP789012\"]}\nMaximum 100 permit numbers per request.","operationId":"get_building_permits_batch_api_kitchener_permits_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Building Permits Batch Api Kitchener Permits Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kitchener/permits/{permit_number}":{"get":{"summary":"Get Building Permit","description":"Get building permit details by permit number.\n\nServes HTML for browsers, JSON for API clients.","operationId":"get_building_permit_api_kitchener_permits__permit_number__get","parameters":[{"name":"permit_number","in":"path","required":true,"schema":{"type":"string","description":"Permit number","title":"Permit Number"},"description":"Permit number"},{"name":"_city_name","in":"query","required":false,"schema":{"default":"Kitchener-Waterloo","title":" City Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kitchener/safety/search":{"get":{"summary":"Search Safety","operationId":"search_safety_api_kitchener_safety_search_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Q"}},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"}},{"name":"neighbourhood","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Neighbourhood"}},{"name":"start","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Start"}},{"name":"end","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"End"}},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lat"}},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lon"}},{"name":"radius_m","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Radius M"}},{"name":"bbox","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bbox"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SafetySearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kitchener/safety/nearby":{"get":{"summary":"Nearby Safety","description":"Coordinate-first alias for nearby public safety records.","operationId":"nearby_safety_api_kitchener_safety_nearby_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":84.0,"minimum":41.0,"description":"Canadian latitude","title":"Lat"},"description":"Canadian latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":-52.0,"minimum":-142.0,"description":"Canadian longitude","title":"Lon"},"description":"Canadian longitude"},{"name":"radius_m","in":"query","required":false,"schema":{"type":"integer","maximum":50000,"minimum":1,"default":1000,"title":"Radius M"}},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"}},{"name":"start","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Start"}},{"name":"end","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"End"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SafetySearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kitchener/safety/stats":{"get":{"summary":"Safety Stats","operationId":"safety_stats_api_kitchener_safety_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SafetyStats"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kitchener/safety/{source_record_id}":{"get":{"summary":"Safety By Id","operationId":"safety_by_id_api_kitchener_safety__source_record_id__get","parameters":[{"name":"source_record_id","in":"path","required":true,"schema":{"type":"string","title":"Source Record Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kitchener/health":{"get":{"summary":"City Health","description":"City-specific health check.","operationId":"city_health_api_kitchener_health_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mississauga/entries/{kind}":{"get":{"summary":"List Entries","operationId":"list_entries_api_mississauga_entries__kind__get","parameters":[{"name":"kind","in":"path","required":true,"schema":{"type":"string","description":"Canonical entry kind: property, permit, zoning, or safety","title":"Kind"},"description":"Canonical entry kind: property, permit, zoning, or safety"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"_services","in":"query","required":false,"schema":{"title":" Services"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Entries Api Mississauga Entries  Kind  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mississauga/property/search":{"get":{"summary":"Search Property","description":"Search for properties by address, or browse all if no address specified.\nSupports sorting by assessed_value, address, year_built, community, or lot_size_sqft.\nSupports value range filtering with min_value and max_value.\n Supports property_type and year range filters.","operationId":"search_property_api_mississauga_property_search_get","parameters":[{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Street address to search (omit to browse all)","title":"Address"},"description":"Street address to search (omit to browse all)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max results to return (up to 1000 for map browse)","default":10,"title":"Limit"},"description":"Max results to return (up to 1000 for map browse)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset for pagination","default":0,"title":"Offset"},"description":"Results offset for pagination"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft","title":"Sort By"},"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"asc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"},{"name":"property_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property type filter (e.g. RE, Residential)","title":"Property Type"},"description":"Property type filter (e.g. RE, Residential)"},{"name":"min_year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter: minimum year built","title":"Min Year"},"description":"Filter: minimum year built"},{"name":"max_year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter: maximum year built","title":"Max Year"},"description":"Filter: maximum year built"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertySearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mississauga/property/list":{"get":{"summary":"List Property","description":"List all properties with pagination, sorting, and value range filtering.\n\nUse this endpoint to browse available property records and discover valid roll numbers.\nReturns paginated results with total count for client-side pagination.\nSort by assessed_value with order=desc to find the most expensive properties.","operationId":"list_property_api_mississauga_property_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft","title":"Sort By"},"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"asc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Property Api Mississauga Property List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mississauga/property/geojson":{"get":{"summary":"Property Geojson","operationId":"property_geojson_api_mississauga_property_geojson_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500000,"minimum":1,"description":"Max features to return (cap prevents browser overload for large cities)","default":50000,"title":"Limit"},"description":"Max features to return (cap prevents browser overload for large cities)"},{"name":"sw_lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport south-west latitude","title":"Sw Lat"},"description":"Viewport south-west latitude"},{"name":"sw_lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport south-west longitude","title":"Sw Lon"},"description":"Viewport south-west longitude"},{"name":"ne_lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport north-east latitude","title":"Ne Lat"},"description":"Viewport north-east latitude"},{"name":"ne_lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport north-east longitude","title":"Ne Lon"},"description":"Viewport north-east longitude"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Offset for pagination through viewport results (use with limit)","default":0,"title":"Offset"},"description":"Offset for pagination through viewport results (use with limit)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mississauga/property/top":{"get":{"summary":"Top Property","description":"Get top-N properties sorted by any numeric column.\n\nConvenience endpoint for AI agents and dashboards. Returns the top\nN properties sorted by the given column. Defaults to most expensive\n(assessed_value descending). Combine with min_value/max_value to\nfind e.g. the most expensive residential properties.","operationId":"top_property_api_mississauga_property_top_get","parameters":[{"name":"n","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Number of top properties to return","default":10,"title":"N"},"description":"Number of top properties to return"},{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","description":"Sort column: assessed_value, year_built, lot_size_sqft","default":"assessed_value","title":"Sort By"},"description":"Sort column: assessed_value, year_built, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"desc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Top Property Api Mississauga Property Top Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mississauga/property/stats":{"get":{"summary":"Property Stats","description":"Get property assessment statistics.","operationId":"property_stats_api_mississauga_property_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mississauga/property/autocomplete":{"get":{"summary":"Property Autocomplete","description":"Get address and roll number suggestions for typeahead search.","operationId":"property_autocomplete_api_mississauga_property_autocomplete_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"description":"Search query for address/roll number suggestions","title":"Q"},"description":"Search query for address/roll number suggestions"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":25,"minimum":1,"description":"Max suggestions to return","default":10,"title":"Limit"},"description":"Max suggestions to return"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mississauga/property/geocode":{"post":{"summary":"Property Geocode","description":"Geocode property addresses to lat/lon coordinates.\n\nAccepts a JSON body with 'addresses' (list of address strings, max 50).\nReturns cached results instantly; uncached addresses are geocoded via Nominatim.\n\nExample: {\"addresses\": [\"123 Main St\", \"456 Oak Ave\"]}","operationId":"property_geocode_api_mississauga_property_geocode_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mississauga/property/by-dls":{"get":{"summary":"Get Property By Dls","description":"Get property assessment by DLS coordinates.","operationId":"get_property_by_dls_api_mississauga_property_by_dls_get","parameters":[{"name":"quarter","in":"query","required":true,"schema":{"type":"string","description":"Quarter section (e.g., SW)","title":"Quarter"},"description":"Quarter section (e.g., SW)"},{"name":"section","in":"query","required":true,"schema":{"type":"integer","description":"Section number","title":"Section"},"description":"Section number"},{"name":"township","in":"query","required":true,"schema":{"type":"integer","description":"Township number","title":"Township"},"description":"Township number"},{"name":"range","in":"query","required":true,"schema":{"type":"integer","description":"Range number","title":"Range"},"description":"Range number"},{"name":"meridian","in":"query","required":true,"schema":{"type":"integer","description":"Meridian number","title":"Meridian"},"description":"Meridian number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyAssessment"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mississauga/property/by-gps":{"get":{"summary":"Get Property By Gps","description":"Find coordinate-bearing assessment records nearest a GPS point.\n\nResults are point-nearness matches unless the municipal source supplies\nparcel polygons; clients should not interpret proximity as legal parcel\ncontainment.","operationId":"get_property_by_gps_api_mississauga_property_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":84.0,"minimum":41.0,"description":"Canadian latitude","title":"Lat"},"description":"Canadian latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":-52.0,"minimum":-142.0,"description":"Canadian longitude","title":"Lon"},"description":"Canadian longitude"},{"name":"radius_m","in":"query","required":false,"schema":{"type":"integer","maximum":5000,"minimum":1,"description":"Maximum point distance","default":100,"title":"Radius M"},"description":"Maximum point distance"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":10,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Property By Gps Api Mississauga Property By Gps Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mississauga/property/by-roll/{roll_number}":{"get":{"summary":"Get Property By Roll","description":"Get property assessment by roll number.","operationId":"get_property_by_roll_api_mississauga_property_by_roll__roll_number__get","parameters":[{"name":"roll_number","in":"path","required":true,"schema":{"type":"string","description":"Property roll number","title":"Roll Number"},"description":"Property roll number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyAssessment"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mississauga/property/report":{"get":{"summary":"Property Report Lookup","description":"Consolidated report by roll number, address, or GPS.","operationId":"property_report_lookup_api_mississauga_property_report_get","parameters":[{"name":"roll_number","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property roll number","title":"Roll Number"},"description":"Property roll number"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Street address","title":"Address"},"description":"Street address"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyReport"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mississauga/property/report/{roll_number}":{"get":{"summary":"Property Report","description":"Get consolidated property report: assessment + building permits + zoning + DLS.","operationId":"property_report_api_mississauga_property_report__roll_number__get","parameters":[{"name":"roll_number","in":"path","required":true,"schema":{"type":"string","description":"Property roll number","title":"Roll Number"},"description":"Property roll number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyReport"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mississauga/property/batch":{"post":{"summary":"Get Properties Batch","description":"Get multiple properties by roll numbers in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of roll numbers.\nExample: {\"ids\": [\"123456789\", \"987654321\"]}\nMaximum 100 roll numbers per request.","operationId":"get_properties_batch_api_mississauga_property_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Properties Batch Api Mississauga Property Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mississauga/property/export":{"get":{"summary":"Export Properties","description":"Export property data as CSV or GeoJSON.\n\nSupports filtering by address, property type, and assessed value range.\nMaximum 10,000 records per export.","operationId":"export_properties_api_mississauga_property_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Address filter","title":"Address"},"description":"Address filter"},{"name":"property_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property type filter","title":"Property Type"},"description":"Property type filter"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum assessed value","title":"Min Value"},"description":"Minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum assessed value","title":"Max Value"},"description":"Maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mississauga/census/profile":{"get":{"summary":"Get Census Profile","description":"Get census profile for a specific Dissemination Area.\n\nProvide either da_id directly, OR lat+lon to find the nearest DA automatically.","operationId":"get_census_profile_api_mississauga_census_profile_get","parameters":[{"name":"da_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Dissemination Area ID (e.g., 48820001)","title":"Da Id"},"description":"Dissemination Area ID (e.g., 48820001)"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude for nearest-DA lookup","title":"Lat"},"description":"Latitude for nearest-DA lookup"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude for nearest-DA lookup","title":"Lon"},"description":"Longitude for nearest-DA lookup"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusProfile"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mississauga/census/batch":{"post":{"summary":"Get Census Batch","description":"Get multiple census profiles by DA IDs in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of DA IDs.\nExample: {\"ids\": [\"48820001\", \"48820002\"]}\nMaximum 100 DA IDs per request.","operationId":"get_census_batch_api_mississauga_census_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Census Batch Api Mississauga Census Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mississauga/census/export":{"get":{"summary":"Export Census","description":"Export census data as CSV.\n\nSupports filtering by population range and geography type.\nMaximum 10,000 records per export.","operationId":"export_census_api_mississauga_census_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv only","default":"csv","title":"Format"},"description":"Export format: csv only"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"min_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Minimum population filter","title":"Min Population"},"description":"Minimum population filter"},{"name":"max_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Maximum population filter","title":"Max Population"},"description":"Maximum population filter"},{"name":"geography_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Geography type filter (DA, CT, CMA)","title":"Geography Type"},"description":"Geography type filter (DA, CT, CMA)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mississauga/census/list":{"get":{"summary":"List Census Profiles","description":"List all census profiles with pagination.\n\nUse this endpoint to browse available census profiles and discover valid DA IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_census_profiles_api_mississauga_census_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Census Profiles Api Mississauga Census List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mississauga/census/by-gps":{"get":{"summary":"Get Census By Gps","description":"Get census data for GPS coordinates.","operationId":"get_census_by_gps_api_mississauga_census_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90,"minimum":-90,"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":180,"minimum":-180,"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mississauga/census/by-dls":{"get":{"summary":"Get Census By Dls","description":"Get census data for DLS coordinates.","operationId":"get_census_by_dls_api_mississauga_census_by_dls_get","parameters":[{"name":"dls","in":"query","required":true,"schema":{"type":"string","description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)","title":"Dls"},"description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mississauga/census/map-data":{"get":{"summary":"Get Census Map Data","description":"Get lightweight DA points for choropleth map rendering.\n\nReturns centroid coordinates and key metrics (income, age, population,\nhousehold size, employment rate) for all DAs in the city.\nUsed by the census dashboard to render color-coded maps.","operationId":"get_census_map_data_api_mississauga_census_map_data_get","parameters":[{"name":"year","in":"query","required":false,"schema":{"type":"integer","description":"Census year for DA map data","default":2021,"title":"Year"},"description":"Census year for DA map data"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mississauga/census/stats":{"get":{"summary":"Census Stats","description":"Get census data statistics.","operationId":"census_stats_api_mississauga_census_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mississauga/census/compare":{"get":{"summary":"Census Compare","description":"Compare key census metrics across multiple years.\n\nReturns side-by-side comparison of population, households,\navg_income, median_age, density, and land_area for each requested year.\nYears without data return null for that year's values.","operationId":"census_compare_api_mississauga_census_compare_get","parameters":[{"name":"years","in":"query","required":false,"schema":{"type":"string","description":"Comma-separated census years (e.g., 2016,2021)","default":"2021","title":"Years"},"description":"Comma-separated census years (e.g., 2016,2021)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mississauga/census/time-series":{"get":{"summary":"Census Timeseries","description":"Get year-by-year census trends for this city.\n\nReturns population, income, age, and household trends across all\navailable census years. Useful for spotting long-term demographic shifts.","operationId":"census_timeseries_api_mississauga_census_time_series_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mississauga/geography/list":{"get":{"summary":"Geography List","description":"List geography boundaries for this city.","operationId":"geography_list_api_mississauga_geography_list_get","parameters":[{"name":"type","in":"query","required":false,"schema":{"type":"string","title":"Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mississauga/geography/by-gps":{"get":{"summary":"Geography By Gps","description":"Find the geography boundary containing a GPS point.","operationId":"geography_by_gps_api_mississauga_geography_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","title":"Lat"}},{"name":"lon","in":"query","required":true,"schema":{"type":"number","title":"Lon"}},{"name":"type","in":"query","required":false,"schema":{"type":"string","default":"DA","title":"Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mississauga/geography/stats":{"get":{"summary":"Geography Stats","description":"Get geography statistics for this city.","operationId":"geography_stats_api_mississauga_geography_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mississauga/geography/{geoid}":{"get":{"summary":"Geography Boundary","description":"Get a specific geography boundary by geoid, including GeoJSON polygon.","operationId":"geography_boundary_api_mississauga_geography__geoid__get","parameters":[{"name":"geoid","in":"path","required":true,"schema":{"type":"string","title":"Geoid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mississauga/census/rental/list":{"get":{"summary":"List Rental Prices","description":"List rental price records for this city, with optional unit type filter.","operationId":"list_rental_prices_api_mississauga_census_rental_list_get","parameters":[{"name":"unit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":50,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalPriceListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mississauga/census/rental/trend":{"get":{"summary":"Get Rental Trend","description":"Get rental price time series for a specific unit type.","operationId":"get_rental_trend_api_mississauga_census_rental_trend_get","parameters":[{"name":"unit_type","in":"query","required":true,"schema":{"type":"string","description":"Rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Rental unit type (e.g. 'Apartment - 1 bedroom')"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalTrendResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mississauga/census/rental/types":{"get":{"summary":"Get Rental Types","description":"Get available rental unit types for this city.","operationId":"get_rental_types_api_mississauga_census_rental_types_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mississauga/zoning/by-gps":{"get":{"summary":"Get Zoning By Gps","description":"Get zoning district for GPS coordinates.","operationId":"get_zoning_by_gps_api_mississauga_zoning_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZoningByGPSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mississauga/zoning/by-id/{district_id}":{"get":{"summary":"Get Zoning By Id","description":"Get a single zoning district by its numeric ID.","operationId":"get_zoning_by_id_api_mississauga_zoning_by_id__district_id__get","parameters":[{"name":"district_id","in":"path","required":true,"schema":{"type":"integer","description":"Zoning district numeric ID","title":"District Id"},"description":"Zoning district numeric ID"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning By Id Api Mississauga Zoning By Id  District Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mississauga/zoning/by-code/{code}":{"get":{"summary":"Get Zoning By Code","description":"Get all districts with a specific zone code.","operationId":"get_zoning_by_code_api_mississauga_zoning_by_code__code__get","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","description":"Zone code (e.g., C-C1, R-G)","title":"Code"},"description":"Zone code (e.g., C-C1, R-G)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoningDistrict"},"title":"Response Get Zoning By Code Api Mississauga Zoning By Code  Code  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mississauga/zoning/batch":{"post":{"summary":"Get Zoning Batch","description":"Get multiple zoning districts by zone codes in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of zone codes.\nExample: {\"ids\": [\"CR20-C20/R20\", \"C-C1\", \"R-G\"]}\nMaximum 100 zone codes per request.","operationId":"get_zoning_batch_api_mississauga_zoning_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning Batch Api Mississauga Zoning Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mississauga/zoning/list":{"get":{"summary":"List Zoning Districts","description":"List all zoning districts with pagination.\n\nUse this endpoint to browse available zoning districts and discover valid IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_zoning_districts_api_mississauga_zoning_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Zoning Districts Api Mississauga Zoning List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mississauga/zoning/codes":{"get":{"summary":"List Zone Codes","description":"List all zone codes with descriptions.","operationId":"list_zone_codes_api_mississauga_zoning_codes_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"type":"string","description":"Filter by major category (e.g., Commercial, Residential)","title":"Category"},"description":"Filter by major category (e.g., Commercial, Residential)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoneCodeInfo"},"title":"Response List Zone Codes Api Mississauga Zoning Codes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mississauga/zoning/stats":{"get":{"summary":"Zoning Stats","description":"Get zoning statistics.","operationId":"zoning_stats_api_mississauga_zoning_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mississauga/zoning/export":{"get":{"summary":"Export Zoning","description":"Export zoning district data as CSV or GeoJSON.\n\nSupports filtering by zone code, category, and area range.\nMaximum 10,000 records per export.","operationId":"export_zoning_api_mississauga_zoning_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"zone_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Zone code filter (e.g., CR2)","title":"Zone Code"},"description":"Zone code filter (e.g., CR2)"},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Major category filter","title":"Category"},"description":"Major category filter"},{"name":"min_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum area in sq km","title":"Min Area"},"description":"Minimum area in sq km"},{"name":"max_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum area in sq km","title":"Max Area"},"description":"Maximum area in sq km"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mississauga/permits/stats":{"get":{"summary":"Building Stats","description":"Get building permit statistics.","operationId":"building_stats_api_mississauga_permits_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mississauga/permits/search":{"get":{"summary":"Search Building Permits","description":"Search building permits by address, contractor, applicant, permit number, and/or permit type.","operationId":"search_building_permits_api_mississauga_permits_search_get","parameters":[{"name":"address","in":"query","required":false,"schema":{"type":"string","description":"Address to search","title":"Address"},"description":"Address to search"},{"name":"q","in":"query","required":false,"schema":{"type":"string","description":"General text search (address, contractor, applicant, permit #)","title":"Q"},"description":"General text search (address, contractor, applicant, permit #)"},{"name":"permit_type","in":"query","required":false,"schema":{"type":"string","description":"Filter by permit type","title":"Permit Type"},"description":"Filter by permit type"},{"name":"bbox","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bounding box: min_lon,min_lat,max_lon,max_lat","title":"Bbox"},"description":"Bounding box: min_lon,min_lat,max_lon,max_lat"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max results","default":20,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset","default":0,"title":"Offset"},"description":"Results offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mississauga/permits/nearby":{"get":{"summary":"Nearby Building Permits","description":"Coordinate-first alias for nearby building permits.","operationId":"nearby_building_permits_api_mississauga_permits_nearby_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":84.0,"minimum":41.0,"description":"Canadian latitude","title":"Lat"},"description":"Canadian latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":-52.0,"minimum":-142.0,"description":"Canadian longitude","title":"Lon"},"description":"Canadian longitude"},{"name":"radius_m","in":"query","required":false,"schema":{"type":"integer","maximum":50000,"minimum":1,"default":1000,"title":"Radius M"}},{"name":"permit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Permit Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mississauga/permits/export":{"get":{"summary":"Export Building Permits","description":"Export building permit data as CSV or GeoJSON.\n\nSupports filtering by address, permit type, and date range.\nMaximum 10,000 records per export.","operationId":"export_building_permits_api_mississauga_permits_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Address filter","title":"Address"},"description":"Address filter"},{"name":"permit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Permit type filter","title":"Permit Type"},"description":"Permit type filter"},{"name":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Start date (YYYY-MM-DD)","title":"Date From"},"description":"Start date (YYYY-MM-DD)"},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"End date (YYYY-MM-DD)","title":"Date To"},"description":"End date (YYYY-MM-DD)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mississauga/permits/recent":{"get":{"summary":"Recent Building Permits","description":"Get recent building permits sorted by application date (newest first).\n\nUse this to see where construction activity is happening right now.","operationId":"recent_building_permits_api_mississauga_permits_recent_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Max results","default":20,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset","default":0,"title":"Offset"},"description":"Results offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mississauga/permits/batch":{"post":{"summary":"Get Building Permits Batch","description":"Get multiple building permits by permit numbers in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of permit numbers.\nExample: {\"ids\": [\"BP123456\", \"BP789012\"]}\nMaximum 100 permit numbers per request.","operationId":"get_building_permits_batch_api_mississauga_permits_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Building Permits Batch Api Mississauga Permits Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mississauga/permits/{permit_number}":{"get":{"summary":"Get Building Permit","description":"Get building permit details by permit number.\n\nServes HTML for browsers, JSON for API clients.","operationId":"get_building_permit_api_mississauga_permits__permit_number__get","parameters":[{"name":"permit_number","in":"path","required":true,"schema":{"type":"string","description":"Permit number","title":"Permit Number"},"description":"Permit number"},{"name":"_city_name","in":"query","required":false,"schema":{"default":"Mississauga","title":" City Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mississauga/health":{"get":{"summary":"City Health","description":"City-specific health check.","operationId":"city_health_api_mississauga_health_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/markham/entries/{kind}":{"get":{"summary":"List Entries","operationId":"list_entries_api_markham_entries__kind__get","parameters":[{"name":"kind","in":"path","required":true,"schema":{"type":"string","description":"Canonical entry kind: property, permit, zoning, or safety","title":"Kind"},"description":"Canonical entry kind: property, permit, zoning, or safety"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"_services","in":"query","required":false,"schema":{"title":" Services"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Entries Api Markham Entries  Kind  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/markham/property/search":{"get":{"summary":"Search Property","description":"Search for properties by address, or browse all if no address specified.\nSupports sorting by assessed_value, address, year_built, community, or lot_size_sqft.\nSupports value range filtering with min_value and max_value.\n Supports property_type and year range filters.","operationId":"search_property_api_markham_property_search_get","parameters":[{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Street address to search (omit to browse all)","title":"Address"},"description":"Street address to search (omit to browse all)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max results to return (up to 1000 for map browse)","default":10,"title":"Limit"},"description":"Max results to return (up to 1000 for map browse)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset for pagination","default":0,"title":"Offset"},"description":"Results offset for pagination"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft","title":"Sort By"},"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"asc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"},{"name":"property_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property type filter (e.g. RE, Residential)","title":"Property Type"},"description":"Property type filter (e.g. RE, Residential)"},{"name":"min_year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter: minimum year built","title":"Min Year"},"description":"Filter: minimum year built"},{"name":"max_year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter: maximum year built","title":"Max Year"},"description":"Filter: maximum year built"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertySearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/markham/property/list":{"get":{"summary":"List Property","description":"List all properties with pagination, sorting, and value range filtering.\n\nUse this endpoint to browse available property records and discover valid roll numbers.\nReturns paginated results with total count for client-side pagination.\nSort by assessed_value with order=desc to find the most expensive properties.","operationId":"list_property_api_markham_property_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft","title":"Sort By"},"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"asc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Property Api Markham Property List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/markham/property/geojson":{"get":{"summary":"Property Geojson","operationId":"property_geojson_api_markham_property_geojson_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500000,"minimum":1,"description":"Max features to return (cap prevents browser overload for large cities)","default":50000,"title":"Limit"},"description":"Max features to return (cap prevents browser overload for large cities)"},{"name":"sw_lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport south-west latitude","title":"Sw Lat"},"description":"Viewport south-west latitude"},{"name":"sw_lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport south-west longitude","title":"Sw Lon"},"description":"Viewport south-west longitude"},{"name":"ne_lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport north-east latitude","title":"Ne Lat"},"description":"Viewport north-east latitude"},{"name":"ne_lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport north-east longitude","title":"Ne Lon"},"description":"Viewport north-east longitude"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Offset for pagination through viewport results (use with limit)","default":0,"title":"Offset"},"description":"Offset for pagination through viewport results (use with limit)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/markham/property/top":{"get":{"summary":"Top Property","description":"Get top-N properties sorted by any numeric column.\n\nConvenience endpoint for AI agents and dashboards. Returns the top\nN properties sorted by the given column. Defaults to most expensive\n(assessed_value descending). Combine with min_value/max_value to\nfind e.g. the most expensive residential properties.","operationId":"top_property_api_markham_property_top_get","parameters":[{"name":"n","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Number of top properties to return","default":10,"title":"N"},"description":"Number of top properties to return"},{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","description":"Sort column: assessed_value, year_built, lot_size_sqft","default":"assessed_value","title":"Sort By"},"description":"Sort column: assessed_value, year_built, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"desc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Top Property Api Markham Property Top Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/markham/property/stats":{"get":{"summary":"Property Stats","description":"Get property assessment statistics.","operationId":"property_stats_api_markham_property_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/markham/property/autocomplete":{"get":{"summary":"Property Autocomplete","description":"Get address and roll number suggestions for typeahead search.","operationId":"property_autocomplete_api_markham_property_autocomplete_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"description":"Search query for address/roll number suggestions","title":"Q"},"description":"Search query for address/roll number suggestions"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":25,"minimum":1,"description":"Max suggestions to return","default":10,"title":"Limit"},"description":"Max suggestions to return"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/markham/property/geocode":{"post":{"summary":"Property Geocode","description":"Geocode property addresses to lat/lon coordinates.\n\nAccepts a JSON body with 'addresses' (list of address strings, max 50).\nReturns cached results instantly; uncached addresses are geocoded via Nominatim.\n\nExample: {\"addresses\": [\"123 Main St\", \"456 Oak Ave\"]}","operationId":"property_geocode_api_markham_property_geocode_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/markham/property/by-dls":{"get":{"summary":"Get Property By Dls","description":"Get property assessment by DLS coordinates.","operationId":"get_property_by_dls_api_markham_property_by_dls_get","parameters":[{"name":"quarter","in":"query","required":true,"schema":{"type":"string","description":"Quarter section (e.g., SW)","title":"Quarter"},"description":"Quarter section (e.g., SW)"},{"name":"section","in":"query","required":true,"schema":{"type":"integer","description":"Section number","title":"Section"},"description":"Section number"},{"name":"township","in":"query","required":true,"schema":{"type":"integer","description":"Township number","title":"Township"},"description":"Township number"},{"name":"range","in":"query","required":true,"schema":{"type":"integer","description":"Range number","title":"Range"},"description":"Range number"},{"name":"meridian","in":"query","required":true,"schema":{"type":"integer","description":"Meridian number","title":"Meridian"},"description":"Meridian number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyAssessment"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/markham/property/by-gps":{"get":{"summary":"Get Property By Gps","description":"Find coordinate-bearing assessment records nearest a GPS point.\n\nResults are point-nearness matches unless the municipal source supplies\nparcel polygons; clients should not interpret proximity as legal parcel\ncontainment.","operationId":"get_property_by_gps_api_markham_property_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":84.0,"minimum":41.0,"description":"Canadian latitude","title":"Lat"},"description":"Canadian latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":-52.0,"minimum":-142.0,"description":"Canadian longitude","title":"Lon"},"description":"Canadian longitude"},{"name":"radius_m","in":"query","required":false,"schema":{"type":"integer","maximum":5000,"minimum":1,"description":"Maximum point distance","default":100,"title":"Radius M"},"description":"Maximum point distance"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":10,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Property By Gps Api Markham Property By Gps Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/markham/property/by-roll/{roll_number}":{"get":{"summary":"Get Property By Roll","description":"Get property assessment by roll number.","operationId":"get_property_by_roll_api_markham_property_by_roll__roll_number__get","parameters":[{"name":"roll_number","in":"path","required":true,"schema":{"type":"string","description":"Property roll number","title":"Roll Number"},"description":"Property roll number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyAssessment"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/markham/property/report":{"get":{"summary":"Property Report Lookup","description":"Consolidated report by roll number, address, or GPS.","operationId":"property_report_lookup_api_markham_property_report_get","parameters":[{"name":"roll_number","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property roll number","title":"Roll Number"},"description":"Property roll number"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Street address","title":"Address"},"description":"Street address"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyReport"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/markham/property/report/{roll_number}":{"get":{"summary":"Property Report","description":"Get consolidated property report: assessment + building permits + zoning + DLS.","operationId":"property_report_api_markham_property_report__roll_number__get","parameters":[{"name":"roll_number","in":"path","required":true,"schema":{"type":"string","description":"Property roll number","title":"Roll Number"},"description":"Property roll number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyReport"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/markham/property/batch":{"post":{"summary":"Get Properties Batch","description":"Get multiple properties by roll numbers in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of roll numbers.\nExample: {\"ids\": [\"123456789\", \"987654321\"]}\nMaximum 100 roll numbers per request.","operationId":"get_properties_batch_api_markham_property_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Properties Batch Api Markham Property Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/markham/property/export":{"get":{"summary":"Export Properties","description":"Export property data as CSV or GeoJSON.\n\nSupports filtering by address, property type, and assessed value range.\nMaximum 10,000 records per export.","operationId":"export_properties_api_markham_property_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Address filter","title":"Address"},"description":"Address filter"},{"name":"property_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property type filter","title":"Property Type"},"description":"Property type filter"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum assessed value","title":"Min Value"},"description":"Minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum assessed value","title":"Max Value"},"description":"Maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/markham/census/profile":{"get":{"summary":"Get Census Profile","description":"Get census profile for a specific Dissemination Area.\n\nProvide either da_id directly, OR lat+lon to find the nearest DA automatically.","operationId":"get_census_profile_api_markham_census_profile_get","parameters":[{"name":"da_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Dissemination Area ID (e.g., 48820001)","title":"Da Id"},"description":"Dissemination Area ID (e.g., 48820001)"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude for nearest-DA lookup","title":"Lat"},"description":"Latitude for nearest-DA lookup"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude for nearest-DA lookup","title":"Lon"},"description":"Longitude for nearest-DA lookup"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusProfile"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/markham/census/batch":{"post":{"summary":"Get Census Batch","description":"Get multiple census profiles by DA IDs in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of DA IDs.\nExample: {\"ids\": [\"48820001\", \"48820002\"]}\nMaximum 100 DA IDs per request.","operationId":"get_census_batch_api_markham_census_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Census Batch Api Markham Census Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/markham/census/export":{"get":{"summary":"Export Census","description":"Export census data as CSV.\n\nSupports filtering by population range and geography type.\nMaximum 10,000 records per export.","operationId":"export_census_api_markham_census_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv only","default":"csv","title":"Format"},"description":"Export format: csv only"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"min_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Minimum population filter","title":"Min Population"},"description":"Minimum population filter"},{"name":"max_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Maximum population filter","title":"Max Population"},"description":"Maximum population filter"},{"name":"geography_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Geography type filter (DA, CT, CMA)","title":"Geography Type"},"description":"Geography type filter (DA, CT, CMA)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/markham/census/list":{"get":{"summary":"List Census Profiles","description":"List all census profiles with pagination.\n\nUse this endpoint to browse available census profiles and discover valid DA IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_census_profiles_api_markham_census_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Census Profiles Api Markham Census List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/markham/census/by-gps":{"get":{"summary":"Get Census By Gps","description":"Get census data for GPS coordinates.","operationId":"get_census_by_gps_api_markham_census_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90,"minimum":-90,"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":180,"minimum":-180,"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/markham/census/by-dls":{"get":{"summary":"Get Census By Dls","description":"Get census data for DLS coordinates.","operationId":"get_census_by_dls_api_markham_census_by_dls_get","parameters":[{"name":"dls","in":"query","required":true,"schema":{"type":"string","description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)","title":"Dls"},"description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/markham/census/map-data":{"get":{"summary":"Get Census Map Data","description":"Get lightweight DA points for choropleth map rendering.\n\nReturns centroid coordinates and key metrics (income, age, population,\nhousehold size, employment rate) for all DAs in the city.\nUsed by the census dashboard to render color-coded maps.","operationId":"get_census_map_data_api_markham_census_map_data_get","parameters":[{"name":"year","in":"query","required":false,"schema":{"type":"integer","description":"Census year for DA map data","default":2021,"title":"Year"},"description":"Census year for DA map data"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/markham/census/stats":{"get":{"summary":"Census Stats","description":"Get census data statistics.","operationId":"census_stats_api_markham_census_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/markham/census/compare":{"get":{"summary":"Census Compare","description":"Compare key census metrics across multiple years.\n\nReturns side-by-side comparison of population, households,\navg_income, median_age, density, and land_area for each requested year.\nYears without data return null for that year's values.","operationId":"census_compare_api_markham_census_compare_get","parameters":[{"name":"years","in":"query","required":false,"schema":{"type":"string","description":"Comma-separated census years (e.g., 2016,2021)","default":"2021","title":"Years"},"description":"Comma-separated census years (e.g., 2016,2021)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/markham/census/time-series":{"get":{"summary":"Census Timeseries","description":"Get year-by-year census trends for this city.\n\nReturns population, income, age, and household trends across all\navailable census years. Useful for spotting long-term demographic shifts.","operationId":"census_timeseries_api_markham_census_time_series_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/markham/geography/list":{"get":{"summary":"Geography List","description":"List geography boundaries for this city.","operationId":"geography_list_api_markham_geography_list_get","parameters":[{"name":"type","in":"query","required":false,"schema":{"type":"string","title":"Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/markham/geography/by-gps":{"get":{"summary":"Geography By Gps","description":"Find the geography boundary containing a GPS point.","operationId":"geography_by_gps_api_markham_geography_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","title":"Lat"}},{"name":"lon","in":"query","required":true,"schema":{"type":"number","title":"Lon"}},{"name":"type","in":"query","required":false,"schema":{"type":"string","default":"DA","title":"Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/markham/geography/stats":{"get":{"summary":"Geography Stats","description":"Get geography statistics for this city.","operationId":"geography_stats_api_markham_geography_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/markham/geography/{geoid}":{"get":{"summary":"Geography Boundary","description":"Get a specific geography boundary by geoid, including GeoJSON polygon.","operationId":"geography_boundary_api_markham_geography__geoid__get","parameters":[{"name":"geoid","in":"path","required":true,"schema":{"type":"string","title":"Geoid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/markham/census/rental/list":{"get":{"summary":"List Rental Prices","description":"List rental price records for this city, with optional unit type filter.","operationId":"list_rental_prices_api_markham_census_rental_list_get","parameters":[{"name":"unit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":50,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalPriceListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/markham/census/rental/trend":{"get":{"summary":"Get Rental Trend","description":"Get rental price time series for a specific unit type.","operationId":"get_rental_trend_api_markham_census_rental_trend_get","parameters":[{"name":"unit_type","in":"query","required":true,"schema":{"type":"string","description":"Rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Rental unit type (e.g. 'Apartment - 1 bedroom')"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalTrendResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/markham/census/rental/types":{"get":{"summary":"Get Rental Types","description":"Get available rental unit types for this city.","operationId":"get_rental_types_api_markham_census_rental_types_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/markham/zoning/by-gps":{"get":{"summary":"Get Zoning By Gps","description":"Get zoning district for GPS coordinates.","operationId":"get_zoning_by_gps_api_markham_zoning_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZoningByGPSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/markham/zoning/by-id/{district_id}":{"get":{"summary":"Get Zoning By Id","description":"Get a single zoning district by its numeric ID.","operationId":"get_zoning_by_id_api_markham_zoning_by_id__district_id__get","parameters":[{"name":"district_id","in":"path","required":true,"schema":{"type":"integer","description":"Zoning district numeric ID","title":"District Id"},"description":"Zoning district numeric ID"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning By Id Api Markham Zoning By Id  District Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/markham/zoning/by-code/{code}":{"get":{"summary":"Get Zoning By Code","description":"Get all districts with a specific zone code.","operationId":"get_zoning_by_code_api_markham_zoning_by_code__code__get","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","description":"Zone code (e.g., C-C1, R-G)","title":"Code"},"description":"Zone code (e.g., C-C1, R-G)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoningDistrict"},"title":"Response Get Zoning By Code Api Markham Zoning By Code  Code  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/markham/zoning/batch":{"post":{"summary":"Get Zoning Batch","description":"Get multiple zoning districts by zone codes in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of zone codes.\nExample: {\"ids\": [\"CR20-C20/R20\", \"C-C1\", \"R-G\"]}\nMaximum 100 zone codes per request.","operationId":"get_zoning_batch_api_markham_zoning_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning Batch Api Markham Zoning Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/markham/zoning/list":{"get":{"summary":"List Zoning Districts","description":"List all zoning districts with pagination.\n\nUse this endpoint to browse available zoning districts and discover valid IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_zoning_districts_api_markham_zoning_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Zoning Districts Api Markham Zoning List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/markham/zoning/codes":{"get":{"summary":"List Zone Codes","description":"List all zone codes with descriptions.","operationId":"list_zone_codes_api_markham_zoning_codes_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"type":"string","description":"Filter by major category (e.g., Commercial, Residential)","title":"Category"},"description":"Filter by major category (e.g., Commercial, Residential)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoneCodeInfo"},"title":"Response List Zone Codes Api Markham Zoning Codes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/markham/zoning/stats":{"get":{"summary":"Zoning Stats","description":"Get zoning statistics.","operationId":"zoning_stats_api_markham_zoning_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/markham/zoning/export":{"get":{"summary":"Export Zoning","description":"Export zoning district data as CSV or GeoJSON.\n\nSupports filtering by zone code, category, and area range.\nMaximum 10,000 records per export.","operationId":"export_zoning_api_markham_zoning_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"zone_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Zone code filter (e.g., CR2)","title":"Zone Code"},"description":"Zone code filter (e.g., CR2)"},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Major category filter","title":"Category"},"description":"Major category filter"},{"name":"min_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum area in sq km","title":"Min Area"},"description":"Minimum area in sq km"},{"name":"max_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum area in sq km","title":"Max Area"},"description":"Maximum area in sq km"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/markham/permits/stats":{"get":{"summary":"Building Stats","description":"Get building permit statistics.","operationId":"building_stats_api_markham_permits_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/markham/permits/search":{"get":{"summary":"Search Building Permits","description":"Search building permits by address, contractor, applicant, permit number, and/or permit type.","operationId":"search_building_permits_api_markham_permits_search_get","parameters":[{"name":"address","in":"query","required":false,"schema":{"type":"string","description":"Address to search","title":"Address"},"description":"Address to search"},{"name":"q","in":"query","required":false,"schema":{"type":"string","description":"General text search (address, contractor, applicant, permit #)","title":"Q"},"description":"General text search (address, contractor, applicant, permit #)"},{"name":"permit_type","in":"query","required":false,"schema":{"type":"string","description":"Filter by permit type","title":"Permit Type"},"description":"Filter by permit type"},{"name":"bbox","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bounding box: min_lon,min_lat,max_lon,max_lat","title":"Bbox"},"description":"Bounding box: min_lon,min_lat,max_lon,max_lat"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max results","default":20,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset","default":0,"title":"Offset"},"description":"Results offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/markham/permits/nearby":{"get":{"summary":"Nearby Building Permits","description":"Coordinate-first alias for nearby building permits.","operationId":"nearby_building_permits_api_markham_permits_nearby_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":84.0,"minimum":41.0,"description":"Canadian latitude","title":"Lat"},"description":"Canadian latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":-52.0,"minimum":-142.0,"description":"Canadian longitude","title":"Lon"},"description":"Canadian longitude"},{"name":"radius_m","in":"query","required":false,"schema":{"type":"integer","maximum":50000,"minimum":1,"default":1000,"title":"Radius M"}},{"name":"permit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Permit Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/markham/permits/export":{"get":{"summary":"Export Building Permits","description":"Export building permit data as CSV or GeoJSON.\n\nSupports filtering by address, permit type, and date range.\nMaximum 10,000 records per export.","operationId":"export_building_permits_api_markham_permits_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Address filter","title":"Address"},"description":"Address filter"},{"name":"permit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Permit type filter","title":"Permit Type"},"description":"Permit type filter"},{"name":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Start date (YYYY-MM-DD)","title":"Date From"},"description":"Start date (YYYY-MM-DD)"},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"End date (YYYY-MM-DD)","title":"Date To"},"description":"End date (YYYY-MM-DD)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/markham/permits/recent":{"get":{"summary":"Recent Building Permits","description":"Get recent building permits sorted by application date (newest first).\n\nUse this to see where construction activity is happening right now.","operationId":"recent_building_permits_api_markham_permits_recent_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Max results","default":20,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset","default":0,"title":"Offset"},"description":"Results offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/markham/permits/batch":{"post":{"summary":"Get Building Permits Batch","description":"Get multiple building permits by permit numbers in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of permit numbers.\nExample: {\"ids\": [\"BP123456\", \"BP789012\"]}\nMaximum 100 permit numbers per request.","operationId":"get_building_permits_batch_api_markham_permits_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Building Permits Batch Api Markham Permits Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/markham/permits/{permit_number}":{"get":{"summary":"Get Building Permit","description":"Get building permit details by permit number.\n\nServes HTML for browsers, JSON for API clients.","operationId":"get_building_permit_api_markham_permits__permit_number__get","parameters":[{"name":"permit_number","in":"path","required":true,"schema":{"type":"string","description":"Permit number","title":"Permit Number"},"description":"Permit number"},{"name":"_city_name","in":"query","required":false,"schema":{"default":"Markham","title":" City Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/markham/health":{"get":{"summary":"City Health","description":"City-specific health check.","operationId":"city_health_api_markham_health_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vaughan/entries/{kind}":{"get":{"summary":"List Entries","operationId":"list_entries_api_vaughan_entries__kind__get","parameters":[{"name":"kind","in":"path","required":true,"schema":{"type":"string","description":"Canonical entry kind: property, permit, zoning, or safety","title":"Kind"},"description":"Canonical entry kind: property, permit, zoning, or safety"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"_services","in":"query","required":false,"schema":{"title":" Services"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Entries Api Vaughan Entries  Kind  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vaughan/property/search":{"get":{"summary":"Search Property","description":"Search for properties by address, or browse all if no address specified.\nSupports sorting by assessed_value, address, year_built, community, or lot_size_sqft.\nSupports value range filtering with min_value and max_value.\n Supports property_type and year range filters.","operationId":"search_property_api_vaughan_property_search_get","parameters":[{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Street address to search (omit to browse all)","title":"Address"},"description":"Street address to search (omit to browse all)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max results to return (up to 1000 for map browse)","default":10,"title":"Limit"},"description":"Max results to return (up to 1000 for map browse)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset for pagination","default":0,"title":"Offset"},"description":"Results offset for pagination"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft","title":"Sort By"},"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"asc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"},{"name":"property_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property type filter (e.g. RE, Residential)","title":"Property Type"},"description":"Property type filter (e.g. RE, Residential)"},{"name":"min_year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter: minimum year built","title":"Min Year"},"description":"Filter: minimum year built"},{"name":"max_year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter: maximum year built","title":"Max Year"},"description":"Filter: maximum year built"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertySearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vaughan/property/list":{"get":{"summary":"List Property","description":"List all properties with pagination, sorting, and value range filtering.\n\nUse this endpoint to browse available property records and discover valid roll numbers.\nReturns paginated results with total count for client-side pagination.\nSort by assessed_value with order=desc to find the most expensive properties.","operationId":"list_property_api_vaughan_property_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft","title":"Sort By"},"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"asc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Property Api Vaughan Property List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vaughan/property/geojson":{"get":{"summary":"Property Geojson","operationId":"property_geojson_api_vaughan_property_geojson_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500000,"minimum":1,"description":"Max features to return (cap prevents browser overload for large cities)","default":50000,"title":"Limit"},"description":"Max features to return (cap prevents browser overload for large cities)"},{"name":"sw_lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport south-west latitude","title":"Sw Lat"},"description":"Viewport south-west latitude"},{"name":"sw_lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport south-west longitude","title":"Sw Lon"},"description":"Viewport south-west longitude"},{"name":"ne_lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport north-east latitude","title":"Ne Lat"},"description":"Viewport north-east latitude"},{"name":"ne_lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport north-east longitude","title":"Ne Lon"},"description":"Viewport north-east longitude"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Offset for pagination through viewport results (use with limit)","default":0,"title":"Offset"},"description":"Offset for pagination through viewport results (use with limit)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vaughan/property/top":{"get":{"summary":"Top Property","description":"Get top-N properties sorted by any numeric column.\n\nConvenience endpoint for AI agents and dashboards. Returns the top\nN properties sorted by the given column. Defaults to most expensive\n(assessed_value descending). Combine with min_value/max_value to\nfind e.g. the most expensive residential properties.","operationId":"top_property_api_vaughan_property_top_get","parameters":[{"name":"n","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Number of top properties to return","default":10,"title":"N"},"description":"Number of top properties to return"},{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","description":"Sort column: assessed_value, year_built, lot_size_sqft","default":"assessed_value","title":"Sort By"},"description":"Sort column: assessed_value, year_built, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"desc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Top Property Api Vaughan Property Top Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vaughan/property/stats":{"get":{"summary":"Property Stats","description":"Get property assessment statistics.","operationId":"property_stats_api_vaughan_property_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vaughan/property/autocomplete":{"get":{"summary":"Property Autocomplete","description":"Get address and roll number suggestions for typeahead search.","operationId":"property_autocomplete_api_vaughan_property_autocomplete_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"description":"Search query for address/roll number suggestions","title":"Q"},"description":"Search query for address/roll number suggestions"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":25,"minimum":1,"description":"Max suggestions to return","default":10,"title":"Limit"},"description":"Max suggestions to return"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vaughan/property/geocode":{"post":{"summary":"Property Geocode","description":"Geocode property addresses to lat/lon coordinates.\n\nAccepts a JSON body with 'addresses' (list of address strings, max 50).\nReturns cached results instantly; uncached addresses are geocoded via Nominatim.\n\nExample: {\"addresses\": [\"123 Main St\", \"456 Oak Ave\"]}","operationId":"property_geocode_api_vaughan_property_geocode_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vaughan/property/by-dls":{"get":{"summary":"Get Property By Dls","description":"Get property assessment by DLS coordinates.","operationId":"get_property_by_dls_api_vaughan_property_by_dls_get","parameters":[{"name":"quarter","in":"query","required":true,"schema":{"type":"string","description":"Quarter section (e.g., SW)","title":"Quarter"},"description":"Quarter section (e.g., SW)"},{"name":"section","in":"query","required":true,"schema":{"type":"integer","description":"Section number","title":"Section"},"description":"Section number"},{"name":"township","in":"query","required":true,"schema":{"type":"integer","description":"Township number","title":"Township"},"description":"Township number"},{"name":"range","in":"query","required":true,"schema":{"type":"integer","description":"Range number","title":"Range"},"description":"Range number"},{"name":"meridian","in":"query","required":true,"schema":{"type":"integer","description":"Meridian number","title":"Meridian"},"description":"Meridian number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyAssessment"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vaughan/property/by-gps":{"get":{"summary":"Get Property By Gps","description":"Find coordinate-bearing assessment records nearest a GPS point.\n\nResults are point-nearness matches unless the municipal source supplies\nparcel polygons; clients should not interpret proximity as legal parcel\ncontainment.","operationId":"get_property_by_gps_api_vaughan_property_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":84.0,"minimum":41.0,"description":"Canadian latitude","title":"Lat"},"description":"Canadian latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":-52.0,"minimum":-142.0,"description":"Canadian longitude","title":"Lon"},"description":"Canadian longitude"},{"name":"radius_m","in":"query","required":false,"schema":{"type":"integer","maximum":5000,"minimum":1,"description":"Maximum point distance","default":100,"title":"Radius M"},"description":"Maximum point distance"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":10,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Property By Gps Api Vaughan Property By Gps Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vaughan/property/by-roll/{roll_number}":{"get":{"summary":"Get Property By Roll","description":"Get property assessment by roll number.","operationId":"get_property_by_roll_api_vaughan_property_by_roll__roll_number__get","parameters":[{"name":"roll_number","in":"path","required":true,"schema":{"type":"string","description":"Property roll number","title":"Roll Number"},"description":"Property roll number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyAssessment"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vaughan/property/report":{"get":{"summary":"Property Report Lookup","description":"Consolidated report by roll number, address, or GPS.","operationId":"property_report_lookup_api_vaughan_property_report_get","parameters":[{"name":"roll_number","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property roll number","title":"Roll Number"},"description":"Property roll number"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Street address","title":"Address"},"description":"Street address"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyReport"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vaughan/property/report/{roll_number}":{"get":{"summary":"Property Report","description":"Get consolidated property report: assessment + building permits + zoning + DLS.","operationId":"property_report_api_vaughan_property_report__roll_number__get","parameters":[{"name":"roll_number","in":"path","required":true,"schema":{"type":"string","description":"Property roll number","title":"Roll Number"},"description":"Property roll number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyReport"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vaughan/property/batch":{"post":{"summary":"Get Properties Batch","description":"Get multiple properties by roll numbers in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of roll numbers.\nExample: {\"ids\": [\"123456789\", \"987654321\"]}\nMaximum 100 roll numbers per request.","operationId":"get_properties_batch_api_vaughan_property_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Properties Batch Api Vaughan Property Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vaughan/property/export":{"get":{"summary":"Export Properties","description":"Export property data as CSV or GeoJSON.\n\nSupports filtering by address, property type, and assessed value range.\nMaximum 10,000 records per export.","operationId":"export_properties_api_vaughan_property_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Address filter","title":"Address"},"description":"Address filter"},{"name":"property_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property type filter","title":"Property Type"},"description":"Property type filter"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum assessed value","title":"Min Value"},"description":"Minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum assessed value","title":"Max Value"},"description":"Maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vaughan/census/profile":{"get":{"summary":"Get Census Profile","description":"Get census profile for a specific Dissemination Area.\n\nProvide either da_id directly, OR lat+lon to find the nearest DA automatically.","operationId":"get_census_profile_api_vaughan_census_profile_get","parameters":[{"name":"da_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Dissemination Area ID (e.g., 48820001)","title":"Da Id"},"description":"Dissemination Area ID (e.g., 48820001)"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude for nearest-DA lookup","title":"Lat"},"description":"Latitude for nearest-DA lookup"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude for nearest-DA lookup","title":"Lon"},"description":"Longitude for nearest-DA lookup"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusProfile"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vaughan/census/batch":{"post":{"summary":"Get Census Batch","description":"Get multiple census profiles by DA IDs in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of DA IDs.\nExample: {\"ids\": [\"48820001\", \"48820002\"]}\nMaximum 100 DA IDs per request.","operationId":"get_census_batch_api_vaughan_census_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Census Batch Api Vaughan Census Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vaughan/census/export":{"get":{"summary":"Export Census","description":"Export census data as CSV.\n\nSupports filtering by population range and geography type.\nMaximum 10,000 records per export.","operationId":"export_census_api_vaughan_census_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv only","default":"csv","title":"Format"},"description":"Export format: csv only"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"min_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Minimum population filter","title":"Min Population"},"description":"Minimum population filter"},{"name":"max_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Maximum population filter","title":"Max Population"},"description":"Maximum population filter"},{"name":"geography_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Geography type filter (DA, CT, CMA)","title":"Geography Type"},"description":"Geography type filter (DA, CT, CMA)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vaughan/census/list":{"get":{"summary":"List Census Profiles","description":"List all census profiles with pagination.\n\nUse this endpoint to browse available census profiles and discover valid DA IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_census_profiles_api_vaughan_census_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Census Profiles Api Vaughan Census List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vaughan/census/by-gps":{"get":{"summary":"Get Census By Gps","description":"Get census data for GPS coordinates.","operationId":"get_census_by_gps_api_vaughan_census_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90,"minimum":-90,"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":180,"minimum":-180,"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vaughan/census/by-dls":{"get":{"summary":"Get Census By Dls","description":"Get census data for DLS coordinates.","operationId":"get_census_by_dls_api_vaughan_census_by_dls_get","parameters":[{"name":"dls","in":"query","required":true,"schema":{"type":"string","description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)","title":"Dls"},"description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vaughan/census/map-data":{"get":{"summary":"Get Census Map Data","description":"Get lightweight DA points for choropleth map rendering.\n\nReturns centroid coordinates and key metrics (income, age, population,\nhousehold size, employment rate) for all DAs in the city.\nUsed by the census dashboard to render color-coded maps.","operationId":"get_census_map_data_api_vaughan_census_map_data_get","parameters":[{"name":"year","in":"query","required":false,"schema":{"type":"integer","description":"Census year for DA map data","default":2021,"title":"Year"},"description":"Census year for DA map data"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vaughan/census/stats":{"get":{"summary":"Census Stats","description":"Get census data statistics.","operationId":"census_stats_api_vaughan_census_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vaughan/census/compare":{"get":{"summary":"Census Compare","description":"Compare key census metrics across multiple years.\n\nReturns side-by-side comparison of population, households,\navg_income, median_age, density, and land_area for each requested year.\nYears without data return null for that year's values.","operationId":"census_compare_api_vaughan_census_compare_get","parameters":[{"name":"years","in":"query","required":false,"schema":{"type":"string","description":"Comma-separated census years (e.g., 2016,2021)","default":"2021","title":"Years"},"description":"Comma-separated census years (e.g., 2016,2021)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vaughan/census/time-series":{"get":{"summary":"Census Timeseries","description":"Get year-by-year census trends for this city.\n\nReturns population, income, age, and household trends across all\navailable census years. Useful for spotting long-term demographic shifts.","operationId":"census_timeseries_api_vaughan_census_time_series_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vaughan/geography/list":{"get":{"summary":"Geography List","description":"List geography boundaries for this city.","operationId":"geography_list_api_vaughan_geography_list_get","parameters":[{"name":"type","in":"query","required":false,"schema":{"type":"string","title":"Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vaughan/geography/by-gps":{"get":{"summary":"Geography By Gps","description":"Find the geography boundary containing a GPS point.","operationId":"geography_by_gps_api_vaughan_geography_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","title":"Lat"}},{"name":"lon","in":"query","required":true,"schema":{"type":"number","title":"Lon"}},{"name":"type","in":"query","required":false,"schema":{"type":"string","default":"DA","title":"Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vaughan/geography/stats":{"get":{"summary":"Geography Stats","description":"Get geography statistics for this city.","operationId":"geography_stats_api_vaughan_geography_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vaughan/geography/{geoid}":{"get":{"summary":"Geography Boundary","description":"Get a specific geography boundary by geoid, including GeoJSON polygon.","operationId":"geography_boundary_api_vaughan_geography__geoid__get","parameters":[{"name":"geoid","in":"path","required":true,"schema":{"type":"string","title":"Geoid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vaughan/census/rental/list":{"get":{"summary":"List Rental Prices","description":"List rental price records for this city, with optional unit type filter.","operationId":"list_rental_prices_api_vaughan_census_rental_list_get","parameters":[{"name":"unit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":50,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalPriceListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vaughan/census/rental/trend":{"get":{"summary":"Get Rental Trend","description":"Get rental price time series for a specific unit type.","operationId":"get_rental_trend_api_vaughan_census_rental_trend_get","parameters":[{"name":"unit_type","in":"query","required":true,"schema":{"type":"string","description":"Rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Rental unit type (e.g. 'Apartment - 1 bedroom')"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalTrendResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vaughan/census/rental/types":{"get":{"summary":"Get Rental Types","description":"Get available rental unit types for this city.","operationId":"get_rental_types_api_vaughan_census_rental_types_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vaughan/zoning/by-gps":{"get":{"summary":"Get Zoning By Gps","description":"Get zoning district for GPS coordinates.","operationId":"get_zoning_by_gps_api_vaughan_zoning_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZoningByGPSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vaughan/zoning/by-id/{district_id}":{"get":{"summary":"Get Zoning By Id","description":"Get a single zoning district by its numeric ID.","operationId":"get_zoning_by_id_api_vaughan_zoning_by_id__district_id__get","parameters":[{"name":"district_id","in":"path","required":true,"schema":{"type":"integer","description":"Zoning district numeric ID","title":"District Id"},"description":"Zoning district numeric ID"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning By Id Api Vaughan Zoning By Id  District Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vaughan/zoning/by-code/{code}":{"get":{"summary":"Get Zoning By Code","description":"Get all districts with a specific zone code.","operationId":"get_zoning_by_code_api_vaughan_zoning_by_code__code__get","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","description":"Zone code (e.g., C-C1, R-G)","title":"Code"},"description":"Zone code (e.g., C-C1, R-G)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoningDistrict"},"title":"Response Get Zoning By Code Api Vaughan Zoning By Code  Code  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vaughan/zoning/batch":{"post":{"summary":"Get Zoning Batch","description":"Get multiple zoning districts by zone codes in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of zone codes.\nExample: {\"ids\": [\"CR20-C20/R20\", \"C-C1\", \"R-G\"]}\nMaximum 100 zone codes per request.","operationId":"get_zoning_batch_api_vaughan_zoning_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning Batch Api Vaughan Zoning Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vaughan/zoning/list":{"get":{"summary":"List Zoning Districts","description":"List all zoning districts with pagination.\n\nUse this endpoint to browse available zoning districts and discover valid IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_zoning_districts_api_vaughan_zoning_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Zoning Districts Api Vaughan Zoning List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vaughan/zoning/codes":{"get":{"summary":"List Zone Codes","description":"List all zone codes with descriptions.","operationId":"list_zone_codes_api_vaughan_zoning_codes_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"type":"string","description":"Filter by major category (e.g., Commercial, Residential)","title":"Category"},"description":"Filter by major category (e.g., Commercial, Residential)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoneCodeInfo"},"title":"Response List Zone Codes Api Vaughan Zoning Codes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vaughan/zoning/stats":{"get":{"summary":"Zoning Stats","description":"Get zoning statistics.","operationId":"zoning_stats_api_vaughan_zoning_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vaughan/zoning/export":{"get":{"summary":"Export Zoning","description":"Export zoning district data as CSV or GeoJSON.\n\nSupports filtering by zone code, category, and area range.\nMaximum 10,000 records per export.","operationId":"export_zoning_api_vaughan_zoning_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"zone_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Zone code filter (e.g., CR2)","title":"Zone Code"},"description":"Zone code filter (e.g., CR2)"},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Major category filter","title":"Category"},"description":"Major category filter"},{"name":"min_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum area in sq km","title":"Min Area"},"description":"Minimum area in sq km"},{"name":"max_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum area in sq km","title":"Max Area"},"description":"Maximum area in sq km"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vaughan/permits/stats":{"get":{"summary":"Building Stats","description":"Get building permit statistics.","operationId":"building_stats_api_vaughan_permits_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vaughan/permits/search":{"get":{"summary":"Search Building Permits","description":"Search building permits by address, contractor, applicant, permit number, and/or permit type.","operationId":"search_building_permits_api_vaughan_permits_search_get","parameters":[{"name":"address","in":"query","required":false,"schema":{"type":"string","description":"Address to search","title":"Address"},"description":"Address to search"},{"name":"q","in":"query","required":false,"schema":{"type":"string","description":"General text search (address, contractor, applicant, permit #)","title":"Q"},"description":"General text search (address, contractor, applicant, permit #)"},{"name":"permit_type","in":"query","required":false,"schema":{"type":"string","description":"Filter by permit type","title":"Permit Type"},"description":"Filter by permit type"},{"name":"bbox","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bounding box: min_lon,min_lat,max_lon,max_lat","title":"Bbox"},"description":"Bounding box: min_lon,min_lat,max_lon,max_lat"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max results","default":20,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset","default":0,"title":"Offset"},"description":"Results offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vaughan/permits/nearby":{"get":{"summary":"Nearby Building Permits","description":"Coordinate-first alias for nearby building permits.","operationId":"nearby_building_permits_api_vaughan_permits_nearby_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":84.0,"minimum":41.0,"description":"Canadian latitude","title":"Lat"},"description":"Canadian latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":-52.0,"minimum":-142.0,"description":"Canadian longitude","title":"Lon"},"description":"Canadian longitude"},{"name":"radius_m","in":"query","required":false,"schema":{"type":"integer","maximum":50000,"minimum":1,"default":1000,"title":"Radius M"}},{"name":"permit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Permit Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vaughan/permits/export":{"get":{"summary":"Export Building Permits","description":"Export building permit data as CSV or GeoJSON.\n\nSupports filtering by address, permit type, and date range.\nMaximum 10,000 records per export.","operationId":"export_building_permits_api_vaughan_permits_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Address filter","title":"Address"},"description":"Address filter"},{"name":"permit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Permit type filter","title":"Permit Type"},"description":"Permit type filter"},{"name":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Start date (YYYY-MM-DD)","title":"Date From"},"description":"Start date (YYYY-MM-DD)"},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"End date (YYYY-MM-DD)","title":"Date To"},"description":"End date (YYYY-MM-DD)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vaughan/permits/recent":{"get":{"summary":"Recent Building Permits","description":"Get recent building permits sorted by application date (newest first).\n\nUse this to see where construction activity is happening right now.","operationId":"recent_building_permits_api_vaughan_permits_recent_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Max results","default":20,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset","default":0,"title":"Offset"},"description":"Results offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vaughan/permits/batch":{"post":{"summary":"Get Building Permits Batch","description":"Get multiple building permits by permit numbers in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of permit numbers.\nExample: {\"ids\": [\"BP123456\", \"BP789012\"]}\nMaximum 100 permit numbers per request.","operationId":"get_building_permits_batch_api_vaughan_permits_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Building Permits Batch Api Vaughan Permits Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vaughan/permits/{permit_number}":{"get":{"summary":"Get Building Permit","description":"Get building permit details by permit number.\n\nServes HTML for browsers, JSON for API clients.","operationId":"get_building_permit_api_vaughan_permits__permit_number__get","parameters":[{"name":"permit_number","in":"path","required":true,"schema":{"type":"string","description":"Permit number","title":"Permit Number"},"description":"Permit number"},{"name":"_city_name","in":"query","required":false,"schema":{"default":"Vaughan","title":" City Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vaughan/health":{"get":{"summary":"City Health","description":"City-specific health check.","operationId":"city_health_api_vaughan_health_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/london/entries/{kind}":{"get":{"summary":"List Entries","operationId":"list_entries_api_london_entries__kind__get","parameters":[{"name":"kind","in":"path","required":true,"schema":{"type":"string","description":"Canonical entry kind: property, permit, zoning, or safety","title":"Kind"},"description":"Canonical entry kind: property, permit, zoning, or safety"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"_services","in":"query","required":false,"schema":{"title":" Services"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Entries Api London Entries  Kind  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/london/property/search":{"get":{"summary":"Search Property","description":"Search for properties by address, or browse all if no address specified.\nSupports sorting by assessed_value, address, year_built, community, or lot_size_sqft.\nSupports value range filtering with min_value and max_value.\n Supports property_type and year range filters.","operationId":"search_property_api_london_property_search_get","parameters":[{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Street address to search (omit to browse all)","title":"Address"},"description":"Street address to search (omit to browse all)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max results to return (up to 1000 for map browse)","default":10,"title":"Limit"},"description":"Max results to return (up to 1000 for map browse)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset for pagination","default":0,"title":"Offset"},"description":"Results offset for pagination"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft","title":"Sort By"},"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"asc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"},{"name":"property_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property type filter (e.g. RE, Residential)","title":"Property Type"},"description":"Property type filter (e.g. RE, Residential)"},{"name":"min_year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter: minimum year built","title":"Min Year"},"description":"Filter: minimum year built"},{"name":"max_year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter: maximum year built","title":"Max Year"},"description":"Filter: maximum year built"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertySearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/london/property/list":{"get":{"summary":"List Property","description":"List all properties with pagination, sorting, and value range filtering.\n\nUse this endpoint to browse available property records and discover valid roll numbers.\nReturns paginated results with total count for client-side pagination.\nSort by assessed_value with order=desc to find the most expensive properties.","operationId":"list_property_api_london_property_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft","title":"Sort By"},"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"asc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Property Api London Property List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/london/property/geojson":{"get":{"summary":"Property Geojson","operationId":"property_geojson_api_london_property_geojson_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500000,"minimum":1,"description":"Max features to return (cap prevents browser overload for large cities)","default":50000,"title":"Limit"},"description":"Max features to return (cap prevents browser overload for large cities)"},{"name":"sw_lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport south-west latitude","title":"Sw Lat"},"description":"Viewport south-west latitude"},{"name":"sw_lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport south-west longitude","title":"Sw Lon"},"description":"Viewport south-west longitude"},{"name":"ne_lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport north-east latitude","title":"Ne Lat"},"description":"Viewport north-east latitude"},{"name":"ne_lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport north-east longitude","title":"Ne Lon"},"description":"Viewport north-east longitude"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Offset for pagination through viewport results (use with limit)","default":0,"title":"Offset"},"description":"Offset for pagination through viewport results (use with limit)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/london/property/top":{"get":{"summary":"Top Property","description":"Get top-N properties sorted by any numeric column.\n\nConvenience endpoint for AI agents and dashboards. Returns the top\nN properties sorted by the given column. Defaults to most expensive\n(assessed_value descending). Combine with min_value/max_value to\nfind e.g. the most expensive residential properties.","operationId":"top_property_api_london_property_top_get","parameters":[{"name":"n","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Number of top properties to return","default":10,"title":"N"},"description":"Number of top properties to return"},{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","description":"Sort column: assessed_value, year_built, lot_size_sqft","default":"assessed_value","title":"Sort By"},"description":"Sort column: assessed_value, year_built, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"desc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Top Property Api London Property Top Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/london/property/stats":{"get":{"summary":"Property Stats","description":"Get property assessment statistics.","operationId":"property_stats_api_london_property_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/london/property/autocomplete":{"get":{"summary":"Property Autocomplete","description":"Get address and roll number suggestions for typeahead search.","operationId":"property_autocomplete_api_london_property_autocomplete_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"description":"Search query for address/roll number suggestions","title":"Q"},"description":"Search query for address/roll number suggestions"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":25,"minimum":1,"description":"Max suggestions to return","default":10,"title":"Limit"},"description":"Max suggestions to return"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/london/property/geocode":{"post":{"summary":"Property Geocode","description":"Geocode property addresses to lat/lon coordinates.\n\nAccepts a JSON body with 'addresses' (list of address strings, max 50).\nReturns cached results instantly; uncached addresses are geocoded via Nominatim.\n\nExample: {\"addresses\": [\"123 Main St\", \"456 Oak Ave\"]}","operationId":"property_geocode_api_london_property_geocode_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/london/property/by-dls":{"get":{"summary":"Get Property By Dls","description":"Get property assessment by DLS coordinates.","operationId":"get_property_by_dls_api_london_property_by_dls_get","parameters":[{"name":"quarter","in":"query","required":true,"schema":{"type":"string","description":"Quarter section (e.g., SW)","title":"Quarter"},"description":"Quarter section (e.g., SW)"},{"name":"section","in":"query","required":true,"schema":{"type":"integer","description":"Section number","title":"Section"},"description":"Section number"},{"name":"township","in":"query","required":true,"schema":{"type":"integer","description":"Township number","title":"Township"},"description":"Township number"},{"name":"range","in":"query","required":true,"schema":{"type":"integer","description":"Range number","title":"Range"},"description":"Range number"},{"name":"meridian","in":"query","required":true,"schema":{"type":"integer","description":"Meridian number","title":"Meridian"},"description":"Meridian number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyAssessment"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/london/property/by-gps":{"get":{"summary":"Get Property By Gps","description":"Find coordinate-bearing assessment records nearest a GPS point.\n\nResults are point-nearness matches unless the municipal source supplies\nparcel polygons; clients should not interpret proximity as legal parcel\ncontainment.","operationId":"get_property_by_gps_api_london_property_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":84.0,"minimum":41.0,"description":"Canadian latitude","title":"Lat"},"description":"Canadian latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":-52.0,"minimum":-142.0,"description":"Canadian longitude","title":"Lon"},"description":"Canadian longitude"},{"name":"radius_m","in":"query","required":false,"schema":{"type":"integer","maximum":5000,"minimum":1,"description":"Maximum point distance","default":100,"title":"Radius M"},"description":"Maximum point distance"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":10,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Property By Gps Api London Property By Gps Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/london/property/by-roll/{roll_number}":{"get":{"summary":"Get Property By Roll","description":"Get property assessment by roll number.","operationId":"get_property_by_roll_api_london_property_by_roll__roll_number__get","parameters":[{"name":"roll_number","in":"path","required":true,"schema":{"type":"string","description":"Property roll number","title":"Roll Number"},"description":"Property roll number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyAssessment"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/london/property/report":{"get":{"summary":"Property Report Lookup","description":"Consolidated report by roll number, address, or GPS.","operationId":"property_report_lookup_api_london_property_report_get","parameters":[{"name":"roll_number","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property roll number","title":"Roll Number"},"description":"Property roll number"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Street address","title":"Address"},"description":"Street address"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyReport"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/london/property/report/{roll_number}":{"get":{"summary":"Property Report","description":"Get consolidated property report: assessment + building permits + zoning + DLS.","operationId":"property_report_api_london_property_report__roll_number__get","parameters":[{"name":"roll_number","in":"path","required":true,"schema":{"type":"string","description":"Property roll number","title":"Roll Number"},"description":"Property roll number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyReport"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/london/property/batch":{"post":{"summary":"Get Properties Batch","description":"Get multiple properties by roll numbers in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of roll numbers.\nExample: {\"ids\": [\"123456789\", \"987654321\"]}\nMaximum 100 roll numbers per request.","operationId":"get_properties_batch_api_london_property_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Properties Batch Api London Property Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/london/property/export":{"get":{"summary":"Export Properties","description":"Export property data as CSV or GeoJSON.\n\nSupports filtering by address, property type, and assessed value range.\nMaximum 10,000 records per export.","operationId":"export_properties_api_london_property_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Address filter","title":"Address"},"description":"Address filter"},{"name":"property_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property type filter","title":"Property Type"},"description":"Property type filter"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum assessed value","title":"Min Value"},"description":"Minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum assessed value","title":"Max Value"},"description":"Maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/london/property/addresses":{"get":{"summary":"London Addresses","description":"List London municipal addresses. Supports filtering by street name.","operationId":"london_addresses_api_london_property_addresses_get","parameters":[{"name":"street","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by street name","title":"Street"},"description":"Filter by street name"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max results to return","default":50,"title":"Limit"},"description":"Max results to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset for pagination","default":0,"title":"Offset"},"description":"Results offset for pagination"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/london/property/buildings":{"get":{"summary":"London Buildings","description":"List London building footprints.","operationId":"london_buildings_api_london_property_buildings_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max results to return","default":50,"title":"Limit"},"description":"Max results to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset for pagination","default":0,"title":"Offset"},"description":"Results offset for pagination"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/london/property/parcels":{"get":{"summary":"London Parcels","description":"List London property parcels.","operationId":"london_parcels_api_london_property_parcels_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max results to return","default":50,"title":"Limit"},"description":"Max results to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset for pagination","default":0,"title":"Offset"},"description":"Results offset for pagination"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/london/property/addresses/count":{"get":{"summary":"London Address Count","description":"Get total count of London addresses.","operationId":"london_address_count_api_london_property_addresses_count_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/london/property/buildings/count":{"get":{"summary":"London Building Count","description":"Get total count of London buildings.","operationId":"london_building_count_api_london_property_buildings_count_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/london/property/parcels/count":{"get":{"summary":"London Parcel Count","description":"Get total count of London parcels.","operationId":"london_parcel_count_api_london_property_parcels_count_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/london/census/profile":{"get":{"summary":"Get Census Profile","description":"Get census profile for a specific Dissemination Area.\n\nProvide either da_id directly, OR lat+lon to find the nearest DA automatically.","operationId":"get_census_profile_api_london_census_profile_get","parameters":[{"name":"da_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Dissemination Area ID (e.g., 48820001)","title":"Da Id"},"description":"Dissemination Area ID (e.g., 48820001)"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude for nearest-DA lookup","title":"Lat"},"description":"Latitude for nearest-DA lookup"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude for nearest-DA lookup","title":"Lon"},"description":"Longitude for nearest-DA lookup"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusProfile"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/london/census/batch":{"post":{"summary":"Get Census Batch","description":"Get multiple census profiles by DA IDs in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of DA IDs.\nExample: {\"ids\": [\"48820001\", \"48820002\"]}\nMaximum 100 DA IDs per request.","operationId":"get_census_batch_api_london_census_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Census Batch Api London Census Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/london/census/export":{"get":{"summary":"Export Census","description":"Export census data as CSV.\n\nSupports filtering by population range and geography type.\nMaximum 10,000 records per export.","operationId":"export_census_api_london_census_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv only","default":"csv","title":"Format"},"description":"Export format: csv only"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"min_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Minimum population filter","title":"Min Population"},"description":"Minimum population filter"},{"name":"max_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Maximum population filter","title":"Max Population"},"description":"Maximum population filter"},{"name":"geography_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Geography type filter (DA, CT, CMA)","title":"Geography Type"},"description":"Geography type filter (DA, CT, CMA)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/london/census/list":{"get":{"summary":"List Census Profiles","description":"List all census profiles with pagination.\n\nUse this endpoint to browse available census profiles and discover valid DA IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_census_profiles_api_london_census_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Census Profiles Api London Census List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/london/census/by-gps":{"get":{"summary":"Get Census By Gps","description":"Get census data for GPS coordinates.","operationId":"get_census_by_gps_api_london_census_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90,"minimum":-90,"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":180,"minimum":-180,"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/london/census/by-dls":{"get":{"summary":"Get Census By Dls","description":"Get census data for DLS coordinates.","operationId":"get_census_by_dls_api_london_census_by_dls_get","parameters":[{"name":"dls","in":"query","required":true,"schema":{"type":"string","description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)","title":"Dls"},"description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/london/census/map-data":{"get":{"summary":"Get Census Map Data","description":"Get lightweight DA points for choropleth map rendering.\n\nReturns centroid coordinates and key metrics (income, age, population,\nhousehold size, employment rate) for all DAs in the city.\nUsed by the census dashboard to render color-coded maps.","operationId":"get_census_map_data_api_london_census_map_data_get","parameters":[{"name":"year","in":"query","required":false,"schema":{"type":"integer","description":"Census year for DA map data","default":2021,"title":"Year"},"description":"Census year for DA map data"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/london/census/stats":{"get":{"summary":"Census Stats","description":"Get census data statistics.","operationId":"census_stats_api_london_census_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/london/census/compare":{"get":{"summary":"Census Compare","description":"Compare key census metrics across multiple years.\n\nReturns side-by-side comparison of population, households,\navg_income, median_age, density, and land_area for each requested year.\nYears without data return null for that year's values.","operationId":"census_compare_api_london_census_compare_get","parameters":[{"name":"years","in":"query","required":false,"schema":{"type":"string","description":"Comma-separated census years (e.g., 2016,2021)","default":"2021","title":"Years"},"description":"Comma-separated census years (e.g., 2016,2021)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/london/census/time-series":{"get":{"summary":"Census Timeseries","description":"Get year-by-year census trends for this city.\n\nReturns population, income, age, and household trends across all\navailable census years. Useful for spotting long-term demographic shifts.","operationId":"census_timeseries_api_london_census_time_series_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/london/geography/list":{"get":{"summary":"Geography List","description":"List geography boundaries for this city.","operationId":"geography_list_api_london_geography_list_get","parameters":[{"name":"type","in":"query","required":false,"schema":{"type":"string","title":"Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/london/geography/by-gps":{"get":{"summary":"Geography By Gps","description":"Find the geography boundary containing a GPS point.","operationId":"geography_by_gps_api_london_geography_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","title":"Lat"}},{"name":"lon","in":"query","required":true,"schema":{"type":"number","title":"Lon"}},{"name":"type","in":"query","required":false,"schema":{"type":"string","default":"DA","title":"Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/london/geography/stats":{"get":{"summary":"Geography Stats","description":"Get geography statistics for this city.","operationId":"geography_stats_api_london_geography_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/london/geography/{geoid}":{"get":{"summary":"Geography Boundary","description":"Get a specific geography boundary by geoid, including GeoJSON polygon.","operationId":"geography_boundary_api_london_geography__geoid__get","parameters":[{"name":"geoid","in":"path","required":true,"schema":{"type":"string","title":"Geoid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/london/census/rental/list":{"get":{"summary":"List Rental Prices","description":"List rental price records for this city, with optional unit type filter.","operationId":"list_rental_prices_api_london_census_rental_list_get","parameters":[{"name":"unit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":50,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalPriceListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/london/census/rental/trend":{"get":{"summary":"Get Rental Trend","description":"Get rental price time series for a specific unit type.","operationId":"get_rental_trend_api_london_census_rental_trend_get","parameters":[{"name":"unit_type","in":"query","required":true,"schema":{"type":"string","description":"Rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Rental unit type (e.g. 'Apartment - 1 bedroom')"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalTrendResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/london/census/rental/types":{"get":{"summary":"Get Rental Types","description":"Get available rental unit types for this city.","operationId":"get_rental_types_api_london_census_rental_types_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/london/zoning/by-gps":{"get":{"summary":"Get Zoning By Gps","description":"Get zoning district for GPS coordinates.","operationId":"get_zoning_by_gps_api_london_zoning_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZoningByGPSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/london/zoning/by-id/{district_id}":{"get":{"summary":"Get Zoning By Id","description":"Get a single zoning district by its numeric ID.","operationId":"get_zoning_by_id_api_london_zoning_by_id__district_id__get","parameters":[{"name":"district_id","in":"path","required":true,"schema":{"type":"integer","description":"Zoning district numeric ID","title":"District Id"},"description":"Zoning district numeric ID"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning By Id Api London Zoning By Id  District Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/london/zoning/by-code/{code}":{"get":{"summary":"Get Zoning By Code","description":"Get all districts with a specific zone code.","operationId":"get_zoning_by_code_api_london_zoning_by_code__code__get","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","description":"Zone code (e.g., C-C1, R-G)","title":"Code"},"description":"Zone code (e.g., C-C1, R-G)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoningDistrict"},"title":"Response Get Zoning By Code Api London Zoning By Code  Code  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/london/zoning/batch":{"post":{"summary":"Get Zoning Batch","description":"Get multiple zoning districts by zone codes in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of zone codes.\nExample: {\"ids\": [\"CR20-C20/R20\", \"C-C1\", \"R-G\"]}\nMaximum 100 zone codes per request.","operationId":"get_zoning_batch_api_london_zoning_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning Batch Api London Zoning Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/london/zoning/list":{"get":{"summary":"List Zoning Districts","description":"List all zoning districts with pagination.\n\nUse this endpoint to browse available zoning districts and discover valid IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_zoning_districts_api_london_zoning_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Zoning Districts Api London Zoning List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/london/zoning/codes":{"get":{"summary":"List Zone Codes","description":"List all zone codes with descriptions.","operationId":"list_zone_codes_api_london_zoning_codes_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"type":"string","description":"Filter by major category (e.g., Commercial, Residential)","title":"Category"},"description":"Filter by major category (e.g., Commercial, Residential)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoneCodeInfo"},"title":"Response List Zone Codes Api London Zoning Codes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/london/zoning/stats":{"get":{"summary":"Zoning Stats","description":"Get zoning statistics.","operationId":"zoning_stats_api_london_zoning_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/london/zoning/export":{"get":{"summary":"Export Zoning","description":"Export zoning district data as CSV or GeoJSON.\n\nSupports filtering by zone code, category, and area range.\nMaximum 10,000 records per export.","operationId":"export_zoning_api_london_zoning_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"zone_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Zone code filter (e.g., CR2)","title":"Zone Code"},"description":"Zone code filter (e.g., CR2)"},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Major category filter","title":"Category"},"description":"Major category filter"},{"name":"min_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum area in sq km","title":"Min Area"},"description":"Minimum area in sq km"},{"name":"max_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum area in sq km","title":"Max Area"},"description":"Maximum area in sq km"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/london/permits/stats":{"get":{"summary":"Building Stats","description":"Get building permit statistics.","operationId":"building_stats_api_london_permits_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/london/permits/search":{"get":{"summary":"Search Building Permits","description":"Search building permits by address, contractor, applicant, permit number, and/or permit type.","operationId":"search_building_permits_api_london_permits_search_get","parameters":[{"name":"address","in":"query","required":false,"schema":{"type":"string","description":"Address to search","title":"Address"},"description":"Address to search"},{"name":"q","in":"query","required":false,"schema":{"type":"string","description":"General text search (address, contractor, applicant, permit #)","title":"Q"},"description":"General text search (address, contractor, applicant, permit #)"},{"name":"permit_type","in":"query","required":false,"schema":{"type":"string","description":"Filter by permit type","title":"Permit Type"},"description":"Filter by permit type"},{"name":"bbox","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bounding box: min_lon,min_lat,max_lon,max_lat","title":"Bbox"},"description":"Bounding box: min_lon,min_lat,max_lon,max_lat"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max results","default":20,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset","default":0,"title":"Offset"},"description":"Results offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/london/permits/nearby":{"get":{"summary":"Nearby Building Permits","description":"Coordinate-first alias for nearby building permits.","operationId":"nearby_building_permits_api_london_permits_nearby_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":84.0,"minimum":41.0,"description":"Canadian latitude","title":"Lat"},"description":"Canadian latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":-52.0,"minimum":-142.0,"description":"Canadian longitude","title":"Lon"},"description":"Canadian longitude"},{"name":"radius_m","in":"query","required":false,"schema":{"type":"integer","maximum":50000,"minimum":1,"default":1000,"title":"Radius M"}},{"name":"permit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Permit Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/london/permits/export":{"get":{"summary":"Export Building Permits","description":"Export building permit data as CSV or GeoJSON.\n\nSupports filtering by address, permit type, and date range.\nMaximum 10,000 records per export.","operationId":"export_building_permits_api_london_permits_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Address filter","title":"Address"},"description":"Address filter"},{"name":"permit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Permit type filter","title":"Permit Type"},"description":"Permit type filter"},{"name":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Start date (YYYY-MM-DD)","title":"Date From"},"description":"Start date (YYYY-MM-DD)"},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"End date (YYYY-MM-DD)","title":"Date To"},"description":"End date (YYYY-MM-DD)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/london/permits/recent":{"get":{"summary":"Recent Building Permits","description":"Get recent building permits sorted by application date (newest first).\n\nUse this to see where construction activity is happening right now.","operationId":"recent_building_permits_api_london_permits_recent_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Max results","default":20,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset","default":0,"title":"Offset"},"description":"Results offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/london/permits/batch":{"post":{"summary":"Get Building Permits Batch","description":"Get multiple building permits by permit numbers in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of permit numbers.\nExample: {\"ids\": [\"BP123456\", \"BP789012\"]}\nMaximum 100 permit numbers per request.","operationId":"get_building_permits_batch_api_london_permits_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Building Permits Batch Api London Permits Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/london/permits/{permit_number}":{"get":{"summary":"Get Building Permit","description":"Get building permit details by permit number.\n\nServes HTML for browsers, JSON for API clients.","operationId":"get_building_permit_api_london_permits__permit_number__get","parameters":[{"name":"permit_number","in":"path","required":true,"schema":{"type":"string","description":"Permit number","title":"Permit Number"},"description":"Permit number"},{"name":"_city_name","in":"query","required":false,"schema":{"default":"London","title":" City Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/london/health":{"get":{"summary":"City Health","description":"City-specific health check.","operationId":"city_health_api_london_health_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/regina/entries/{kind}":{"get":{"summary":"List Entries","operationId":"list_entries_api_regina_entries__kind__get","parameters":[{"name":"kind","in":"path","required":true,"schema":{"type":"string","description":"Canonical entry kind: property, permit, zoning, or safety","title":"Kind"},"description":"Canonical entry kind: property, permit, zoning, or safety"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"_services","in":"query","required":false,"schema":{"title":" Services"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Entries Api Regina Entries  Kind  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/regina/property/search":{"get":{"summary":"Search Property","description":"Search for properties by address, or browse all if no address specified.\nSupports sorting by assessed_value, address, year_built, community, or lot_size_sqft.\nSupports value range filtering with min_value and max_value.\n Supports property_type and year range filters.","operationId":"search_property_api_regina_property_search_get","parameters":[{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Street address to search (omit to browse all)","title":"Address"},"description":"Street address to search (omit to browse all)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max results to return (up to 1000 for map browse)","default":10,"title":"Limit"},"description":"Max results to return (up to 1000 for map browse)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset for pagination","default":0,"title":"Offset"},"description":"Results offset for pagination"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft","title":"Sort By"},"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"asc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"},{"name":"property_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property type filter (e.g. RE, Residential)","title":"Property Type"},"description":"Property type filter (e.g. RE, Residential)"},{"name":"min_year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter: minimum year built","title":"Min Year"},"description":"Filter: minimum year built"},{"name":"max_year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter: maximum year built","title":"Max Year"},"description":"Filter: maximum year built"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertySearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/regina/property/list":{"get":{"summary":"List Property","description":"List all properties with pagination, sorting, and value range filtering.\n\nUse this endpoint to browse available property records and discover valid roll numbers.\nReturns paginated results with total count for client-side pagination.\nSort by assessed_value with order=desc to find the most expensive properties.","operationId":"list_property_api_regina_property_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft","title":"Sort By"},"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"asc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Property Api Regina Property List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/regina/property/geojson":{"get":{"summary":"Property Geojson","operationId":"property_geojson_api_regina_property_geojson_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500000,"minimum":1,"description":"Max features to return (cap prevents browser overload for large cities)","default":50000,"title":"Limit"},"description":"Max features to return (cap prevents browser overload for large cities)"},{"name":"sw_lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport south-west latitude","title":"Sw Lat"},"description":"Viewport south-west latitude"},{"name":"sw_lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport south-west longitude","title":"Sw Lon"},"description":"Viewport south-west longitude"},{"name":"ne_lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport north-east latitude","title":"Ne Lat"},"description":"Viewport north-east latitude"},{"name":"ne_lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport north-east longitude","title":"Ne Lon"},"description":"Viewport north-east longitude"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Offset for pagination through viewport results (use with limit)","default":0,"title":"Offset"},"description":"Offset for pagination through viewport results (use with limit)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/regina/property/top":{"get":{"summary":"Top Property","description":"Get top-N properties sorted by any numeric column.\n\nConvenience endpoint for AI agents and dashboards. Returns the top\nN properties sorted by the given column. Defaults to most expensive\n(assessed_value descending). Combine with min_value/max_value to\nfind e.g. the most expensive residential properties.","operationId":"top_property_api_regina_property_top_get","parameters":[{"name":"n","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Number of top properties to return","default":10,"title":"N"},"description":"Number of top properties to return"},{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","description":"Sort column: assessed_value, year_built, lot_size_sqft","default":"assessed_value","title":"Sort By"},"description":"Sort column: assessed_value, year_built, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"desc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Top Property Api Regina Property Top Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/regina/property/stats":{"get":{"summary":"Property Stats","description":"Get property assessment statistics.","operationId":"property_stats_api_regina_property_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/regina/property/autocomplete":{"get":{"summary":"Property Autocomplete","description":"Get address and roll number suggestions for typeahead search.","operationId":"property_autocomplete_api_regina_property_autocomplete_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"description":"Search query for address/roll number suggestions","title":"Q"},"description":"Search query for address/roll number suggestions"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":25,"minimum":1,"description":"Max suggestions to return","default":10,"title":"Limit"},"description":"Max suggestions to return"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/regina/property/geocode":{"post":{"summary":"Property Geocode","description":"Geocode property addresses to lat/lon coordinates.\n\nAccepts a JSON body with 'addresses' (list of address strings, max 50).\nReturns cached results instantly; uncached addresses are geocoded via Nominatim.\n\nExample: {\"addresses\": [\"123 Main St\", \"456 Oak Ave\"]}","operationId":"property_geocode_api_regina_property_geocode_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/regina/property/by-dls":{"get":{"summary":"Get Property By Dls","description":"Get property assessment by DLS coordinates.","operationId":"get_property_by_dls_api_regina_property_by_dls_get","parameters":[{"name":"quarter","in":"query","required":true,"schema":{"type":"string","description":"Quarter section (e.g., SW)","title":"Quarter"},"description":"Quarter section (e.g., SW)"},{"name":"section","in":"query","required":true,"schema":{"type":"integer","description":"Section number","title":"Section"},"description":"Section number"},{"name":"township","in":"query","required":true,"schema":{"type":"integer","description":"Township number","title":"Township"},"description":"Township number"},{"name":"range","in":"query","required":true,"schema":{"type":"integer","description":"Range number","title":"Range"},"description":"Range number"},{"name":"meridian","in":"query","required":true,"schema":{"type":"integer","description":"Meridian number","title":"Meridian"},"description":"Meridian number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyAssessment"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/regina/property/by-gps":{"get":{"summary":"Get Property By Gps","description":"Find coordinate-bearing assessment records nearest a GPS point.\n\nResults are point-nearness matches unless the municipal source supplies\nparcel polygons; clients should not interpret proximity as legal parcel\ncontainment.","operationId":"get_property_by_gps_api_regina_property_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":84.0,"minimum":41.0,"description":"Canadian latitude","title":"Lat"},"description":"Canadian latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":-52.0,"minimum":-142.0,"description":"Canadian longitude","title":"Lon"},"description":"Canadian longitude"},{"name":"radius_m","in":"query","required":false,"schema":{"type":"integer","maximum":5000,"minimum":1,"description":"Maximum point distance","default":100,"title":"Radius M"},"description":"Maximum point distance"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":10,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Property By Gps Api Regina Property By Gps Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/regina/property/by-roll/{roll_number}":{"get":{"summary":"Get Property By Roll","description":"Get property assessment by roll number.","operationId":"get_property_by_roll_api_regina_property_by_roll__roll_number__get","parameters":[{"name":"roll_number","in":"path","required":true,"schema":{"type":"string","description":"Property roll number","title":"Roll Number"},"description":"Property roll number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyAssessment"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/regina/property/report":{"get":{"summary":"Property Report Lookup","description":"Consolidated report by roll number, address, or GPS.","operationId":"property_report_lookup_api_regina_property_report_get","parameters":[{"name":"roll_number","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property roll number","title":"Roll Number"},"description":"Property roll number"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Street address","title":"Address"},"description":"Street address"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyReport"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/regina/property/report/{roll_number}":{"get":{"summary":"Property Report","description":"Get consolidated property report: assessment + building permits + zoning + DLS.","operationId":"property_report_api_regina_property_report__roll_number__get","parameters":[{"name":"roll_number","in":"path","required":true,"schema":{"type":"string","description":"Property roll number","title":"Roll Number"},"description":"Property roll number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyReport"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/regina/property/batch":{"post":{"summary":"Get Properties Batch","description":"Get multiple properties by roll numbers in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of roll numbers.\nExample: {\"ids\": [\"123456789\", \"987654321\"]}\nMaximum 100 roll numbers per request.","operationId":"get_properties_batch_api_regina_property_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Properties Batch Api Regina Property Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/regina/property/export":{"get":{"summary":"Export Properties","description":"Export property data as CSV or GeoJSON.\n\nSupports filtering by address, property type, and assessed value range.\nMaximum 10,000 records per export.","operationId":"export_properties_api_regina_property_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Address filter","title":"Address"},"description":"Address filter"},{"name":"property_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property type filter","title":"Property Type"},"description":"Property type filter"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum assessed value","title":"Min Value"},"description":"Minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum assessed value","title":"Max Value"},"description":"Maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/regina/census/profile":{"get":{"summary":"Get Census Profile","description":"Get census profile for a specific Dissemination Area.\n\nProvide either da_id directly, OR lat+lon to find the nearest DA automatically.","operationId":"get_census_profile_api_regina_census_profile_get","parameters":[{"name":"da_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Dissemination Area ID (e.g., 48820001)","title":"Da Id"},"description":"Dissemination Area ID (e.g., 48820001)"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude for nearest-DA lookup","title":"Lat"},"description":"Latitude for nearest-DA lookup"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude for nearest-DA lookup","title":"Lon"},"description":"Longitude for nearest-DA lookup"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusProfile"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/regina/census/batch":{"post":{"summary":"Get Census Batch","description":"Get multiple census profiles by DA IDs in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of DA IDs.\nExample: {\"ids\": [\"48820001\", \"48820002\"]}\nMaximum 100 DA IDs per request.","operationId":"get_census_batch_api_regina_census_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Census Batch Api Regina Census Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/regina/census/export":{"get":{"summary":"Export Census","description":"Export census data as CSV.\n\nSupports filtering by population range and geography type.\nMaximum 10,000 records per export.","operationId":"export_census_api_regina_census_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv only","default":"csv","title":"Format"},"description":"Export format: csv only"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"min_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Minimum population filter","title":"Min Population"},"description":"Minimum population filter"},{"name":"max_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Maximum population filter","title":"Max Population"},"description":"Maximum population filter"},{"name":"geography_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Geography type filter (DA, CT, CMA)","title":"Geography Type"},"description":"Geography type filter (DA, CT, CMA)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/regina/census/list":{"get":{"summary":"List Census Profiles","description":"List all census profiles with pagination.\n\nUse this endpoint to browse available census profiles and discover valid DA IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_census_profiles_api_regina_census_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Census Profiles Api Regina Census List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/regina/census/by-gps":{"get":{"summary":"Get Census By Gps","description":"Get census data for GPS coordinates.","operationId":"get_census_by_gps_api_regina_census_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90,"minimum":-90,"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":180,"minimum":-180,"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/regina/census/by-dls":{"get":{"summary":"Get Census By Dls","description":"Get census data for DLS coordinates.","operationId":"get_census_by_dls_api_regina_census_by_dls_get","parameters":[{"name":"dls","in":"query","required":true,"schema":{"type":"string","description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)","title":"Dls"},"description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/regina/census/map-data":{"get":{"summary":"Get Census Map Data","description":"Get lightweight DA points for choropleth map rendering.\n\nReturns centroid coordinates and key metrics (income, age, population,\nhousehold size, employment rate) for all DAs in the city.\nUsed by the census dashboard to render color-coded maps.","operationId":"get_census_map_data_api_regina_census_map_data_get","parameters":[{"name":"year","in":"query","required":false,"schema":{"type":"integer","description":"Census year for DA map data","default":2021,"title":"Year"},"description":"Census year for DA map data"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/regina/census/stats":{"get":{"summary":"Census Stats","description":"Get census data statistics.","operationId":"census_stats_api_regina_census_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/regina/census/compare":{"get":{"summary":"Census Compare","description":"Compare key census metrics across multiple years.\n\nReturns side-by-side comparison of population, households,\navg_income, median_age, density, and land_area for each requested year.\nYears without data return null for that year's values.","operationId":"census_compare_api_regina_census_compare_get","parameters":[{"name":"years","in":"query","required":false,"schema":{"type":"string","description":"Comma-separated census years (e.g., 2016,2021)","default":"2021","title":"Years"},"description":"Comma-separated census years (e.g., 2016,2021)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/regina/census/time-series":{"get":{"summary":"Census Timeseries","description":"Get year-by-year census trends for this city.\n\nReturns population, income, age, and household trends across all\navailable census years. Useful for spotting long-term demographic shifts.","operationId":"census_timeseries_api_regina_census_time_series_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/regina/geography/list":{"get":{"summary":"Geography List","description":"List geography boundaries for this city.","operationId":"geography_list_api_regina_geography_list_get","parameters":[{"name":"type","in":"query","required":false,"schema":{"type":"string","title":"Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/regina/geography/by-gps":{"get":{"summary":"Geography By Gps","description":"Find the geography boundary containing a GPS point.","operationId":"geography_by_gps_api_regina_geography_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","title":"Lat"}},{"name":"lon","in":"query","required":true,"schema":{"type":"number","title":"Lon"}},{"name":"type","in":"query","required":false,"schema":{"type":"string","default":"DA","title":"Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/regina/geography/stats":{"get":{"summary":"Geography Stats","description":"Get geography statistics for this city.","operationId":"geography_stats_api_regina_geography_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/regina/geography/{geoid}":{"get":{"summary":"Geography Boundary","description":"Get a specific geography boundary by geoid, including GeoJSON polygon.","operationId":"geography_boundary_api_regina_geography__geoid__get","parameters":[{"name":"geoid","in":"path","required":true,"schema":{"type":"string","title":"Geoid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/regina/census/rental/list":{"get":{"summary":"List Rental Prices","description":"List rental price records for this city, with optional unit type filter.","operationId":"list_rental_prices_api_regina_census_rental_list_get","parameters":[{"name":"unit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":50,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalPriceListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/regina/census/rental/trend":{"get":{"summary":"Get Rental Trend","description":"Get rental price time series for a specific unit type.","operationId":"get_rental_trend_api_regina_census_rental_trend_get","parameters":[{"name":"unit_type","in":"query","required":true,"schema":{"type":"string","description":"Rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Rental unit type (e.g. 'Apartment - 1 bedroom')"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalTrendResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/regina/census/rental/types":{"get":{"summary":"Get Rental Types","description":"Get available rental unit types for this city.","operationId":"get_rental_types_api_regina_census_rental_types_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/regina/zoning/by-gps":{"get":{"summary":"Get Zoning By Gps","description":"Get zoning district for GPS coordinates.","operationId":"get_zoning_by_gps_api_regina_zoning_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZoningByGPSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/regina/zoning/by-id/{district_id}":{"get":{"summary":"Get Zoning By Id","description":"Get a single zoning district by its numeric ID.","operationId":"get_zoning_by_id_api_regina_zoning_by_id__district_id__get","parameters":[{"name":"district_id","in":"path","required":true,"schema":{"type":"integer","description":"Zoning district numeric ID","title":"District Id"},"description":"Zoning district numeric ID"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning By Id Api Regina Zoning By Id  District Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/regina/zoning/by-code/{code}":{"get":{"summary":"Get Zoning By Code","description":"Get all districts with a specific zone code.","operationId":"get_zoning_by_code_api_regina_zoning_by_code__code__get","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","description":"Zone code (e.g., C-C1, R-G)","title":"Code"},"description":"Zone code (e.g., C-C1, R-G)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoningDistrict"},"title":"Response Get Zoning By Code Api Regina Zoning By Code  Code  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/regina/zoning/batch":{"post":{"summary":"Get Zoning Batch","description":"Get multiple zoning districts by zone codes in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of zone codes.\nExample: {\"ids\": [\"CR20-C20/R20\", \"C-C1\", \"R-G\"]}\nMaximum 100 zone codes per request.","operationId":"get_zoning_batch_api_regina_zoning_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning Batch Api Regina Zoning Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/regina/zoning/list":{"get":{"summary":"List Zoning Districts","description":"List all zoning districts with pagination.\n\nUse this endpoint to browse available zoning districts and discover valid IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_zoning_districts_api_regina_zoning_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Zoning Districts Api Regina Zoning List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/regina/zoning/codes":{"get":{"summary":"List Zone Codes","description":"List all zone codes with descriptions.","operationId":"list_zone_codes_api_regina_zoning_codes_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"type":"string","description":"Filter by major category (e.g., Commercial, Residential)","title":"Category"},"description":"Filter by major category (e.g., Commercial, Residential)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoneCodeInfo"},"title":"Response List Zone Codes Api Regina Zoning Codes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/regina/zoning/stats":{"get":{"summary":"Zoning Stats","description":"Get zoning statistics.","operationId":"zoning_stats_api_regina_zoning_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/regina/zoning/export":{"get":{"summary":"Export Zoning","description":"Export zoning district data as CSV or GeoJSON.\n\nSupports filtering by zone code, category, and area range.\nMaximum 10,000 records per export.","operationId":"export_zoning_api_regina_zoning_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"zone_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Zone code filter (e.g., CR2)","title":"Zone Code"},"description":"Zone code filter (e.g., CR2)"},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Major category filter","title":"Category"},"description":"Major category filter"},{"name":"min_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum area in sq km","title":"Min Area"},"description":"Minimum area in sq km"},{"name":"max_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum area in sq km","title":"Max Area"},"description":"Maximum area in sq km"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/regina/permits/stats":{"get":{"summary":"Building Stats","description":"Get building permit statistics.","operationId":"building_stats_api_regina_permits_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/regina/permits/search":{"get":{"summary":"Search Building Permits","description":"Search building permits by address, contractor, applicant, permit number, and/or permit type.","operationId":"search_building_permits_api_regina_permits_search_get","parameters":[{"name":"address","in":"query","required":false,"schema":{"type":"string","description":"Address to search","title":"Address"},"description":"Address to search"},{"name":"q","in":"query","required":false,"schema":{"type":"string","description":"General text search (address, contractor, applicant, permit #)","title":"Q"},"description":"General text search (address, contractor, applicant, permit #)"},{"name":"permit_type","in":"query","required":false,"schema":{"type":"string","description":"Filter by permit type","title":"Permit Type"},"description":"Filter by permit type"},{"name":"bbox","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bounding box: min_lon,min_lat,max_lon,max_lat","title":"Bbox"},"description":"Bounding box: min_lon,min_lat,max_lon,max_lat"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max results","default":20,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset","default":0,"title":"Offset"},"description":"Results offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/regina/permits/nearby":{"get":{"summary":"Nearby Building Permits","description":"Coordinate-first alias for nearby building permits.","operationId":"nearby_building_permits_api_regina_permits_nearby_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":84.0,"minimum":41.0,"description":"Canadian latitude","title":"Lat"},"description":"Canadian latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":-52.0,"minimum":-142.0,"description":"Canadian longitude","title":"Lon"},"description":"Canadian longitude"},{"name":"radius_m","in":"query","required":false,"schema":{"type":"integer","maximum":50000,"minimum":1,"default":1000,"title":"Radius M"}},{"name":"permit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Permit Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/regina/permits/export":{"get":{"summary":"Export Building Permits","description":"Export building permit data as CSV or GeoJSON.\n\nSupports filtering by address, permit type, and date range.\nMaximum 10,000 records per export.","operationId":"export_building_permits_api_regina_permits_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Address filter","title":"Address"},"description":"Address filter"},{"name":"permit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Permit type filter","title":"Permit Type"},"description":"Permit type filter"},{"name":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Start date (YYYY-MM-DD)","title":"Date From"},"description":"Start date (YYYY-MM-DD)"},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"End date (YYYY-MM-DD)","title":"Date To"},"description":"End date (YYYY-MM-DD)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/regina/permits/recent":{"get":{"summary":"Recent Building Permits","description":"Get recent building permits sorted by application date (newest first).\n\nUse this to see where construction activity is happening right now.","operationId":"recent_building_permits_api_regina_permits_recent_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Max results","default":20,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset","default":0,"title":"Offset"},"description":"Results offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/regina/permits/batch":{"post":{"summary":"Get Building Permits Batch","description":"Get multiple building permits by permit numbers in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of permit numbers.\nExample: {\"ids\": [\"BP123456\", \"BP789012\"]}\nMaximum 100 permit numbers per request.","operationId":"get_building_permits_batch_api_regina_permits_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Building Permits Batch Api Regina Permits Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/regina/permits/{permit_number}":{"get":{"summary":"Get Building Permit","description":"Get building permit details by permit number.\n\nServes HTML for browsers, JSON for API clients.","operationId":"get_building_permit_api_regina_permits__permit_number__get","parameters":[{"name":"permit_number","in":"path","required":true,"schema":{"type":"string","description":"Permit number","title":"Permit Number"},"description":"Permit number"},{"name":"_city_name","in":"query","required":false,"schema":{"default":"Regina","title":" City Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/regina/health":{"get":{"summary":"City Health","description":"City-specific health check.","operationId":"city_health_api_regina_health_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/victoria/entries/{kind}":{"get":{"summary":"List Entries","operationId":"list_entries_api_victoria_entries__kind__get","parameters":[{"name":"kind","in":"path","required":true,"schema":{"type":"string","description":"Canonical entry kind: property, permit, zoning, or safety","title":"Kind"},"description":"Canonical entry kind: property, permit, zoning, or safety"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"_services","in":"query","required":false,"schema":{"title":" Services"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Entries Api Victoria Entries  Kind  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/victoria/property/search":{"get":{"summary":"Search Property","description":"Search for properties by address, or browse all if no address specified.\nSupports sorting by assessed_value, address, year_built, community, or lot_size_sqft.\nSupports value range filtering with min_value and max_value.\n Supports property_type and year range filters.","operationId":"search_property_api_victoria_property_search_get","parameters":[{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Street address to search (omit to browse all)","title":"Address"},"description":"Street address to search (omit to browse all)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max results to return (up to 1000 for map browse)","default":10,"title":"Limit"},"description":"Max results to return (up to 1000 for map browse)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset for pagination","default":0,"title":"Offset"},"description":"Results offset for pagination"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft","title":"Sort By"},"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"asc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"},{"name":"property_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property type filter (e.g. RE, Residential)","title":"Property Type"},"description":"Property type filter (e.g. RE, Residential)"},{"name":"min_year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter: minimum year built","title":"Min Year"},"description":"Filter: minimum year built"},{"name":"max_year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter: maximum year built","title":"Max Year"},"description":"Filter: maximum year built"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertySearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/victoria/property/list":{"get":{"summary":"List Property","description":"List all properties with pagination, sorting, and value range filtering.\n\nUse this endpoint to browse available property records and discover valid roll numbers.\nReturns paginated results with total count for client-side pagination.\nSort by assessed_value with order=desc to find the most expensive properties.","operationId":"list_property_api_victoria_property_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft","title":"Sort By"},"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"asc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Property Api Victoria Property List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/victoria/property/geojson":{"get":{"summary":"Property Geojson","operationId":"property_geojson_api_victoria_property_geojson_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500000,"minimum":1,"description":"Max features to return (cap prevents browser overload for large cities)","default":50000,"title":"Limit"},"description":"Max features to return (cap prevents browser overload for large cities)"},{"name":"sw_lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport south-west latitude","title":"Sw Lat"},"description":"Viewport south-west latitude"},{"name":"sw_lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport south-west longitude","title":"Sw Lon"},"description":"Viewport south-west longitude"},{"name":"ne_lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport north-east latitude","title":"Ne Lat"},"description":"Viewport north-east latitude"},{"name":"ne_lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport north-east longitude","title":"Ne Lon"},"description":"Viewport north-east longitude"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Offset for pagination through viewport results (use with limit)","default":0,"title":"Offset"},"description":"Offset for pagination through viewport results (use with limit)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/victoria/property/top":{"get":{"summary":"Top Property","description":"Get top-N properties sorted by any numeric column.\n\nConvenience endpoint for AI agents and dashboards. Returns the top\nN properties sorted by the given column. Defaults to most expensive\n(assessed_value descending). Combine with min_value/max_value to\nfind e.g. the most expensive residential properties.","operationId":"top_property_api_victoria_property_top_get","parameters":[{"name":"n","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Number of top properties to return","default":10,"title":"N"},"description":"Number of top properties to return"},{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","description":"Sort column: assessed_value, year_built, lot_size_sqft","default":"assessed_value","title":"Sort By"},"description":"Sort column: assessed_value, year_built, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"desc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Top Property Api Victoria Property Top Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/victoria/property/stats":{"get":{"summary":"Property Stats","description":"Get property assessment statistics.","operationId":"property_stats_api_victoria_property_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/victoria/property/autocomplete":{"get":{"summary":"Property Autocomplete","description":"Get address and roll number suggestions for typeahead search.","operationId":"property_autocomplete_api_victoria_property_autocomplete_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"description":"Search query for address/roll number suggestions","title":"Q"},"description":"Search query for address/roll number suggestions"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":25,"minimum":1,"description":"Max suggestions to return","default":10,"title":"Limit"},"description":"Max suggestions to return"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/victoria/property/geocode":{"post":{"summary":"Property Geocode","description":"Geocode property addresses to lat/lon coordinates.\n\nAccepts a JSON body with 'addresses' (list of address strings, max 50).\nReturns cached results instantly; uncached addresses are geocoded via Nominatim.\n\nExample: {\"addresses\": [\"123 Main St\", \"456 Oak Ave\"]}","operationId":"property_geocode_api_victoria_property_geocode_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/victoria/property/by-dls":{"get":{"summary":"Get Property By Dls","description":"Get property assessment by DLS coordinates.","operationId":"get_property_by_dls_api_victoria_property_by_dls_get","parameters":[{"name":"quarter","in":"query","required":true,"schema":{"type":"string","description":"Quarter section (e.g., SW)","title":"Quarter"},"description":"Quarter section (e.g., SW)"},{"name":"section","in":"query","required":true,"schema":{"type":"integer","description":"Section number","title":"Section"},"description":"Section number"},{"name":"township","in":"query","required":true,"schema":{"type":"integer","description":"Township number","title":"Township"},"description":"Township number"},{"name":"range","in":"query","required":true,"schema":{"type":"integer","description":"Range number","title":"Range"},"description":"Range number"},{"name":"meridian","in":"query","required":true,"schema":{"type":"integer","description":"Meridian number","title":"Meridian"},"description":"Meridian number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyAssessment"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/victoria/property/by-gps":{"get":{"summary":"Get Property By Gps","description":"Find coordinate-bearing assessment records nearest a GPS point.\n\nResults are point-nearness matches unless the municipal source supplies\nparcel polygons; clients should not interpret proximity as legal parcel\ncontainment.","operationId":"get_property_by_gps_api_victoria_property_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":84.0,"minimum":41.0,"description":"Canadian latitude","title":"Lat"},"description":"Canadian latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":-52.0,"minimum":-142.0,"description":"Canadian longitude","title":"Lon"},"description":"Canadian longitude"},{"name":"radius_m","in":"query","required":false,"schema":{"type":"integer","maximum":5000,"minimum":1,"description":"Maximum point distance","default":100,"title":"Radius M"},"description":"Maximum point distance"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":10,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Property By Gps Api Victoria Property By Gps Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/victoria/property/by-roll/{roll_number}":{"get":{"summary":"Get Property By Roll","description":"Get property assessment by roll number.","operationId":"get_property_by_roll_api_victoria_property_by_roll__roll_number__get","parameters":[{"name":"roll_number","in":"path","required":true,"schema":{"type":"string","description":"Property roll number","title":"Roll Number"},"description":"Property roll number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyAssessment"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/victoria/property/report":{"get":{"summary":"Property Report Lookup","description":"Consolidated report by roll number, address, or GPS.","operationId":"property_report_lookup_api_victoria_property_report_get","parameters":[{"name":"roll_number","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property roll number","title":"Roll Number"},"description":"Property roll number"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Street address","title":"Address"},"description":"Street address"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyReport"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/victoria/property/report/{roll_number}":{"get":{"summary":"Property Report","description":"Get consolidated property report: assessment + building permits + zoning + DLS.","operationId":"property_report_api_victoria_property_report__roll_number__get","parameters":[{"name":"roll_number","in":"path","required":true,"schema":{"type":"string","description":"Property roll number","title":"Roll Number"},"description":"Property roll number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyReport"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/victoria/property/batch":{"post":{"summary":"Get Properties Batch","description":"Get multiple properties by roll numbers in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of roll numbers.\nExample: {\"ids\": [\"123456789\", \"987654321\"]}\nMaximum 100 roll numbers per request.","operationId":"get_properties_batch_api_victoria_property_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Properties Batch Api Victoria Property Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/victoria/property/export":{"get":{"summary":"Export Properties","description":"Export property data as CSV or GeoJSON.\n\nSupports filtering by address, property type, and assessed value range.\nMaximum 10,000 records per export.","operationId":"export_properties_api_victoria_property_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Address filter","title":"Address"},"description":"Address filter"},{"name":"property_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property type filter","title":"Property Type"},"description":"Property type filter"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum assessed value","title":"Min Value"},"description":"Minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum assessed value","title":"Max Value"},"description":"Maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/victoria/census/profile":{"get":{"summary":"Get Census Profile","description":"Get census profile for a specific Dissemination Area.\n\nProvide either da_id directly, OR lat+lon to find the nearest DA automatically.","operationId":"get_census_profile_api_victoria_census_profile_get","parameters":[{"name":"da_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Dissemination Area ID (e.g., 48820001)","title":"Da Id"},"description":"Dissemination Area ID (e.g., 48820001)"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude for nearest-DA lookup","title":"Lat"},"description":"Latitude for nearest-DA lookup"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude for nearest-DA lookup","title":"Lon"},"description":"Longitude for nearest-DA lookup"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusProfile"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/victoria/census/batch":{"post":{"summary":"Get Census Batch","description":"Get multiple census profiles by DA IDs in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of DA IDs.\nExample: {\"ids\": [\"48820001\", \"48820002\"]}\nMaximum 100 DA IDs per request.","operationId":"get_census_batch_api_victoria_census_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Census Batch Api Victoria Census Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/victoria/census/export":{"get":{"summary":"Export Census","description":"Export census data as CSV.\n\nSupports filtering by population range and geography type.\nMaximum 10,000 records per export.","operationId":"export_census_api_victoria_census_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv only","default":"csv","title":"Format"},"description":"Export format: csv only"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"min_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Minimum population filter","title":"Min Population"},"description":"Minimum population filter"},{"name":"max_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Maximum population filter","title":"Max Population"},"description":"Maximum population filter"},{"name":"geography_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Geography type filter (DA, CT, CMA)","title":"Geography Type"},"description":"Geography type filter (DA, CT, CMA)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/victoria/census/list":{"get":{"summary":"List Census Profiles","description":"List all census profiles with pagination.\n\nUse this endpoint to browse available census profiles and discover valid DA IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_census_profiles_api_victoria_census_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Census Profiles Api Victoria Census List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/victoria/census/by-gps":{"get":{"summary":"Get Census By Gps","description":"Get census data for GPS coordinates.","operationId":"get_census_by_gps_api_victoria_census_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90,"minimum":-90,"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":180,"minimum":-180,"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/victoria/census/by-dls":{"get":{"summary":"Get Census By Dls","description":"Get census data for DLS coordinates.","operationId":"get_census_by_dls_api_victoria_census_by_dls_get","parameters":[{"name":"dls","in":"query","required":true,"schema":{"type":"string","description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)","title":"Dls"},"description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/victoria/census/map-data":{"get":{"summary":"Get Census Map Data","description":"Get lightweight DA points for choropleth map rendering.\n\nReturns centroid coordinates and key metrics (income, age, population,\nhousehold size, employment rate) for all DAs in the city.\nUsed by the census dashboard to render color-coded maps.","operationId":"get_census_map_data_api_victoria_census_map_data_get","parameters":[{"name":"year","in":"query","required":false,"schema":{"type":"integer","description":"Census year for DA map data","default":2021,"title":"Year"},"description":"Census year for DA map data"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/victoria/census/stats":{"get":{"summary":"Census Stats","description":"Get census data statistics.","operationId":"census_stats_api_victoria_census_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/victoria/census/compare":{"get":{"summary":"Census Compare","description":"Compare key census metrics across multiple years.\n\nReturns side-by-side comparison of population, households,\navg_income, median_age, density, and land_area for each requested year.\nYears without data return null for that year's values.","operationId":"census_compare_api_victoria_census_compare_get","parameters":[{"name":"years","in":"query","required":false,"schema":{"type":"string","description":"Comma-separated census years (e.g., 2016,2021)","default":"2021","title":"Years"},"description":"Comma-separated census years (e.g., 2016,2021)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/victoria/census/time-series":{"get":{"summary":"Census Timeseries","description":"Get year-by-year census trends for this city.\n\nReturns population, income, age, and household trends across all\navailable census years. Useful for spotting long-term demographic shifts.","operationId":"census_timeseries_api_victoria_census_time_series_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/victoria/geography/list":{"get":{"summary":"Geography List","description":"List geography boundaries for this city.","operationId":"geography_list_api_victoria_geography_list_get","parameters":[{"name":"type","in":"query","required":false,"schema":{"type":"string","title":"Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/victoria/geography/by-gps":{"get":{"summary":"Geography By Gps","description":"Find the geography boundary containing a GPS point.","operationId":"geography_by_gps_api_victoria_geography_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","title":"Lat"}},{"name":"lon","in":"query","required":true,"schema":{"type":"number","title":"Lon"}},{"name":"type","in":"query","required":false,"schema":{"type":"string","default":"DA","title":"Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/victoria/geography/stats":{"get":{"summary":"Geography Stats","description":"Get geography statistics for this city.","operationId":"geography_stats_api_victoria_geography_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/victoria/geography/{geoid}":{"get":{"summary":"Geography Boundary","description":"Get a specific geography boundary by geoid, including GeoJSON polygon.","operationId":"geography_boundary_api_victoria_geography__geoid__get","parameters":[{"name":"geoid","in":"path","required":true,"schema":{"type":"string","title":"Geoid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/victoria/census/rental/list":{"get":{"summary":"List Rental Prices","description":"List rental price records for this city, with optional unit type filter.","operationId":"list_rental_prices_api_victoria_census_rental_list_get","parameters":[{"name":"unit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":50,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalPriceListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/victoria/census/rental/trend":{"get":{"summary":"Get Rental Trend","description":"Get rental price time series for a specific unit type.","operationId":"get_rental_trend_api_victoria_census_rental_trend_get","parameters":[{"name":"unit_type","in":"query","required":true,"schema":{"type":"string","description":"Rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Rental unit type (e.g. 'Apartment - 1 bedroom')"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalTrendResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/victoria/census/rental/types":{"get":{"summary":"Get Rental Types","description":"Get available rental unit types for this city.","operationId":"get_rental_types_api_victoria_census_rental_types_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/victoria/zoning/by-gps":{"get":{"summary":"Get Zoning By Gps","description":"Get zoning district for GPS coordinates.","operationId":"get_zoning_by_gps_api_victoria_zoning_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZoningByGPSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/victoria/zoning/by-id/{district_id}":{"get":{"summary":"Get Zoning By Id","description":"Get a single zoning district by its numeric ID.","operationId":"get_zoning_by_id_api_victoria_zoning_by_id__district_id__get","parameters":[{"name":"district_id","in":"path","required":true,"schema":{"type":"integer","description":"Zoning district numeric ID","title":"District Id"},"description":"Zoning district numeric ID"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning By Id Api Victoria Zoning By Id  District Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/victoria/zoning/by-code/{code}":{"get":{"summary":"Get Zoning By Code","description":"Get all districts with a specific zone code.","operationId":"get_zoning_by_code_api_victoria_zoning_by_code__code__get","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","description":"Zone code (e.g., C-C1, R-G)","title":"Code"},"description":"Zone code (e.g., C-C1, R-G)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoningDistrict"},"title":"Response Get Zoning By Code Api Victoria Zoning By Code  Code  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/victoria/zoning/batch":{"post":{"summary":"Get Zoning Batch","description":"Get multiple zoning districts by zone codes in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of zone codes.\nExample: {\"ids\": [\"CR20-C20/R20\", \"C-C1\", \"R-G\"]}\nMaximum 100 zone codes per request.","operationId":"get_zoning_batch_api_victoria_zoning_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning Batch Api Victoria Zoning Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/victoria/zoning/list":{"get":{"summary":"List Zoning Districts","description":"List all zoning districts with pagination.\n\nUse this endpoint to browse available zoning districts and discover valid IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_zoning_districts_api_victoria_zoning_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Zoning Districts Api Victoria Zoning List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/victoria/zoning/codes":{"get":{"summary":"List Zone Codes","description":"List all zone codes with descriptions.","operationId":"list_zone_codes_api_victoria_zoning_codes_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"type":"string","description":"Filter by major category (e.g., Commercial, Residential)","title":"Category"},"description":"Filter by major category (e.g., Commercial, Residential)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoneCodeInfo"},"title":"Response List Zone Codes Api Victoria Zoning Codes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/victoria/zoning/stats":{"get":{"summary":"Zoning Stats","description":"Get zoning statistics.","operationId":"zoning_stats_api_victoria_zoning_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/victoria/zoning/export":{"get":{"summary":"Export Zoning","description":"Export zoning district data as CSV or GeoJSON.\n\nSupports filtering by zone code, category, and area range.\nMaximum 10,000 records per export.","operationId":"export_zoning_api_victoria_zoning_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"zone_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Zone code filter (e.g., CR2)","title":"Zone Code"},"description":"Zone code filter (e.g., CR2)"},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Major category filter","title":"Category"},"description":"Major category filter"},{"name":"min_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum area in sq km","title":"Min Area"},"description":"Minimum area in sq km"},{"name":"max_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum area in sq km","title":"Max Area"},"description":"Maximum area in sq km"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/victoria/permits/stats":{"get":{"summary":"Building Stats","description":"Get building permit statistics.","operationId":"building_stats_api_victoria_permits_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/victoria/permits/search":{"get":{"summary":"Search Building Permits","description":"Search building permits by address, contractor, applicant, permit number, and/or permit type.","operationId":"search_building_permits_api_victoria_permits_search_get","parameters":[{"name":"address","in":"query","required":false,"schema":{"type":"string","description":"Address to search","title":"Address"},"description":"Address to search"},{"name":"q","in":"query","required":false,"schema":{"type":"string","description":"General text search (address, contractor, applicant, permit #)","title":"Q"},"description":"General text search (address, contractor, applicant, permit #)"},{"name":"permit_type","in":"query","required":false,"schema":{"type":"string","description":"Filter by permit type","title":"Permit Type"},"description":"Filter by permit type"},{"name":"bbox","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bounding box: min_lon,min_lat,max_lon,max_lat","title":"Bbox"},"description":"Bounding box: min_lon,min_lat,max_lon,max_lat"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max results","default":20,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset","default":0,"title":"Offset"},"description":"Results offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/victoria/permits/nearby":{"get":{"summary":"Nearby Building Permits","description":"Coordinate-first alias for nearby building permits.","operationId":"nearby_building_permits_api_victoria_permits_nearby_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":84.0,"minimum":41.0,"description":"Canadian latitude","title":"Lat"},"description":"Canadian latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":-52.0,"minimum":-142.0,"description":"Canadian longitude","title":"Lon"},"description":"Canadian longitude"},{"name":"radius_m","in":"query","required":false,"schema":{"type":"integer","maximum":50000,"minimum":1,"default":1000,"title":"Radius M"}},{"name":"permit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Permit Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/victoria/permits/export":{"get":{"summary":"Export Building Permits","description":"Export building permit data as CSV or GeoJSON.\n\nSupports filtering by address, permit type, and date range.\nMaximum 10,000 records per export.","operationId":"export_building_permits_api_victoria_permits_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Address filter","title":"Address"},"description":"Address filter"},{"name":"permit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Permit type filter","title":"Permit Type"},"description":"Permit type filter"},{"name":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Start date (YYYY-MM-DD)","title":"Date From"},"description":"Start date (YYYY-MM-DD)"},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"End date (YYYY-MM-DD)","title":"Date To"},"description":"End date (YYYY-MM-DD)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/victoria/permits/recent":{"get":{"summary":"Recent Building Permits","description":"Get recent building permits sorted by application date (newest first).\n\nUse this to see where construction activity is happening right now.","operationId":"recent_building_permits_api_victoria_permits_recent_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Max results","default":20,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset","default":0,"title":"Offset"},"description":"Results offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/victoria/permits/batch":{"post":{"summary":"Get Building Permits Batch","description":"Get multiple building permits by permit numbers in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of permit numbers.\nExample: {\"ids\": [\"BP123456\", \"BP789012\"]}\nMaximum 100 permit numbers per request.","operationId":"get_building_permits_batch_api_victoria_permits_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Building Permits Batch Api Victoria Permits Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/victoria/permits/{permit_number}":{"get":{"summary":"Get Building Permit","description":"Get building permit details by permit number.\n\nServes HTML for browsers, JSON for API clients.","operationId":"get_building_permit_api_victoria_permits__permit_number__get","parameters":[{"name":"permit_number","in":"path","required":true,"schema":{"type":"string","description":"Permit number","title":"Permit Number"},"description":"Permit number"},{"name":"_city_name","in":"query","required":false,"schema":{"default":"Victoria","title":" City Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/victoria/health":{"get":{"summary":"City Health","description":"City-specific health check.","operationId":"city_health_api_victoria_health_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-johns/entries/{kind}":{"get":{"summary":"List Entries","operationId":"list_entries_api_st_johns_entries__kind__get","parameters":[{"name":"kind","in":"path","required":true,"schema":{"type":"string","description":"Canonical entry kind: property, permit, zoning, or safety","title":"Kind"},"description":"Canonical entry kind: property, permit, zoning, or safety"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"_services","in":"query","required":false,"schema":{"title":" Services"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Entries Api St Johns Entries  Kind  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-johns/property/search":{"get":{"summary":"Search Property","description":"Search for properties by address, or browse all if no address specified.\nSupports sorting by assessed_value, address, year_built, community, or lot_size_sqft.\nSupports value range filtering with min_value and max_value.\n Supports property_type and year range filters.","operationId":"search_property_api_st_johns_property_search_get","parameters":[{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Street address to search (omit to browse all)","title":"Address"},"description":"Street address to search (omit to browse all)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max results to return (up to 1000 for map browse)","default":10,"title":"Limit"},"description":"Max results to return (up to 1000 for map browse)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset for pagination","default":0,"title":"Offset"},"description":"Results offset for pagination"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft","title":"Sort By"},"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"asc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"},{"name":"property_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property type filter (e.g. RE, Residential)","title":"Property Type"},"description":"Property type filter (e.g. RE, Residential)"},{"name":"min_year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter: minimum year built","title":"Min Year"},"description":"Filter: minimum year built"},{"name":"max_year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter: maximum year built","title":"Max Year"},"description":"Filter: maximum year built"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertySearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-johns/property/list":{"get":{"summary":"List Property","description":"List all properties with pagination, sorting, and value range filtering.\n\nUse this endpoint to browse available property records and discover valid roll numbers.\nReturns paginated results with total count for client-side pagination.\nSort by assessed_value with order=desc to find the most expensive properties.","operationId":"list_property_api_st_johns_property_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft","title":"Sort By"},"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"asc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Property Api St Johns Property List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-johns/property/geojson":{"get":{"summary":"Property Geojson","operationId":"property_geojson_api_st_johns_property_geojson_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500000,"minimum":1,"description":"Max features to return (cap prevents browser overload for large cities)","default":50000,"title":"Limit"},"description":"Max features to return (cap prevents browser overload for large cities)"},{"name":"sw_lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport south-west latitude","title":"Sw Lat"},"description":"Viewport south-west latitude"},{"name":"sw_lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport south-west longitude","title":"Sw Lon"},"description":"Viewport south-west longitude"},{"name":"ne_lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport north-east latitude","title":"Ne Lat"},"description":"Viewport north-east latitude"},{"name":"ne_lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport north-east longitude","title":"Ne Lon"},"description":"Viewport north-east longitude"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Offset for pagination through viewport results (use with limit)","default":0,"title":"Offset"},"description":"Offset for pagination through viewport results (use with limit)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-johns/property/top":{"get":{"summary":"Top Property","description":"Get top-N properties sorted by any numeric column.\n\nConvenience endpoint for AI agents and dashboards. Returns the top\nN properties sorted by the given column. Defaults to most expensive\n(assessed_value descending). Combine with min_value/max_value to\nfind e.g. the most expensive residential properties.","operationId":"top_property_api_st_johns_property_top_get","parameters":[{"name":"n","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Number of top properties to return","default":10,"title":"N"},"description":"Number of top properties to return"},{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","description":"Sort column: assessed_value, year_built, lot_size_sqft","default":"assessed_value","title":"Sort By"},"description":"Sort column: assessed_value, year_built, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"desc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Top Property Api St Johns Property Top Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-johns/property/stats":{"get":{"summary":"Property Stats","description":"Get property assessment statistics.","operationId":"property_stats_api_st_johns_property_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-johns/property/autocomplete":{"get":{"summary":"Property Autocomplete","description":"Get address and roll number suggestions for typeahead search.","operationId":"property_autocomplete_api_st_johns_property_autocomplete_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"description":"Search query for address/roll number suggestions","title":"Q"},"description":"Search query for address/roll number suggestions"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":25,"minimum":1,"description":"Max suggestions to return","default":10,"title":"Limit"},"description":"Max suggestions to return"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-johns/property/geocode":{"post":{"summary":"Property Geocode","description":"Geocode property addresses to lat/lon coordinates.\n\nAccepts a JSON body with 'addresses' (list of address strings, max 50).\nReturns cached results instantly; uncached addresses are geocoded via Nominatim.\n\nExample: {\"addresses\": [\"123 Main St\", \"456 Oak Ave\"]}","operationId":"property_geocode_api_st_johns_property_geocode_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-johns/property/by-dls":{"get":{"summary":"Get Property By Dls","description":"Get property assessment by DLS coordinates.","operationId":"get_property_by_dls_api_st_johns_property_by_dls_get","parameters":[{"name":"quarter","in":"query","required":true,"schema":{"type":"string","description":"Quarter section (e.g., SW)","title":"Quarter"},"description":"Quarter section (e.g., SW)"},{"name":"section","in":"query","required":true,"schema":{"type":"integer","description":"Section number","title":"Section"},"description":"Section number"},{"name":"township","in":"query","required":true,"schema":{"type":"integer","description":"Township number","title":"Township"},"description":"Township number"},{"name":"range","in":"query","required":true,"schema":{"type":"integer","description":"Range number","title":"Range"},"description":"Range number"},{"name":"meridian","in":"query","required":true,"schema":{"type":"integer","description":"Meridian number","title":"Meridian"},"description":"Meridian number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyAssessment"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-johns/property/by-gps":{"get":{"summary":"Get Property By Gps","description":"Find coordinate-bearing assessment records nearest a GPS point.\n\nResults are point-nearness matches unless the municipal source supplies\nparcel polygons; clients should not interpret proximity as legal parcel\ncontainment.","operationId":"get_property_by_gps_api_st_johns_property_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":84.0,"minimum":41.0,"description":"Canadian latitude","title":"Lat"},"description":"Canadian latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":-52.0,"minimum":-142.0,"description":"Canadian longitude","title":"Lon"},"description":"Canadian longitude"},{"name":"radius_m","in":"query","required":false,"schema":{"type":"integer","maximum":5000,"minimum":1,"description":"Maximum point distance","default":100,"title":"Radius M"},"description":"Maximum point distance"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":10,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Property By Gps Api St Johns Property By Gps Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-johns/property/by-roll/{roll_number}":{"get":{"summary":"Get Property By Roll","description":"Get property assessment by roll number.","operationId":"get_property_by_roll_api_st_johns_property_by_roll__roll_number__get","parameters":[{"name":"roll_number","in":"path","required":true,"schema":{"type":"string","description":"Property roll number","title":"Roll Number"},"description":"Property roll number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyAssessment"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-johns/property/report":{"get":{"summary":"Property Report Lookup","description":"Consolidated report by roll number, address, or GPS.","operationId":"property_report_lookup_api_st_johns_property_report_get","parameters":[{"name":"roll_number","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property roll number","title":"Roll Number"},"description":"Property roll number"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Street address","title":"Address"},"description":"Street address"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyReport"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-johns/property/report/{roll_number}":{"get":{"summary":"Property Report","description":"Get consolidated property report: assessment + building permits + zoning + DLS.","operationId":"property_report_api_st_johns_property_report__roll_number__get","parameters":[{"name":"roll_number","in":"path","required":true,"schema":{"type":"string","description":"Property roll number","title":"Roll Number"},"description":"Property roll number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyReport"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-johns/property/batch":{"post":{"summary":"Get Properties Batch","description":"Get multiple properties by roll numbers in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of roll numbers.\nExample: {\"ids\": [\"123456789\", \"987654321\"]}\nMaximum 100 roll numbers per request.","operationId":"get_properties_batch_api_st_johns_property_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Properties Batch Api St Johns Property Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-johns/property/export":{"get":{"summary":"Export Properties","description":"Export property data as CSV or GeoJSON.\n\nSupports filtering by address, property type, and assessed value range.\nMaximum 10,000 records per export.","operationId":"export_properties_api_st_johns_property_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Address filter","title":"Address"},"description":"Address filter"},{"name":"property_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property type filter","title":"Property Type"},"description":"Property type filter"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum assessed value","title":"Min Value"},"description":"Minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum assessed value","title":"Max Value"},"description":"Maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-johns/census/profile":{"get":{"summary":"Get Census Profile","description":"Get census profile for a specific Dissemination Area.\n\nProvide either da_id directly, OR lat+lon to find the nearest DA automatically.","operationId":"get_census_profile_api_st_johns_census_profile_get","parameters":[{"name":"da_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Dissemination Area ID (e.g., 48820001)","title":"Da Id"},"description":"Dissemination Area ID (e.g., 48820001)"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude for nearest-DA lookup","title":"Lat"},"description":"Latitude for nearest-DA lookup"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude for nearest-DA lookup","title":"Lon"},"description":"Longitude for nearest-DA lookup"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusProfile"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-johns/census/batch":{"post":{"summary":"Get Census Batch","description":"Get multiple census profiles by DA IDs in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of DA IDs.\nExample: {\"ids\": [\"48820001\", \"48820002\"]}\nMaximum 100 DA IDs per request.","operationId":"get_census_batch_api_st_johns_census_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Census Batch Api St Johns Census Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-johns/census/export":{"get":{"summary":"Export Census","description":"Export census data as CSV.\n\nSupports filtering by population range and geography type.\nMaximum 10,000 records per export.","operationId":"export_census_api_st_johns_census_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv only","default":"csv","title":"Format"},"description":"Export format: csv only"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"min_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Minimum population filter","title":"Min Population"},"description":"Minimum population filter"},{"name":"max_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Maximum population filter","title":"Max Population"},"description":"Maximum population filter"},{"name":"geography_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Geography type filter (DA, CT, CMA)","title":"Geography Type"},"description":"Geography type filter (DA, CT, CMA)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-johns/census/list":{"get":{"summary":"List Census Profiles","description":"List all census profiles with pagination.\n\nUse this endpoint to browse available census profiles and discover valid DA IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_census_profiles_api_st_johns_census_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Census Profiles Api St Johns Census List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-johns/census/by-gps":{"get":{"summary":"Get Census By Gps","description":"Get census data for GPS coordinates.","operationId":"get_census_by_gps_api_st_johns_census_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90,"minimum":-90,"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":180,"minimum":-180,"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-johns/census/by-dls":{"get":{"summary":"Get Census By Dls","description":"Get census data for DLS coordinates.","operationId":"get_census_by_dls_api_st_johns_census_by_dls_get","parameters":[{"name":"dls","in":"query","required":true,"schema":{"type":"string","description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)","title":"Dls"},"description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-johns/census/map-data":{"get":{"summary":"Get Census Map Data","description":"Get lightweight DA points for choropleth map rendering.\n\nReturns centroid coordinates and key metrics (income, age, population,\nhousehold size, employment rate) for all DAs in the city.\nUsed by the census dashboard to render color-coded maps.","operationId":"get_census_map_data_api_st_johns_census_map_data_get","parameters":[{"name":"year","in":"query","required":false,"schema":{"type":"integer","description":"Census year for DA map data","default":2021,"title":"Year"},"description":"Census year for DA map data"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-johns/census/stats":{"get":{"summary":"Census Stats","description":"Get census data statistics.","operationId":"census_stats_api_st_johns_census_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-johns/census/compare":{"get":{"summary":"Census Compare","description":"Compare key census metrics across multiple years.\n\nReturns side-by-side comparison of population, households,\navg_income, median_age, density, and land_area for each requested year.\nYears without data return null for that year's values.","operationId":"census_compare_api_st_johns_census_compare_get","parameters":[{"name":"years","in":"query","required":false,"schema":{"type":"string","description":"Comma-separated census years (e.g., 2016,2021)","default":"2021","title":"Years"},"description":"Comma-separated census years (e.g., 2016,2021)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-johns/census/time-series":{"get":{"summary":"Census Timeseries","description":"Get year-by-year census trends for this city.\n\nReturns population, income, age, and household trends across all\navailable census years. Useful for spotting long-term demographic shifts.","operationId":"census_timeseries_api_st_johns_census_time_series_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-johns/geography/list":{"get":{"summary":"Geography List","description":"List geography boundaries for this city.","operationId":"geography_list_api_st_johns_geography_list_get","parameters":[{"name":"type","in":"query","required":false,"schema":{"type":"string","title":"Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-johns/geography/by-gps":{"get":{"summary":"Geography By Gps","description":"Find the geography boundary containing a GPS point.","operationId":"geography_by_gps_api_st_johns_geography_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","title":"Lat"}},{"name":"lon","in":"query","required":true,"schema":{"type":"number","title":"Lon"}},{"name":"type","in":"query","required":false,"schema":{"type":"string","default":"DA","title":"Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-johns/geography/stats":{"get":{"summary":"Geography Stats","description":"Get geography statistics for this city.","operationId":"geography_stats_api_st_johns_geography_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-johns/geography/{geoid}":{"get":{"summary":"Geography Boundary","description":"Get a specific geography boundary by geoid, including GeoJSON polygon.","operationId":"geography_boundary_api_st_johns_geography__geoid__get","parameters":[{"name":"geoid","in":"path","required":true,"schema":{"type":"string","title":"Geoid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-johns/census/rental/list":{"get":{"summary":"List Rental Prices","description":"List rental price records for this city, with optional unit type filter.","operationId":"list_rental_prices_api_st_johns_census_rental_list_get","parameters":[{"name":"unit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":50,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalPriceListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-johns/census/rental/trend":{"get":{"summary":"Get Rental Trend","description":"Get rental price time series for a specific unit type.","operationId":"get_rental_trend_api_st_johns_census_rental_trend_get","parameters":[{"name":"unit_type","in":"query","required":true,"schema":{"type":"string","description":"Rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Rental unit type (e.g. 'Apartment - 1 bedroom')"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalTrendResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-johns/census/rental/types":{"get":{"summary":"Get Rental Types","description":"Get available rental unit types for this city.","operationId":"get_rental_types_api_st_johns_census_rental_types_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-johns/zoning/by-gps":{"get":{"summary":"Get Zoning By Gps","description":"Get zoning district for GPS coordinates.","operationId":"get_zoning_by_gps_api_st_johns_zoning_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZoningByGPSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-johns/zoning/by-id/{district_id}":{"get":{"summary":"Get Zoning By Id","description":"Get a single zoning district by its numeric ID.","operationId":"get_zoning_by_id_api_st_johns_zoning_by_id__district_id__get","parameters":[{"name":"district_id","in":"path","required":true,"schema":{"type":"integer","description":"Zoning district numeric ID","title":"District Id"},"description":"Zoning district numeric ID"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning By Id Api St Johns Zoning By Id  District Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-johns/zoning/by-code/{code}":{"get":{"summary":"Get Zoning By Code","description":"Get all districts with a specific zone code.","operationId":"get_zoning_by_code_api_st_johns_zoning_by_code__code__get","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","description":"Zone code (e.g., C-C1, R-G)","title":"Code"},"description":"Zone code (e.g., C-C1, R-G)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoningDistrict"},"title":"Response Get Zoning By Code Api St Johns Zoning By Code  Code  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-johns/zoning/batch":{"post":{"summary":"Get Zoning Batch","description":"Get multiple zoning districts by zone codes in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of zone codes.\nExample: {\"ids\": [\"CR20-C20/R20\", \"C-C1\", \"R-G\"]}\nMaximum 100 zone codes per request.","operationId":"get_zoning_batch_api_st_johns_zoning_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning Batch Api St Johns Zoning Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-johns/zoning/list":{"get":{"summary":"List Zoning Districts","description":"List all zoning districts with pagination.\n\nUse this endpoint to browse available zoning districts and discover valid IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_zoning_districts_api_st_johns_zoning_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Zoning Districts Api St Johns Zoning List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-johns/zoning/codes":{"get":{"summary":"List Zone Codes","description":"List all zone codes with descriptions.","operationId":"list_zone_codes_api_st_johns_zoning_codes_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"type":"string","description":"Filter by major category (e.g., Commercial, Residential)","title":"Category"},"description":"Filter by major category (e.g., Commercial, Residential)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoneCodeInfo"},"title":"Response List Zone Codes Api St Johns Zoning Codes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-johns/zoning/stats":{"get":{"summary":"Zoning Stats","description":"Get zoning statistics.","operationId":"zoning_stats_api_st_johns_zoning_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-johns/zoning/export":{"get":{"summary":"Export Zoning","description":"Export zoning district data as CSV or GeoJSON.\n\nSupports filtering by zone code, category, and area range.\nMaximum 10,000 records per export.","operationId":"export_zoning_api_st_johns_zoning_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"zone_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Zone code filter (e.g., CR2)","title":"Zone Code"},"description":"Zone code filter (e.g., CR2)"},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Major category filter","title":"Category"},"description":"Major category filter"},{"name":"min_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum area in sq km","title":"Min Area"},"description":"Minimum area in sq km"},{"name":"max_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum area in sq km","title":"Max Area"},"description":"Maximum area in sq km"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-johns/permits/stats":{"get":{"summary":"Building Stats","description":"Get building permit statistics.","operationId":"building_stats_api_st_johns_permits_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-johns/permits/search":{"get":{"summary":"Search Building Permits","description":"Search building permits by address, contractor, applicant, permit number, and/or permit type.","operationId":"search_building_permits_api_st_johns_permits_search_get","parameters":[{"name":"address","in":"query","required":false,"schema":{"type":"string","description":"Address to search","title":"Address"},"description":"Address to search"},{"name":"q","in":"query","required":false,"schema":{"type":"string","description":"General text search (address, contractor, applicant, permit #)","title":"Q"},"description":"General text search (address, contractor, applicant, permit #)"},{"name":"permit_type","in":"query","required":false,"schema":{"type":"string","description":"Filter by permit type","title":"Permit Type"},"description":"Filter by permit type"},{"name":"bbox","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bounding box: min_lon,min_lat,max_lon,max_lat","title":"Bbox"},"description":"Bounding box: min_lon,min_lat,max_lon,max_lat"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max results","default":20,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset","default":0,"title":"Offset"},"description":"Results offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-johns/permits/nearby":{"get":{"summary":"Nearby Building Permits","description":"Coordinate-first alias for nearby building permits.","operationId":"nearby_building_permits_api_st_johns_permits_nearby_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":84.0,"minimum":41.0,"description":"Canadian latitude","title":"Lat"},"description":"Canadian latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":-52.0,"minimum":-142.0,"description":"Canadian longitude","title":"Lon"},"description":"Canadian longitude"},{"name":"radius_m","in":"query","required":false,"schema":{"type":"integer","maximum":50000,"minimum":1,"default":1000,"title":"Radius M"}},{"name":"permit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Permit Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-johns/permits/export":{"get":{"summary":"Export Building Permits","description":"Export building permit data as CSV or GeoJSON.\n\nSupports filtering by address, permit type, and date range.\nMaximum 10,000 records per export.","operationId":"export_building_permits_api_st_johns_permits_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Address filter","title":"Address"},"description":"Address filter"},{"name":"permit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Permit type filter","title":"Permit Type"},"description":"Permit type filter"},{"name":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Start date (YYYY-MM-DD)","title":"Date From"},"description":"Start date (YYYY-MM-DD)"},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"End date (YYYY-MM-DD)","title":"Date To"},"description":"End date (YYYY-MM-DD)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-johns/permits/recent":{"get":{"summary":"Recent Building Permits","description":"Get recent building permits sorted by application date (newest first).\n\nUse this to see where construction activity is happening right now.","operationId":"recent_building_permits_api_st_johns_permits_recent_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Max results","default":20,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset","default":0,"title":"Offset"},"description":"Results offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-johns/permits/batch":{"post":{"summary":"Get Building Permits Batch","description":"Get multiple building permits by permit numbers in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of permit numbers.\nExample: {\"ids\": [\"BP123456\", \"BP789012\"]}\nMaximum 100 permit numbers per request.","operationId":"get_building_permits_batch_api_st_johns_permits_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Building Permits Batch Api St Johns Permits Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-johns/permits/{permit_number}":{"get":{"summary":"Get Building Permit","description":"Get building permit details by permit number.\n\nServes HTML for browsers, JSON for API clients.","operationId":"get_building_permit_api_st_johns_permits__permit_number__get","parameters":[{"name":"permit_number","in":"path","required":true,"schema":{"type":"string","description":"Permit number","title":"Permit Number"},"description":"Permit number"},{"name":"_city_name","in":"query","required":false,"schema":{"default":"St. John's","title":" City Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-johns/health":{"get":{"summary":"City Health","description":"City-specific health check.","operationId":"city_health_api_st_johns_health_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/airdrie/entries/{kind}":{"get":{"summary":"List Entries","operationId":"list_entries_api_airdrie_entries__kind__get","parameters":[{"name":"kind","in":"path","required":true,"schema":{"type":"string","description":"Canonical entry kind: property, permit, zoning, or safety","title":"Kind"},"description":"Canonical entry kind: property, permit, zoning, or safety"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"_services","in":"query","required":false,"schema":{"title":" Services"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Entries Api Airdrie Entries  Kind  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/airdrie/property/search":{"get":{"summary":"Search Property","description":"Search for properties by address, or browse all if no address specified.\nSupports sorting by assessed_value, address, year_built, community, or lot_size_sqft.\nSupports value range filtering with min_value and max_value.\n Supports property_type and year range filters.","operationId":"search_property_api_airdrie_property_search_get","parameters":[{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Street address to search (omit to browse all)","title":"Address"},"description":"Street address to search (omit to browse all)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max results to return (up to 1000 for map browse)","default":10,"title":"Limit"},"description":"Max results to return (up to 1000 for map browse)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset for pagination","default":0,"title":"Offset"},"description":"Results offset for pagination"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft","title":"Sort By"},"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"asc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"},{"name":"property_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property type filter (e.g. RE, Residential)","title":"Property Type"},"description":"Property type filter (e.g. RE, Residential)"},{"name":"min_year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter: minimum year built","title":"Min Year"},"description":"Filter: minimum year built"},{"name":"max_year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter: maximum year built","title":"Max Year"},"description":"Filter: maximum year built"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertySearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/airdrie/property/list":{"get":{"summary":"List Property","description":"List all properties with pagination, sorting, and value range filtering.\n\nUse this endpoint to browse available property records and discover valid roll numbers.\nReturns paginated results with total count for client-side pagination.\nSort by assessed_value with order=desc to find the most expensive properties.","operationId":"list_property_api_airdrie_property_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft","title":"Sort By"},"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"asc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Property Api Airdrie Property List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/airdrie/property/geojson":{"get":{"summary":"Property Geojson","operationId":"property_geojson_api_airdrie_property_geojson_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500000,"minimum":1,"description":"Max features to return (cap prevents browser overload for large cities)","default":50000,"title":"Limit"},"description":"Max features to return (cap prevents browser overload for large cities)"},{"name":"sw_lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport south-west latitude","title":"Sw Lat"},"description":"Viewport south-west latitude"},{"name":"sw_lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport south-west longitude","title":"Sw Lon"},"description":"Viewport south-west longitude"},{"name":"ne_lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport north-east latitude","title":"Ne Lat"},"description":"Viewport north-east latitude"},{"name":"ne_lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport north-east longitude","title":"Ne Lon"},"description":"Viewport north-east longitude"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Offset for pagination through viewport results (use with limit)","default":0,"title":"Offset"},"description":"Offset for pagination through viewport results (use with limit)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/airdrie/property/top":{"get":{"summary":"Top Property","description":"Get top-N properties sorted by any numeric column.\n\nConvenience endpoint for AI agents and dashboards. Returns the top\nN properties sorted by the given column. Defaults to most expensive\n(assessed_value descending). Combine with min_value/max_value to\nfind e.g. the most expensive residential properties.","operationId":"top_property_api_airdrie_property_top_get","parameters":[{"name":"n","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Number of top properties to return","default":10,"title":"N"},"description":"Number of top properties to return"},{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","description":"Sort column: assessed_value, year_built, lot_size_sqft","default":"assessed_value","title":"Sort By"},"description":"Sort column: assessed_value, year_built, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"desc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Top Property Api Airdrie Property Top Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/airdrie/property/stats":{"get":{"summary":"Property Stats","description":"Get property assessment statistics.","operationId":"property_stats_api_airdrie_property_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/airdrie/property/autocomplete":{"get":{"summary":"Property Autocomplete","description":"Get address and roll number suggestions for typeahead search.","operationId":"property_autocomplete_api_airdrie_property_autocomplete_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"description":"Search query for address/roll number suggestions","title":"Q"},"description":"Search query for address/roll number suggestions"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":25,"minimum":1,"description":"Max suggestions to return","default":10,"title":"Limit"},"description":"Max suggestions to return"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/airdrie/property/geocode":{"post":{"summary":"Property Geocode","description":"Geocode property addresses to lat/lon coordinates.\n\nAccepts a JSON body with 'addresses' (list of address strings, max 50).\nReturns cached results instantly; uncached addresses are geocoded via Nominatim.\n\nExample: {\"addresses\": [\"123 Main St\", \"456 Oak Ave\"]}","operationId":"property_geocode_api_airdrie_property_geocode_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/airdrie/property/by-dls":{"get":{"summary":"Get Property By Dls","description":"Get property assessment by DLS coordinates.","operationId":"get_property_by_dls_api_airdrie_property_by_dls_get","parameters":[{"name":"quarter","in":"query","required":true,"schema":{"type":"string","description":"Quarter section (e.g., SW)","title":"Quarter"},"description":"Quarter section (e.g., SW)"},{"name":"section","in":"query","required":true,"schema":{"type":"integer","description":"Section number","title":"Section"},"description":"Section number"},{"name":"township","in":"query","required":true,"schema":{"type":"integer","description":"Township number","title":"Township"},"description":"Township number"},{"name":"range","in":"query","required":true,"schema":{"type":"integer","description":"Range number","title":"Range"},"description":"Range number"},{"name":"meridian","in":"query","required":true,"schema":{"type":"integer","description":"Meridian number","title":"Meridian"},"description":"Meridian number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyAssessment"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/airdrie/property/by-gps":{"get":{"summary":"Get Property By Gps","description":"Find coordinate-bearing assessment records nearest a GPS point.\n\nResults are point-nearness matches unless the municipal source supplies\nparcel polygons; clients should not interpret proximity as legal parcel\ncontainment.","operationId":"get_property_by_gps_api_airdrie_property_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":84.0,"minimum":41.0,"description":"Canadian latitude","title":"Lat"},"description":"Canadian latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":-52.0,"minimum":-142.0,"description":"Canadian longitude","title":"Lon"},"description":"Canadian longitude"},{"name":"radius_m","in":"query","required":false,"schema":{"type":"integer","maximum":5000,"minimum":1,"description":"Maximum point distance","default":100,"title":"Radius M"},"description":"Maximum point distance"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":10,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Property By Gps Api Airdrie Property By Gps Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/airdrie/property/by-roll/{roll_number}":{"get":{"summary":"Get Property By Roll","description":"Get property assessment by roll number.","operationId":"get_property_by_roll_api_airdrie_property_by_roll__roll_number__get","parameters":[{"name":"roll_number","in":"path","required":true,"schema":{"type":"string","description":"Property roll number","title":"Roll Number"},"description":"Property roll number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyAssessment"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/airdrie/property/report":{"get":{"summary":"Property Report Lookup","description":"Consolidated report by roll number, address, or GPS.","operationId":"property_report_lookup_api_airdrie_property_report_get","parameters":[{"name":"roll_number","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property roll number","title":"Roll Number"},"description":"Property roll number"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Street address","title":"Address"},"description":"Street address"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyReport"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/airdrie/property/report/{roll_number}":{"get":{"summary":"Property Report","description":"Get consolidated property report: assessment + building permits + zoning + DLS.","operationId":"property_report_api_airdrie_property_report__roll_number__get","parameters":[{"name":"roll_number","in":"path","required":true,"schema":{"type":"string","description":"Property roll number","title":"Roll Number"},"description":"Property roll number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyReport"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/airdrie/property/batch":{"post":{"summary":"Get Properties Batch","description":"Get multiple properties by roll numbers in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of roll numbers.\nExample: {\"ids\": [\"123456789\", \"987654321\"]}\nMaximum 100 roll numbers per request.","operationId":"get_properties_batch_api_airdrie_property_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Properties Batch Api Airdrie Property Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/airdrie/property/export":{"get":{"summary":"Export Properties","description":"Export property data as CSV or GeoJSON.\n\nSupports filtering by address, property type, and assessed value range.\nMaximum 10,000 records per export.","operationId":"export_properties_api_airdrie_property_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Address filter","title":"Address"},"description":"Address filter"},{"name":"property_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property type filter","title":"Property Type"},"description":"Property type filter"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum assessed value","title":"Min Value"},"description":"Minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum assessed value","title":"Max Value"},"description":"Maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/airdrie/census/profile":{"get":{"summary":"Get Census Profile","description":"Get census profile for a specific Dissemination Area.\n\nProvide either da_id directly, OR lat+lon to find the nearest DA automatically.","operationId":"get_census_profile_api_airdrie_census_profile_get","parameters":[{"name":"da_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Dissemination Area ID (e.g., 48820001)","title":"Da Id"},"description":"Dissemination Area ID (e.g., 48820001)"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude for nearest-DA lookup","title":"Lat"},"description":"Latitude for nearest-DA lookup"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude for nearest-DA lookup","title":"Lon"},"description":"Longitude for nearest-DA lookup"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusProfile"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/airdrie/census/batch":{"post":{"summary":"Get Census Batch","description":"Get multiple census profiles by DA IDs in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of DA IDs.\nExample: {\"ids\": [\"48820001\", \"48820002\"]}\nMaximum 100 DA IDs per request.","operationId":"get_census_batch_api_airdrie_census_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Census Batch Api Airdrie Census Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/airdrie/census/export":{"get":{"summary":"Export Census","description":"Export census data as CSV.\n\nSupports filtering by population range and geography type.\nMaximum 10,000 records per export.","operationId":"export_census_api_airdrie_census_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv only","default":"csv","title":"Format"},"description":"Export format: csv only"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"min_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Minimum population filter","title":"Min Population"},"description":"Minimum population filter"},{"name":"max_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Maximum population filter","title":"Max Population"},"description":"Maximum population filter"},{"name":"geography_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Geography type filter (DA, CT, CMA)","title":"Geography Type"},"description":"Geography type filter (DA, CT, CMA)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/airdrie/census/list":{"get":{"summary":"List Census Profiles","description":"List all census profiles with pagination.\n\nUse this endpoint to browse available census profiles and discover valid DA IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_census_profiles_api_airdrie_census_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Census Profiles Api Airdrie Census List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/airdrie/census/by-gps":{"get":{"summary":"Get Census By Gps","description":"Get census data for GPS coordinates.","operationId":"get_census_by_gps_api_airdrie_census_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90,"minimum":-90,"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":180,"minimum":-180,"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/airdrie/census/by-dls":{"get":{"summary":"Get Census By Dls","description":"Get census data for DLS coordinates.","operationId":"get_census_by_dls_api_airdrie_census_by_dls_get","parameters":[{"name":"dls","in":"query","required":true,"schema":{"type":"string","description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)","title":"Dls"},"description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/airdrie/census/map-data":{"get":{"summary":"Get Census Map Data","description":"Get lightweight DA points for choropleth map rendering.\n\nReturns centroid coordinates and key metrics (income, age, population,\nhousehold size, employment rate) for all DAs in the city.\nUsed by the census dashboard to render color-coded maps.","operationId":"get_census_map_data_api_airdrie_census_map_data_get","parameters":[{"name":"year","in":"query","required":false,"schema":{"type":"integer","description":"Census year for DA map data","default":2021,"title":"Year"},"description":"Census year for DA map data"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/airdrie/census/stats":{"get":{"summary":"Census Stats","description":"Get census data statistics.","operationId":"census_stats_api_airdrie_census_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/airdrie/census/compare":{"get":{"summary":"Census Compare","description":"Compare key census metrics across multiple years.\n\nReturns side-by-side comparison of population, households,\navg_income, median_age, density, and land_area for each requested year.\nYears without data return null for that year's values.","operationId":"census_compare_api_airdrie_census_compare_get","parameters":[{"name":"years","in":"query","required":false,"schema":{"type":"string","description":"Comma-separated census years (e.g., 2016,2021)","default":"2021","title":"Years"},"description":"Comma-separated census years (e.g., 2016,2021)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/airdrie/census/time-series":{"get":{"summary":"Census Timeseries","description":"Get year-by-year census trends for this city.\n\nReturns population, income, age, and household trends across all\navailable census years. Useful for spotting long-term demographic shifts.","operationId":"census_timeseries_api_airdrie_census_time_series_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/airdrie/geography/list":{"get":{"summary":"Geography List","description":"List geography boundaries for this city.","operationId":"geography_list_api_airdrie_geography_list_get","parameters":[{"name":"type","in":"query","required":false,"schema":{"type":"string","title":"Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/airdrie/geography/by-gps":{"get":{"summary":"Geography By Gps","description":"Find the geography boundary containing a GPS point.","operationId":"geography_by_gps_api_airdrie_geography_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","title":"Lat"}},{"name":"lon","in":"query","required":true,"schema":{"type":"number","title":"Lon"}},{"name":"type","in":"query","required":false,"schema":{"type":"string","default":"DA","title":"Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/airdrie/geography/stats":{"get":{"summary":"Geography Stats","description":"Get geography statistics for this city.","operationId":"geography_stats_api_airdrie_geography_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/airdrie/geography/{geoid}":{"get":{"summary":"Geography Boundary","description":"Get a specific geography boundary by geoid, including GeoJSON polygon.","operationId":"geography_boundary_api_airdrie_geography__geoid__get","parameters":[{"name":"geoid","in":"path","required":true,"schema":{"type":"string","title":"Geoid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/airdrie/census/rental/list":{"get":{"summary":"List Rental Prices","description":"List rental price records for this city, with optional unit type filter.","operationId":"list_rental_prices_api_airdrie_census_rental_list_get","parameters":[{"name":"unit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":50,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalPriceListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/airdrie/census/rental/trend":{"get":{"summary":"Get Rental Trend","description":"Get rental price time series for a specific unit type.","operationId":"get_rental_trend_api_airdrie_census_rental_trend_get","parameters":[{"name":"unit_type","in":"query","required":true,"schema":{"type":"string","description":"Rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Rental unit type (e.g. 'Apartment - 1 bedroom')"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalTrendResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/airdrie/census/rental/types":{"get":{"summary":"Get Rental Types","description":"Get available rental unit types for this city.","operationId":"get_rental_types_api_airdrie_census_rental_types_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/airdrie/zoning/by-gps":{"get":{"summary":"Get Zoning By Gps","description":"Get zoning district for GPS coordinates.","operationId":"get_zoning_by_gps_api_airdrie_zoning_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZoningByGPSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/airdrie/zoning/by-id/{district_id}":{"get":{"summary":"Get Zoning By Id","description":"Get a single zoning district by its numeric ID.","operationId":"get_zoning_by_id_api_airdrie_zoning_by_id__district_id__get","parameters":[{"name":"district_id","in":"path","required":true,"schema":{"type":"integer","description":"Zoning district numeric ID","title":"District Id"},"description":"Zoning district numeric ID"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning By Id Api Airdrie Zoning By Id  District Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/airdrie/zoning/by-code/{code}":{"get":{"summary":"Get Zoning By Code","description":"Get all districts with a specific zone code.","operationId":"get_zoning_by_code_api_airdrie_zoning_by_code__code__get","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","description":"Zone code (e.g., C-C1, R-G)","title":"Code"},"description":"Zone code (e.g., C-C1, R-G)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoningDistrict"},"title":"Response Get Zoning By Code Api Airdrie Zoning By Code  Code  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/airdrie/zoning/batch":{"post":{"summary":"Get Zoning Batch","description":"Get multiple zoning districts by zone codes in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of zone codes.\nExample: {\"ids\": [\"CR20-C20/R20\", \"C-C1\", \"R-G\"]}\nMaximum 100 zone codes per request.","operationId":"get_zoning_batch_api_airdrie_zoning_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning Batch Api Airdrie Zoning Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/airdrie/zoning/list":{"get":{"summary":"List Zoning Districts","description":"List all zoning districts with pagination.\n\nUse this endpoint to browse available zoning districts and discover valid IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_zoning_districts_api_airdrie_zoning_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Zoning Districts Api Airdrie Zoning List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/airdrie/zoning/codes":{"get":{"summary":"List Zone Codes","description":"List all zone codes with descriptions.","operationId":"list_zone_codes_api_airdrie_zoning_codes_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"type":"string","description":"Filter by major category (e.g., Commercial, Residential)","title":"Category"},"description":"Filter by major category (e.g., Commercial, Residential)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoneCodeInfo"},"title":"Response List Zone Codes Api Airdrie Zoning Codes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/airdrie/zoning/stats":{"get":{"summary":"Zoning Stats","description":"Get zoning statistics.","operationId":"zoning_stats_api_airdrie_zoning_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/airdrie/zoning/export":{"get":{"summary":"Export Zoning","description":"Export zoning district data as CSV or GeoJSON.\n\nSupports filtering by zone code, category, and area range.\nMaximum 10,000 records per export.","operationId":"export_zoning_api_airdrie_zoning_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"zone_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Zone code filter (e.g., CR2)","title":"Zone Code"},"description":"Zone code filter (e.g., CR2)"},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Major category filter","title":"Category"},"description":"Major category filter"},{"name":"min_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum area in sq km","title":"Min Area"},"description":"Minimum area in sq km"},{"name":"max_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum area in sq km","title":"Max Area"},"description":"Maximum area in sq km"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/airdrie/permits/stats":{"get":{"summary":"Building Stats","description":"Get building permit statistics.","operationId":"building_stats_api_airdrie_permits_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/airdrie/permits/search":{"get":{"summary":"Search Building Permits","description":"Search building permits by address, contractor, applicant, permit number, and/or permit type.","operationId":"search_building_permits_api_airdrie_permits_search_get","parameters":[{"name":"address","in":"query","required":false,"schema":{"type":"string","description":"Address to search","title":"Address"},"description":"Address to search"},{"name":"q","in":"query","required":false,"schema":{"type":"string","description":"General text search (address, contractor, applicant, permit #)","title":"Q"},"description":"General text search (address, contractor, applicant, permit #)"},{"name":"permit_type","in":"query","required":false,"schema":{"type":"string","description":"Filter by permit type","title":"Permit Type"},"description":"Filter by permit type"},{"name":"bbox","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bounding box: min_lon,min_lat,max_lon,max_lat","title":"Bbox"},"description":"Bounding box: min_lon,min_lat,max_lon,max_lat"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max results","default":20,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset","default":0,"title":"Offset"},"description":"Results offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/airdrie/permits/nearby":{"get":{"summary":"Nearby Building Permits","description":"Coordinate-first alias for nearby building permits.","operationId":"nearby_building_permits_api_airdrie_permits_nearby_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":84.0,"minimum":41.0,"description":"Canadian latitude","title":"Lat"},"description":"Canadian latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":-52.0,"minimum":-142.0,"description":"Canadian longitude","title":"Lon"},"description":"Canadian longitude"},{"name":"radius_m","in":"query","required":false,"schema":{"type":"integer","maximum":50000,"minimum":1,"default":1000,"title":"Radius M"}},{"name":"permit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Permit Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/airdrie/permits/export":{"get":{"summary":"Export Building Permits","description":"Export building permit data as CSV or GeoJSON.\n\nSupports filtering by address, permit type, and date range.\nMaximum 10,000 records per export.","operationId":"export_building_permits_api_airdrie_permits_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Address filter","title":"Address"},"description":"Address filter"},{"name":"permit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Permit type filter","title":"Permit Type"},"description":"Permit type filter"},{"name":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Start date (YYYY-MM-DD)","title":"Date From"},"description":"Start date (YYYY-MM-DD)"},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"End date (YYYY-MM-DD)","title":"Date To"},"description":"End date (YYYY-MM-DD)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/airdrie/permits/recent":{"get":{"summary":"Recent Building Permits","description":"Get recent building permits sorted by application date (newest first).\n\nUse this to see where construction activity is happening right now.","operationId":"recent_building_permits_api_airdrie_permits_recent_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Max results","default":20,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset","default":0,"title":"Offset"},"description":"Results offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/airdrie/permits/batch":{"post":{"summary":"Get Building Permits Batch","description":"Get multiple building permits by permit numbers in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of permit numbers.\nExample: {\"ids\": [\"BP123456\", \"BP789012\"]}\nMaximum 100 permit numbers per request.","operationId":"get_building_permits_batch_api_airdrie_permits_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Building Permits Batch Api Airdrie Permits Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/airdrie/permits/{permit_number}":{"get":{"summary":"Get Building Permit","description":"Get building permit details by permit number.\n\nServes HTML for browsers, JSON for API clients.","operationId":"get_building_permit_api_airdrie_permits__permit_number__get","parameters":[{"name":"permit_number","in":"path","required":true,"schema":{"type":"string","description":"Permit number","title":"Permit Number"},"description":"Permit number"},{"name":"_city_name","in":"query","required":false,"schema":{"default":"Airdrie","title":" City Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/airdrie/health":{"get":{"summary":"City Health","description":"City-specific health check.","operationId":"city_health_api_airdrie_health_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/red-deer/entries/{kind}":{"get":{"summary":"List Entries","operationId":"list_entries_api_red_deer_entries__kind__get","parameters":[{"name":"kind","in":"path","required":true,"schema":{"type":"string","description":"Canonical entry kind: property, permit, zoning, or safety","title":"Kind"},"description":"Canonical entry kind: property, permit, zoning, or safety"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"_services","in":"query","required":false,"schema":{"title":" Services"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Entries Api Red Deer Entries  Kind  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/red-deer/census/profile":{"get":{"summary":"Get Census Profile","description":"Get census profile for a specific Dissemination Area.\n\nProvide either da_id directly, OR lat+lon to find the nearest DA automatically.","operationId":"get_census_profile_api_red_deer_census_profile_get","parameters":[{"name":"da_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Dissemination Area ID (e.g., 48820001)","title":"Da Id"},"description":"Dissemination Area ID (e.g., 48820001)"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude for nearest-DA lookup","title":"Lat"},"description":"Latitude for nearest-DA lookup"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude for nearest-DA lookup","title":"Lon"},"description":"Longitude for nearest-DA lookup"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusProfile"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/red-deer/census/batch":{"post":{"summary":"Get Census Batch","description":"Get multiple census profiles by DA IDs in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of DA IDs.\nExample: {\"ids\": [\"48820001\", \"48820002\"]}\nMaximum 100 DA IDs per request.","operationId":"get_census_batch_api_red_deer_census_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Census Batch Api Red Deer Census Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/red-deer/census/export":{"get":{"summary":"Export Census","description":"Export census data as CSV.\n\nSupports filtering by population range and geography type.\nMaximum 10,000 records per export.","operationId":"export_census_api_red_deer_census_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv only","default":"csv","title":"Format"},"description":"Export format: csv only"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"min_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Minimum population filter","title":"Min Population"},"description":"Minimum population filter"},{"name":"max_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Maximum population filter","title":"Max Population"},"description":"Maximum population filter"},{"name":"geography_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Geography type filter (DA, CT, CMA)","title":"Geography Type"},"description":"Geography type filter (DA, CT, CMA)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/red-deer/census/list":{"get":{"summary":"List Census Profiles","description":"List all census profiles with pagination.\n\nUse this endpoint to browse available census profiles and discover valid DA IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_census_profiles_api_red_deer_census_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Census Profiles Api Red Deer Census List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/red-deer/census/by-gps":{"get":{"summary":"Get Census By Gps","description":"Get census data for GPS coordinates.","operationId":"get_census_by_gps_api_red_deer_census_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90,"minimum":-90,"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":180,"minimum":-180,"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/red-deer/census/by-dls":{"get":{"summary":"Get Census By Dls","description":"Get census data for DLS coordinates.","operationId":"get_census_by_dls_api_red_deer_census_by_dls_get","parameters":[{"name":"dls","in":"query","required":true,"schema":{"type":"string","description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)","title":"Dls"},"description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/red-deer/census/map-data":{"get":{"summary":"Get Census Map Data","description":"Get lightweight DA points for choropleth map rendering.\n\nReturns centroid coordinates and key metrics (income, age, population,\nhousehold size, employment rate) for all DAs in the city.\nUsed by the census dashboard to render color-coded maps.","operationId":"get_census_map_data_api_red_deer_census_map_data_get","parameters":[{"name":"year","in":"query","required":false,"schema":{"type":"integer","description":"Census year for DA map data","default":2021,"title":"Year"},"description":"Census year for DA map data"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/red-deer/census/stats":{"get":{"summary":"Census Stats","description":"Get census data statistics.","operationId":"census_stats_api_red_deer_census_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/red-deer/census/compare":{"get":{"summary":"Census Compare","description":"Compare key census metrics across multiple years.\n\nReturns side-by-side comparison of population, households,\navg_income, median_age, density, and land_area for each requested year.\nYears without data return null for that year's values.","operationId":"census_compare_api_red_deer_census_compare_get","parameters":[{"name":"years","in":"query","required":false,"schema":{"type":"string","description":"Comma-separated census years (e.g., 2016,2021)","default":"2021","title":"Years"},"description":"Comma-separated census years (e.g., 2016,2021)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/red-deer/census/time-series":{"get":{"summary":"Census Timeseries","description":"Get year-by-year census trends for this city.\n\nReturns population, income, age, and household trends across all\navailable census years. Useful for spotting long-term demographic shifts.","operationId":"census_timeseries_api_red_deer_census_time_series_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/red-deer/geography/list":{"get":{"summary":"Geography List","description":"List geography boundaries for this city.","operationId":"geography_list_api_red_deer_geography_list_get","parameters":[{"name":"type","in":"query","required":false,"schema":{"type":"string","title":"Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/red-deer/geography/by-gps":{"get":{"summary":"Geography By Gps","description":"Find the geography boundary containing a GPS point.","operationId":"geography_by_gps_api_red_deer_geography_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","title":"Lat"}},{"name":"lon","in":"query","required":true,"schema":{"type":"number","title":"Lon"}},{"name":"type","in":"query","required":false,"schema":{"type":"string","default":"DA","title":"Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/red-deer/geography/stats":{"get":{"summary":"Geography Stats","description":"Get geography statistics for this city.","operationId":"geography_stats_api_red_deer_geography_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/red-deer/geography/{geoid}":{"get":{"summary":"Geography Boundary","description":"Get a specific geography boundary by geoid, including GeoJSON polygon.","operationId":"geography_boundary_api_red_deer_geography__geoid__get","parameters":[{"name":"geoid","in":"path","required":true,"schema":{"type":"string","title":"Geoid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/red-deer/census/rental/list":{"get":{"summary":"List Rental Prices","description":"List rental price records for this city, with optional unit type filter.","operationId":"list_rental_prices_api_red_deer_census_rental_list_get","parameters":[{"name":"unit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":50,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalPriceListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/red-deer/census/rental/trend":{"get":{"summary":"Get Rental Trend","description":"Get rental price time series for a specific unit type.","operationId":"get_rental_trend_api_red_deer_census_rental_trend_get","parameters":[{"name":"unit_type","in":"query","required":true,"schema":{"type":"string","description":"Rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Rental unit type (e.g. 'Apartment - 1 bedroom')"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalTrendResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/red-deer/census/rental/types":{"get":{"summary":"Get Rental Types","description":"Get available rental unit types for this city.","operationId":"get_rental_types_api_red_deer_census_rental_types_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/red-deer/zoning/by-gps":{"get":{"summary":"Get Zoning By Gps","description":"Get zoning district for GPS coordinates.","operationId":"get_zoning_by_gps_api_red_deer_zoning_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZoningByGPSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/red-deer/zoning/by-id/{district_id}":{"get":{"summary":"Get Zoning By Id","description":"Get a single zoning district by its numeric ID.","operationId":"get_zoning_by_id_api_red_deer_zoning_by_id__district_id__get","parameters":[{"name":"district_id","in":"path","required":true,"schema":{"type":"integer","description":"Zoning district numeric ID","title":"District Id"},"description":"Zoning district numeric ID"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning By Id Api Red Deer Zoning By Id  District Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/red-deer/zoning/by-code/{code}":{"get":{"summary":"Get Zoning By Code","description":"Get all districts with a specific zone code.","operationId":"get_zoning_by_code_api_red_deer_zoning_by_code__code__get","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","description":"Zone code (e.g., C-C1, R-G)","title":"Code"},"description":"Zone code (e.g., C-C1, R-G)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoningDistrict"},"title":"Response Get Zoning By Code Api Red Deer Zoning By Code  Code  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/red-deer/zoning/batch":{"post":{"summary":"Get Zoning Batch","description":"Get multiple zoning districts by zone codes in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of zone codes.\nExample: {\"ids\": [\"CR20-C20/R20\", \"C-C1\", \"R-G\"]}\nMaximum 100 zone codes per request.","operationId":"get_zoning_batch_api_red_deer_zoning_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning Batch Api Red Deer Zoning Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/red-deer/zoning/list":{"get":{"summary":"List Zoning Districts","description":"List all zoning districts with pagination.\n\nUse this endpoint to browse available zoning districts and discover valid IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_zoning_districts_api_red_deer_zoning_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Zoning Districts Api Red Deer Zoning List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/red-deer/zoning/codes":{"get":{"summary":"List Zone Codes","description":"List all zone codes with descriptions.","operationId":"list_zone_codes_api_red_deer_zoning_codes_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"type":"string","description":"Filter by major category (e.g., Commercial, Residential)","title":"Category"},"description":"Filter by major category (e.g., Commercial, Residential)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoneCodeInfo"},"title":"Response List Zone Codes Api Red Deer Zoning Codes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/red-deer/zoning/stats":{"get":{"summary":"Zoning Stats","description":"Get zoning statistics.","operationId":"zoning_stats_api_red_deer_zoning_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/red-deer/zoning/export":{"get":{"summary":"Export Zoning","description":"Export zoning district data as CSV or GeoJSON.\n\nSupports filtering by zone code, category, and area range.\nMaximum 10,000 records per export.","operationId":"export_zoning_api_red_deer_zoning_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"zone_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Zone code filter (e.g., CR2)","title":"Zone Code"},"description":"Zone code filter (e.g., CR2)"},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Major category filter","title":"Category"},"description":"Major category filter"},{"name":"min_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum area in sq km","title":"Min Area"},"description":"Minimum area in sq km"},{"name":"max_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum area in sq km","title":"Max Area"},"description":"Maximum area in sq km"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/red-deer/permits/stats":{"get":{"summary":"Building Stats","description":"Get building permit statistics.","operationId":"building_stats_api_red_deer_permits_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/red-deer/permits/search":{"get":{"summary":"Search Building Permits","description":"Search building permits by address, contractor, applicant, permit number, and/or permit type.","operationId":"search_building_permits_api_red_deer_permits_search_get","parameters":[{"name":"address","in":"query","required":false,"schema":{"type":"string","description":"Address to search","title":"Address"},"description":"Address to search"},{"name":"q","in":"query","required":false,"schema":{"type":"string","description":"General text search (address, contractor, applicant, permit #)","title":"Q"},"description":"General text search (address, contractor, applicant, permit #)"},{"name":"permit_type","in":"query","required":false,"schema":{"type":"string","description":"Filter by permit type","title":"Permit Type"},"description":"Filter by permit type"},{"name":"bbox","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bounding box: min_lon,min_lat,max_lon,max_lat","title":"Bbox"},"description":"Bounding box: min_lon,min_lat,max_lon,max_lat"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max results","default":20,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset","default":0,"title":"Offset"},"description":"Results offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/red-deer/permits/nearby":{"get":{"summary":"Nearby Building Permits","description":"Coordinate-first alias for nearby building permits.","operationId":"nearby_building_permits_api_red_deer_permits_nearby_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":84.0,"minimum":41.0,"description":"Canadian latitude","title":"Lat"},"description":"Canadian latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":-52.0,"minimum":-142.0,"description":"Canadian longitude","title":"Lon"},"description":"Canadian longitude"},{"name":"radius_m","in":"query","required":false,"schema":{"type":"integer","maximum":50000,"minimum":1,"default":1000,"title":"Radius M"}},{"name":"permit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Permit Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/red-deer/permits/export":{"get":{"summary":"Export Building Permits","description":"Export building permit data as CSV or GeoJSON.\n\nSupports filtering by address, permit type, and date range.\nMaximum 10,000 records per export.","operationId":"export_building_permits_api_red_deer_permits_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Address filter","title":"Address"},"description":"Address filter"},{"name":"permit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Permit type filter","title":"Permit Type"},"description":"Permit type filter"},{"name":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Start date (YYYY-MM-DD)","title":"Date From"},"description":"Start date (YYYY-MM-DD)"},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"End date (YYYY-MM-DD)","title":"Date To"},"description":"End date (YYYY-MM-DD)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/red-deer/permits/recent":{"get":{"summary":"Recent Building Permits","description":"Get recent building permits sorted by application date (newest first).\n\nUse this to see where construction activity is happening right now.","operationId":"recent_building_permits_api_red_deer_permits_recent_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Max results","default":20,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset","default":0,"title":"Offset"},"description":"Results offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/red-deer/permits/batch":{"post":{"summary":"Get Building Permits Batch","description":"Get multiple building permits by permit numbers in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of permit numbers.\nExample: {\"ids\": [\"BP123456\", \"BP789012\"]}\nMaximum 100 permit numbers per request.","operationId":"get_building_permits_batch_api_red_deer_permits_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Building Permits Batch Api Red Deer Permits Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/red-deer/permits/{permit_number}":{"get":{"summary":"Get Building Permit","description":"Get building permit details by permit number.\n\nServes HTML for browsers, JSON for API clients.","operationId":"get_building_permit_api_red_deer_permits__permit_number__get","parameters":[{"name":"permit_number","in":"path","required":true,"schema":{"type":"string","description":"Permit number","title":"Permit Number"},"description":"Permit number"},{"name":"_city_name","in":"query","required":false,"schema":{"default":"Red Deer","title":" City Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/red-deer/health":{"get":{"summary":"City Health","description":"City-specific health check.","operationId":"city_health_api_red_deer_health_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/strathcona-county/entries/{kind}":{"get":{"summary":"List Entries","operationId":"list_entries_api_strathcona_county_entries__kind__get","parameters":[{"name":"kind","in":"path","required":true,"schema":{"type":"string","description":"Canonical entry kind: property, permit, zoning, or safety","title":"Kind"},"description":"Canonical entry kind: property, permit, zoning, or safety"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"_services","in":"query","required":false,"schema":{"title":" Services"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Entries Api Strathcona County Entries  Kind  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/strathcona-county/property/search":{"get":{"summary":"Search Property","description":"Search for properties by address, or browse all if no address specified.\nSupports sorting by assessed_value, address, year_built, community, or lot_size_sqft.\nSupports value range filtering with min_value and max_value.\n Supports property_type and year range filters.","operationId":"search_property_api_strathcona_county_property_search_get","parameters":[{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Street address to search (omit to browse all)","title":"Address"},"description":"Street address to search (omit to browse all)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max results to return (up to 1000 for map browse)","default":10,"title":"Limit"},"description":"Max results to return (up to 1000 for map browse)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset for pagination","default":0,"title":"Offset"},"description":"Results offset for pagination"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft","title":"Sort By"},"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"asc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"},{"name":"property_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property type filter (e.g. RE, Residential)","title":"Property Type"},"description":"Property type filter (e.g. RE, Residential)"},{"name":"min_year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter: minimum year built","title":"Min Year"},"description":"Filter: minimum year built"},{"name":"max_year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter: maximum year built","title":"Max Year"},"description":"Filter: maximum year built"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertySearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/strathcona-county/property/list":{"get":{"summary":"List Property","description":"List all properties with pagination, sorting, and value range filtering.\n\nUse this endpoint to browse available property records and discover valid roll numbers.\nReturns paginated results with total count for client-side pagination.\nSort by assessed_value with order=desc to find the most expensive properties.","operationId":"list_property_api_strathcona_county_property_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft","title":"Sort By"},"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"asc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Property Api Strathcona County Property List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/strathcona-county/property/geojson":{"get":{"summary":"Property Geojson","operationId":"property_geojson_api_strathcona_county_property_geojson_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500000,"minimum":1,"description":"Max features to return (cap prevents browser overload for large cities)","default":50000,"title":"Limit"},"description":"Max features to return (cap prevents browser overload for large cities)"},{"name":"sw_lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport south-west latitude","title":"Sw Lat"},"description":"Viewport south-west latitude"},{"name":"sw_lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport south-west longitude","title":"Sw Lon"},"description":"Viewport south-west longitude"},{"name":"ne_lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport north-east latitude","title":"Ne Lat"},"description":"Viewport north-east latitude"},{"name":"ne_lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport north-east longitude","title":"Ne Lon"},"description":"Viewport north-east longitude"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Offset for pagination through viewport results (use with limit)","default":0,"title":"Offset"},"description":"Offset for pagination through viewport results (use with limit)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/strathcona-county/property/top":{"get":{"summary":"Top Property","description":"Get top-N properties sorted by any numeric column.\n\nConvenience endpoint for AI agents and dashboards. Returns the top\nN properties sorted by the given column. Defaults to most expensive\n(assessed_value descending). Combine with min_value/max_value to\nfind e.g. the most expensive residential properties.","operationId":"top_property_api_strathcona_county_property_top_get","parameters":[{"name":"n","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Number of top properties to return","default":10,"title":"N"},"description":"Number of top properties to return"},{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","description":"Sort column: assessed_value, year_built, lot_size_sqft","default":"assessed_value","title":"Sort By"},"description":"Sort column: assessed_value, year_built, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"desc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Top Property Api Strathcona County Property Top Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/strathcona-county/property/stats":{"get":{"summary":"Property Stats","description":"Get property assessment statistics.","operationId":"property_stats_api_strathcona_county_property_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/strathcona-county/property/autocomplete":{"get":{"summary":"Property Autocomplete","description":"Get address and roll number suggestions for typeahead search.","operationId":"property_autocomplete_api_strathcona_county_property_autocomplete_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"description":"Search query for address/roll number suggestions","title":"Q"},"description":"Search query for address/roll number suggestions"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":25,"minimum":1,"description":"Max suggestions to return","default":10,"title":"Limit"},"description":"Max suggestions to return"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/strathcona-county/property/geocode":{"post":{"summary":"Property Geocode","description":"Geocode property addresses to lat/lon coordinates.\n\nAccepts a JSON body with 'addresses' (list of address strings, max 50).\nReturns cached results instantly; uncached addresses are geocoded via Nominatim.\n\nExample: {\"addresses\": [\"123 Main St\", \"456 Oak Ave\"]}","operationId":"property_geocode_api_strathcona_county_property_geocode_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/strathcona-county/property/by-dls":{"get":{"summary":"Get Property By Dls","description":"Get property assessment by DLS coordinates.","operationId":"get_property_by_dls_api_strathcona_county_property_by_dls_get","parameters":[{"name":"quarter","in":"query","required":true,"schema":{"type":"string","description":"Quarter section (e.g., SW)","title":"Quarter"},"description":"Quarter section (e.g., SW)"},{"name":"section","in":"query","required":true,"schema":{"type":"integer","description":"Section number","title":"Section"},"description":"Section number"},{"name":"township","in":"query","required":true,"schema":{"type":"integer","description":"Township number","title":"Township"},"description":"Township number"},{"name":"range","in":"query","required":true,"schema":{"type":"integer","description":"Range number","title":"Range"},"description":"Range number"},{"name":"meridian","in":"query","required":true,"schema":{"type":"integer","description":"Meridian number","title":"Meridian"},"description":"Meridian number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyAssessment"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/strathcona-county/property/by-gps":{"get":{"summary":"Get Property By Gps","description":"Find coordinate-bearing assessment records nearest a GPS point.\n\nResults are point-nearness matches unless the municipal source supplies\nparcel polygons; clients should not interpret proximity as legal parcel\ncontainment.","operationId":"get_property_by_gps_api_strathcona_county_property_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":84.0,"minimum":41.0,"description":"Canadian latitude","title":"Lat"},"description":"Canadian latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":-52.0,"minimum":-142.0,"description":"Canadian longitude","title":"Lon"},"description":"Canadian longitude"},{"name":"radius_m","in":"query","required":false,"schema":{"type":"integer","maximum":5000,"minimum":1,"description":"Maximum point distance","default":100,"title":"Radius M"},"description":"Maximum point distance"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":10,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Property By Gps Api Strathcona County Property By Gps Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/strathcona-county/property/by-roll/{roll_number}":{"get":{"summary":"Get Property By Roll","description":"Get property assessment by roll number.","operationId":"get_property_by_roll_api_strathcona_county_property_by_roll__roll_number__get","parameters":[{"name":"roll_number","in":"path","required":true,"schema":{"type":"string","description":"Property roll number","title":"Roll Number"},"description":"Property roll number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyAssessment"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/strathcona-county/property/report":{"get":{"summary":"Property Report Lookup","description":"Consolidated report by roll number, address, or GPS.","operationId":"property_report_lookup_api_strathcona_county_property_report_get","parameters":[{"name":"roll_number","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property roll number","title":"Roll Number"},"description":"Property roll number"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Street address","title":"Address"},"description":"Street address"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyReport"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/strathcona-county/property/report/{roll_number}":{"get":{"summary":"Property Report","description":"Get consolidated property report: assessment + building permits + zoning + DLS.","operationId":"property_report_api_strathcona_county_property_report__roll_number__get","parameters":[{"name":"roll_number","in":"path","required":true,"schema":{"type":"string","description":"Property roll number","title":"Roll Number"},"description":"Property roll number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyReport"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/strathcona-county/property/batch":{"post":{"summary":"Get Properties Batch","description":"Get multiple properties by roll numbers in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of roll numbers.\nExample: {\"ids\": [\"123456789\", \"987654321\"]}\nMaximum 100 roll numbers per request.","operationId":"get_properties_batch_api_strathcona_county_property_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Properties Batch Api Strathcona County Property Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/strathcona-county/property/export":{"get":{"summary":"Export Properties","description":"Export property data as CSV or GeoJSON.\n\nSupports filtering by address, property type, and assessed value range.\nMaximum 10,000 records per export.","operationId":"export_properties_api_strathcona_county_property_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Address filter","title":"Address"},"description":"Address filter"},{"name":"property_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property type filter","title":"Property Type"},"description":"Property type filter"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum assessed value","title":"Min Value"},"description":"Minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum assessed value","title":"Max Value"},"description":"Maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/strathcona-county/census/profile":{"get":{"summary":"Get Census Profile","description":"Get census profile for a specific Dissemination Area.\n\nProvide either da_id directly, OR lat+lon to find the nearest DA automatically.","operationId":"get_census_profile_api_strathcona_county_census_profile_get","parameters":[{"name":"da_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Dissemination Area ID (e.g., 48820001)","title":"Da Id"},"description":"Dissemination Area ID (e.g., 48820001)"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude for nearest-DA lookup","title":"Lat"},"description":"Latitude for nearest-DA lookup"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude for nearest-DA lookup","title":"Lon"},"description":"Longitude for nearest-DA lookup"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusProfile"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/strathcona-county/census/batch":{"post":{"summary":"Get Census Batch","description":"Get multiple census profiles by DA IDs in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of DA IDs.\nExample: {\"ids\": [\"48820001\", \"48820002\"]}\nMaximum 100 DA IDs per request.","operationId":"get_census_batch_api_strathcona_county_census_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Census Batch Api Strathcona County Census Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/strathcona-county/census/export":{"get":{"summary":"Export Census","description":"Export census data as CSV.\n\nSupports filtering by population range and geography type.\nMaximum 10,000 records per export.","operationId":"export_census_api_strathcona_county_census_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv only","default":"csv","title":"Format"},"description":"Export format: csv only"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"min_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Minimum population filter","title":"Min Population"},"description":"Minimum population filter"},{"name":"max_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Maximum population filter","title":"Max Population"},"description":"Maximum population filter"},{"name":"geography_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Geography type filter (DA, CT, CMA)","title":"Geography Type"},"description":"Geography type filter (DA, CT, CMA)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/strathcona-county/census/list":{"get":{"summary":"List Census Profiles","description":"List all census profiles with pagination.\n\nUse this endpoint to browse available census profiles and discover valid DA IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_census_profiles_api_strathcona_county_census_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Census Profiles Api Strathcona County Census List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/strathcona-county/census/by-gps":{"get":{"summary":"Get Census By Gps","description":"Get census data for GPS coordinates.","operationId":"get_census_by_gps_api_strathcona_county_census_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90,"minimum":-90,"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":180,"minimum":-180,"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/strathcona-county/census/by-dls":{"get":{"summary":"Get Census By Dls","description":"Get census data for DLS coordinates.","operationId":"get_census_by_dls_api_strathcona_county_census_by_dls_get","parameters":[{"name":"dls","in":"query","required":true,"schema":{"type":"string","description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)","title":"Dls"},"description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/strathcona-county/census/map-data":{"get":{"summary":"Get Census Map Data","description":"Get lightweight DA points for choropleth map rendering.\n\nReturns centroid coordinates and key metrics (income, age, population,\nhousehold size, employment rate) for all DAs in the city.\nUsed by the census dashboard to render color-coded maps.","operationId":"get_census_map_data_api_strathcona_county_census_map_data_get","parameters":[{"name":"year","in":"query","required":false,"schema":{"type":"integer","description":"Census year for DA map data","default":2021,"title":"Year"},"description":"Census year for DA map data"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/strathcona-county/census/stats":{"get":{"summary":"Census Stats","description":"Get census data statistics.","operationId":"census_stats_api_strathcona_county_census_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/strathcona-county/census/compare":{"get":{"summary":"Census Compare","description":"Compare key census metrics across multiple years.\n\nReturns side-by-side comparison of population, households,\navg_income, median_age, density, and land_area for each requested year.\nYears without data return null for that year's values.","operationId":"census_compare_api_strathcona_county_census_compare_get","parameters":[{"name":"years","in":"query","required":false,"schema":{"type":"string","description":"Comma-separated census years (e.g., 2016,2021)","default":"2021","title":"Years"},"description":"Comma-separated census years (e.g., 2016,2021)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/strathcona-county/census/time-series":{"get":{"summary":"Census Timeseries","description":"Get year-by-year census trends for this city.\n\nReturns population, income, age, and household trends across all\navailable census years. Useful for spotting long-term demographic shifts.","operationId":"census_timeseries_api_strathcona_county_census_time_series_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/strathcona-county/geography/list":{"get":{"summary":"Geography List","description":"List geography boundaries for this city.","operationId":"geography_list_api_strathcona_county_geography_list_get","parameters":[{"name":"type","in":"query","required":false,"schema":{"type":"string","title":"Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/strathcona-county/geography/by-gps":{"get":{"summary":"Geography By Gps","description":"Find the geography boundary containing a GPS point.","operationId":"geography_by_gps_api_strathcona_county_geography_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","title":"Lat"}},{"name":"lon","in":"query","required":true,"schema":{"type":"number","title":"Lon"}},{"name":"type","in":"query","required":false,"schema":{"type":"string","default":"DA","title":"Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/strathcona-county/geography/stats":{"get":{"summary":"Geography Stats","description":"Get geography statistics for this city.","operationId":"geography_stats_api_strathcona_county_geography_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/strathcona-county/geography/{geoid}":{"get":{"summary":"Geography Boundary","description":"Get a specific geography boundary by geoid, including GeoJSON polygon.","operationId":"geography_boundary_api_strathcona_county_geography__geoid__get","parameters":[{"name":"geoid","in":"path","required":true,"schema":{"type":"string","title":"Geoid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/strathcona-county/census/rental/list":{"get":{"summary":"List Rental Prices","description":"List rental price records for this city, with optional unit type filter.","operationId":"list_rental_prices_api_strathcona_county_census_rental_list_get","parameters":[{"name":"unit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":50,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalPriceListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/strathcona-county/census/rental/trend":{"get":{"summary":"Get Rental Trend","description":"Get rental price time series for a specific unit type.","operationId":"get_rental_trend_api_strathcona_county_census_rental_trend_get","parameters":[{"name":"unit_type","in":"query","required":true,"schema":{"type":"string","description":"Rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Rental unit type (e.g. 'Apartment - 1 bedroom')"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalTrendResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/strathcona-county/census/rental/types":{"get":{"summary":"Get Rental Types","description":"Get available rental unit types for this city.","operationId":"get_rental_types_api_strathcona_county_census_rental_types_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/strathcona-county/zoning/by-gps":{"get":{"summary":"Get Zoning By Gps","description":"Get zoning district for GPS coordinates.","operationId":"get_zoning_by_gps_api_strathcona_county_zoning_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZoningByGPSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/strathcona-county/zoning/by-id/{district_id}":{"get":{"summary":"Get Zoning By Id","description":"Get a single zoning district by its numeric ID.","operationId":"get_zoning_by_id_api_strathcona_county_zoning_by_id__district_id__get","parameters":[{"name":"district_id","in":"path","required":true,"schema":{"type":"integer","description":"Zoning district numeric ID","title":"District Id"},"description":"Zoning district numeric ID"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning By Id Api Strathcona County Zoning By Id  District Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/strathcona-county/zoning/by-code/{code}":{"get":{"summary":"Get Zoning By Code","description":"Get all districts with a specific zone code.","operationId":"get_zoning_by_code_api_strathcona_county_zoning_by_code__code__get","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","description":"Zone code (e.g., C-C1, R-G)","title":"Code"},"description":"Zone code (e.g., C-C1, R-G)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoningDistrict"},"title":"Response Get Zoning By Code Api Strathcona County Zoning By Code  Code  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/strathcona-county/zoning/batch":{"post":{"summary":"Get Zoning Batch","description":"Get multiple zoning districts by zone codes in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of zone codes.\nExample: {\"ids\": [\"CR20-C20/R20\", \"C-C1\", \"R-G\"]}\nMaximum 100 zone codes per request.","operationId":"get_zoning_batch_api_strathcona_county_zoning_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning Batch Api Strathcona County Zoning Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/strathcona-county/zoning/list":{"get":{"summary":"List Zoning Districts","description":"List all zoning districts with pagination.\n\nUse this endpoint to browse available zoning districts and discover valid IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_zoning_districts_api_strathcona_county_zoning_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Zoning Districts Api Strathcona County Zoning List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/strathcona-county/zoning/codes":{"get":{"summary":"List Zone Codes","description":"List all zone codes with descriptions.","operationId":"list_zone_codes_api_strathcona_county_zoning_codes_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"type":"string","description":"Filter by major category (e.g., Commercial, Residential)","title":"Category"},"description":"Filter by major category (e.g., Commercial, Residential)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoneCodeInfo"},"title":"Response List Zone Codes Api Strathcona County Zoning Codes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/strathcona-county/zoning/stats":{"get":{"summary":"Zoning Stats","description":"Get zoning statistics.","operationId":"zoning_stats_api_strathcona_county_zoning_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/strathcona-county/zoning/export":{"get":{"summary":"Export Zoning","description":"Export zoning district data as CSV or GeoJSON.\n\nSupports filtering by zone code, category, and area range.\nMaximum 10,000 records per export.","operationId":"export_zoning_api_strathcona_county_zoning_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"zone_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Zone code filter (e.g., CR2)","title":"Zone Code"},"description":"Zone code filter (e.g., CR2)"},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Major category filter","title":"Category"},"description":"Major category filter"},{"name":"min_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum area in sq km","title":"Min Area"},"description":"Minimum area in sq km"},{"name":"max_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum area in sq km","title":"Max Area"},"description":"Maximum area in sq km"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/strathcona-county/permits/stats":{"get":{"summary":"Building Stats","description":"Get building permit statistics.","operationId":"building_stats_api_strathcona_county_permits_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/strathcona-county/permits/search":{"get":{"summary":"Search Building Permits","description":"Search building permits by address, contractor, applicant, permit number, and/or permit type.","operationId":"search_building_permits_api_strathcona_county_permits_search_get","parameters":[{"name":"address","in":"query","required":false,"schema":{"type":"string","description":"Address to search","title":"Address"},"description":"Address to search"},{"name":"q","in":"query","required":false,"schema":{"type":"string","description":"General text search (address, contractor, applicant, permit #)","title":"Q"},"description":"General text search (address, contractor, applicant, permit #)"},{"name":"permit_type","in":"query","required":false,"schema":{"type":"string","description":"Filter by permit type","title":"Permit Type"},"description":"Filter by permit type"},{"name":"bbox","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bounding box: min_lon,min_lat,max_lon,max_lat","title":"Bbox"},"description":"Bounding box: min_lon,min_lat,max_lon,max_lat"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max results","default":20,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset","default":0,"title":"Offset"},"description":"Results offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/strathcona-county/permits/nearby":{"get":{"summary":"Nearby Building Permits","description":"Coordinate-first alias for nearby building permits.","operationId":"nearby_building_permits_api_strathcona_county_permits_nearby_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":84.0,"minimum":41.0,"description":"Canadian latitude","title":"Lat"},"description":"Canadian latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":-52.0,"minimum":-142.0,"description":"Canadian longitude","title":"Lon"},"description":"Canadian longitude"},{"name":"radius_m","in":"query","required":false,"schema":{"type":"integer","maximum":50000,"minimum":1,"default":1000,"title":"Radius M"}},{"name":"permit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Permit Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/strathcona-county/permits/export":{"get":{"summary":"Export Building Permits","description":"Export building permit data as CSV or GeoJSON.\n\nSupports filtering by address, permit type, and date range.\nMaximum 10,000 records per export.","operationId":"export_building_permits_api_strathcona_county_permits_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Address filter","title":"Address"},"description":"Address filter"},{"name":"permit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Permit type filter","title":"Permit Type"},"description":"Permit type filter"},{"name":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Start date (YYYY-MM-DD)","title":"Date From"},"description":"Start date (YYYY-MM-DD)"},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"End date (YYYY-MM-DD)","title":"Date To"},"description":"End date (YYYY-MM-DD)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/strathcona-county/permits/recent":{"get":{"summary":"Recent Building Permits","description":"Get recent building permits sorted by application date (newest first).\n\nUse this to see where construction activity is happening right now.","operationId":"recent_building_permits_api_strathcona_county_permits_recent_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Max results","default":20,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset","default":0,"title":"Offset"},"description":"Results offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/strathcona-county/permits/batch":{"post":{"summary":"Get Building Permits Batch","description":"Get multiple building permits by permit numbers in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of permit numbers.\nExample: {\"ids\": [\"BP123456\", \"BP789012\"]}\nMaximum 100 permit numbers per request.","operationId":"get_building_permits_batch_api_strathcona_county_permits_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Building Permits Batch Api Strathcona County Permits Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/strathcona-county/permits/{permit_number}":{"get":{"summary":"Get Building Permit","description":"Get building permit details by permit number.\n\nServes HTML for browsers, JSON for API clients.","operationId":"get_building_permit_api_strathcona_county_permits__permit_number__get","parameters":[{"name":"permit_number","in":"path","required":true,"schema":{"type":"string","description":"Permit number","title":"Permit Number"},"description":"Permit number"},{"name":"_city_name","in":"query","required":false,"schema":{"default":"Strathcona County","title":" City Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/strathcona-county/health":{"get":{"summary":"City Health","description":"City-specific health check.","operationId":"city_health_api_strathcona_county_health_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/grande-prairie/entries/{kind}":{"get":{"summary":"List Entries","operationId":"list_entries_api_grande_prairie_entries__kind__get","parameters":[{"name":"kind","in":"path","required":true,"schema":{"type":"string","description":"Canonical entry kind: property, permit, zoning, or safety","title":"Kind"},"description":"Canonical entry kind: property, permit, zoning, or safety"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"_services","in":"query","required":false,"schema":{"title":" Services"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Entries Api Grande Prairie Entries  Kind  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/grande-prairie/property/search":{"get":{"summary":"Search Property","description":"Search for properties by address, or browse all if no address specified.\nSupports sorting by assessed_value, address, year_built, community, or lot_size_sqft.\nSupports value range filtering with min_value and max_value.\n Supports property_type and year range filters.","operationId":"search_property_api_grande_prairie_property_search_get","parameters":[{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Street address to search (omit to browse all)","title":"Address"},"description":"Street address to search (omit to browse all)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max results to return (up to 1000 for map browse)","default":10,"title":"Limit"},"description":"Max results to return (up to 1000 for map browse)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset for pagination","default":0,"title":"Offset"},"description":"Results offset for pagination"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft","title":"Sort By"},"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"asc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"},{"name":"property_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property type filter (e.g. RE, Residential)","title":"Property Type"},"description":"Property type filter (e.g. RE, Residential)"},{"name":"min_year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter: minimum year built","title":"Min Year"},"description":"Filter: minimum year built"},{"name":"max_year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter: maximum year built","title":"Max Year"},"description":"Filter: maximum year built"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertySearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/grande-prairie/property/list":{"get":{"summary":"List Property","description":"List all properties with pagination, sorting, and value range filtering.\n\nUse this endpoint to browse available property records and discover valid roll numbers.\nReturns paginated results with total count for client-side pagination.\nSort by assessed_value with order=desc to find the most expensive properties.","operationId":"list_property_api_grande_prairie_property_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft","title":"Sort By"},"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"asc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Property Api Grande Prairie Property List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/grande-prairie/property/geojson":{"get":{"summary":"Property Geojson","operationId":"property_geojson_api_grande_prairie_property_geojson_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500000,"minimum":1,"description":"Max features to return (cap prevents browser overload for large cities)","default":50000,"title":"Limit"},"description":"Max features to return (cap prevents browser overload for large cities)"},{"name":"sw_lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport south-west latitude","title":"Sw Lat"},"description":"Viewport south-west latitude"},{"name":"sw_lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport south-west longitude","title":"Sw Lon"},"description":"Viewport south-west longitude"},{"name":"ne_lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport north-east latitude","title":"Ne Lat"},"description":"Viewport north-east latitude"},{"name":"ne_lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport north-east longitude","title":"Ne Lon"},"description":"Viewport north-east longitude"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Offset for pagination through viewport results (use with limit)","default":0,"title":"Offset"},"description":"Offset for pagination through viewport results (use with limit)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/grande-prairie/property/top":{"get":{"summary":"Top Property","description":"Get top-N properties sorted by any numeric column.\n\nConvenience endpoint for AI agents and dashboards. Returns the top\nN properties sorted by the given column. Defaults to most expensive\n(assessed_value descending). Combine with min_value/max_value to\nfind e.g. the most expensive residential properties.","operationId":"top_property_api_grande_prairie_property_top_get","parameters":[{"name":"n","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Number of top properties to return","default":10,"title":"N"},"description":"Number of top properties to return"},{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","description":"Sort column: assessed_value, year_built, lot_size_sqft","default":"assessed_value","title":"Sort By"},"description":"Sort column: assessed_value, year_built, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"desc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Top Property Api Grande Prairie Property Top Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/grande-prairie/property/stats":{"get":{"summary":"Property Stats","description":"Get property assessment statistics.","operationId":"property_stats_api_grande_prairie_property_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/grande-prairie/property/autocomplete":{"get":{"summary":"Property Autocomplete","description":"Get address and roll number suggestions for typeahead search.","operationId":"property_autocomplete_api_grande_prairie_property_autocomplete_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"description":"Search query for address/roll number suggestions","title":"Q"},"description":"Search query for address/roll number suggestions"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":25,"minimum":1,"description":"Max suggestions to return","default":10,"title":"Limit"},"description":"Max suggestions to return"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/grande-prairie/property/geocode":{"post":{"summary":"Property Geocode","description":"Geocode property addresses to lat/lon coordinates.\n\nAccepts a JSON body with 'addresses' (list of address strings, max 50).\nReturns cached results instantly; uncached addresses are geocoded via Nominatim.\n\nExample: {\"addresses\": [\"123 Main St\", \"456 Oak Ave\"]}","operationId":"property_geocode_api_grande_prairie_property_geocode_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/grande-prairie/property/by-dls":{"get":{"summary":"Get Property By Dls","description":"Get property assessment by DLS coordinates.","operationId":"get_property_by_dls_api_grande_prairie_property_by_dls_get","parameters":[{"name":"quarter","in":"query","required":true,"schema":{"type":"string","description":"Quarter section (e.g., SW)","title":"Quarter"},"description":"Quarter section (e.g., SW)"},{"name":"section","in":"query","required":true,"schema":{"type":"integer","description":"Section number","title":"Section"},"description":"Section number"},{"name":"township","in":"query","required":true,"schema":{"type":"integer","description":"Township number","title":"Township"},"description":"Township number"},{"name":"range","in":"query","required":true,"schema":{"type":"integer","description":"Range number","title":"Range"},"description":"Range number"},{"name":"meridian","in":"query","required":true,"schema":{"type":"integer","description":"Meridian number","title":"Meridian"},"description":"Meridian number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyAssessment"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/grande-prairie/property/by-gps":{"get":{"summary":"Get Property By Gps","description":"Find coordinate-bearing assessment records nearest a GPS point.\n\nResults are point-nearness matches unless the municipal source supplies\nparcel polygons; clients should not interpret proximity as legal parcel\ncontainment.","operationId":"get_property_by_gps_api_grande_prairie_property_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":84.0,"minimum":41.0,"description":"Canadian latitude","title":"Lat"},"description":"Canadian latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":-52.0,"minimum":-142.0,"description":"Canadian longitude","title":"Lon"},"description":"Canadian longitude"},{"name":"radius_m","in":"query","required":false,"schema":{"type":"integer","maximum":5000,"minimum":1,"description":"Maximum point distance","default":100,"title":"Radius M"},"description":"Maximum point distance"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":10,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Property By Gps Api Grande Prairie Property By Gps Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/grande-prairie/property/by-roll/{roll_number}":{"get":{"summary":"Get Property By Roll","description":"Get property assessment by roll number.","operationId":"get_property_by_roll_api_grande_prairie_property_by_roll__roll_number__get","parameters":[{"name":"roll_number","in":"path","required":true,"schema":{"type":"string","description":"Property roll number","title":"Roll Number"},"description":"Property roll number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyAssessment"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/grande-prairie/property/report":{"get":{"summary":"Property Report Lookup","description":"Consolidated report by roll number, address, or GPS.","operationId":"property_report_lookup_api_grande_prairie_property_report_get","parameters":[{"name":"roll_number","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property roll number","title":"Roll Number"},"description":"Property roll number"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Street address","title":"Address"},"description":"Street address"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyReport"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/grande-prairie/property/report/{roll_number}":{"get":{"summary":"Property Report","description":"Get consolidated property report: assessment + building permits + zoning + DLS.","operationId":"property_report_api_grande_prairie_property_report__roll_number__get","parameters":[{"name":"roll_number","in":"path","required":true,"schema":{"type":"string","description":"Property roll number","title":"Roll Number"},"description":"Property roll number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyReport"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/grande-prairie/property/batch":{"post":{"summary":"Get Properties Batch","description":"Get multiple properties by roll numbers in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of roll numbers.\nExample: {\"ids\": [\"123456789\", \"987654321\"]}\nMaximum 100 roll numbers per request.","operationId":"get_properties_batch_api_grande_prairie_property_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Properties Batch Api Grande Prairie Property Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/grande-prairie/property/export":{"get":{"summary":"Export Properties","description":"Export property data as CSV or GeoJSON.\n\nSupports filtering by address, property type, and assessed value range.\nMaximum 10,000 records per export.","operationId":"export_properties_api_grande_prairie_property_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Address filter","title":"Address"},"description":"Address filter"},{"name":"property_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property type filter","title":"Property Type"},"description":"Property type filter"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum assessed value","title":"Min Value"},"description":"Minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum assessed value","title":"Max Value"},"description":"Maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/grande-prairie/census/profile":{"get":{"summary":"Get Census Profile","description":"Get census profile for a specific Dissemination Area.\n\nProvide either da_id directly, OR lat+lon to find the nearest DA automatically.","operationId":"get_census_profile_api_grande_prairie_census_profile_get","parameters":[{"name":"da_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Dissemination Area ID (e.g., 48820001)","title":"Da Id"},"description":"Dissemination Area ID (e.g., 48820001)"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude for nearest-DA lookup","title":"Lat"},"description":"Latitude for nearest-DA lookup"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude for nearest-DA lookup","title":"Lon"},"description":"Longitude for nearest-DA lookup"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusProfile"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/grande-prairie/census/batch":{"post":{"summary":"Get Census Batch","description":"Get multiple census profiles by DA IDs in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of DA IDs.\nExample: {\"ids\": [\"48820001\", \"48820002\"]}\nMaximum 100 DA IDs per request.","operationId":"get_census_batch_api_grande_prairie_census_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Census Batch Api Grande Prairie Census Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/grande-prairie/census/export":{"get":{"summary":"Export Census","description":"Export census data as CSV.\n\nSupports filtering by population range and geography type.\nMaximum 10,000 records per export.","operationId":"export_census_api_grande_prairie_census_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv only","default":"csv","title":"Format"},"description":"Export format: csv only"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"min_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Minimum population filter","title":"Min Population"},"description":"Minimum population filter"},{"name":"max_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Maximum population filter","title":"Max Population"},"description":"Maximum population filter"},{"name":"geography_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Geography type filter (DA, CT, CMA)","title":"Geography Type"},"description":"Geography type filter (DA, CT, CMA)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/grande-prairie/census/list":{"get":{"summary":"List Census Profiles","description":"List all census profiles with pagination.\n\nUse this endpoint to browse available census profiles and discover valid DA IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_census_profiles_api_grande_prairie_census_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Census Profiles Api Grande Prairie Census List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/grande-prairie/census/by-gps":{"get":{"summary":"Get Census By Gps","description":"Get census data for GPS coordinates.","operationId":"get_census_by_gps_api_grande_prairie_census_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90,"minimum":-90,"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":180,"minimum":-180,"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/grande-prairie/census/by-dls":{"get":{"summary":"Get Census By Dls","description":"Get census data for DLS coordinates.","operationId":"get_census_by_dls_api_grande_prairie_census_by_dls_get","parameters":[{"name":"dls","in":"query","required":true,"schema":{"type":"string","description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)","title":"Dls"},"description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/grande-prairie/census/map-data":{"get":{"summary":"Get Census Map Data","description":"Get lightweight DA points for choropleth map rendering.\n\nReturns centroid coordinates and key metrics (income, age, population,\nhousehold size, employment rate) for all DAs in the city.\nUsed by the census dashboard to render color-coded maps.","operationId":"get_census_map_data_api_grande_prairie_census_map_data_get","parameters":[{"name":"year","in":"query","required":false,"schema":{"type":"integer","description":"Census year for DA map data","default":2021,"title":"Year"},"description":"Census year for DA map data"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/grande-prairie/census/stats":{"get":{"summary":"Census Stats","description":"Get census data statistics.","operationId":"census_stats_api_grande_prairie_census_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/grande-prairie/census/compare":{"get":{"summary":"Census Compare","description":"Compare key census metrics across multiple years.\n\nReturns side-by-side comparison of population, households,\navg_income, median_age, density, and land_area for each requested year.\nYears without data return null for that year's values.","operationId":"census_compare_api_grande_prairie_census_compare_get","parameters":[{"name":"years","in":"query","required":false,"schema":{"type":"string","description":"Comma-separated census years (e.g., 2016,2021)","default":"2021","title":"Years"},"description":"Comma-separated census years (e.g., 2016,2021)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/grande-prairie/census/time-series":{"get":{"summary":"Census Timeseries","description":"Get year-by-year census trends for this city.\n\nReturns population, income, age, and household trends across all\navailable census years. Useful for spotting long-term demographic shifts.","operationId":"census_timeseries_api_grande_prairie_census_time_series_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/grande-prairie/geography/list":{"get":{"summary":"Geography List","description":"List geography boundaries for this city.","operationId":"geography_list_api_grande_prairie_geography_list_get","parameters":[{"name":"type","in":"query","required":false,"schema":{"type":"string","title":"Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/grande-prairie/geography/by-gps":{"get":{"summary":"Geography By Gps","description":"Find the geography boundary containing a GPS point.","operationId":"geography_by_gps_api_grande_prairie_geography_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","title":"Lat"}},{"name":"lon","in":"query","required":true,"schema":{"type":"number","title":"Lon"}},{"name":"type","in":"query","required":false,"schema":{"type":"string","default":"DA","title":"Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/grande-prairie/geography/stats":{"get":{"summary":"Geography Stats","description":"Get geography statistics for this city.","operationId":"geography_stats_api_grande_prairie_geography_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/grande-prairie/geography/{geoid}":{"get":{"summary":"Geography Boundary","description":"Get a specific geography boundary by geoid, including GeoJSON polygon.","operationId":"geography_boundary_api_grande_prairie_geography__geoid__get","parameters":[{"name":"geoid","in":"path","required":true,"schema":{"type":"string","title":"Geoid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/grande-prairie/census/rental/list":{"get":{"summary":"List Rental Prices","description":"List rental price records for this city, with optional unit type filter.","operationId":"list_rental_prices_api_grande_prairie_census_rental_list_get","parameters":[{"name":"unit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":50,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalPriceListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/grande-prairie/census/rental/trend":{"get":{"summary":"Get Rental Trend","description":"Get rental price time series for a specific unit type.","operationId":"get_rental_trend_api_grande_prairie_census_rental_trend_get","parameters":[{"name":"unit_type","in":"query","required":true,"schema":{"type":"string","description":"Rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Rental unit type (e.g. 'Apartment - 1 bedroom')"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalTrendResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/grande-prairie/census/rental/types":{"get":{"summary":"Get Rental Types","description":"Get available rental unit types for this city.","operationId":"get_rental_types_api_grande_prairie_census_rental_types_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/grande-prairie/zoning/by-gps":{"get":{"summary":"Get Zoning By Gps","description":"Get zoning district for GPS coordinates.","operationId":"get_zoning_by_gps_api_grande_prairie_zoning_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZoningByGPSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/grande-prairie/zoning/by-id/{district_id}":{"get":{"summary":"Get Zoning By Id","description":"Get a single zoning district by its numeric ID.","operationId":"get_zoning_by_id_api_grande_prairie_zoning_by_id__district_id__get","parameters":[{"name":"district_id","in":"path","required":true,"schema":{"type":"integer","description":"Zoning district numeric ID","title":"District Id"},"description":"Zoning district numeric ID"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning By Id Api Grande Prairie Zoning By Id  District Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/grande-prairie/zoning/by-code/{code}":{"get":{"summary":"Get Zoning By Code","description":"Get all districts with a specific zone code.","operationId":"get_zoning_by_code_api_grande_prairie_zoning_by_code__code__get","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","description":"Zone code (e.g., C-C1, R-G)","title":"Code"},"description":"Zone code (e.g., C-C1, R-G)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoningDistrict"},"title":"Response Get Zoning By Code Api Grande Prairie Zoning By Code  Code  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/grande-prairie/zoning/batch":{"post":{"summary":"Get Zoning Batch","description":"Get multiple zoning districts by zone codes in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of zone codes.\nExample: {\"ids\": [\"CR20-C20/R20\", \"C-C1\", \"R-G\"]}\nMaximum 100 zone codes per request.","operationId":"get_zoning_batch_api_grande_prairie_zoning_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning Batch Api Grande Prairie Zoning Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/grande-prairie/zoning/list":{"get":{"summary":"List Zoning Districts","description":"List all zoning districts with pagination.\n\nUse this endpoint to browse available zoning districts and discover valid IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_zoning_districts_api_grande_prairie_zoning_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Zoning Districts Api Grande Prairie Zoning List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/grande-prairie/zoning/codes":{"get":{"summary":"List Zone Codes","description":"List all zone codes with descriptions.","operationId":"list_zone_codes_api_grande_prairie_zoning_codes_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"type":"string","description":"Filter by major category (e.g., Commercial, Residential)","title":"Category"},"description":"Filter by major category (e.g., Commercial, Residential)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoneCodeInfo"},"title":"Response List Zone Codes Api Grande Prairie Zoning Codes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/grande-prairie/zoning/stats":{"get":{"summary":"Zoning Stats","description":"Get zoning statistics.","operationId":"zoning_stats_api_grande_prairie_zoning_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/grande-prairie/zoning/export":{"get":{"summary":"Export Zoning","description":"Export zoning district data as CSV or GeoJSON.\n\nSupports filtering by zone code, category, and area range.\nMaximum 10,000 records per export.","operationId":"export_zoning_api_grande_prairie_zoning_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"zone_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Zone code filter (e.g., CR2)","title":"Zone Code"},"description":"Zone code filter (e.g., CR2)"},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Major category filter","title":"Category"},"description":"Major category filter"},{"name":"min_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum area in sq km","title":"Min Area"},"description":"Minimum area in sq km"},{"name":"max_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum area in sq km","title":"Max Area"},"description":"Maximum area in sq km"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/grande-prairie/permits/stats":{"get":{"summary":"Building Stats","description":"Get building permit statistics.","operationId":"building_stats_api_grande_prairie_permits_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/grande-prairie/permits/search":{"get":{"summary":"Search Building Permits","description":"Search building permits by address, contractor, applicant, permit number, and/or permit type.","operationId":"search_building_permits_api_grande_prairie_permits_search_get","parameters":[{"name":"address","in":"query","required":false,"schema":{"type":"string","description":"Address to search","title":"Address"},"description":"Address to search"},{"name":"q","in":"query","required":false,"schema":{"type":"string","description":"General text search (address, contractor, applicant, permit #)","title":"Q"},"description":"General text search (address, contractor, applicant, permit #)"},{"name":"permit_type","in":"query","required":false,"schema":{"type":"string","description":"Filter by permit type","title":"Permit Type"},"description":"Filter by permit type"},{"name":"bbox","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bounding box: min_lon,min_lat,max_lon,max_lat","title":"Bbox"},"description":"Bounding box: min_lon,min_lat,max_lon,max_lat"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max results","default":20,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset","default":0,"title":"Offset"},"description":"Results offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/grande-prairie/permits/nearby":{"get":{"summary":"Nearby Building Permits","description":"Coordinate-first alias for nearby building permits.","operationId":"nearby_building_permits_api_grande_prairie_permits_nearby_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":84.0,"minimum":41.0,"description":"Canadian latitude","title":"Lat"},"description":"Canadian latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":-52.0,"minimum":-142.0,"description":"Canadian longitude","title":"Lon"},"description":"Canadian longitude"},{"name":"radius_m","in":"query","required":false,"schema":{"type":"integer","maximum":50000,"minimum":1,"default":1000,"title":"Radius M"}},{"name":"permit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Permit Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/grande-prairie/permits/export":{"get":{"summary":"Export Building Permits","description":"Export building permit data as CSV or GeoJSON.\n\nSupports filtering by address, permit type, and date range.\nMaximum 10,000 records per export.","operationId":"export_building_permits_api_grande_prairie_permits_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Address filter","title":"Address"},"description":"Address filter"},{"name":"permit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Permit type filter","title":"Permit Type"},"description":"Permit type filter"},{"name":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Start date (YYYY-MM-DD)","title":"Date From"},"description":"Start date (YYYY-MM-DD)"},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"End date (YYYY-MM-DD)","title":"Date To"},"description":"End date (YYYY-MM-DD)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/grande-prairie/permits/recent":{"get":{"summary":"Recent Building Permits","description":"Get recent building permits sorted by application date (newest first).\n\nUse this to see where construction activity is happening right now.","operationId":"recent_building_permits_api_grande_prairie_permits_recent_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Max results","default":20,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset","default":0,"title":"Offset"},"description":"Results offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/grande-prairie/permits/batch":{"post":{"summary":"Get Building Permits Batch","description":"Get multiple building permits by permit numbers in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of permit numbers.\nExample: {\"ids\": [\"BP123456\", \"BP789012\"]}\nMaximum 100 permit numbers per request.","operationId":"get_building_permits_batch_api_grande_prairie_permits_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Building Permits Batch Api Grande Prairie Permits Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/grande-prairie/permits/{permit_number}":{"get":{"summary":"Get Building Permit","description":"Get building permit details by permit number.\n\nServes HTML for browsers, JSON for API clients.","operationId":"get_building_permit_api_grande_prairie_permits__permit_number__get","parameters":[{"name":"permit_number","in":"path","required":true,"schema":{"type":"string","description":"Permit number","title":"Permit Number"},"description":"Permit number"},{"name":"_city_name","in":"query","required":false,"schema":{"default":"Grande Prairie","title":" City Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/grande-prairie/health":{"get":{"summary":"City Health","description":"City-specific health check.","operationId":"city_health_api_grande_prairie_health_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/high-river/entries/{kind}":{"get":{"summary":"List Entries","operationId":"list_entries_api_high_river_entries__kind__get","parameters":[{"name":"kind","in":"path","required":true,"schema":{"type":"string","description":"Canonical entry kind: property, permit, zoning, or safety","title":"Kind"},"description":"Canonical entry kind: property, permit, zoning, or safety"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"_services","in":"query","required":false,"schema":{"title":" Services"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Entries Api High River Entries  Kind  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/high-river/property/search":{"get":{"summary":"Search Property","description":"Search for properties by address, or browse all if no address specified.\nSupports sorting by assessed_value, address, year_built, community, or lot_size_sqft.\nSupports value range filtering with min_value and max_value.\n Supports property_type and year range filters.","operationId":"search_property_api_high_river_property_search_get","parameters":[{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Street address to search (omit to browse all)","title":"Address"},"description":"Street address to search (omit to browse all)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max results to return (up to 1000 for map browse)","default":10,"title":"Limit"},"description":"Max results to return (up to 1000 for map browse)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset for pagination","default":0,"title":"Offset"},"description":"Results offset for pagination"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft","title":"Sort By"},"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"asc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"},{"name":"property_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property type filter (e.g. RE, Residential)","title":"Property Type"},"description":"Property type filter (e.g. RE, Residential)"},{"name":"min_year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter: minimum year built","title":"Min Year"},"description":"Filter: minimum year built"},{"name":"max_year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter: maximum year built","title":"Max Year"},"description":"Filter: maximum year built"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertySearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/high-river/property/list":{"get":{"summary":"List Property","description":"List all properties with pagination, sorting, and value range filtering.\n\nUse this endpoint to browse available property records and discover valid roll numbers.\nReturns paginated results with total count for client-side pagination.\nSort by assessed_value with order=desc to find the most expensive properties.","operationId":"list_property_api_high_river_property_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft","title":"Sort By"},"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"asc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Property Api High River Property List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/high-river/property/geojson":{"get":{"summary":"Property Geojson","operationId":"property_geojson_api_high_river_property_geojson_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500000,"minimum":1,"description":"Max features to return (cap prevents browser overload for large cities)","default":50000,"title":"Limit"},"description":"Max features to return (cap prevents browser overload for large cities)"},{"name":"sw_lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport south-west latitude","title":"Sw Lat"},"description":"Viewport south-west latitude"},{"name":"sw_lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport south-west longitude","title":"Sw Lon"},"description":"Viewport south-west longitude"},{"name":"ne_lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport north-east latitude","title":"Ne Lat"},"description":"Viewport north-east latitude"},{"name":"ne_lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport north-east longitude","title":"Ne Lon"},"description":"Viewport north-east longitude"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Offset for pagination through viewport results (use with limit)","default":0,"title":"Offset"},"description":"Offset for pagination through viewport results (use with limit)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/high-river/property/top":{"get":{"summary":"Top Property","description":"Get top-N properties sorted by any numeric column.\n\nConvenience endpoint for AI agents and dashboards. Returns the top\nN properties sorted by the given column. Defaults to most expensive\n(assessed_value descending). Combine with min_value/max_value to\nfind e.g. the most expensive residential properties.","operationId":"top_property_api_high_river_property_top_get","parameters":[{"name":"n","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Number of top properties to return","default":10,"title":"N"},"description":"Number of top properties to return"},{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","description":"Sort column: assessed_value, year_built, lot_size_sqft","default":"assessed_value","title":"Sort By"},"description":"Sort column: assessed_value, year_built, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"desc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Top Property Api High River Property Top Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/high-river/property/stats":{"get":{"summary":"Property Stats","description":"Get property assessment statistics.","operationId":"property_stats_api_high_river_property_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/high-river/property/autocomplete":{"get":{"summary":"Property Autocomplete","description":"Get address and roll number suggestions for typeahead search.","operationId":"property_autocomplete_api_high_river_property_autocomplete_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"description":"Search query for address/roll number suggestions","title":"Q"},"description":"Search query for address/roll number suggestions"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":25,"minimum":1,"description":"Max suggestions to return","default":10,"title":"Limit"},"description":"Max suggestions to return"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/high-river/property/geocode":{"post":{"summary":"Property Geocode","description":"Geocode property addresses to lat/lon coordinates.\n\nAccepts a JSON body with 'addresses' (list of address strings, max 50).\nReturns cached results instantly; uncached addresses are geocoded via Nominatim.\n\nExample: {\"addresses\": [\"123 Main St\", \"456 Oak Ave\"]}","operationId":"property_geocode_api_high_river_property_geocode_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/high-river/property/by-dls":{"get":{"summary":"Get Property By Dls","description":"Get property assessment by DLS coordinates.","operationId":"get_property_by_dls_api_high_river_property_by_dls_get","parameters":[{"name":"quarter","in":"query","required":true,"schema":{"type":"string","description":"Quarter section (e.g., SW)","title":"Quarter"},"description":"Quarter section (e.g., SW)"},{"name":"section","in":"query","required":true,"schema":{"type":"integer","description":"Section number","title":"Section"},"description":"Section number"},{"name":"township","in":"query","required":true,"schema":{"type":"integer","description":"Township number","title":"Township"},"description":"Township number"},{"name":"range","in":"query","required":true,"schema":{"type":"integer","description":"Range number","title":"Range"},"description":"Range number"},{"name":"meridian","in":"query","required":true,"schema":{"type":"integer","description":"Meridian number","title":"Meridian"},"description":"Meridian number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyAssessment"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/high-river/property/by-gps":{"get":{"summary":"Get Property By Gps","description":"Find coordinate-bearing assessment records nearest a GPS point.\n\nResults are point-nearness matches unless the municipal source supplies\nparcel polygons; clients should not interpret proximity as legal parcel\ncontainment.","operationId":"get_property_by_gps_api_high_river_property_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":84.0,"minimum":41.0,"description":"Canadian latitude","title":"Lat"},"description":"Canadian latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":-52.0,"minimum":-142.0,"description":"Canadian longitude","title":"Lon"},"description":"Canadian longitude"},{"name":"radius_m","in":"query","required":false,"schema":{"type":"integer","maximum":5000,"minimum":1,"description":"Maximum point distance","default":100,"title":"Radius M"},"description":"Maximum point distance"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":10,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Property By Gps Api High River Property By Gps Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/high-river/property/by-roll/{roll_number}":{"get":{"summary":"Get Property By Roll","description":"Get property assessment by roll number.","operationId":"get_property_by_roll_api_high_river_property_by_roll__roll_number__get","parameters":[{"name":"roll_number","in":"path","required":true,"schema":{"type":"string","description":"Property roll number","title":"Roll Number"},"description":"Property roll number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyAssessment"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/high-river/property/report":{"get":{"summary":"Property Report Lookup","description":"Consolidated report by roll number, address, or GPS.","operationId":"property_report_lookup_api_high_river_property_report_get","parameters":[{"name":"roll_number","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property roll number","title":"Roll Number"},"description":"Property roll number"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Street address","title":"Address"},"description":"Street address"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyReport"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/high-river/property/report/{roll_number}":{"get":{"summary":"Property Report","description":"Get consolidated property report: assessment + building permits + zoning + DLS.","operationId":"property_report_api_high_river_property_report__roll_number__get","parameters":[{"name":"roll_number","in":"path","required":true,"schema":{"type":"string","description":"Property roll number","title":"Roll Number"},"description":"Property roll number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyReport"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/high-river/property/batch":{"post":{"summary":"Get Properties Batch","description":"Get multiple properties by roll numbers in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of roll numbers.\nExample: {\"ids\": [\"123456789\", \"987654321\"]}\nMaximum 100 roll numbers per request.","operationId":"get_properties_batch_api_high_river_property_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Properties Batch Api High River Property Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/high-river/property/export":{"get":{"summary":"Export Properties","description":"Export property data as CSV or GeoJSON.\n\nSupports filtering by address, property type, and assessed value range.\nMaximum 10,000 records per export.","operationId":"export_properties_api_high_river_property_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Address filter","title":"Address"},"description":"Address filter"},{"name":"property_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property type filter","title":"Property Type"},"description":"Property type filter"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum assessed value","title":"Min Value"},"description":"Minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum assessed value","title":"Max Value"},"description":"Maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/high-river/health":{"get":{"summary":"City Health","description":"City-specific health check.","operationId":"city_health_api_high_river_health_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/lethbridge/entries/{kind}":{"get":{"summary":"List Entries","operationId":"list_entries_api_lethbridge_entries__kind__get","parameters":[{"name":"kind","in":"path","required":true,"schema":{"type":"string","description":"Canonical entry kind: property, permit, zoning, or safety","title":"Kind"},"description":"Canonical entry kind: property, permit, zoning, or safety"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"_services","in":"query","required":false,"schema":{"title":" Services"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Entries Api Lethbridge Entries  Kind  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/lethbridge/property/search":{"get":{"summary":"Search Property","description":"Search for properties by address, or browse all if no address specified.\nSupports sorting by assessed_value, address, year_built, community, or lot_size_sqft.\nSupports value range filtering with min_value and max_value.\n Supports property_type and year range filters.","operationId":"search_property_api_lethbridge_property_search_get","parameters":[{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Street address to search (omit to browse all)","title":"Address"},"description":"Street address to search (omit to browse all)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max results to return (up to 1000 for map browse)","default":10,"title":"Limit"},"description":"Max results to return (up to 1000 for map browse)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset for pagination","default":0,"title":"Offset"},"description":"Results offset for pagination"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft","title":"Sort By"},"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"asc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"},{"name":"property_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property type filter (e.g. RE, Residential)","title":"Property Type"},"description":"Property type filter (e.g. RE, Residential)"},{"name":"min_year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter: minimum year built","title":"Min Year"},"description":"Filter: minimum year built"},{"name":"max_year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter: maximum year built","title":"Max Year"},"description":"Filter: maximum year built"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertySearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/lethbridge/property/list":{"get":{"summary":"List Property","description":"List all properties with pagination, sorting, and value range filtering.\n\nUse this endpoint to browse available property records and discover valid roll numbers.\nReturns paginated results with total count for client-side pagination.\nSort by assessed_value with order=desc to find the most expensive properties.","operationId":"list_property_api_lethbridge_property_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft","title":"Sort By"},"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"asc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Property Api Lethbridge Property List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/lethbridge/property/geojson":{"get":{"summary":"Property Geojson","operationId":"property_geojson_api_lethbridge_property_geojson_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500000,"minimum":1,"description":"Max features to return (cap prevents browser overload for large cities)","default":50000,"title":"Limit"},"description":"Max features to return (cap prevents browser overload for large cities)"},{"name":"sw_lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport south-west latitude","title":"Sw Lat"},"description":"Viewport south-west latitude"},{"name":"sw_lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport south-west longitude","title":"Sw Lon"},"description":"Viewport south-west longitude"},{"name":"ne_lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport north-east latitude","title":"Ne Lat"},"description":"Viewport north-east latitude"},{"name":"ne_lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport north-east longitude","title":"Ne Lon"},"description":"Viewport north-east longitude"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Offset for pagination through viewport results (use with limit)","default":0,"title":"Offset"},"description":"Offset for pagination through viewport results (use with limit)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/lethbridge/property/top":{"get":{"summary":"Top Property","description":"Get top-N properties sorted by any numeric column.\n\nConvenience endpoint for AI agents and dashboards. Returns the top\nN properties sorted by the given column. Defaults to most expensive\n(assessed_value descending). Combine with min_value/max_value to\nfind e.g. the most expensive residential properties.","operationId":"top_property_api_lethbridge_property_top_get","parameters":[{"name":"n","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Number of top properties to return","default":10,"title":"N"},"description":"Number of top properties to return"},{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","description":"Sort column: assessed_value, year_built, lot_size_sqft","default":"assessed_value","title":"Sort By"},"description":"Sort column: assessed_value, year_built, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"desc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Top Property Api Lethbridge Property Top Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/lethbridge/property/stats":{"get":{"summary":"Property Stats","description":"Get property assessment statistics.","operationId":"property_stats_api_lethbridge_property_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/lethbridge/property/autocomplete":{"get":{"summary":"Property Autocomplete","description":"Get address and roll number suggestions for typeahead search.","operationId":"property_autocomplete_api_lethbridge_property_autocomplete_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"description":"Search query for address/roll number suggestions","title":"Q"},"description":"Search query for address/roll number suggestions"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":25,"minimum":1,"description":"Max suggestions to return","default":10,"title":"Limit"},"description":"Max suggestions to return"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/lethbridge/property/geocode":{"post":{"summary":"Property Geocode","description":"Geocode property addresses to lat/lon coordinates.\n\nAccepts a JSON body with 'addresses' (list of address strings, max 50).\nReturns cached results instantly; uncached addresses are geocoded via Nominatim.\n\nExample: {\"addresses\": [\"123 Main St\", \"456 Oak Ave\"]}","operationId":"property_geocode_api_lethbridge_property_geocode_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/lethbridge/property/by-dls":{"get":{"summary":"Get Property By Dls","description":"Get property assessment by DLS coordinates.","operationId":"get_property_by_dls_api_lethbridge_property_by_dls_get","parameters":[{"name":"quarter","in":"query","required":true,"schema":{"type":"string","description":"Quarter section (e.g., SW)","title":"Quarter"},"description":"Quarter section (e.g., SW)"},{"name":"section","in":"query","required":true,"schema":{"type":"integer","description":"Section number","title":"Section"},"description":"Section number"},{"name":"township","in":"query","required":true,"schema":{"type":"integer","description":"Township number","title":"Township"},"description":"Township number"},{"name":"range","in":"query","required":true,"schema":{"type":"integer","description":"Range number","title":"Range"},"description":"Range number"},{"name":"meridian","in":"query","required":true,"schema":{"type":"integer","description":"Meridian number","title":"Meridian"},"description":"Meridian number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyAssessment"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/lethbridge/property/by-gps":{"get":{"summary":"Get Property By Gps","description":"Find coordinate-bearing assessment records nearest a GPS point.\n\nResults are point-nearness matches unless the municipal source supplies\nparcel polygons; clients should not interpret proximity as legal parcel\ncontainment.","operationId":"get_property_by_gps_api_lethbridge_property_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":84.0,"minimum":41.0,"description":"Canadian latitude","title":"Lat"},"description":"Canadian latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":-52.0,"minimum":-142.0,"description":"Canadian longitude","title":"Lon"},"description":"Canadian longitude"},{"name":"radius_m","in":"query","required":false,"schema":{"type":"integer","maximum":5000,"minimum":1,"description":"Maximum point distance","default":100,"title":"Radius M"},"description":"Maximum point distance"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":10,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Property By Gps Api Lethbridge Property By Gps Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/lethbridge/property/by-roll/{roll_number}":{"get":{"summary":"Get Property By Roll","description":"Get property assessment by roll number.","operationId":"get_property_by_roll_api_lethbridge_property_by_roll__roll_number__get","parameters":[{"name":"roll_number","in":"path","required":true,"schema":{"type":"string","description":"Property roll number","title":"Roll Number"},"description":"Property roll number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyAssessment"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/lethbridge/property/report":{"get":{"summary":"Property Report Lookup","description":"Consolidated report by roll number, address, or GPS.","operationId":"property_report_lookup_api_lethbridge_property_report_get","parameters":[{"name":"roll_number","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property roll number","title":"Roll Number"},"description":"Property roll number"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Street address","title":"Address"},"description":"Street address"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyReport"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/lethbridge/property/report/{roll_number}":{"get":{"summary":"Property Report","description":"Get consolidated property report: assessment + building permits + zoning + DLS.","operationId":"property_report_api_lethbridge_property_report__roll_number__get","parameters":[{"name":"roll_number","in":"path","required":true,"schema":{"type":"string","description":"Property roll number","title":"Roll Number"},"description":"Property roll number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyReport"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/lethbridge/property/batch":{"post":{"summary":"Get Properties Batch","description":"Get multiple properties by roll numbers in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of roll numbers.\nExample: {\"ids\": [\"123456789\", \"987654321\"]}\nMaximum 100 roll numbers per request.","operationId":"get_properties_batch_api_lethbridge_property_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Properties Batch Api Lethbridge Property Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/lethbridge/property/export":{"get":{"summary":"Export Properties","description":"Export property data as CSV or GeoJSON.\n\nSupports filtering by address, property type, and assessed value range.\nMaximum 10,000 records per export.","operationId":"export_properties_api_lethbridge_property_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Address filter","title":"Address"},"description":"Address filter"},{"name":"property_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property type filter","title":"Property Type"},"description":"Property type filter"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum assessed value","title":"Min Value"},"description":"Minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum assessed value","title":"Max Value"},"description":"Maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/lethbridge/census/profile":{"get":{"summary":"Get Census Profile","description":"Get census profile for a specific Dissemination Area.\n\nProvide either da_id directly, OR lat+lon to find the nearest DA automatically.","operationId":"get_census_profile_api_lethbridge_census_profile_get","parameters":[{"name":"da_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Dissemination Area ID (e.g., 48820001)","title":"Da Id"},"description":"Dissemination Area ID (e.g., 48820001)"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude for nearest-DA lookup","title":"Lat"},"description":"Latitude for nearest-DA lookup"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude for nearest-DA lookup","title":"Lon"},"description":"Longitude for nearest-DA lookup"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusProfile"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/lethbridge/census/batch":{"post":{"summary":"Get Census Batch","description":"Get multiple census profiles by DA IDs in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of DA IDs.\nExample: {\"ids\": [\"48820001\", \"48820002\"]}\nMaximum 100 DA IDs per request.","operationId":"get_census_batch_api_lethbridge_census_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Census Batch Api Lethbridge Census Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/lethbridge/census/export":{"get":{"summary":"Export Census","description":"Export census data as CSV.\n\nSupports filtering by population range and geography type.\nMaximum 10,000 records per export.","operationId":"export_census_api_lethbridge_census_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv only","default":"csv","title":"Format"},"description":"Export format: csv only"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"min_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Minimum population filter","title":"Min Population"},"description":"Minimum population filter"},{"name":"max_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Maximum population filter","title":"Max Population"},"description":"Maximum population filter"},{"name":"geography_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Geography type filter (DA, CT, CMA)","title":"Geography Type"},"description":"Geography type filter (DA, CT, CMA)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/lethbridge/census/list":{"get":{"summary":"List Census Profiles","description":"List all census profiles with pagination.\n\nUse this endpoint to browse available census profiles and discover valid DA IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_census_profiles_api_lethbridge_census_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Census Profiles Api Lethbridge Census List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/lethbridge/census/by-gps":{"get":{"summary":"Get Census By Gps","description":"Get census data for GPS coordinates.","operationId":"get_census_by_gps_api_lethbridge_census_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90,"minimum":-90,"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":180,"minimum":-180,"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/lethbridge/census/by-dls":{"get":{"summary":"Get Census By Dls","description":"Get census data for DLS coordinates.","operationId":"get_census_by_dls_api_lethbridge_census_by_dls_get","parameters":[{"name":"dls","in":"query","required":true,"schema":{"type":"string","description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)","title":"Dls"},"description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/lethbridge/census/map-data":{"get":{"summary":"Get Census Map Data","description":"Get lightweight DA points for choropleth map rendering.\n\nReturns centroid coordinates and key metrics (income, age, population,\nhousehold size, employment rate) for all DAs in the city.\nUsed by the census dashboard to render color-coded maps.","operationId":"get_census_map_data_api_lethbridge_census_map_data_get","parameters":[{"name":"year","in":"query","required":false,"schema":{"type":"integer","description":"Census year for DA map data","default":2021,"title":"Year"},"description":"Census year for DA map data"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/lethbridge/census/stats":{"get":{"summary":"Census Stats","description":"Get census data statistics.","operationId":"census_stats_api_lethbridge_census_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/lethbridge/census/compare":{"get":{"summary":"Census Compare","description":"Compare key census metrics across multiple years.\n\nReturns side-by-side comparison of population, households,\navg_income, median_age, density, and land_area for each requested year.\nYears without data return null for that year's values.","operationId":"census_compare_api_lethbridge_census_compare_get","parameters":[{"name":"years","in":"query","required":false,"schema":{"type":"string","description":"Comma-separated census years (e.g., 2016,2021)","default":"2021","title":"Years"},"description":"Comma-separated census years (e.g., 2016,2021)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/lethbridge/census/time-series":{"get":{"summary":"Census Timeseries","description":"Get year-by-year census trends for this city.\n\nReturns population, income, age, and household trends across all\navailable census years. Useful for spotting long-term demographic shifts.","operationId":"census_timeseries_api_lethbridge_census_time_series_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/lethbridge/geography/list":{"get":{"summary":"Geography List","description":"List geography boundaries for this city.","operationId":"geography_list_api_lethbridge_geography_list_get","parameters":[{"name":"type","in":"query","required":false,"schema":{"type":"string","title":"Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/lethbridge/geography/by-gps":{"get":{"summary":"Geography By Gps","description":"Find the geography boundary containing a GPS point.","operationId":"geography_by_gps_api_lethbridge_geography_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","title":"Lat"}},{"name":"lon","in":"query","required":true,"schema":{"type":"number","title":"Lon"}},{"name":"type","in":"query","required":false,"schema":{"type":"string","default":"DA","title":"Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/lethbridge/geography/stats":{"get":{"summary":"Geography Stats","description":"Get geography statistics for this city.","operationId":"geography_stats_api_lethbridge_geography_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/lethbridge/geography/{geoid}":{"get":{"summary":"Geography Boundary","description":"Get a specific geography boundary by geoid, including GeoJSON polygon.","operationId":"geography_boundary_api_lethbridge_geography__geoid__get","parameters":[{"name":"geoid","in":"path","required":true,"schema":{"type":"string","title":"Geoid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/lethbridge/census/rental/list":{"get":{"summary":"List Rental Prices","description":"List rental price records for this city, with optional unit type filter.","operationId":"list_rental_prices_api_lethbridge_census_rental_list_get","parameters":[{"name":"unit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":50,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalPriceListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/lethbridge/census/rental/trend":{"get":{"summary":"Get Rental Trend","description":"Get rental price time series for a specific unit type.","operationId":"get_rental_trend_api_lethbridge_census_rental_trend_get","parameters":[{"name":"unit_type","in":"query","required":true,"schema":{"type":"string","description":"Rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Rental unit type (e.g. 'Apartment - 1 bedroom')"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalTrendResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/lethbridge/census/rental/types":{"get":{"summary":"Get Rental Types","description":"Get available rental unit types for this city.","operationId":"get_rental_types_api_lethbridge_census_rental_types_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/lethbridge/zoning/by-gps":{"get":{"summary":"Get Zoning By Gps","description":"Get zoning district for GPS coordinates.","operationId":"get_zoning_by_gps_api_lethbridge_zoning_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZoningByGPSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/lethbridge/zoning/by-id/{district_id}":{"get":{"summary":"Get Zoning By Id","description":"Get a single zoning district by its numeric ID.","operationId":"get_zoning_by_id_api_lethbridge_zoning_by_id__district_id__get","parameters":[{"name":"district_id","in":"path","required":true,"schema":{"type":"integer","description":"Zoning district numeric ID","title":"District Id"},"description":"Zoning district numeric ID"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning By Id Api Lethbridge Zoning By Id  District Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/lethbridge/zoning/by-code/{code}":{"get":{"summary":"Get Zoning By Code","description":"Get all districts with a specific zone code.","operationId":"get_zoning_by_code_api_lethbridge_zoning_by_code__code__get","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","description":"Zone code (e.g., C-C1, R-G)","title":"Code"},"description":"Zone code (e.g., C-C1, R-G)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoningDistrict"},"title":"Response Get Zoning By Code Api Lethbridge Zoning By Code  Code  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/lethbridge/zoning/batch":{"post":{"summary":"Get Zoning Batch","description":"Get multiple zoning districts by zone codes in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of zone codes.\nExample: {\"ids\": [\"CR20-C20/R20\", \"C-C1\", \"R-G\"]}\nMaximum 100 zone codes per request.","operationId":"get_zoning_batch_api_lethbridge_zoning_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning Batch Api Lethbridge Zoning Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/lethbridge/zoning/list":{"get":{"summary":"List Zoning Districts","description":"List all zoning districts with pagination.\n\nUse this endpoint to browse available zoning districts and discover valid IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_zoning_districts_api_lethbridge_zoning_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Zoning Districts Api Lethbridge Zoning List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/lethbridge/zoning/codes":{"get":{"summary":"List Zone Codes","description":"List all zone codes with descriptions.","operationId":"list_zone_codes_api_lethbridge_zoning_codes_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"type":"string","description":"Filter by major category (e.g., Commercial, Residential)","title":"Category"},"description":"Filter by major category (e.g., Commercial, Residential)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoneCodeInfo"},"title":"Response List Zone Codes Api Lethbridge Zoning Codes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/lethbridge/zoning/stats":{"get":{"summary":"Zoning Stats","description":"Get zoning statistics.","operationId":"zoning_stats_api_lethbridge_zoning_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/lethbridge/zoning/export":{"get":{"summary":"Export Zoning","description":"Export zoning district data as CSV or GeoJSON.\n\nSupports filtering by zone code, category, and area range.\nMaximum 10,000 records per export.","operationId":"export_zoning_api_lethbridge_zoning_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"zone_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Zone code filter (e.g., CR2)","title":"Zone Code"},"description":"Zone code filter (e.g., CR2)"},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Major category filter","title":"Category"},"description":"Major category filter"},{"name":"min_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum area in sq km","title":"Min Area"},"description":"Minimum area in sq km"},{"name":"max_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum area in sq km","title":"Max Area"},"description":"Maximum area in sq km"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/lethbridge/permits/stats":{"get":{"summary":"Building Stats","description":"Get building permit statistics.","operationId":"building_stats_api_lethbridge_permits_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/lethbridge/permits/search":{"get":{"summary":"Search Building Permits","description":"Search building permits by address, contractor, applicant, permit number, and/or permit type.","operationId":"search_building_permits_api_lethbridge_permits_search_get","parameters":[{"name":"address","in":"query","required":false,"schema":{"type":"string","description":"Address to search","title":"Address"},"description":"Address to search"},{"name":"q","in":"query","required":false,"schema":{"type":"string","description":"General text search (address, contractor, applicant, permit #)","title":"Q"},"description":"General text search (address, contractor, applicant, permit #)"},{"name":"permit_type","in":"query","required":false,"schema":{"type":"string","description":"Filter by permit type","title":"Permit Type"},"description":"Filter by permit type"},{"name":"bbox","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bounding box: min_lon,min_lat,max_lon,max_lat","title":"Bbox"},"description":"Bounding box: min_lon,min_lat,max_lon,max_lat"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max results","default":20,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset","default":0,"title":"Offset"},"description":"Results offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/lethbridge/permits/nearby":{"get":{"summary":"Nearby Building Permits","description":"Coordinate-first alias for nearby building permits.","operationId":"nearby_building_permits_api_lethbridge_permits_nearby_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":84.0,"minimum":41.0,"description":"Canadian latitude","title":"Lat"},"description":"Canadian latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":-52.0,"minimum":-142.0,"description":"Canadian longitude","title":"Lon"},"description":"Canadian longitude"},{"name":"radius_m","in":"query","required":false,"schema":{"type":"integer","maximum":50000,"minimum":1,"default":1000,"title":"Radius M"}},{"name":"permit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Permit Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/lethbridge/permits/export":{"get":{"summary":"Export Building Permits","description":"Export building permit data as CSV or GeoJSON.\n\nSupports filtering by address, permit type, and date range.\nMaximum 10,000 records per export.","operationId":"export_building_permits_api_lethbridge_permits_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Address filter","title":"Address"},"description":"Address filter"},{"name":"permit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Permit type filter","title":"Permit Type"},"description":"Permit type filter"},{"name":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Start date (YYYY-MM-DD)","title":"Date From"},"description":"Start date (YYYY-MM-DD)"},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"End date (YYYY-MM-DD)","title":"Date To"},"description":"End date (YYYY-MM-DD)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/lethbridge/permits/recent":{"get":{"summary":"Recent Building Permits","description":"Get recent building permits sorted by application date (newest first).\n\nUse this to see where construction activity is happening right now.","operationId":"recent_building_permits_api_lethbridge_permits_recent_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Max results","default":20,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset","default":0,"title":"Offset"},"description":"Results offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/lethbridge/permits/batch":{"post":{"summary":"Get Building Permits Batch","description":"Get multiple building permits by permit numbers in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of permit numbers.\nExample: {\"ids\": [\"BP123456\", \"BP789012\"]}\nMaximum 100 permit numbers per request.","operationId":"get_building_permits_batch_api_lethbridge_permits_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Building Permits Batch Api Lethbridge Permits Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/lethbridge/permits/{permit_number}":{"get":{"summary":"Get Building Permit","description":"Get building permit details by permit number.\n\nServes HTML for browsers, JSON for API clients.","operationId":"get_building_permit_api_lethbridge_permits__permit_number__get","parameters":[{"name":"permit_number","in":"path","required":true,"schema":{"type":"string","description":"Permit number","title":"Permit Number"},"description":"Permit number"},{"name":"_city_name","in":"query","required":false,"schema":{"default":"Lethbridge","title":" City Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/lethbridge/health":{"get":{"summary":"City Health","description":"City-specific health check.","operationId":"city_health_api_lethbridge_health_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-albert/entries/{kind}":{"get":{"summary":"List Entries","operationId":"list_entries_api_st_albert_entries__kind__get","parameters":[{"name":"kind","in":"path","required":true,"schema":{"type":"string","description":"Canonical entry kind: property, permit, zoning, or safety","title":"Kind"},"description":"Canonical entry kind: property, permit, zoning, or safety"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"_services","in":"query","required":false,"schema":{"title":" Services"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Entries Api St Albert Entries  Kind  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-albert/property/search":{"get":{"summary":"Search Property","description":"Search for properties by address, or browse all if no address specified.\nSupports sorting by assessed_value, address, year_built, community, or lot_size_sqft.\nSupports value range filtering with min_value and max_value.\n Supports property_type and year range filters.","operationId":"search_property_api_st_albert_property_search_get","parameters":[{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Street address to search (omit to browse all)","title":"Address"},"description":"Street address to search (omit to browse all)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max results to return (up to 1000 for map browse)","default":10,"title":"Limit"},"description":"Max results to return (up to 1000 for map browse)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset for pagination","default":0,"title":"Offset"},"description":"Results offset for pagination"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft","title":"Sort By"},"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"asc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"},{"name":"property_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property type filter (e.g. RE, Residential)","title":"Property Type"},"description":"Property type filter (e.g. RE, Residential)"},{"name":"min_year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter: minimum year built","title":"Min Year"},"description":"Filter: minimum year built"},{"name":"max_year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter: maximum year built","title":"Max Year"},"description":"Filter: maximum year built"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertySearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-albert/property/list":{"get":{"summary":"List Property","description":"List all properties with pagination, sorting, and value range filtering.\n\nUse this endpoint to browse available property records and discover valid roll numbers.\nReturns paginated results with total count for client-side pagination.\nSort by assessed_value with order=desc to find the most expensive properties.","operationId":"list_property_api_st_albert_property_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft","title":"Sort By"},"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"asc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Property Api St Albert Property List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-albert/property/geojson":{"get":{"summary":"Property Geojson","operationId":"property_geojson_api_st_albert_property_geojson_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500000,"minimum":1,"description":"Max features to return (cap prevents browser overload for large cities)","default":50000,"title":"Limit"},"description":"Max features to return (cap prevents browser overload for large cities)"},{"name":"sw_lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport south-west latitude","title":"Sw Lat"},"description":"Viewport south-west latitude"},{"name":"sw_lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport south-west longitude","title":"Sw Lon"},"description":"Viewport south-west longitude"},{"name":"ne_lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport north-east latitude","title":"Ne Lat"},"description":"Viewport north-east latitude"},{"name":"ne_lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport north-east longitude","title":"Ne Lon"},"description":"Viewport north-east longitude"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Offset for pagination through viewport results (use with limit)","default":0,"title":"Offset"},"description":"Offset for pagination through viewport results (use with limit)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-albert/property/top":{"get":{"summary":"Top Property","description":"Get top-N properties sorted by any numeric column.\n\nConvenience endpoint for AI agents and dashboards. Returns the top\nN properties sorted by the given column. Defaults to most expensive\n(assessed_value descending). Combine with min_value/max_value to\nfind e.g. the most expensive residential properties.","operationId":"top_property_api_st_albert_property_top_get","parameters":[{"name":"n","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Number of top properties to return","default":10,"title":"N"},"description":"Number of top properties to return"},{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","description":"Sort column: assessed_value, year_built, lot_size_sqft","default":"assessed_value","title":"Sort By"},"description":"Sort column: assessed_value, year_built, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"desc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Top Property Api St Albert Property Top Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-albert/property/stats":{"get":{"summary":"Property Stats","description":"Get property assessment statistics.","operationId":"property_stats_api_st_albert_property_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-albert/property/autocomplete":{"get":{"summary":"Property Autocomplete","description":"Get address and roll number suggestions for typeahead search.","operationId":"property_autocomplete_api_st_albert_property_autocomplete_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"description":"Search query for address/roll number suggestions","title":"Q"},"description":"Search query for address/roll number suggestions"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":25,"minimum":1,"description":"Max suggestions to return","default":10,"title":"Limit"},"description":"Max suggestions to return"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-albert/property/geocode":{"post":{"summary":"Property Geocode","description":"Geocode property addresses to lat/lon coordinates.\n\nAccepts a JSON body with 'addresses' (list of address strings, max 50).\nReturns cached results instantly; uncached addresses are geocoded via Nominatim.\n\nExample: {\"addresses\": [\"123 Main St\", \"456 Oak Ave\"]}","operationId":"property_geocode_api_st_albert_property_geocode_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-albert/property/by-dls":{"get":{"summary":"Get Property By Dls","description":"Get property assessment by DLS coordinates.","operationId":"get_property_by_dls_api_st_albert_property_by_dls_get","parameters":[{"name":"quarter","in":"query","required":true,"schema":{"type":"string","description":"Quarter section (e.g., SW)","title":"Quarter"},"description":"Quarter section (e.g., SW)"},{"name":"section","in":"query","required":true,"schema":{"type":"integer","description":"Section number","title":"Section"},"description":"Section number"},{"name":"township","in":"query","required":true,"schema":{"type":"integer","description":"Township number","title":"Township"},"description":"Township number"},{"name":"range","in":"query","required":true,"schema":{"type":"integer","description":"Range number","title":"Range"},"description":"Range number"},{"name":"meridian","in":"query","required":true,"schema":{"type":"integer","description":"Meridian number","title":"Meridian"},"description":"Meridian number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyAssessment"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-albert/property/by-gps":{"get":{"summary":"Get Property By Gps","description":"Find coordinate-bearing assessment records nearest a GPS point.\n\nResults are point-nearness matches unless the municipal source supplies\nparcel polygons; clients should not interpret proximity as legal parcel\ncontainment.","operationId":"get_property_by_gps_api_st_albert_property_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":84.0,"minimum":41.0,"description":"Canadian latitude","title":"Lat"},"description":"Canadian latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":-52.0,"minimum":-142.0,"description":"Canadian longitude","title":"Lon"},"description":"Canadian longitude"},{"name":"radius_m","in":"query","required":false,"schema":{"type":"integer","maximum":5000,"minimum":1,"description":"Maximum point distance","default":100,"title":"Radius M"},"description":"Maximum point distance"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":10,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Property By Gps Api St Albert Property By Gps Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-albert/property/by-roll/{roll_number}":{"get":{"summary":"Get Property By Roll","description":"Get property assessment by roll number.","operationId":"get_property_by_roll_api_st_albert_property_by_roll__roll_number__get","parameters":[{"name":"roll_number","in":"path","required":true,"schema":{"type":"string","description":"Property roll number","title":"Roll Number"},"description":"Property roll number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyAssessment"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-albert/property/report":{"get":{"summary":"Property Report Lookup","description":"Consolidated report by roll number, address, or GPS.","operationId":"property_report_lookup_api_st_albert_property_report_get","parameters":[{"name":"roll_number","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property roll number","title":"Roll Number"},"description":"Property roll number"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Street address","title":"Address"},"description":"Street address"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyReport"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-albert/property/report/{roll_number}":{"get":{"summary":"Property Report","description":"Get consolidated property report: assessment + building permits + zoning + DLS.","operationId":"property_report_api_st_albert_property_report__roll_number__get","parameters":[{"name":"roll_number","in":"path","required":true,"schema":{"type":"string","description":"Property roll number","title":"Roll Number"},"description":"Property roll number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyReport"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-albert/property/batch":{"post":{"summary":"Get Properties Batch","description":"Get multiple properties by roll numbers in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of roll numbers.\nExample: {\"ids\": [\"123456789\", \"987654321\"]}\nMaximum 100 roll numbers per request.","operationId":"get_properties_batch_api_st_albert_property_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Properties Batch Api St Albert Property Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-albert/property/export":{"get":{"summary":"Export Properties","description":"Export property data as CSV or GeoJSON.\n\nSupports filtering by address, property type, and assessed value range.\nMaximum 10,000 records per export.","operationId":"export_properties_api_st_albert_property_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Address filter","title":"Address"},"description":"Address filter"},{"name":"property_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property type filter","title":"Property Type"},"description":"Property type filter"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum assessed value","title":"Min Value"},"description":"Minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum assessed value","title":"Max Value"},"description":"Maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-albert/census/profile":{"get":{"summary":"Get Census Profile","description":"Get census profile for a specific Dissemination Area.\n\nProvide either da_id directly, OR lat+lon to find the nearest DA automatically.","operationId":"get_census_profile_api_st_albert_census_profile_get","parameters":[{"name":"da_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Dissemination Area ID (e.g., 48820001)","title":"Da Id"},"description":"Dissemination Area ID (e.g., 48820001)"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude for nearest-DA lookup","title":"Lat"},"description":"Latitude for nearest-DA lookup"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude for nearest-DA lookup","title":"Lon"},"description":"Longitude for nearest-DA lookup"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusProfile"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-albert/census/batch":{"post":{"summary":"Get Census Batch","description":"Get multiple census profiles by DA IDs in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of DA IDs.\nExample: {\"ids\": [\"48820001\", \"48820002\"]}\nMaximum 100 DA IDs per request.","operationId":"get_census_batch_api_st_albert_census_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Census Batch Api St Albert Census Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-albert/census/export":{"get":{"summary":"Export Census","description":"Export census data as CSV.\n\nSupports filtering by population range and geography type.\nMaximum 10,000 records per export.","operationId":"export_census_api_st_albert_census_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv only","default":"csv","title":"Format"},"description":"Export format: csv only"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"min_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Minimum population filter","title":"Min Population"},"description":"Minimum population filter"},{"name":"max_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Maximum population filter","title":"Max Population"},"description":"Maximum population filter"},{"name":"geography_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Geography type filter (DA, CT, CMA)","title":"Geography Type"},"description":"Geography type filter (DA, CT, CMA)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-albert/census/list":{"get":{"summary":"List Census Profiles","description":"List all census profiles with pagination.\n\nUse this endpoint to browse available census profiles and discover valid DA IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_census_profiles_api_st_albert_census_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Census Profiles Api St Albert Census List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-albert/census/by-gps":{"get":{"summary":"Get Census By Gps","description":"Get census data for GPS coordinates.","operationId":"get_census_by_gps_api_st_albert_census_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90,"minimum":-90,"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":180,"minimum":-180,"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-albert/census/by-dls":{"get":{"summary":"Get Census By Dls","description":"Get census data for DLS coordinates.","operationId":"get_census_by_dls_api_st_albert_census_by_dls_get","parameters":[{"name":"dls","in":"query","required":true,"schema":{"type":"string","description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)","title":"Dls"},"description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-albert/census/map-data":{"get":{"summary":"Get Census Map Data","description":"Get lightweight DA points for choropleth map rendering.\n\nReturns centroid coordinates and key metrics (income, age, population,\nhousehold size, employment rate) for all DAs in the city.\nUsed by the census dashboard to render color-coded maps.","operationId":"get_census_map_data_api_st_albert_census_map_data_get","parameters":[{"name":"year","in":"query","required":false,"schema":{"type":"integer","description":"Census year for DA map data","default":2021,"title":"Year"},"description":"Census year for DA map data"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-albert/census/stats":{"get":{"summary":"Census Stats","description":"Get census data statistics.","operationId":"census_stats_api_st_albert_census_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-albert/census/compare":{"get":{"summary":"Census Compare","description":"Compare key census metrics across multiple years.\n\nReturns side-by-side comparison of population, households,\navg_income, median_age, density, and land_area for each requested year.\nYears without data return null for that year's values.","operationId":"census_compare_api_st_albert_census_compare_get","parameters":[{"name":"years","in":"query","required":false,"schema":{"type":"string","description":"Comma-separated census years (e.g., 2016,2021)","default":"2021","title":"Years"},"description":"Comma-separated census years (e.g., 2016,2021)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-albert/census/time-series":{"get":{"summary":"Census Timeseries","description":"Get year-by-year census trends for this city.\n\nReturns population, income, age, and household trends across all\navailable census years. Useful for spotting long-term demographic shifts.","operationId":"census_timeseries_api_st_albert_census_time_series_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-albert/geography/list":{"get":{"summary":"Geography List","description":"List geography boundaries for this city.","operationId":"geography_list_api_st_albert_geography_list_get","parameters":[{"name":"type","in":"query","required":false,"schema":{"type":"string","title":"Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-albert/geography/by-gps":{"get":{"summary":"Geography By Gps","description":"Find the geography boundary containing a GPS point.","operationId":"geography_by_gps_api_st_albert_geography_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","title":"Lat"}},{"name":"lon","in":"query","required":true,"schema":{"type":"number","title":"Lon"}},{"name":"type","in":"query","required":false,"schema":{"type":"string","default":"DA","title":"Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-albert/geography/stats":{"get":{"summary":"Geography Stats","description":"Get geography statistics for this city.","operationId":"geography_stats_api_st_albert_geography_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-albert/geography/{geoid}":{"get":{"summary":"Geography Boundary","description":"Get a specific geography boundary by geoid, including GeoJSON polygon.","operationId":"geography_boundary_api_st_albert_geography__geoid__get","parameters":[{"name":"geoid","in":"path","required":true,"schema":{"type":"string","title":"Geoid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-albert/census/rental/list":{"get":{"summary":"List Rental Prices","description":"List rental price records for this city, with optional unit type filter.","operationId":"list_rental_prices_api_st_albert_census_rental_list_get","parameters":[{"name":"unit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":50,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalPriceListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-albert/census/rental/trend":{"get":{"summary":"Get Rental Trend","description":"Get rental price time series for a specific unit type.","operationId":"get_rental_trend_api_st_albert_census_rental_trend_get","parameters":[{"name":"unit_type","in":"query","required":true,"schema":{"type":"string","description":"Rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Rental unit type (e.g. 'Apartment - 1 bedroom')"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalTrendResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-albert/census/rental/types":{"get":{"summary":"Get Rental Types","description":"Get available rental unit types for this city.","operationId":"get_rental_types_api_st_albert_census_rental_types_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-albert/zoning/by-gps":{"get":{"summary":"Get Zoning By Gps","description":"Get zoning district for GPS coordinates.","operationId":"get_zoning_by_gps_api_st_albert_zoning_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZoningByGPSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-albert/zoning/by-id/{district_id}":{"get":{"summary":"Get Zoning By Id","description":"Get a single zoning district by its numeric ID.","operationId":"get_zoning_by_id_api_st_albert_zoning_by_id__district_id__get","parameters":[{"name":"district_id","in":"path","required":true,"schema":{"type":"integer","description":"Zoning district numeric ID","title":"District Id"},"description":"Zoning district numeric ID"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning By Id Api St Albert Zoning By Id  District Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-albert/zoning/by-code/{code}":{"get":{"summary":"Get Zoning By Code","description":"Get all districts with a specific zone code.","operationId":"get_zoning_by_code_api_st_albert_zoning_by_code__code__get","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","description":"Zone code (e.g., C-C1, R-G)","title":"Code"},"description":"Zone code (e.g., C-C1, R-G)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoningDistrict"},"title":"Response Get Zoning By Code Api St Albert Zoning By Code  Code  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-albert/zoning/batch":{"post":{"summary":"Get Zoning Batch","description":"Get multiple zoning districts by zone codes in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of zone codes.\nExample: {\"ids\": [\"CR20-C20/R20\", \"C-C1\", \"R-G\"]}\nMaximum 100 zone codes per request.","operationId":"get_zoning_batch_api_st_albert_zoning_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning Batch Api St Albert Zoning Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-albert/zoning/list":{"get":{"summary":"List Zoning Districts","description":"List all zoning districts with pagination.\n\nUse this endpoint to browse available zoning districts and discover valid IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_zoning_districts_api_st_albert_zoning_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Zoning Districts Api St Albert Zoning List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-albert/zoning/codes":{"get":{"summary":"List Zone Codes","description":"List all zone codes with descriptions.","operationId":"list_zone_codes_api_st_albert_zoning_codes_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"type":"string","description":"Filter by major category (e.g., Commercial, Residential)","title":"Category"},"description":"Filter by major category (e.g., Commercial, Residential)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoneCodeInfo"},"title":"Response List Zone Codes Api St Albert Zoning Codes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-albert/zoning/stats":{"get":{"summary":"Zoning Stats","description":"Get zoning statistics.","operationId":"zoning_stats_api_st_albert_zoning_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-albert/zoning/export":{"get":{"summary":"Export Zoning","description":"Export zoning district data as CSV or GeoJSON.\n\nSupports filtering by zone code, category, and area range.\nMaximum 10,000 records per export.","operationId":"export_zoning_api_st_albert_zoning_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"zone_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Zone code filter (e.g., CR2)","title":"Zone Code"},"description":"Zone code filter (e.g., CR2)"},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Major category filter","title":"Category"},"description":"Major category filter"},{"name":"min_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum area in sq km","title":"Min Area"},"description":"Minimum area in sq km"},{"name":"max_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum area in sq km","title":"Max Area"},"description":"Maximum area in sq km"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-albert/permits/stats":{"get":{"summary":"Building Stats","description":"Get building permit statistics.","operationId":"building_stats_api_st_albert_permits_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-albert/permits/search":{"get":{"summary":"Search Building Permits","description":"Search building permits by address, contractor, applicant, permit number, and/or permit type.","operationId":"search_building_permits_api_st_albert_permits_search_get","parameters":[{"name":"address","in":"query","required":false,"schema":{"type":"string","description":"Address to search","title":"Address"},"description":"Address to search"},{"name":"q","in":"query","required":false,"schema":{"type":"string","description":"General text search (address, contractor, applicant, permit #)","title":"Q"},"description":"General text search (address, contractor, applicant, permit #)"},{"name":"permit_type","in":"query","required":false,"schema":{"type":"string","description":"Filter by permit type","title":"Permit Type"},"description":"Filter by permit type"},{"name":"bbox","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bounding box: min_lon,min_lat,max_lon,max_lat","title":"Bbox"},"description":"Bounding box: min_lon,min_lat,max_lon,max_lat"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max results","default":20,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset","default":0,"title":"Offset"},"description":"Results offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-albert/permits/nearby":{"get":{"summary":"Nearby Building Permits","description":"Coordinate-first alias for nearby building permits.","operationId":"nearby_building_permits_api_st_albert_permits_nearby_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":84.0,"minimum":41.0,"description":"Canadian latitude","title":"Lat"},"description":"Canadian latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":-52.0,"minimum":-142.0,"description":"Canadian longitude","title":"Lon"},"description":"Canadian longitude"},{"name":"radius_m","in":"query","required":false,"schema":{"type":"integer","maximum":50000,"minimum":1,"default":1000,"title":"Radius M"}},{"name":"permit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Permit Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-albert/permits/export":{"get":{"summary":"Export Building Permits","description":"Export building permit data as CSV or GeoJSON.\n\nSupports filtering by address, permit type, and date range.\nMaximum 10,000 records per export.","operationId":"export_building_permits_api_st_albert_permits_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Address filter","title":"Address"},"description":"Address filter"},{"name":"permit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Permit type filter","title":"Permit Type"},"description":"Permit type filter"},{"name":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Start date (YYYY-MM-DD)","title":"Date From"},"description":"Start date (YYYY-MM-DD)"},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"End date (YYYY-MM-DD)","title":"Date To"},"description":"End date (YYYY-MM-DD)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-albert/permits/recent":{"get":{"summary":"Recent Building Permits","description":"Get recent building permits sorted by application date (newest first).\n\nUse this to see where construction activity is happening right now.","operationId":"recent_building_permits_api_st_albert_permits_recent_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Max results","default":20,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset","default":0,"title":"Offset"},"description":"Results offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-albert/permits/batch":{"post":{"summary":"Get Building Permits Batch","description":"Get multiple building permits by permit numbers in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of permit numbers.\nExample: {\"ids\": [\"BP123456\", \"BP789012\"]}\nMaximum 100 permit numbers per request.","operationId":"get_building_permits_batch_api_st_albert_permits_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Building Permits Batch Api St Albert Permits Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-albert/permits/{permit_number}":{"get":{"summary":"Get Building Permit","description":"Get building permit details by permit number.\n\nServes HTML for browsers, JSON for API clients.","operationId":"get_building_permit_api_st_albert_permits__permit_number__get","parameters":[{"name":"permit_number","in":"path","required":true,"schema":{"type":"string","description":"Permit number","title":"Permit Number"},"description":"Permit number"},{"name":"_city_name","in":"query","required":false,"schema":{"default":"St. Albert","title":" City Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/st-albert/health":{"get":{"summary":"City Health","description":"City-specific health check.","operationId":"city_health_api_st_albert_health_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/cochrane/entries/{kind}":{"get":{"summary":"List Entries","operationId":"list_entries_api_cochrane_entries__kind__get","parameters":[{"name":"kind","in":"path","required":true,"schema":{"type":"string","description":"Canonical entry kind: property, permit, zoning, or safety","title":"Kind"},"description":"Canonical entry kind: property, permit, zoning, or safety"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"_services","in":"query","required":false,"schema":{"title":" Services"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Entries Api Cochrane Entries  Kind  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/cochrane/property/search":{"get":{"summary":"Search Property","description":"Search for properties by address, or browse all if no address specified.\nSupports sorting by assessed_value, address, year_built, community, or lot_size_sqft.\nSupports value range filtering with min_value and max_value.\n Supports property_type and year range filters.","operationId":"search_property_api_cochrane_property_search_get","parameters":[{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Street address to search (omit to browse all)","title":"Address"},"description":"Street address to search (omit to browse all)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max results to return (up to 1000 for map browse)","default":10,"title":"Limit"},"description":"Max results to return (up to 1000 for map browse)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset for pagination","default":0,"title":"Offset"},"description":"Results offset for pagination"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft","title":"Sort By"},"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"asc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"},{"name":"property_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property type filter (e.g. RE, Residential)","title":"Property Type"},"description":"Property type filter (e.g. RE, Residential)"},{"name":"min_year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter: minimum year built","title":"Min Year"},"description":"Filter: minimum year built"},{"name":"max_year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter: maximum year built","title":"Max Year"},"description":"Filter: maximum year built"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertySearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/cochrane/property/list":{"get":{"summary":"List Property","description":"List all properties with pagination, sorting, and value range filtering.\n\nUse this endpoint to browse available property records and discover valid roll numbers.\nReturns paginated results with total count for client-side pagination.\nSort by assessed_value with order=desc to find the most expensive properties.","operationId":"list_property_api_cochrane_property_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft","title":"Sort By"},"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"asc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Property Api Cochrane Property List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/cochrane/property/geojson":{"get":{"summary":"Property Geojson","operationId":"property_geojson_api_cochrane_property_geojson_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500000,"minimum":1,"description":"Max features to return (cap prevents browser overload for large cities)","default":50000,"title":"Limit"},"description":"Max features to return (cap prevents browser overload for large cities)"},{"name":"sw_lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport south-west latitude","title":"Sw Lat"},"description":"Viewport south-west latitude"},{"name":"sw_lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport south-west longitude","title":"Sw Lon"},"description":"Viewport south-west longitude"},{"name":"ne_lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport north-east latitude","title":"Ne Lat"},"description":"Viewport north-east latitude"},{"name":"ne_lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport north-east longitude","title":"Ne Lon"},"description":"Viewport north-east longitude"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Offset for pagination through viewport results (use with limit)","default":0,"title":"Offset"},"description":"Offset for pagination through viewport results (use with limit)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/cochrane/property/top":{"get":{"summary":"Top Property","description":"Get top-N properties sorted by any numeric column.\n\nConvenience endpoint for AI agents and dashboards. Returns the top\nN properties sorted by the given column. Defaults to most expensive\n(assessed_value descending). Combine with min_value/max_value to\nfind e.g. the most expensive residential properties.","operationId":"top_property_api_cochrane_property_top_get","parameters":[{"name":"n","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Number of top properties to return","default":10,"title":"N"},"description":"Number of top properties to return"},{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","description":"Sort column: assessed_value, year_built, lot_size_sqft","default":"assessed_value","title":"Sort By"},"description":"Sort column: assessed_value, year_built, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"desc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Top Property Api Cochrane Property Top Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/cochrane/property/stats":{"get":{"summary":"Property Stats","description":"Get property assessment statistics.","operationId":"property_stats_api_cochrane_property_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/cochrane/property/autocomplete":{"get":{"summary":"Property Autocomplete","description":"Get address and roll number suggestions for typeahead search.","operationId":"property_autocomplete_api_cochrane_property_autocomplete_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"description":"Search query for address/roll number suggestions","title":"Q"},"description":"Search query for address/roll number suggestions"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":25,"minimum":1,"description":"Max suggestions to return","default":10,"title":"Limit"},"description":"Max suggestions to return"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/cochrane/property/geocode":{"post":{"summary":"Property Geocode","description":"Geocode property addresses to lat/lon coordinates.\n\nAccepts a JSON body with 'addresses' (list of address strings, max 50).\nReturns cached results instantly; uncached addresses are geocoded via Nominatim.\n\nExample: {\"addresses\": [\"123 Main St\", \"456 Oak Ave\"]}","operationId":"property_geocode_api_cochrane_property_geocode_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/cochrane/property/by-dls":{"get":{"summary":"Get Property By Dls","description":"Get property assessment by DLS coordinates.","operationId":"get_property_by_dls_api_cochrane_property_by_dls_get","parameters":[{"name":"quarter","in":"query","required":true,"schema":{"type":"string","description":"Quarter section (e.g., SW)","title":"Quarter"},"description":"Quarter section (e.g., SW)"},{"name":"section","in":"query","required":true,"schema":{"type":"integer","description":"Section number","title":"Section"},"description":"Section number"},{"name":"township","in":"query","required":true,"schema":{"type":"integer","description":"Township number","title":"Township"},"description":"Township number"},{"name":"range","in":"query","required":true,"schema":{"type":"integer","description":"Range number","title":"Range"},"description":"Range number"},{"name":"meridian","in":"query","required":true,"schema":{"type":"integer","description":"Meridian number","title":"Meridian"},"description":"Meridian number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyAssessment"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/cochrane/property/by-gps":{"get":{"summary":"Get Property By Gps","description":"Find coordinate-bearing assessment records nearest a GPS point.\n\nResults are point-nearness matches unless the municipal source supplies\nparcel polygons; clients should not interpret proximity as legal parcel\ncontainment.","operationId":"get_property_by_gps_api_cochrane_property_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":84.0,"minimum":41.0,"description":"Canadian latitude","title":"Lat"},"description":"Canadian latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":-52.0,"minimum":-142.0,"description":"Canadian longitude","title":"Lon"},"description":"Canadian longitude"},{"name":"radius_m","in":"query","required":false,"schema":{"type":"integer","maximum":5000,"minimum":1,"description":"Maximum point distance","default":100,"title":"Radius M"},"description":"Maximum point distance"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":10,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Property By Gps Api Cochrane Property By Gps Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/cochrane/property/by-roll/{roll_number}":{"get":{"summary":"Get Property By Roll","description":"Get property assessment by roll number.","operationId":"get_property_by_roll_api_cochrane_property_by_roll__roll_number__get","parameters":[{"name":"roll_number","in":"path","required":true,"schema":{"type":"string","description":"Property roll number","title":"Roll Number"},"description":"Property roll number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyAssessment"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/cochrane/property/report":{"get":{"summary":"Property Report Lookup","description":"Consolidated report by roll number, address, or GPS.","operationId":"property_report_lookup_api_cochrane_property_report_get","parameters":[{"name":"roll_number","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property roll number","title":"Roll Number"},"description":"Property roll number"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Street address","title":"Address"},"description":"Street address"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyReport"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/cochrane/property/report/{roll_number}":{"get":{"summary":"Property Report","description":"Get consolidated property report: assessment + building permits + zoning + DLS.","operationId":"property_report_api_cochrane_property_report__roll_number__get","parameters":[{"name":"roll_number","in":"path","required":true,"schema":{"type":"string","description":"Property roll number","title":"Roll Number"},"description":"Property roll number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyReport"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/cochrane/property/batch":{"post":{"summary":"Get Properties Batch","description":"Get multiple properties by roll numbers in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of roll numbers.\nExample: {\"ids\": [\"123456789\", \"987654321\"]}\nMaximum 100 roll numbers per request.","operationId":"get_properties_batch_api_cochrane_property_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Properties Batch Api Cochrane Property Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/cochrane/property/export":{"get":{"summary":"Export Properties","description":"Export property data as CSV or GeoJSON.\n\nSupports filtering by address, property type, and assessed value range.\nMaximum 10,000 records per export.","operationId":"export_properties_api_cochrane_property_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Address filter","title":"Address"},"description":"Address filter"},{"name":"property_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property type filter","title":"Property Type"},"description":"Property type filter"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum assessed value","title":"Min Value"},"description":"Minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum assessed value","title":"Max Value"},"description":"Maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/cochrane/census/profile":{"get":{"summary":"Get Census Profile","description":"Get census profile for a specific Dissemination Area.\n\nProvide either da_id directly, OR lat+lon to find the nearest DA automatically.","operationId":"get_census_profile_api_cochrane_census_profile_get","parameters":[{"name":"da_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Dissemination Area ID (e.g., 48820001)","title":"Da Id"},"description":"Dissemination Area ID (e.g., 48820001)"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude for nearest-DA lookup","title":"Lat"},"description":"Latitude for nearest-DA lookup"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude for nearest-DA lookup","title":"Lon"},"description":"Longitude for nearest-DA lookup"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusProfile"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/cochrane/census/batch":{"post":{"summary":"Get Census Batch","description":"Get multiple census profiles by DA IDs in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of DA IDs.\nExample: {\"ids\": [\"48820001\", \"48820002\"]}\nMaximum 100 DA IDs per request.","operationId":"get_census_batch_api_cochrane_census_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Census Batch Api Cochrane Census Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/cochrane/census/export":{"get":{"summary":"Export Census","description":"Export census data as CSV.\n\nSupports filtering by population range and geography type.\nMaximum 10,000 records per export.","operationId":"export_census_api_cochrane_census_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv only","default":"csv","title":"Format"},"description":"Export format: csv only"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"min_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Minimum population filter","title":"Min Population"},"description":"Minimum population filter"},{"name":"max_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Maximum population filter","title":"Max Population"},"description":"Maximum population filter"},{"name":"geography_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Geography type filter (DA, CT, CMA)","title":"Geography Type"},"description":"Geography type filter (DA, CT, CMA)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/cochrane/census/list":{"get":{"summary":"List Census Profiles","description":"List all census profiles with pagination.\n\nUse this endpoint to browse available census profiles and discover valid DA IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_census_profiles_api_cochrane_census_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Census Profiles Api Cochrane Census List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/cochrane/census/by-gps":{"get":{"summary":"Get Census By Gps","description":"Get census data for GPS coordinates.","operationId":"get_census_by_gps_api_cochrane_census_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90,"minimum":-90,"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":180,"minimum":-180,"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/cochrane/census/by-dls":{"get":{"summary":"Get Census By Dls","description":"Get census data for DLS coordinates.","operationId":"get_census_by_dls_api_cochrane_census_by_dls_get","parameters":[{"name":"dls","in":"query","required":true,"schema":{"type":"string","description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)","title":"Dls"},"description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/cochrane/census/map-data":{"get":{"summary":"Get Census Map Data","description":"Get lightweight DA points for choropleth map rendering.\n\nReturns centroid coordinates and key metrics (income, age, population,\nhousehold size, employment rate) for all DAs in the city.\nUsed by the census dashboard to render color-coded maps.","operationId":"get_census_map_data_api_cochrane_census_map_data_get","parameters":[{"name":"year","in":"query","required":false,"schema":{"type":"integer","description":"Census year for DA map data","default":2021,"title":"Year"},"description":"Census year for DA map data"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/cochrane/census/stats":{"get":{"summary":"Census Stats","description":"Get census data statistics.","operationId":"census_stats_api_cochrane_census_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/cochrane/census/compare":{"get":{"summary":"Census Compare","description":"Compare key census metrics across multiple years.\n\nReturns side-by-side comparison of population, households,\navg_income, median_age, density, and land_area for each requested year.\nYears without data return null for that year's values.","operationId":"census_compare_api_cochrane_census_compare_get","parameters":[{"name":"years","in":"query","required":false,"schema":{"type":"string","description":"Comma-separated census years (e.g., 2016,2021)","default":"2021","title":"Years"},"description":"Comma-separated census years (e.g., 2016,2021)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/cochrane/census/time-series":{"get":{"summary":"Census Timeseries","description":"Get year-by-year census trends for this city.\n\nReturns population, income, age, and household trends across all\navailable census years. Useful for spotting long-term demographic shifts.","operationId":"census_timeseries_api_cochrane_census_time_series_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/cochrane/geography/list":{"get":{"summary":"Geography List","description":"List geography boundaries for this city.","operationId":"geography_list_api_cochrane_geography_list_get","parameters":[{"name":"type","in":"query","required":false,"schema":{"type":"string","title":"Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/cochrane/geography/by-gps":{"get":{"summary":"Geography By Gps","description":"Find the geography boundary containing a GPS point.","operationId":"geography_by_gps_api_cochrane_geography_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","title":"Lat"}},{"name":"lon","in":"query","required":true,"schema":{"type":"number","title":"Lon"}},{"name":"type","in":"query","required":false,"schema":{"type":"string","default":"DA","title":"Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/cochrane/geography/stats":{"get":{"summary":"Geography Stats","description":"Get geography statistics for this city.","operationId":"geography_stats_api_cochrane_geography_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/cochrane/geography/{geoid}":{"get":{"summary":"Geography Boundary","description":"Get a specific geography boundary by geoid, including GeoJSON polygon.","operationId":"geography_boundary_api_cochrane_geography__geoid__get","parameters":[{"name":"geoid","in":"path","required":true,"schema":{"type":"string","title":"Geoid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/cochrane/census/rental/list":{"get":{"summary":"List Rental Prices","description":"List rental price records for this city, with optional unit type filter.","operationId":"list_rental_prices_api_cochrane_census_rental_list_get","parameters":[{"name":"unit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":50,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalPriceListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/cochrane/census/rental/trend":{"get":{"summary":"Get Rental Trend","description":"Get rental price time series for a specific unit type.","operationId":"get_rental_trend_api_cochrane_census_rental_trend_get","parameters":[{"name":"unit_type","in":"query","required":true,"schema":{"type":"string","description":"Rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Rental unit type (e.g. 'Apartment - 1 bedroom')"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalTrendResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/cochrane/census/rental/types":{"get":{"summary":"Get Rental Types","description":"Get available rental unit types for this city.","operationId":"get_rental_types_api_cochrane_census_rental_types_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/cochrane/zoning/by-gps":{"get":{"summary":"Get Zoning By Gps","description":"Get zoning district for GPS coordinates.","operationId":"get_zoning_by_gps_api_cochrane_zoning_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZoningByGPSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/cochrane/zoning/by-id/{district_id}":{"get":{"summary":"Get Zoning By Id","description":"Get a single zoning district by its numeric ID.","operationId":"get_zoning_by_id_api_cochrane_zoning_by_id__district_id__get","parameters":[{"name":"district_id","in":"path","required":true,"schema":{"type":"integer","description":"Zoning district numeric ID","title":"District Id"},"description":"Zoning district numeric ID"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning By Id Api Cochrane Zoning By Id  District Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/cochrane/zoning/by-code/{code}":{"get":{"summary":"Get Zoning By Code","description":"Get all districts with a specific zone code.","operationId":"get_zoning_by_code_api_cochrane_zoning_by_code__code__get","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","description":"Zone code (e.g., C-C1, R-G)","title":"Code"},"description":"Zone code (e.g., C-C1, R-G)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoningDistrict"},"title":"Response Get Zoning By Code Api Cochrane Zoning By Code  Code  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/cochrane/zoning/batch":{"post":{"summary":"Get Zoning Batch","description":"Get multiple zoning districts by zone codes in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of zone codes.\nExample: {\"ids\": [\"CR20-C20/R20\", \"C-C1\", \"R-G\"]}\nMaximum 100 zone codes per request.","operationId":"get_zoning_batch_api_cochrane_zoning_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning Batch Api Cochrane Zoning Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/cochrane/zoning/list":{"get":{"summary":"List Zoning Districts","description":"List all zoning districts with pagination.\n\nUse this endpoint to browse available zoning districts and discover valid IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_zoning_districts_api_cochrane_zoning_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Zoning Districts Api Cochrane Zoning List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/cochrane/zoning/codes":{"get":{"summary":"List Zone Codes","description":"List all zone codes with descriptions.","operationId":"list_zone_codes_api_cochrane_zoning_codes_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"type":"string","description":"Filter by major category (e.g., Commercial, Residential)","title":"Category"},"description":"Filter by major category (e.g., Commercial, Residential)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoneCodeInfo"},"title":"Response List Zone Codes Api Cochrane Zoning Codes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/cochrane/zoning/stats":{"get":{"summary":"Zoning Stats","description":"Get zoning statistics.","operationId":"zoning_stats_api_cochrane_zoning_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/cochrane/zoning/export":{"get":{"summary":"Export Zoning","description":"Export zoning district data as CSV or GeoJSON.\n\nSupports filtering by zone code, category, and area range.\nMaximum 10,000 records per export.","operationId":"export_zoning_api_cochrane_zoning_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"zone_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Zone code filter (e.g., CR2)","title":"Zone Code"},"description":"Zone code filter (e.g., CR2)"},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Major category filter","title":"Category"},"description":"Major category filter"},{"name":"min_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum area in sq km","title":"Min Area"},"description":"Minimum area in sq km"},{"name":"max_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum area in sq km","title":"Max Area"},"description":"Maximum area in sq km"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/cochrane/permits/stats":{"get":{"summary":"Building Stats","description":"Get building permit statistics.","operationId":"building_stats_api_cochrane_permits_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/cochrane/permits/search":{"get":{"summary":"Search Building Permits","description":"Search building permits by address, contractor, applicant, permit number, and/or permit type.","operationId":"search_building_permits_api_cochrane_permits_search_get","parameters":[{"name":"address","in":"query","required":false,"schema":{"type":"string","description":"Address to search","title":"Address"},"description":"Address to search"},{"name":"q","in":"query","required":false,"schema":{"type":"string","description":"General text search (address, contractor, applicant, permit #)","title":"Q"},"description":"General text search (address, contractor, applicant, permit #)"},{"name":"permit_type","in":"query","required":false,"schema":{"type":"string","description":"Filter by permit type","title":"Permit Type"},"description":"Filter by permit type"},{"name":"bbox","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bounding box: min_lon,min_lat,max_lon,max_lat","title":"Bbox"},"description":"Bounding box: min_lon,min_lat,max_lon,max_lat"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max results","default":20,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset","default":0,"title":"Offset"},"description":"Results offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/cochrane/permits/nearby":{"get":{"summary":"Nearby Building Permits","description":"Coordinate-first alias for nearby building permits.","operationId":"nearby_building_permits_api_cochrane_permits_nearby_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":84.0,"minimum":41.0,"description":"Canadian latitude","title":"Lat"},"description":"Canadian latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":-52.0,"minimum":-142.0,"description":"Canadian longitude","title":"Lon"},"description":"Canadian longitude"},{"name":"radius_m","in":"query","required":false,"schema":{"type":"integer","maximum":50000,"minimum":1,"default":1000,"title":"Radius M"}},{"name":"permit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Permit Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/cochrane/permits/export":{"get":{"summary":"Export Building Permits","description":"Export building permit data as CSV or GeoJSON.\n\nSupports filtering by address, permit type, and date range.\nMaximum 10,000 records per export.","operationId":"export_building_permits_api_cochrane_permits_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Address filter","title":"Address"},"description":"Address filter"},{"name":"permit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Permit type filter","title":"Permit Type"},"description":"Permit type filter"},{"name":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Start date (YYYY-MM-DD)","title":"Date From"},"description":"Start date (YYYY-MM-DD)"},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"End date (YYYY-MM-DD)","title":"Date To"},"description":"End date (YYYY-MM-DD)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/cochrane/permits/recent":{"get":{"summary":"Recent Building Permits","description":"Get recent building permits sorted by application date (newest first).\n\nUse this to see where construction activity is happening right now.","operationId":"recent_building_permits_api_cochrane_permits_recent_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Max results","default":20,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset","default":0,"title":"Offset"},"description":"Results offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/cochrane/permits/batch":{"post":{"summary":"Get Building Permits Batch","description":"Get multiple building permits by permit numbers in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of permit numbers.\nExample: {\"ids\": [\"BP123456\", \"BP789012\"]}\nMaximum 100 permit numbers per request.","operationId":"get_building_permits_batch_api_cochrane_permits_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Building Permits Batch Api Cochrane Permits Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/cochrane/permits/{permit_number}":{"get":{"summary":"Get Building Permit","description":"Get building permit details by permit number.\n\nServes HTML for browsers, JSON for API clients.","operationId":"get_building_permit_api_cochrane_permits__permit_number__get","parameters":[{"name":"permit_number","in":"path","required":true,"schema":{"type":"string","description":"Permit number","title":"Permit Number"},"description":"Permit number"},{"name":"_city_name","in":"query","required":false,"schema":{"default":"Cochrane","title":" City Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/cochrane/health":{"get":{"summary":"City Health","description":"City-specific health check.","operationId":"city_health_api_cochrane_health_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/surrey/entries/{kind}":{"get":{"summary":"List Entries","operationId":"list_entries_api_surrey_entries__kind__get","parameters":[{"name":"kind","in":"path","required":true,"schema":{"type":"string","description":"Canonical entry kind: property, permit, zoning, or safety","title":"Kind"},"description":"Canonical entry kind: property, permit, zoning, or safety"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"_services","in":"query","required":false,"schema":{"title":" Services"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Entries Api Surrey Entries  Kind  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/surrey/property/search":{"get":{"summary":"Search Property","description":"Search for properties by address, or browse all if no address specified.\nSupports sorting by assessed_value, address, year_built, community, or lot_size_sqft.\nSupports value range filtering with min_value and max_value.\n Supports property_type and year range filters.","operationId":"search_property_api_surrey_property_search_get","parameters":[{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Street address to search (omit to browse all)","title":"Address"},"description":"Street address to search (omit to browse all)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max results to return (up to 1000 for map browse)","default":10,"title":"Limit"},"description":"Max results to return (up to 1000 for map browse)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset for pagination","default":0,"title":"Offset"},"description":"Results offset for pagination"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft","title":"Sort By"},"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"asc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"},{"name":"property_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property type filter (e.g. RE, Residential)","title":"Property Type"},"description":"Property type filter (e.g. RE, Residential)"},{"name":"min_year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter: minimum year built","title":"Min Year"},"description":"Filter: minimum year built"},{"name":"max_year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter: maximum year built","title":"Max Year"},"description":"Filter: maximum year built"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertySearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/surrey/property/list":{"get":{"summary":"List Property","description":"List all properties with pagination, sorting, and value range filtering.\n\nUse this endpoint to browse available property records and discover valid roll numbers.\nReturns paginated results with total count for client-side pagination.\nSort by assessed_value with order=desc to find the most expensive properties.","operationId":"list_property_api_surrey_property_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft","title":"Sort By"},"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"asc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Property Api Surrey Property List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/surrey/property/geojson":{"get":{"summary":"Property Geojson","operationId":"property_geojson_api_surrey_property_geojson_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500000,"minimum":1,"description":"Max features to return (cap prevents browser overload for large cities)","default":50000,"title":"Limit"},"description":"Max features to return (cap prevents browser overload for large cities)"},{"name":"sw_lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport south-west latitude","title":"Sw Lat"},"description":"Viewport south-west latitude"},{"name":"sw_lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport south-west longitude","title":"Sw Lon"},"description":"Viewport south-west longitude"},{"name":"ne_lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport north-east latitude","title":"Ne Lat"},"description":"Viewport north-east latitude"},{"name":"ne_lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport north-east longitude","title":"Ne Lon"},"description":"Viewport north-east longitude"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Offset for pagination through viewport results (use with limit)","default":0,"title":"Offset"},"description":"Offset for pagination through viewport results (use with limit)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/surrey/property/top":{"get":{"summary":"Top Property","description":"Get top-N properties sorted by any numeric column.\n\nConvenience endpoint for AI agents and dashboards. Returns the top\nN properties sorted by the given column. Defaults to most expensive\n(assessed_value descending). Combine with min_value/max_value to\nfind e.g. the most expensive residential properties.","operationId":"top_property_api_surrey_property_top_get","parameters":[{"name":"n","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Number of top properties to return","default":10,"title":"N"},"description":"Number of top properties to return"},{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","description":"Sort column: assessed_value, year_built, lot_size_sqft","default":"assessed_value","title":"Sort By"},"description":"Sort column: assessed_value, year_built, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"desc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Top Property Api Surrey Property Top Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/surrey/property/stats":{"get":{"summary":"Property Stats","description":"Get property assessment statistics.","operationId":"property_stats_api_surrey_property_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/surrey/property/autocomplete":{"get":{"summary":"Property Autocomplete","description":"Get address and roll number suggestions for typeahead search.","operationId":"property_autocomplete_api_surrey_property_autocomplete_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"description":"Search query for address/roll number suggestions","title":"Q"},"description":"Search query for address/roll number suggestions"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":25,"minimum":1,"description":"Max suggestions to return","default":10,"title":"Limit"},"description":"Max suggestions to return"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/surrey/property/geocode":{"post":{"summary":"Property Geocode","description":"Geocode property addresses to lat/lon coordinates.\n\nAccepts a JSON body with 'addresses' (list of address strings, max 50).\nReturns cached results instantly; uncached addresses are geocoded via Nominatim.\n\nExample: {\"addresses\": [\"123 Main St\", \"456 Oak Ave\"]}","operationId":"property_geocode_api_surrey_property_geocode_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/surrey/property/by-dls":{"get":{"summary":"Get Property By Dls","description":"Get property assessment by DLS coordinates.","operationId":"get_property_by_dls_api_surrey_property_by_dls_get","parameters":[{"name":"quarter","in":"query","required":true,"schema":{"type":"string","description":"Quarter section (e.g., SW)","title":"Quarter"},"description":"Quarter section (e.g., SW)"},{"name":"section","in":"query","required":true,"schema":{"type":"integer","description":"Section number","title":"Section"},"description":"Section number"},{"name":"township","in":"query","required":true,"schema":{"type":"integer","description":"Township number","title":"Township"},"description":"Township number"},{"name":"range","in":"query","required":true,"schema":{"type":"integer","description":"Range number","title":"Range"},"description":"Range number"},{"name":"meridian","in":"query","required":true,"schema":{"type":"integer","description":"Meridian number","title":"Meridian"},"description":"Meridian number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyAssessment"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/surrey/property/by-gps":{"get":{"summary":"Get Property By Gps","description":"Find coordinate-bearing assessment records nearest a GPS point.\n\nResults are point-nearness matches unless the municipal source supplies\nparcel polygons; clients should not interpret proximity as legal parcel\ncontainment.","operationId":"get_property_by_gps_api_surrey_property_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":84.0,"minimum":41.0,"description":"Canadian latitude","title":"Lat"},"description":"Canadian latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":-52.0,"minimum":-142.0,"description":"Canadian longitude","title":"Lon"},"description":"Canadian longitude"},{"name":"radius_m","in":"query","required":false,"schema":{"type":"integer","maximum":5000,"minimum":1,"description":"Maximum point distance","default":100,"title":"Radius M"},"description":"Maximum point distance"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":10,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Property By Gps Api Surrey Property By Gps Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/surrey/property/by-roll/{roll_number}":{"get":{"summary":"Get Property By Roll","description":"Get property assessment by roll number.","operationId":"get_property_by_roll_api_surrey_property_by_roll__roll_number__get","parameters":[{"name":"roll_number","in":"path","required":true,"schema":{"type":"string","description":"Property roll number","title":"Roll Number"},"description":"Property roll number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyAssessment"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/surrey/property/report":{"get":{"summary":"Property Report Lookup","description":"Consolidated report by roll number, address, or GPS.","operationId":"property_report_lookup_api_surrey_property_report_get","parameters":[{"name":"roll_number","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property roll number","title":"Roll Number"},"description":"Property roll number"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Street address","title":"Address"},"description":"Street address"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyReport"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/surrey/property/report/{roll_number}":{"get":{"summary":"Property Report","description":"Get consolidated property report: assessment + building permits + zoning + DLS.","operationId":"property_report_api_surrey_property_report__roll_number__get","parameters":[{"name":"roll_number","in":"path","required":true,"schema":{"type":"string","description":"Property roll number","title":"Roll Number"},"description":"Property roll number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyReport"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/surrey/property/batch":{"post":{"summary":"Get Properties Batch","description":"Get multiple properties by roll numbers in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of roll numbers.\nExample: {\"ids\": [\"123456789\", \"987654321\"]}\nMaximum 100 roll numbers per request.","operationId":"get_properties_batch_api_surrey_property_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Properties Batch Api Surrey Property Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/surrey/property/export":{"get":{"summary":"Export Properties","description":"Export property data as CSV or GeoJSON.\n\nSupports filtering by address, property type, and assessed value range.\nMaximum 10,000 records per export.","operationId":"export_properties_api_surrey_property_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Address filter","title":"Address"},"description":"Address filter"},{"name":"property_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property type filter","title":"Property Type"},"description":"Property type filter"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum assessed value","title":"Min Value"},"description":"Minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum assessed value","title":"Max Value"},"description":"Maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/surrey/census/profile":{"get":{"summary":"Get Census Profile","description":"Get census profile for a specific Dissemination Area.\n\nProvide either da_id directly, OR lat+lon to find the nearest DA automatically.","operationId":"get_census_profile_api_surrey_census_profile_get","parameters":[{"name":"da_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Dissemination Area ID (e.g., 48820001)","title":"Da Id"},"description":"Dissemination Area ID (e.g., 48820001)"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude for nearest-DA lookup","title":"Lat"},"description":"Latitude for nearest-DA lookup"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude for nearest-DA lookup","title":"Lon"},"description":"Longitude for nearest-DA lookup"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusProfile"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/surrey/census/batch":{"post":{"summary":"Get Census Batch","description":"Get multiple census profiles by DA IDs in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of DA IDs.\nExample: {\"ids\": [\"48820001\", \"48820002\"]}\nMaximum 100 DA IDs per request.","operationId":"get_census_batch_api_surrey_census_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Census Batch Api Surrey Census Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/surrey/census/export":{"get":{"summary":"Export Census","description":"Export census data as CSV.\n\nSupports filtering by population range and geography type.\nMaximum 10,000 records per export.","operationId":"export_census_api_surrey_census_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv only","default":"csv","title":"Format"},"description":"Export format: csv only"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"min_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Minimum population filter","title":"Min Population"},"description":"Minimum population filter"},{"name":"max_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Maximum population filter","title":"Max Population"},"description":"Maximum population filter"},{"name":"geography_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Geography type filter (DA, CT, CMA)","title":"Geography Type"},"description":"Geography type filter (DA, CT, CMA)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/surrey/census/list":{"get":{"summary":"List Census Profiles","description":"List all census profiles with pagination.\n\nUse this endpoint to browse available census profiles and discover valid DA IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_census_profiles_api_surrey_census_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Census Profiles Api Surrey Census List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/surrey/census/by-gps":{"get":{"summary":"Get Census By Gps","description":"Get census data for GPS coordinates.","operationId":"get_census_by_gps_api_surrey_census_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90,"minimum":-90,"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":180,"minimum":-180,"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/surrey/census/by-dls":{"get":{"summary":"Get Census By Dls","description":"Get census data for DLS coordinates.","operationId":"get_census_by_dls_api_surrey_census_by_dls_get","parameters":[{"name":"dls","in":"query","required":true,"schema":{"type":"string","description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)","title":"Dls"},"description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/surrey/census/map-data":{"get":{"summary":"Get Census Map Data","description":"Get lightweight DA points for choropleth map rendering.\n\nReturns centroid coordinates and key metrics (income, age, population,\nhousehold size, employment rate) for all DAs in the city.\nUsed by the census dashboard to render color-coded maps.","operationId":"get_census_map_data_api_surrey_census_map_data_get","parameters":[{"name":"year","in":"query","required":false,"schema":{"type":"integer","description":"Census year for DA map data","default":2021,"title":"Year"},"description":"Census year for DA map data"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/surrey/census/stats":{"get":{"summary":"Census Stats","description":"Get census data statistics.","operationId":"census_stats_api_surrey_census_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/surrey/census/compare":{"get":{"summary":"Census Compare","description":"Compare key census metrics across multiple years.\n\nReturns side-by-side comparison of population, households,\navg_income, median_age, density, and land_area for each requested year.\nYears without data return null for that year's values.","operationId":"census_compare_api_surrey_census_compare_get","parameters":[{"name":"years","in":"query","required":false,"schema":{"type":"string","description":"Comma-separated census years (e.g., 2016,2021)","default":"2021","title":"Years"},"description":"Comma-separated census years (e.g., 2016,2021)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/surrey/census/time-series":{"get":{"summary":"Census Timeseries","description":"Get year-by-year census trends for this city.\n\nReturns population, income, age, and household trends across all\navailable census years. Useful for spotting long-term demographic shifts.","operationId":"census_timeseries_api_surrey_census_time_series_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/surrey/geography/list":{"get":{"summary":"Geography List","description":"List geography boundaries for this city.","operationId":"geography_list_api_surrey_geography_list_get","parameters":[{"name":"type","in":"query","required":false,"schema":{"type":"string","title":"Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/surrey/geography/by-gps":{"get":{"summary":"Geography By Gps","description":"Find the geography boundary containing a GPS point.","operationId":"geography_by_gps_api_surrey_geography_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","title":"Lat"}},{"name":"lon","in":"query","required":true,"schema":{"type":"number","title":"Lon"}},{"name":"type","in":"query","required":false,"schema":{"type":"string","default":"DA","title":"Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/surrey/geography/stats":{"get":{"summary":"Geography Stats","description":"Get geography statistics for this city.","operationId":"geography_stats_api_surrey_geography_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/surrey/geography/{geoid}":{"get":{"summary":"Geography Boundary","description":"Get a specific geography boundary by geoid, including GeoJSON polygon.","operationId":"geography_boundary_api_surrey_geography__geoid__get","parameters":[{"name":"geoid","in":"path","required":true,"schema":{"type":"string","title":"Geoid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/surrey/census/rental/list":{"get":{"summary":"List Rental Prices","description":"List rental price records for this city, with optional unit type filter.","operationId":"list_rental_prices_api_surrey_census_rental_list_get","parameters":[{"name":"unit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":50,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalPriceListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/surrey/census/rental/trend":{"get":{"summary":"Get Rental Trend","description":"Get rental price time series for a specific unit type.","operationId":"get_rental_trend_api_surrey_census_rental_trend_get","parameters":[{"name":"unit_type","in":"query","required":true,"schema":{"type":"string","description":"Rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Rental unit type (e.g. 'Apartment - 1 bedroom')"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalTrendResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/surrey/census/rental/types":{"get":{"summary":"Get Rental Types","description":"Get available rental unit types for this city.","operationId":"get_rental_types_api_surrey_census_rental_types_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/surrey/zoning/by-gps":{"get":{"summary":"Get Zoning By Gps","description":"Get zoning district for GPS coordinates.","operationId":"get_zoning_by_gps_api_surrey_zoning_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZoningByGPSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/surrey/zoning/by-id/{district_id}":{"get":{"summary":"Get Zoning By Id","description":"Get a single zoning district by its numeric ID.","operationId":"get_zoning_by_id_api_surrey_zoning_by_id__district_id__get","parameters":[{"name":"district_id","in":"path","required":true,"schema":{"type":"integer","description":"Zoning district numeric ID","title":"District Id"},"description":"Zoning district numeric ID"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning By Id Api Surrey Zoning By Id  District Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/surrey/zoning/by-code/{code}":{"get":{"summary":"Get Zoning By Code","description":"Get all districts with a specific zone code.","operationId":"get_zoning_by_code_api_surrey_zoning_by_code__code__get","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","description":"Zone code (e.g., C-C1, R-G)","title":"Code"},"description":"Zone code (e.g., C-C1, R-G)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoningDistrict"},"title":"Response Get Zoning By Code Api Surrey Zoning By Code  Code  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/surrey/zoning/batch":{"post":{"summary":"Get Zoning Batch","description":"Get multiple zoning districts by zone codes in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of zone codes.\nExample: {\"ids\": [\"CR20-C20/R20\", \"C-C1\", \"R-G\"]}\nMaximum 100 zone codes per request.","operationId":"get_zoning_batch_api_surrey_zoning_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning Batch Api Surrey Zoning Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/surrey/zoning/list":{"get":{"summary":"List Zoning Districts","description":"List all zoning districts with pagination.\n\nUse this endpoint to browse available zoning districts and discover valid IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_zoning_districts_api_surrey_zoning_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Zoning Districts Api Surrey Zoning List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/surrey/zoning/codes":{"get":{"summary":"List Zone Codes","description":"List all zone codes with descriptions.","operationId":"list_zone_codes_api_surrey_zoning_codes_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"type":"string","description":"Filter by major category (e.g., Commercial, Residential)","title":"Category"},"description":"Filter by major category (e.g., Commercial, Residential)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoneCodeInfo"},"title":"Response List Zone Codes Api Surrey Zoning Codes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/surrey/zoning/stats":{"get":{"summary":"Zoning Stats","description":"Get zoning statistics.","operationId":"zoning_stats_api_surrey_zoning_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/surrey/zoning/export":{"get":{"summary":"Export Zoning","description":"Export zoning district data as CSV or GeoJSON.\n\nSupports filtering by zone code, category, and area range.\nMaximum 10,000 records per export.","operationId":"export_zoning_api_surrey_zoning_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"zone_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Zone code filter (e.g., CR2)","title":"Zone Code"},"description":"Zone code filter (e.g., CR2)"},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Major category filter","title":"Category"},"description":"Major category filter"},{"name":"min_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum area in sq km","title":"Min Area"},"description":"Minimum area in sq km"},{"name":"max_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum area in sq km","title":"Max Area"},"description":"Maximum area in sq km"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/surrey/permits/stats":{"get":{"summary":"Building Stats","description":"Get building permit statistics.","operationId":"building_stats_api_surrey_permits_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/surrey/permits/search":{"get":{"summary":"Search Building Permits","description":"Search building permits by address, contractor, applicant, permit number, and/or permit type.","operationId":"search_building_permits_api_surrey_permits_search_get","parameters":[{"name":"address","in":"query","required":false,"schema":{"type":"string","description":"Address to search","title":"Address"},"description":"Address to search"},{"name":"q","in":"query","required":false,"schema":{"type":"string","description":"General text search (address, contractor, applicant, permit #)","title":"Q"},"description":"General text search (address, contractor, applicant, permit #)"},{"name":"permit_type","in":"query","required":false,"schema":{"type":"string","description":"Filter by permit type","title":"Permit Type"},"description":"Filter by permit type"},{"name":"bbox","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bounding box: min_lon,min_lat,max_lon,max_lat","title":"Bbox"},"description":"Bounding box: min_lon,min_lat,max_lon,max_lat"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max results","default":20,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset","default":0,"title":"Offset"},"description":"Results offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/surrey/permits/nearby":{"get":{"summary":"Nearby Building Permits","description":"Coordinate-first alias for nearby building permits.","operationId":"nearby_building_permits_api_surrey_permits_nearby_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":84.0,"minimum":41.0,"description":"Canadian latitude","title":"Lat"},"description":"Canadian latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":-52.0,"minimum":-142.0,"description":"Canadian longitude","title":"Lon"},"description":"Canadian longitude"},{"name":"radius_m","in":"query","required":false,"schema":{"type":"integer","maximum":50000,"minimum":1,"default":1000,"title":"Radius M"}},{"name":"permit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Permit Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/surrey/permits/export":{"get":{"summary":"Export Building Permits","description":"Export building permit data as CSV or GeoJSON.\n\nSupports filtering by address, permit type, and date range.\nMaximum 10,000 records per export.","operationId":"export_building_permits_api_surrey_permits_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Address filter","title":"Address"},"description":"Address filter"},{"name":"permit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Permit type filter","title":"Permit Type"},"description":"Permit type filter"},{"name":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Start date (YYYY-MM-DD)","title":"Date From"},"description":"Start date (YYYY-MM-DD)"},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"End date (YYYY-MM-DD)","title":"Date To"},"description":"End date (YYYY-MM-DD)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/surrey/permits/recent":{"get":{"summary":"Recent Building Permits","description":"Get recent building permits sorted by application date (newest first).\n\nUse this to see where construction activity is happening right now.","operationId":"recent_building_permits_api_surrey_permits_recent_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Max results","default":20,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset","default":0,"title":"Offset"},"description":"Results offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/surrey/permits/batch":{"post":{"summary":"Get Building Permits Batch","description":"Get multiple building permits by permit numbers in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of permit numbers.\nExample: {\"ids\": [\"BP123456\", \"BP789012\"]}\nMaximum 100 permit numbers per request.","operationId":"get_building_permits_batch_api_surrey_permits_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Building Permits Batch Api Surrey Permits Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/surrey/permits/{permit_number}":{"get":{"summary":"Get Building Permit","description":"Get building permit details by permit number.\n\nServes HTML for browsers, JSON for API clients.","operationId":"get_building_permit_api_surrey_permits__permit_number__get","parameters":[{"name":"permit_number","in":"path","required":true,"schema":{"type":"string","description":"Permit number","title":"Permit Number"},"description":"Permit number"},{"name":"_city_name","in":"query","required":false,"schema":{"default":"Surrey","title":" City Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/surrey/health":{"get":{"summary":"City Health","description":"City-specific health check.","operationId":"city_health_api_surrey_health_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/abbotsford/entries/{kind}":{"get":{"summary":"List Entries","operationId":"list_entries_api_abbotsford_entries__kind__get","parameters":[{"name":"kind","in":"path","required":true,"schema":{"type":"string","description":"Canonical entry kind: property, permit, zoning, or safety","title":"Kind"},"description":"Canonical entry kind: property, permit, zoning, or safety"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"_services","in":"query","required":false,"schema":{"title":" Services"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Entries Api Abbotsford Entries  Kind  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/abbotsford/property/search":{"get":{"summary":"Search Property","description":"Search for properties by address, or browse all if no address specified.\nSupports sorting by assessed_value, address, year_built, community, or lot_size_sqft.\nSupports value range filtering with min_value and max_value.\n Supports property_type and year range filters.","operationId":"search_property_api_abbotsford_property_search_get","parameters":[{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Street address to search (omit to browse all)","title":"Address"},"description":"Street address to search (omit to browse all)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max results to return (up to 1000 for map browse)","default":10,"title":"Limit"},"description":"Max results to return (up to 1000 for map browse)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset for pagination","default":0,"title":"Offset"},"description":"Results offset for pagination"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft","title":"Sort By"},"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"asc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"},{"name":"property_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property type filter (e.g. RE, Residential)","title":"Property Type"},"description":"Property type filter (e.g. RE, Residential)"},{"name":"min_year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter: minimum year built","title":"Min Year"},"description":"Filter: minimum year built"},{"name":"max_year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter: maximum year built","title":"Max Year"},"description":"Filter: maximum year built"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertySearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/abbotsford/property/list":{"get":{"summary":"List Property","description":"List all properties with pagination, sorting, and value range filtering.\n\nUse this endpoint to browse available property records and discover valid roll numbers.\nReturns paginated results with total count for client-side pagination.\nSort by assessed_value with order=desc to find the most expensive properties.","operationId":"list_property_api_abbotsford_property_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft","title":"Sort By"},"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"asc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Property Api Abbotsford Property List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/abbotsford/property/geojson":{"get":{"summary":"Property Geojson","operationId":"property_geojson_api_abbotsford_property_geojson_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500000,"minimum":1,"description":"Max features to return (cap prevents browser overload for large cities)","default":50000,"title":"Limit"},"description":"Max features to return (cap prevents browser overload for large cities)"},{"name":"sw_lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport south-west latitude","title":"Sw Lat"},"description":"Viewport south-west latitude"},{"name":"sw_lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport south-west longitude","title":"Sw Lon"},"description":"Viewport south-west longitude"},{"name":"ne_lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport north-east latitude","title":"Ne Lat"},"description":"Viewport north-east latitude"},{"name":"ne_lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport north-east longitude","title":"Ne Lon"},"description":"Viewport north-east longitude"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Offset for pagination through viewport results (use with limit)","default":0,"title":"Offset"},"description":"Offset for pagination through viewport results (use with limit)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/abbotsford/property/top":{"get":{"summary":"Top Property","description":"Get top-N properties sorted by any numeric column.\n\nConvenience endpoint for AI agents and dashboards. Returns the top\nN properties sorted by the given column. Defaults to most expensive\n(assessed_value descending). Combine with min_value/max_value to\nfind e.g. the most expensive residential properties.","operationId":"top_property_api_abbotsford_property_top_get","parameters":[{"name":"n","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Number of top properties to return","default":10,"title":"N"},"description":"Number of top properties to return"},{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","description":"Sort column: assessed_value, year_built, lot_size_sqft","default":"assessed_value","title":"Sort By"},"description":"Sort column: assessed_value, year_built, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"desc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Top Property Api Abbotsford Property Top Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/abbotsford/property/stats":{"get":{"summary":"Property Stats","description":"Get property assessment statistics.","operationId":"property_stats_api_abbotsford_property_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/abbotsford/property/autocomplete":{"get":{"summary":"Property Autocomplete","description":"Get address and roll number suggestions for typeahead search.","operationId":"property_autocomplete_api_abbotsford_property_autocomplete_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"description":"Search query for address/roll number suggestions","title":"Q"},"description":"Search query for address/roll number suggestions"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":25,"minimum":1,"description":"Max suggestions to return","default":10,"title":"Limit"},"description":"Max suggestions to return"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/abbotsford/property/geocode":{"post":{"summary":"Property Geocode","description":"Geocode property addresses to lat/lon coordinates.\n\nAccepts a JSON body with 'addresses' (list of address strings, max 50).\nReturns cached results instantly; uncached addresses are geocoded via Nominatim.\n\nExample: {\"addresses\": [\"123 Main St\", \"456 Oak Ave\"]}","operationId":"property_geocode_api_abbotsford_property_geocode_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/abbotsford/property/by-dls":{"get":{"summary":"Get Property By Dls","description":"Get property assessment by DLS coordinates.","operationId":"get_property_by_dls_api_abbotsford_property_by_dls_get","parameters":[{"name":"quarter","in":"query","required":true,"schema":{"type":"string","description":"Quarter section (e.g., SW)","title":"Quarter"},"description":"Quarter section (e.g., SW)"},{"name":"section","in":"query","required":true,"schema":{"type":"integer","description":"Section number","title":"Section"},"description":"Section number"},{"name":"township","in":"query","required":true,"schema":{"type":"integer","description":"Township number","title":"Township"},"description":"Township number"},{"name":"range","in":"query","required":true,"schema":{"type":"integer","description":"Range number","title":"Range"},"description":"Range number"},{"name":"meridian","in":"query","required":true,"schema":{"type":"integer","description":"Meridian number","title":"Meridian"},"description":"Meridian number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyAssessment"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/abbotsford/property/by-gps":{"get":{"summary":"Get Property By Gps","description":"Find coordinate-bearing assessment records nearest a GPS point.\n\nResults are point-nearness matches unless the municipal source supplies\nparcel polygons; clients should not interpret proximity as legal parcel\ncontainment.","operationId":"get_property_by_gps_api_abbotsford_property_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":84.0,"minimum":41.0,"description":"Canadian latitude","title":"Lat"},"description":"Canadian latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":-52.0,"minimum":-142.0,"description":"Canadian longitude","title":"Lon"},"description":"Canadian longitude"},{"name":"radius_m","in":"query","required":false,"schema":{"type":"integer","maximum":5000,"minimum":1,"description":"Maximum point distance","default":100,"title":"Radius M"},"description":"Maximum point distance"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":10,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Property By Gps Api Abbotsford Property By Gps Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/abbotsford/property/by-roll/{roll_number}":{"get":{"summary":"Get Property By Roll","description":"Get property assessment by roll number.","operationId":"get_property_by_roll_api_abbotsford_property_by_roll__roll_number__get","parameters":[{"name":"roll_number","in":"path","required":true,"schema":{"type":"string","description":"Property roll number","title":"Roll Number"},"description":"Property roll number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyAssessment"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/abbotsford/property/report":{"get":{"summary":"Property Report Lookup","description":"Consolidated report by roll number, address, or GPS.","operationId":"property_report_lookup_api_abbotsford_property_report_get","parameters":[{"name":"roll_number","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property roll number","title":"Roll Number"},"description":"Property roll number"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Street address","title":"Address"},"description":"Street address"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyReport"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/abbotsford/property/report/{roll_number}":{"get":{"summary":"Property Report","description":"Get consolidated property report: assessment + building permits + zoning + DLS.","operationId":"property_report_api_abbotsford_property_report__roll_number__get","parameters":[{"name":"roll_number","in":"path","required":true,"schema":{"type":"string","description":"Property roll number","title":"Roll Number"},"description":"Property roll number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyReport"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/abbotsford/property/batch":{"post":{"summary":"Get Properties Batch","description":"Get multiple properties by roll numbers in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of roll numbers.\nExample: {\"ids\": [\"123456789\", \"987654321\"]}\nMaximum 100 roll numbers per request.","operationId":"get_properties_batch_api_abbotsford_property_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Properties Batch Api Abbotsford Property Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/abbotsford/property/export":{"get":{"summary":"Export Properties","description":"Export property data as CSV or GeoJSON.\n\nSupports filtering by address, property type, and assessed value range.\nMaximum 10,000 records per export.","operationId":"export_properties_api_abbotsford_property_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Address filter","title":"Address"},"description":"Address filter"},{"name":"property_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property type filter","title":"Property Type"},"description":"Property type filter"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum assessed value","title":"Min Value"},"description":"Minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum assessed value","title":"Max Value"},"description":"Maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/abbotsford/census/profile":{"get":{"summary":"Get Census Profile","description":"Get census profile for a specific Dissemination Area.\n\nProvide either da_id directly, OR lat+lon to find the nearest DA automatically.","operationId":"get_census_profile_api_abbotsford_census_profile_get","parameters":[{"name":"da_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Dissemination Area ID (e.g., 48820001)","title":"Da Id"},"description":"Dissemination Area ID (e.g., 48820001)"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude for nearest-DA lookup","title":"Lat"},"description":"Latitude for nearest-DA lookup"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude for nearest-DA lookup","title":"Lon"},"description":"Longitude for nearest-DA lookup"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusProfile"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/abbotsford/census/batch":{"post":{"summary":"Get Census Batch","description":"Get multiple census profiles by DA IDs in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of DA IDs.\nExample: {\"ids\": [\"48820001\", \"48820002\"]}\nMaximum 100 DA IDs per request.","operationId":"get_census_batch_api_abbotsford_census_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Census Batch Api Abbotsford Census Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/abbotsford/census/export":{"get":{"summary":"Export Census","description":"Export census data as CSV.\n\nSupports filtering by population range and geography type.\nMaximum 10,000 records per export.","operationId":"export_census_api_abbotsford_census_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv only","default":"csv","title":"Format"},"description":"Export format: csv only"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"min_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Minimum population filter","title":"Min Population"},"description":"Minimum population filter"},{"name":"max_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Maximum population filter","title":"Max Population"},"description":"Maximum population filter"},{"name":"geography_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Geography type filter (DA, CT, CMA)","title":"Geography Type"},"description":"Geography type filter (DA, CT, CMA)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/abbotsford/census/list":{"get":{"summary":"List Census Profiles","description":"List all census profiles with pagination.\n\nUse this endpoint to browse available census profiles and discover valid DA IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_census_profiles_api_abbotsford_census_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Census Profiles Api Abbotsford Census List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/abbotsford/census/by-gps":{"get":{"summary":"Get Census By Gps","description":"Get census data for GPS coordinates.","operationId":"get_census_by_gps_api_abbotsford_census_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90,"minimum":-90,"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":180,"minimum":-180,"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/abbotsford/census/by-dls":{"get":{"summary":"Get Census By Dls","description":"Get census data for DLS coordinates.","operationId":"get_census_by_dls_api_abbotsford_census_by_dls_get","parameters":[{"name":"dls","in":"query","required":true,"schema":{"type":"string","description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)","title":"Dls"},"description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/abbotsford/census/map-data":{"get":{"summary":"Get Census Map Data","description":"Get lightweight DA points for choropleth map rendering.\n\nReturns centroid coordinates and key metrics (income, age, population,\nhousehold size, employment rate) for all DAs in the city.\nUsed by the census dashboard to render color-coded maps.","operationId":"get_census_map_data_api_abbotsford_census_map_data_get","parameters":[{"name":"year","in":"query","required":false,"schema":{"type":"integer","description":"Census year for DA map data","default":2021,"title":"Year"},"description":"Census year for DA map data"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/abbotsford/census/stats":{"get":{"summary":"Census Stats","description":"Get census data statistics.","operationId":"census_stats_api_abbotsford_census_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/abbotsford/census/compare":{"get":{"summary":"Census Compare","description":"Compare key census metrics across multiple years.\n\nReturns side-by-side comparison of population, households,\navg_income, median_age, density, and land_area for each requested year.\nYears without data return null for that year's values.","operationId":"census_compare_api_abbotsford_census_compare_get","parameters":[{"name":"years","in":"query","required":false,"schema":{"type":"string","description":"Comma-separated census years (e.g., 2016,2021)","default":"2021","title":"Years"},"description":"Comma-separated census years (e.g., 2016,2021)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/abbotsford/census/time-series":{"get":{"summary":"Census Timeseries","description":"Get year-by-year census trends for this city.\n\nReturns population, income, age, and household trends across all\navailable census years. Useful for spotting long-term demographic shifts.","operationId":"census_timeseries_api_abbotsford_census_time_series_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/abbotsford/geography/list":{"get":{"summary":"Geography List","description":"List geography boundaries for this city.","operationId":"geography_list_api_abbotsford_geography_list_get","parameters":[{"name":"type","in":"query","required":false,"schema":{"type":"string","title":"Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/abbotsford/geography/by-gps":{"get":{"summary":"Geography By Gps","description":"Find the geography boundary containing a GPS point.","operationId":"geography_by_gps_api_abbotsford_geography_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","title":"Lat"}},{"name":"lon","in":"query","required":true,"schema":{"type":"number","title":"Lon"}},{"name":"type","in":"query","required":false,"schema":{"type":"string","default":"DA","title":"Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/abbotsford/geography/stats":{"get":{"summary":"Geography Stats","description":"Get geography statistics for this city.","operationId":"geography_stats_api_abbotsford_geography_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/abbotsford/geography/{geoid}":{"get":{"summary":"Geography Boundary","description":"Get a specific geography boundary by geoid, including GeoJSON polygon.","operationId":"geography_boundary_api_abbotsford_geography__geoid__get","parameters":[{"name":"geoid","in":"path","required":true,"schema":{"type":"string","title":"Geoid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/abbotsford/census/rental/list":{"get":{"summary":"List Rental Prices","description":"List rental price records for this city, with optional unit type filter.","operationId":"list_rental_prices_api_abbotsford_census_rental_list_get","parameters":[{"name":"unit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":50,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalPriceListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/abbotsford/census/rental/trend":{"get":{"summary":"Get Rental Trend","description":"Get rental price time series for a specific unit type.","operationId":"get_rental_trend_api_abbotsford_census_rental_trend_get","parameters":[{"name":"unit_type","in":"query","required":true,"schema":{"type":"string","description":"Rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Rental unit type (e.g. 'Apartment - 1 bedroom')"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalTrendResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/abbotsford/census/rental/types":{"get":{"summary":"Get Rental Types","description":"Get available rental unit types for this city.","operationId":"get_rental_types_api_abbotsford_census_rental_types_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/abbotsford/zoning/by-gps":{"get":{"summary":"Get Zoning By Gps","description":"Get zoning district for GPS coordinates.","operationId":"get_zoning_by_gps_api_abbotsford_zoning_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZoningByGPSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/abbotsford/zoning/by-id/{district_id}":{"get":{"summary":"Get Zoning By Id","description":"Get a single zoning district by its numeric ID.","operationId":"get_zoning_by_id_api_abbotsford_zoning_by_id__district_id__get","parameters":[{"name":"district_id","in":"path","required":true,"schema":{"type":"integer","description":"Zoning district numeric ID","title":"District Id"},"description":"Zoning district numeric ID"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning By Id Api Abbotsford Zoning By Id  District Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/abbotsford/zoning/by-code/{code}":{"get":{"summary":"Get Zoning By Code","description":"Get all districts with a specific zone code.","operationId":"get_zoning_by_code_api_abbotsford_zoning_by_code__code__get","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","description":"Zone code (e.g., C-C1, R-G)","title":"Code"},"description":"Zone code (e.g., C-C1, R-G)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoningDistrict"},"title":"Response Get Zoning By Code Api Abbotsford Zoning By Code  Code  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/abbotsford/zoning/batch":{"post":{"summary":"Get Zoning Batch","description":"Get multiple zoning districts by zone codes in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of zone codes.\nExample: {\"ids\": [\"CR20-C20/R20\", \"C-C1\", \"R-G\"]}\nMaximum 100 zone codes per request.","operationId":"get_zoning_batch_api_abbotsford_zoning_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning Batch Api Abbotsford Zoning Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/abbotsford/zoning/list":{"get":{"summary":"List Zoning Districts","description":"List all zoning districts with pagination.\n\nUse this endpoint to browse available zoning districts and discover valid IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_zoning_districts_api_abbotsford_zoning_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Zoning Districts Api Abbotsford Zoning List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/abbotsford/zoning/codes":{"get":{"summary":"List Zone Codes","description":"List all zone codes with descriptions.","operationId":"list_zone_codes_api_abbotsford_zoning_codes_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"type":"string","description":"Filter by major category (e.g., Commercial, Residential)","title":"Category"},"description":"Filter by major category (e.g., Commercial, Residential)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoneCodeInfo"},"title":"Response List Zone Codes Api Abbotsford Zoning Codes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/abbotsford/zoning/stats":{"get":{"summary":"Zoning Stats","description":"Get zoning statistics.","operationId":"zoning_stats_api_abbotsford_zoning_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/abbotsford/zoning/export":{"get":{"summary":"Export Zoning","description":"Export zoning district data as CSV or GeoJSON.\n\nSupports filtering by zone code, category, and area range.\nMaximum 10,000 records per export.","operationId":"export_zoning_api_abbotsford_zoning_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"zone_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Zone code filter (e.g., CR2)","title":"Zone Code"},"description":"Zone code filter (e.g., CR2)"},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Major category filter","title":"Category"},"description":"Major category filter"},{"name":"min_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum area in sq km","title":"Min Area"},"description":"Minimum area in sq km"},{"name":"max_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum area in sq km","title":"Max Area"},"description":"Maximum area in sq km"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/abbotsford/permits/stats":{"get":{"summary":"Building Stats","description":"Get building permit statistics.","operationId":"building_stats_api_abbotsford_permits_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/abbotsford/permits/search":{"get":{"summary":"Search Building Permits","description":"Search building permits by address, contractor, applicant, permit number, and/or permit type.","operationId":"search_building_permits_api_abbotsford_permits_search_get","parameters":[{"name":"address","in":"query","required":false,"schema":{"type":"string","description":"Address to search","title":"Address"},"description":"Address to search"},{"name":"q","in":"query","required":false,"schema":{"type":"string","description":"General text search (address, contractor, applicant, permit #)","title":"Q"},"description":"General text search (address, contractor, applicant, permit #)"},{"name":"permit_type","in":"query","required":false,"schema":{"type":"string","description":"Filter by permit type","title":"Permit Type"},"description":"Filter by permit type"},{"name":"bbox","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bounding box: min_lon,min_lat,max_lon,max_lat","title":"Bbox"},"description":"Bounding box: min_lon,min_lat,max_lon,max_lat"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max results","default":20,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset","default":0,"title":"Offset"},"description":"Results offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/abbotsford/permits/nearby":{"get":{"summary":"Nearby Building Permits","description":"Coordinate-first alias for nearby building permits.","operationId":"nearby_building_permits_api_abbotsford_permits_nearby_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":84.0,"minimum":41.0,"description":"Canadian latitude","title":"Lat"},"description":"Canadian latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":-52.0,"minimum":-142.0,"description":"Canadian longitude","title":"Lon"},"description":"Canadian longitude"},{"name":"radius_m","in":"query","required":false,"schema":{"type":"integer","maximum":50000,"minimum":1,"default":1000,"title":"Radius M"}},{"name":"permit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Permit Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/abbotsford/permits/export":{"get":{"summary":"Export Building Permits","description":"Export building permit data as CSV or GeoJSON.\n\nSupports filtering by address, permit type, and date range.\nMaximum 10,000 records per export.","operationId":"export_building_permits_api_abbotsford_permits_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Address filter","title":"Address"},"description":"Address filter"},{"name":"permit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Permit type filter","title":"Permit Type"},"description":"Permit type filter"},{"name":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Start date (YYYY-MM-DD)","title":"Date From"},"description":"Start date (YYYY-MM-DD)"},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"End date (YYYY-MM-DD)","title":"Date To"},"description":"End date (YYYY-MM-DD)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/abbotsford/permits/recent":{"get":{"summary":"Recent Building Permits","description":"Get recent building permits sorted by application date (newest first).\n\nUse this to see where construction activity is happening right now.","operationId":"recent_building_permits_api_abbotsford_permits_recent_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Max results","default":20,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset","default":0,"title":"Offset"},"description":"Results offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/abbotsford/permits/batch":{"post":{"summary":"Get Building Permits Batch","description":"Get multiple building permits by permit numbers in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of permit numbers.\nExample: {\"ids\": [\"BP123456\", \"BP789012\"]}\nMaximum 100 permit numbers per request.","operationId":"get_building_permits_batch_api_abbotsford_permits_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Building Permits Batch Api Abbotsford Permits Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/abbotsford/permits/{permit_number}":{"get":{"summary":"Get Building Permit","description":"Get building permit details by permit number.\n\nServes HTML for browsers, JSON for API clients.","operationId":"get_building_permit_api_abbotsford_permits__permit_number__get","parameters":[{"name":"permit_number","in":"path","required":true,"schema":{"type":"string","description":"Permit number","title":"Permit Number"},"description":"Permit number"},{"name":"_city_name","in":"query","required":false,"schema":{"default":"Abbotsford","title":" City Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/abbotsford/health":{"get":{"summary":"City Health","description":"City-specific health check.","operationId":"city_health_api_abbotsford_health_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/langley/entries/{kind}":{"get":{"summary":"List Entries","operationId":"list_entries_api_langley_entries__kind__get","parameters":[{"name":"kind","in":"path","required":true,"schema":{"type":"string","description":"Canonical entry kind: property, permit, zoning, or safety","title":"Kind"},"description":"Canonical entry kind: property, permit, zoning, or safety"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"_services","in":"query","required":false,"schema":{"title":" Services"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Entries Api Langley Entries  Kind  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/langley/property/search":{"get":{"summary":"Search Property","description":"Search for properties by address, or browse all if no address specified.\nSupports sorting by assessed_value, address, year_built, community, or lot_size_sqft.\nSupports value range filtering with min_value and max_value.\n Supports property_type and year range filters.","operationId":"search_property_api_langley_property_search_get","parameters":[{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Street address to search (omit to browse all)","title":"Address"},"description":"Street address to search (omit to browse all)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max results to return (up to 1000 for map browse)","default":10,"title":"Limit"},"description":"Max results to return (up to 1000 for map browse)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset for pagination","default":0,"title":"Offset"},"description":"Results offset for pagination"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft","title":"Sort By"},"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"asc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"},{"name":"property_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property type filter (e.g. RE, Residential)","title":"Property Type"},"description":"Property type filter (e.g. RE, Residential)"},{"name":"min_year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter: minimum year built","title":"Min Year"},"description":"Filter: minimum year built"},{"name":"max_year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter: maximum year built","title":"Max Year"},"description":"Filter: maximum year built"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertySearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/langley/property/list":{"get":{"summary":"List Property","description":"List all properties with pagination, sorting, and value range filtering.\n\nUse this endpoint to browse available property records and discover valid roll numbers.\nReturns paginated results with total count for client-side pagination.\nSort by assessed_value with order=desc to find the most expensive properties.","operationId":"list_property_api_langley_property_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft","title":"Sort By"},"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"asc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Property Api Langley Property List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/langley/property/geojson":{"get":{"summary":"Property Geojson","operationId":"property_geojson_api_langley_property_geojson_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500000,"minimum":1,"description":"Max features to return (cap prevents browser overload for large cities)","default":50000,"title":"Limit"},"description":"Max features to return (cap prevents browser overload for large cities)"},{"name":"sw_lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport south-west latitude","title":"Sw Lat"},"description":"Viewport south-west latitude"},{"name":"sw_lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport south-west longitude","title":"Sw Lon"},"description":"Viewport south-west longitude"},{"name":"ne_lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport north-east latitude","title":"Ne Lat"},"description":"Viewport north-east latitude"},{"name":"ne_lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport north-east longitude","title":"Ne Lon"},"description":"Viewport north-east longitude"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Offset for pagination through viewport results (use with limit)","default":0,"title":"Offset"},"description":"Offset for pagination through viewport results (use with limit)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/langley/property/top":{"get":{"summary":"Top Property","description":"Get top-N properties sorted by any numeric column.\n\nConvenience endpoint for AI agents and dashboards. Returns the top\nN properties sorted by the given column. Defaults to most expensive\n(assessed_value descending). Combine with min_value/max_value to\nfind e.g. the most expensive residential properties.","operationId":"top_property_api_langley_property_top_get","parameters":[{"name":"n","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Number of top properties to return","default":10,"title":"N"},"description":"Number of top properties to return"},{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","description":"Sort column: assessed_value, year_built, lot_size_sqft","default":"assessed_value","title":"Sort By"},"description":"Sort column: assessed_value, year_built, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"desc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Top Property Api Langley Property Top Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/langley/property/stats":{"get":{"summary":"Property Stats","description":"Get property assessment statistics.","operationId":"property_stats_api_langley_property_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/langley/property/autocomplete":{"get":{"summary":"Property Autocomplete","description":"Get address and roll number suggestions for typeahead search.","operationId":"property_autocomplete_api_langley_property_autocomplete_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"description":"Search query for address/roll number suggestions","title":"Q"},"description":"Search query for address/roll number suggestions"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":25,"minimum":1,"description":"Max suggestions to return","default":10,"title":"Limit"},"description":"Max suggestions to return"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/langley/property/geocode":{"post":{"summary":"Property Geocode","description":"Geocode property addresses to lat/lon coordinates.\n\nAccepts a JSON body with 'addresses' (list of address strings, max 50).\nReturns cached results instantly; uncached addresses are geocoded via Nominatim.\n\nExample: {\"addresses\": [\"123 Main St\", \"456 Oak Ave\"]}","operationId":"property_geocode_api_langley_property_geocode_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/langley/property/by-dls":{"get":{"summary":"Get Property By Dls","description":"Get property assessment by DLS coordinates.","operationId":"get_property_by_dls_api_langley_property_by_dls_get","parameters":[{"name":"quarter","in":"query","required":true,"schema":{"type":"string","description":"Quarter section (e.g., SW)","title":"Quarter"},"description":"Quarter section (e.g., SW)"},{"name":"section","in":"query","required":true,"schema":{"type":"integer","description":"Section number","title":"Section"},"description":"Section number"},{"name":"township","in":"query","required":true,"schema":{"type":"integer","description":"Township number","title":"Township"},"description":"Township number"},{"name":"range","in":"query","required":true,"schema":{"type":"integer","description":"Range number","title":"Range"},"description":"Range number"},{"name":"meridian","in":"query","required":true,"schema":{"type":"integer","description":"Meridian number","title":"Meridian"},"description":"Meridian number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyAssessment"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/langley/property/by-gps":{"get":{"summary":"Get Property By Gps","description":"Find coordinate-bearing assessment records nearest a GPS point.\n\nResults are point-nearness matches unless the municipal source supplies\nparcel polygons; clients should not interpret proximity as legal parcel\ncontainment.","operationId":"get_property_by_gps_api_langley_property_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":84.0,"minimum":41.0,"description":"Canadian latitude","title":"Lat"},"description":"Canadian latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":-52.0,"minimum":-142.0,"description":"Canadian longitude","title":"Lon"},"description":"Canadian longitude"},{"name":"radius_m","in":"query","required":false,"schema":{"type":"integer","maximum":5000,"minimum":1,"description":"Maximum point distance","default":100,"title":"Radius M"},"description":"Maximum point distance"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":10,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Property By Gps Api Langley Property By Gps Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/langley/property/by-roll/{roll_number}":{"get":{"summary":"Get Property By Roll","description":"Get property assessment by roll number.","operationId":"get_property_by_roll_api_langley_property_by_roll__roll_number__get","parameters":[{"name":"roll_number","in":"path","required":true,"schema":{"type":"string","description":"Property roll number","title":"Roll Number"},"description":"Property roll number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyAssessment"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/langley/property/report":{"get":{"summary":"Property Report Lookup","description":"Consolidated report by roll number, address, or GPS.","operationId":"property_report_lookup_api_langley_property_report_get","parameters":[{"name":"roll_number","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property roll number","title":"Roll Number"},"description":"Property roll number"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Street address","title":"Address"},"description":"Street address"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyReport"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/langley/property/report/{roll_number}":{"get":{"summary":"Property Report","description":"Get consolidated property report: assessment + building permits + zoning + DLS.","operationId":"property_report_api_langley_property_report__roll_number__get","parameters":[{"name":"roll_number","in":"path","required":true,"schema":{"type":"string","description":"Property roll number","title":"Roll Number"},"description":"Property roll number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyReport"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/langley/property/batch":{"post":{"summary":"Get Properties Batch","description":"Get multiple properties by roll numbers in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of roll numbers.\nExample: {\"ids\": [\"123456789\", \"987654321\"]}\nMaximum 100 roll numbers per request.","operationId":"get_properties_batch_api_langley_property_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Properties Batch Api Langley Property Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/langley/property/export":{"get":{"summary":"Export Properties","description":"Export property data as CSV or GeoJSON.\n\nSupports filtering by address, property type, and assessed value range.\nMaximum 10,000 records per export.","operationId":"export_properties_api_langley_property_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Address filter","title":"Address"},"description":"Address filter"},{"name":"property_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property type filter","title":"Property Type"},"description":"Property type filter"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum assessed value","title":"Min Value"},"description":"Minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum assessed value","title":"Max Value"},"description":"Maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/langley/census/profile":{"get":{"summary":"Get Census Profile","description":"Get census profile for a specific Dissemination Area.\n\nProvide either da_id directly, OR lat+lon to find the nearest DA automatically.","operationId":"get_census_profile_api_langley_census_profile_get","parameters":[{"name":"da_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Dissemination Area ID (e.g., 48820001)","title":"Da Id"},"description":"Dissemination Area ID (e.g., 48820001)"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude for nearest-DA lookup","title":"Lat"},"description":"Latitude for nearest-DA lookup"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude for nearest-DA lookup","title":"Lon"},"description":"Longitude for nearest-DA lookup"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusProfile"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/langley/census/batch":{"post":{"summary":"Get Census Batch","description":"Get multiple census profiles by DA IDs in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of DA IDs.\nExample: {\"ids\": [\"48820001\", \"48820002\"]}\nMaximum 100 DA IDs per request.","operationId":"get_census_batch_api_langley_census_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Census Batch Api Langley Census Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/langley/census/export":{"get":{"summary":"Export Census","description":"Export census data as CSV.\n\nSupports filtering by population range and geography type.\nMaximum 10,000 records per export.","operationId":"export_census_api_langley_census_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv only","default":"csv","title":"Format"},"description":"Export format: csv only"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"min_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Minimum population filter","title":"Min Population"},"description":"Minimum population filter"},{"name":"max_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Maximum population filter","title":"Max Population"},"description":"Maximum population filter"},{"name":"geography_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Geography type filter (DA, CT, CMA)","title":"Geography Type"},"description":"Geography type filter (DA, CT, CMA)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/langley/census/list":{"get":{"summary":"List Census Profiles","description":"List all census profiles with pagination.\n\nUse this endpoint to browse available census profiles and discover valid DA IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_census_profiles_api_langley_census_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Census Profiles Api Langley Census List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/langley/census/by-gps":{"get":{"summary":"Get Census By Gps","description":"Get census data for GPS coordinates.","operationId":"get_census_by_gps_api_langley_census_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90,"minimum":-90,"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":180,"minimum":-180,"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/langley/census/by-dls":{"get":{"summary":"Get Census By Dls","description":"Get census data for DLS coordinates.","operationId":"get_census_by_dls_api_langley_census_by_dls_get","parameters":[{"name":"dls","in":"query","required":true,"schema":{"type":"string","description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)","title":"Dls"},"description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/langley/census/map-data":{"get":{"summary":"Get Census Map Data","description":"Get lightweight DA points for choropleth map rendering.\n\nReturns centroid coordinates and key metrics (income, age, population,\nhousehold size, employment rate) for all DAs in the city.\nUsed by the census dashboard to render color-coded maps.","operationId":"get_census_map_data_api_langley_census_map_data_get","parameters":[{"name":"year","in":"query","required":false,"schema":{"type":"integer","description":"Census year for DA map data","default":2021,"title":"Year"},"description":"Census year for DA map data"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/langley/census/stats":{"get":{"summary":"Census Stats","description":"Get census data statistics.","operationId":"census_stats_api_langley_census_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/langley/census/compare":{"get":{"summary":"Census Compare","description":"Compare key census metrics across multiple years.\n\nReturns side-by-side comparison of population, households,\navg_income, median_age, density, and land_area for each requested year.\nYears without data return null for that year's values.","operationId":"census_compare_api_langley_census_compare_get","parameters":[{"name":"years","in":"query","required":false,"schema":{"type":"string","description":"Comma-separated census years (e.g., 2016,2021)","default":"2021","title":"Years"},"description":"Comma-separated census years (e.g., 2016,2021)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/langley/census/time-series":{"get":{"summary":"Census Timeseries","description":"Get year-by-year census trends for this city.\n\nReturns population, income, age, and household trends across all\navailable census years. Useful for spotting long-term demographic shifts.","operationId":"census_timeseries_api_langley_census_time_series_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/langley/geography/list":{"get":{"summary":"Geography List","description":"List geography boundaries for this city.","operationId":"geography_list_api_langley_geography_list_get","parameters":[{"name":"type","in":"query","required":false,"schema":{"type":"string","title":"Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/langley/geography/by-gps":{"get":{"summary":"Geography By Gps","description":"Find the geography boundary containing a GPS point.","operationId":"geography_by_gps_api_langley_geography_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","title":"Lat"}},{"name":"lon","in":"query","required":true,"schema":{"type":"number","title":"Lon"}},{"name":"type","in":"query","required":false,"schema":{"type":"string","default":"DA","title":"Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/langley/geography/stats":{"get":{"summary":"Geography Stats","description":"Get geography statistics for this city.","operationId":"geography_stats_api_langley_geography_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/langley/geography/{geoid}":{"get":{"summary":"Geography Boundary","description":"Get a specific geography boundary by geoid, including GeoJSON polygon.","operationId":"geography_boundary_api_langley_geography__geoid__get","parameters":[{"name":"geoid","in":"path","required":true,"schema":{"type":"string","title":"Geoid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/langley/census/rental/list":{"get":{"summary":"List Rental Prices","description":"List rental price records for this city, with optional unit type filter.","operationId":"list_rental_prices_api_langley_census_rental_list_get","parameters":[{"name":"unit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":50,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalPriceListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/langley/census/rental/trend":{"get":{"summary":"Get Rental Trend","description":"Get rental price time series for a specific unit type.","operationId":"get_rental_trend_api_langley_census_rental_trend_get","parameters":[{"name":"unit_type","in":"query","required":true,"schema":{"type":"string","description":"Rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Rental unit type (e.g. 'Apartment - 1 bedroom')"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalTrendResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/langley/census/rental/types":{"get":{"summary":"Get Rental Types","description":"Get available rental unit types for this city.","operationId":"get_rental_types_api_langley_census_rental_types_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/langley/zoning/by-gps":{"get":{"summary":"Get Zoning By Gps","description":"Get zoning district for GPS coordinates.","operationId":"get_zoning_by_gps_api_langley_zoning_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZoningByGPSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/langley/zoning/by-id/{district_id}":{"get":{"summary":"Get Zoning By Id","description":"Get a single zoning district by its numeric ID.","operationId":"get_zoning_by_id_api_langley_zoning_by_id__district_id__get","parameters":[{"name":"district_id","in":"path","required":true,"schema":{"type":"integer","description":"Zoning district numeric ID","title":"District Id"},"description":"Zoning district numeric ID"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning By Id Api Langley Zoning By Id  District Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/langley/zoning/by-code/{code}":{"get":{"summary":"Get Zoning By Code","description":"Get all districts with a specific zone code.","operationId":"get_zoning_by_code_api_langley_zoning_by_code__code__get","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","description":"Zone code (e.g., C-C1, R-G)","title":"Code"},"description":"Zone code (e.g., C-C1, R-G)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoningDistrict"},"title":"Response Get Zoning By Code Api Langley Zoning By Code  Code  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/langley/zoning/batch":{"post":{"summary":"Get Zoning Batch","description":"Get multiple zoning districts by zone codes in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of zone codes.\nExample: {\"ids\": [\"CR20-C20/R20\", \"C-C1\", \"R-G\"]}\nMaximum 100 zone codes per request.","operationId":"get_zoning_batch_api_langley_zoning_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning Batch Api Langley Zoning Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/langley/zoning/list":{"get":{"summary":"List Zoning Districts","description":"List all zoning districts with pagination.\n\nUse this endpoint to browse available zoning districts and discover valid IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_zoning_districts_api_langley_zoning_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Zoning Districts Api Langley Zoning List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/langley/zoning/codes":{"get":{"summary":"List Zone Codes","description":"List all zone codes with descriptions.","operationId":"list_zone_codes_api_langley_zoning_codes_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"type":"string","description":"Filter by major category (e.g., Commercial, Residential)","title":"Category"},"description":"Filter by major category (e.g., Commercial, Residential)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoneCodeInfo"},"title":"Response List Zone Codes Api Langley Zoning Codes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/langley/zoning/stats":{"get":{"summary":"Zoning Stats","description":"Get zoning statistics.","operationId":"zoning_stats_api_langley_zoning_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/langley/zoning/export":{"get":{"summary":"Export Zoning","description":"Export zoning district data as CSV or GeoJSON.\n\nSupports filtering by zone code, category, and area range.\nMaximum 10,000 records per export.","operationId":"export_zoning_api_langley_zoning_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"zone_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Zone code filter (e.g., CR2)","title":"Zone Code"},"description":"Zone code filter (e.g., CR2)"},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Major category filter","title":"Category"},"description":"Major category filter"},{"name":"min_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum area in sq km","title":"Min Area"},"description":"Minimum area in sq km"},{"name":"max_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum area in sq km","title":"Max Area"},"description":"Maximum area in sq km"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/langley/health":{"get":{"summary":"City Health","description":"City-specific health check.","operationId":"city_health_api_langley_health_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/burnaby/entries/{kind}":{"get":{"summary":"List Entries","operationId":"list_entries_api_burnaby_entries__kind__get","parameters":[{"name":"kind","in":"path","required":true,"schema":{"type":"string","description":"Canonical entry kind: property, permit, zoning, or safety","title":"Kind"},"description":"Canonical entry kind: property, permit, zoning, or safety"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"_services","in":"query","required":false,"schema":{"title":" Services"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Entries Api Burnaby Entries  Kind  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/burnaby/census/profile":{"get":{"summary":"Get Census Profile","description":"Get census profile for a specific Dissemination Area.\n\nProvide either da_id directly, OR lat+lon to find the nearest DA automatically.","operationId":"get_census_profile_api_burnaby_census_profile_get","parameters":[{"name":"da_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Dissemination Area ID (e.g., 48820001)","title":"Da Id"},"description":"Dissemination Area ID (e.g., 48820001)"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude for nearest-DA lookup","title":"Lat"},"description":"Latitude for nearest-DA lookup"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude for nearest-DA lookup","title":"Lon"},"description":"Longitude for nearest-DA lookup"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusProfile"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/burnaby/census/batch":{"post":{"summary":"Get Census Batch","description":"Get multiple census profiles by DA IDs in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of DA IDs.\nExample: {\"ids\": [\"48820001\", \"48820002\"]}\nMaximum 100 DA IDs per request.","operationId":"get_census_batch_api_burnaby_census_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Census Batch Api Burnaby Census Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/burnaby/census/export":{"get":{"summary":"Export Census","description":"Export census data as CSV.\n\nSupports filtering by population range and geography type.\nMaximum 10,000 records per export.","operationId":"export_census_api_burnaby_census_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv only","default":"csv","title":"Format"},"description":"Export format: csv only"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"min_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Minimum population filter","title":"Min Population"},"description":"Minimum population filter"},{"name":"max_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Maximum population filter","title":"Max Population"},"description":"Maximum population filter"},{"name":"geography_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Geography type filter (DA, CT, CMA)","title":"Geography Type"},"description":"Geography type filter (DA, CT, CMA)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/burnaby/census/list":{"get":{"summary":"List Census Profiles","description":"List all census profiles with pagination.\n\nUse this endpoint to browse available census profiles and discover valid DA IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_census_profiles_api_burnaby_census_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Census Profiles Api Burnaby Census List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/burnaby/census/by-gps":{"get":{"summary":"Get Census By Gps","description":"Get census data for GPS coordinates.","operationId":"get_census_by_gps_api_burnaby_census_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90,"minimum":-90,"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":180,"minimum":-180,"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/burnaby/census/by-dls":{"get":{"summary":"Get Census By Dls","description":"Get census data for DLS coordinates.","operationId":"get_census_by_dls_api_burnaby_census_by_dls_get","parameters":[{"name":"dls","in":"query","required":true,"schema":{"type":"string","description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)","title":"Dls"},"description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/burnaby/census/map-data":{"get":{"summary":"Get Census Map Data","description":"Get lightweight DA points for choropleth map rendering.\n\nReturns centroid coordinates and key metrics (income, age, population,\nhousehold size, employment rate) for all DAs in the city.\nUsed by the census dashboard to render color-coded maps.","operationId":"get_census_map_data_api_burnaby_census_map_data_get","parameters":[{"name":"year","in":"query","required":false,"schema":{"type":"integer","description":"Census year for DA map data","default":2021,"title":"Year"},"description":"Census year for DA map data"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/burnaby/census/stats":{"get":{"summary":"Census Stats","description":"Get census data statistics.","operationId":"census_stats_api_burnaby_census_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/burnaby/census/compare":{"get":{"summary":"Census Compare","description":"Compare key census metrics across multiple years.\n\nReturns side-by-side comparison of population, households,\navg_income, median_age, density, and land_area for each requested year.\nYears without data return null for that year's values.","operationId":"census_compare_api_burnaby_census_compare_get","parameters":[{"name":"years","in":"query","required":false,"schema":{"type":"string","description":"Comma-separated census years (e.g., 2016,2021)","default":"2021","title":"Years"},"description":"Comma-separated census years (e.g., 2016,2021)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/burnaby/census/time-series":{"get":{"summary":"Census Timeseries","description":"Get year-by-year census trends for this city.\n\nReturns population, income, age, and household trends across all\navailable census years. Useful for spotting long-term demographic shifts.","operationId":"census_timeseries_api_burnaby_census_time_series_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/burnaby/geography/list":{"get":{"summary":"Geography List","description":"List geography boundaries for this city.","operationId":"geography_list_api_burnaby_geography_list_get","parameters":[{"name":"type","in":"query","required":false,"schema":{"type":"string","title":"Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/burnaby/geography/by-gps":{"get":{"summary":"Geography By Gps","description":"Find the geography boundary containing a GPS point.","operationId":"geography_by_gps_api_burnaby_geography_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","title":"Lat"}},{"name":"lon","in":"query","required":true,"schema":{"type":"number","title":"Lon"}},{"name":"type","in":"query","required":false,"schema":{"type":"string","default":"DA","title":"Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/burnaby/geography/stats":{"get":{"summary":"Geography Stats","description":"Get geography statistics for this city.","operationId":"geography_stats_api_burnaby_geography_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/burnaby/geography/{geoid}":{"get":{"summary":"Geography Boundary","description":"Get a specific geography boundary by geoid, including GeoJSON polygon.","operationId":"geography_boundary_api_burnaby_geography__geoid__get","parameters":[{"name":"geoid","in":"path","required":true,"schema":{"type":"string","title":"Geoid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/burnaby/census/rental/list":{"get":{"summary":"List Rental Prices","description":"List rental price records for this city, with optional unit type filter.","operationId":"list_rental_prices_api_burnaby_census_rental_list_get","parameters":[{"name":"unit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":50,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalPriceListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/burnaby/census/rental/trend":{"get":{"summary":"Get Rental Trend","description":"Get rental price time series for a specific unit type.","operationId":"get_rental_trend_api_burnaby_census_rental_trend_get","parameters":[{"name":"unit_type","in":"query","required":true,"schema":{"type":"string","description":"Rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Rental unit type (e.g. 'Apartment - 1 bedroom')"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalTrendResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/burnaby/census/rental/types":{"get":{"summary":"Get Rental Types","description":"Get available rental unit types for this city.","operationId":"get_rental_types_api_burnaby_census_rental_types_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/burnaby/zoning/by-gps":{"get":{"summary":"Get Zoning By Gps","description":"Get zoning district for GPS coordinates.","operationId":"get_zoning_by_gps_api_burnaby_zoning_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZoningByGPSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/burnaby/zoning/by-id/{district_id}":{"get":{"summary":"Get Zoning By Id","description":"Get a single zoning district by its numeric ID.","operationId":"get_zoning_by_id_api_burnaby_zoning_by_id__district_id__get","parameters":[{"name":"district_id","in":"path","required":true,"schema":{"type":"integer","description":"Zoning district numeric ID","title":"District Id"},"description":"Zoning district numeric ID"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning By Id Api Burnaby Zoning By Id  District Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/burnaby/zoning/by-code/{code}":{"get":{"summary":"Get Zoning By Code","description":"Get all districts with a specific zone code.","operationId":"get_zoning_by_code_api_burnaby_zoning_by_code__code__get","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","description":"Zone code (e.g., C-C1, R-G)","title":"Code"},"description":"Zone code (e.g., C-C1, R-G)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoningDistrict"},"title":"Response Get Zoning By Code Api Burnaby Zoning By Code  Code  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/burnaby/zoning/batch":{"post":{"summary":"Get Zoning Batch","description":"Get multiple zoning districts by zone codes in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of zone codes.\nExample: {\"ids\": [\"CR20-C20/R20\", \"C-C1\", \"R-G\"]}\nMaximum 100 zone codes per request.","operationId":"get_zoning_batch_api_burnaby_zoning_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning Batch Api Burnaby Zoning Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/burnaby/zoning/list":{"get":{"summary":"List Zoning Districts","description":"List all zoning districts with pagination.\n\nUse this endpoint to browse available zoning districts and discover valid IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_zoning_districts_api_burnaby_zoning_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Zoning Districts Api Burnaby Zoning List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/burnaby/zoning/codes":{"get":{"summary":"List Zone Codes","description":"List all zone codes with descriptions.","operationId":"list_zone_codes_api_burnaby_zoning_codes_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"type":"string","description":"Filter by major category (e.g., Commercial, Residential)","title":"Category"},"description":"Filter by major category (e.g., Commercial, Residential)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoneCodeInfo"},"title":"Response List Zone Codes Api Burnaby Zoning Codes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/burnaby/zoning/stats":{"get":{"summary":"Zoning Stats","description":"Get zoning statistics.","operationId":"zoning_stats_api_burnaby_zoning_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/burnaby/zoning/export":{"get":{"summary":"Export Zoning","description":"Export zoning district data as CSV or GeoJSON.\n\nSupports filtering by zone code, category, and area range.\nMaximum 10,000 records per export.","operationId":"export_zoning_api_burnaby_zoning_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"zone_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Zone code filter (e.g., CR2)","title":"Zone Code"},"description":"Zone code filter (e.g., CR2)"},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Major category filter","title":"Category"},"description":"Major category filter"},{"name":"min_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum area in sq km","title":"Min Area"},"description":"Minimum area in sq km"},{"name":"max_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum area in sq km","title":"Max Area"},"description":"Maximum area in sq km"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/burnaby/health":{"get":{"summary":"City Health","description":"City-specific health check.","operationId":"city_health_api_burnaby_health_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/coquitlam/entries/{kind}":{"get":{"summary":"List Entries","operationId":"list_entries_api_coquitlam_entries__kind__get","parameters":[{"name":"kind","in":"path","required":true,"schema":{"type":"string","description":"Canonical entry kind: property, permit, zoning, or safety","title":"Kind"},"description":"Canonical entry kind: property, permit, zoning, or safety"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"_services","in":"query","required":false,"schema":{"title":" Services"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Entries Api Coquitlam Entries  Kind  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/coquitlam/census/profile":{"get":{"summary":"Get Census Profile","description":"Get census profile for a specific Dissemination Area.\n\nProvide either da_id directly, OR lat+lon to find the nearest DA automatically.","operationId":"get_census_profile_api_coquitlam_census_profile_get","parameters":[{"name":"da_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Dissemination Area ID (e.g., 48820001)","title":"Da Id"},"description":"Dissemination Area ID (e.g., 48820001)"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude for nearest-DA lookup","title":"Lat"},"description":"Latitude for nearest-DA lookup"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude for nearest-DA lookup","title":"Lon"},"description":"Longitude for nearest-DA lookup"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusProfile"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/coquitlam/census/batch":{"post":{"summary":"Get Census Batch","description":"Get multiple census profiles by DA IDs in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of DA IDs.\nExample: {\"ids\": [\"48820001\", \"48820002\"]}\nMaximum 100 DA IDs per request.","operationId":"get_census_batch_api_coquitlam_census_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Census Batch Api Coquitlam Census Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/coquitlam/census/export":{"get":{"summary":"Export Census","description":"Export census data as CSV.\n\nSupports filtering by population range and geography type.\nMaximum 10,000 records per export.","operationId":"export_census_api_coquitlam_census_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv only","default":"csv","title":"Format"},"description":"Export format: csv only"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"min_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Minimum population filter","title":"Min Population"},"description":"Minimum population filter"},{"name":"max_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Maximum population filter","title":"Max Population"},"description":"Maximum population filter"},{"name":"geography_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Geography type filter (DA, CT, CMA)","title":"Geography Type"},"description":"Geography type filter (DA, CT, CMA)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/coquitlam/census/list":{"get":{"summary":"List Census Profiles","description":"List all census profiles with pagination.\n\nUse this endpoint to browse available census profiles and discover valid DA IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_census_profiles_api_coquitlam_census_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Census Profiles Api Coquitlam Census List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/coquitlam/census/by-gps":{"get":{"summary":"Get Census By Gps","description":"Get census data for GPS coordinates.","operationId":"get_census_by_gps_api_coquitlam_census_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90,"minimum":-90,"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":180,"minimum":-180,"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/coquitlam/census/by-dls":{"get":{"summary":"Get Census By Dls","description":"Get census data for DLS coordinates.","operationId":"get_census_by_dls_api_coquitlam_census_by_dls_get","parameters":[{"name":"dls","in":"query","required":true,"schema":{"type":"string","description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)","title":"Dls"},"description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/coquitlam/census/map-data":{"get":{"summary":"Get Census Map Data","description":"Get lightweight DA points for choropleth map rendering.\n\nReturns centroid coordinates and key metrics (income, age, population,\nhousehold size, employment rate) for all DAs in the city.\nUsed by the census dashboard to render color-coded maps.","operationId":"get_census_map_data_api_coquitlam_census_map_data_get","parameters":[{"name":"year","in":"query","required":false,"schema":{"type":"integer","description":"Census year for DA map data","default":2021,"title":"Year"},"description":"Census year for DA map data"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/coquitlam/census/stats":{"get":{"summary":"Census Stats","description":"Get census data statistics.","operationId":"census_stats_api_coquitlam_census_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/coquitlam/census/compare":{"get":{"summary":"Census Compare","description":"Compare key census metrics across multiple years.\n\nReturns side-by-side comparison of population, households,\navg_income, median_age, density, and land_area for each requested year.\nYears without data return null for that year's values.","operationId":"census_compare_api_coquitlam_census_compare_get","parameters":[{"name":"years","in":"query","required":false,"schema":{"type":"string","description":"Comma-separated census years (e.g., 2016,2021)","default":"2021","title":"Years"},"description":"Comma-separated census years (e.g., 2016,2021)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/coquitlam/census/time-series":{"get":{"summary":"Census Timeseries","description":"Get year-by-year census trends for this city.\n\nReturns population, income, age, and household trends across all\navailable census years. Useful for spotting long-term demographic shifts.","operationId":"census_timeseries_api_coquitlam_census_time_series_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/coquitlam/geography/list":{"get":{"summary":"Geography List","description":"List geography boundaries for this city.","operationId":"geography_list_api_coquitlam_geography_list_get","parameters":[{"name":"type","in":"query","required":false,"schema":{"type":"string","title":"Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/coquitlam/geography/by-gps":{"get":{"summary":"Geography By Gps","description":"Find the geography boundary containing a GPS point.","operationId":"geography_by_gps_api_coquitlam_geography_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","title":"Lat"}},{"name":"lon","in":"query","required":true,"schema":{"type":"number","title":"Lon"}},{"name":"type","in":"query","required":false,"schema":{"type":"string","default":"DA","title":"Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/coquitlam/geography/stats":{"get":{"summary":"Geography Stats","description":"Get geography statistics for this city.","operationId":"geography_stats_api_coquitlam_geography_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/coquitlam/geography/{geoid}":{"get":{"summary":"Geography Boundary","description":"Get a specific geography boundary by geoid, including GeoJSON polygon.","operationId":"geography_boundary_api_coquitlam_geography__geoid__get","parameters":[{"name":"geoid","in":"path","required":true,"schema":{"type":"string","title":"Geoid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/coquitlam/census/rental/list":{"get":{"summary":"List Rental Prices","description":"List rental price records for this city, with optional unit type filter.","operationId":"list_rental_prices_api_coquitlam_census_rental_list_get","parameters":[{"name":"unit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":50,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalPriceListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/coquitlam/census/rental/trend":{"get":{"summary":"Get Rental Trend","description":"Get rental price time series for a specific unit type.","operationId":"get_rental_trend_api_coquitlam_census_rental_trend_get","parameters":[{"name":"unit_type","in":"query","required":true,"schema":{"type":"string","description":"Rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Rental unit type (e.g. 'Apartment - 1 bedroom')"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalTrendResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/coquitlam/census/rental/types":{"get":{"summary":"Get Rental Types","description":"Get available rental unit types for this city.","operationId":"get_rental_types_api_coquitlam_census_rental_types_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/coquitlam/zoning/by-gps":{"get":{"summary":"Get Zoning By Gps","description":"Get zoning district for GPS coordinates.","operationId":"get_zoning_by_gps_api_coquitlam_zoning_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZoningByGPSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/coquitlam/zoning/by-id/{district_id}":{"get":{"summary":"Get Zoning By Id","description":"Get a single zoning district by its numeric ID.","operationId":"get_zoning_by_id_api_coquitlam_zoning_by_id__district_id__get","parameters":[{"name":"district_id","in":"path","required":true,"schema":{"type":"integer","description":"Zoning district numeric ID","title":"District Id"},"description":"Zoning district numeric ID"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning By Id Api Coquitlam Zoning By Id  District Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/coquitlam/zoning/by-code/{code}":{"get":{"summary":"Get Zoning By Code","description":"Get all districts with a specific zone code.","operationId":"get_zoning_by_code_api_coquitlam_zoning_by_code__code__get","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","description":"Zone code (e.g., C-C1, R-G)","title":"Code"},"description":"Zone code (e.g., C-C1, R-G)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoningDistrict"},"title":"Response Get Zoning By Code Api Coquitlam Zoning By Code  Code  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/coquitlam/zoning/batch":{"post":{"summary":"Get Zoning Batch","description":"Get multiple zoning districts by zone codes in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of zone codes.\nExample: {\"ids\": [\"CR20-C20/R20\", \"C-C1\", \"R-G\"]}\nMaximum 100 zone codes per request.","operationId":"get_zoning_batch_api_coquitlam_zoning_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning Batch Api Coquitlam Zoning Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/coquitlam/zoning/list":{"get":{"summary":"List Zoning Districts","description":"List all zoning districts with pagination.\n\nUse this endpoint to browse available zoning districts and discover valid IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_zoning_districts_api_coquitlam_zoning_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Zoning Districts Api Coquitlam Zoning List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/coquitlam/zoning/codes":{"get":{"summary":"List Zone Codes","description":"List all zone codes with descriptions.","operationId":"list_zone_codes_api_coquitlam_zoning_codes_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"type":"string","description":"Filter by major category (e.g., Commercial, Residential)","title":"Category"},"description":"Filter by major category (e.g., Commercial, Residential)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoneCodeInfo"},"title":"Response List Zone Codes Api Coquitlam Zoning Codes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/coquitlam/zoning/stats":{"get":{"summary":"Zoning Stats","description":"Get zoning statistics.","operationId":"zoning_stats_api_coquitlam_zoning_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/coquitlam/zoning/export":{"get":{"summary":"Export Zoning","description":"Export zoning district data as CSV or GeoJSON.\n\nSupports filtering by zone code, category, and area range.\nMaximum 10,000 records per export.","operationId":"export_zoning_api_coquitlam_zoning_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"zone_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Zone code filter (e.g., CR2)","title":"Zone Code"},"description":"Zone code filter (e.g., CR2)"},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Major category filter","title":"Category"},"description":"Major category filter"},{"name":"min_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum area in sq km","title":"Min Area"},"description":"Minimum area in sq km"},{"name":"max_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum area in sq km","title":"Max Area"},"description":"Maximum area in sq km"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/coquitlam/permits/stats":{"get":{"summary":"Building Stats","description":"Get building permit statistics.","operationId":"building_stats_api_coquitlam_permits_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/coquitlam/permits/search":{"get":{"summary":"Search Building Permits","description":"Search building permits by address, contractor, applicant, permit number, and/or permit type.","operationId":"search_building_permits_api_coquitlam_permits_search_get","parameters":[{"name":"address","in":"query","required":false,"schema":{"type":"string","description":"Address to search","title":"Address"},"description":"Address to search"},{"name":"q","in":"query","required":false,"schema":{"type":"string","description":"General text search (address, contractor, applicant, permit #)","title":"Q"},"description":"General text search (address, contractor, applicant, permit #)"},{"name":"permit_type","in":"query","required":false,"schema":{"type":"string","description":"Filter by permit type","title":"Permit Type"},"description":"Filter by permit type"},{"name":"bbox","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bounding box: min_lon,min_lat,max_lon,max_lat","title":"Bbox"},"description":"Bounding box: min_lon,min_lat,max_lon,max_lat"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max results","default":20,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset","default":0,"title":"Offset"},"description":"Results offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/coquitlam/permits/nearby":{"get":{"summary":"Nearby Building Permits","description":"Coordinate-first alias for nearby building permits.","operationId":"nearby_building_permits_api_coquitlam_permits_nearby_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":84.0,"minimum":41.0,"description":"Canadian latitude","title":"Lat"},"description":"Canadian latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":-52.0,"minimum":-142.0,"description":"Canadian longitude","title":"Lon"},"description":"Canadian longitude"},{"name":"radius_m","in":"query","required":false,"schema":{"type":"integer","maximum":50000,"minimum":1,"default":1000,"title":"Radius M"}},{"name":"permit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Permit Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/coquitlam/permits/export":{"get":{"summary":"Export Building Permits","description":"Export building permit data as CSV or GeoJSON.\n\nSupports filtering by address, permit type, and date range.\nMaximum 10,000 records per export.","operationId":"export_building_permits_api_coquitlam_permits_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Address filter","title":"Address"},"description":"Address filter"},{"name":"permit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Permit type filter","title":"Permit Type"},"description":"Permit type filter"},{"name":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Start date (YYYY-MM-DD)","title":"Date From"},"description":"Start date (YYYY-MM-DD)"},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"End date (YYYY-MM-DD)","title":"Date To"},"description":"End date (YYYY-MM-DD)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/coquitlam/permits/recent":{"get":{"summary":"Recent Building Permits","description":"Get recent building permits sorted by application date (newest first).\n\nUse this to see where construction activity is happening right now.","operationId":"recent_building_permits_api_coquitlam_permits_recent_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Max results","default":20,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset","default":0,"title":"Offset"},"description":"Results offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/coquitlam/permits/batch":{"post":{"summary":"Get Building Permits Batch","description":"Get multiple building permits by permit numbers in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of permit numbers.\nExample: {\"ids\": [\"BP123456\", \"BP789012\"]}\nMaximum 100 permit numbers per request.","operationId":"get_building_permits_batch_api_coquitlam_permits_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Building Permits Batch Api Coquitlam Permits Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/coquitlam/permits/{permit_number}":{"get":{"summary":"Get Building Permit","description":"Get building permit details by permit number.\n\nServes HTML for browsers, JSON for API clients.","operationId":"get_building_permit_api_coquitlam_permits__permit_number__get","parameters":[{"name":"permit_number","in":"path","required":true,"schema":{"type":"string","description":"Permit number","title":"Permit Number"},"description":"Permit number"},{"name":"_city_name","in":"query","required":false,"schema":{"default":"Coquitlam","title":" City Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/coquitlam/health":{"get":{"summary":"City Health","description":"City-specific health check.","operationId":"city_health_api_coquitlam_health_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kelowna/entries/{kind}":{"get":{"summary":"List Entries","operationId":"list_entries_api_kelowna_entries__kind__get","parameters":[{"name":"kind","in":"path","required":true,"schema":{"type":"string","description":"Canonical entry kind: property, permit, zoning, or safety","title":"Kind"},"description":"Canonical entry kind: property, permit, zoning, or safety"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"_services","in":"query","required":false,"schema":{"title":" Services"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Entries Api Kelowna Entries  Kind  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kelowna/census/profile":{"get":{"summary":"Get Census Profile","description":"Get census profile for a specific Dissemination Area.\n\nProvide either da_id directly, OR lat+lon to find the nearest DA automatically.","operationId":"get_census_profile_api_kelowna_census_profile_get","parameters":[{"name":"da_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Dissemination Area ID (e.g., 48820001)","title":"Da Id"},"description":"Dissemination Area ID (e.g., 48820001)"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude for nearest-DA lookup","title":"Lat"},"description":"Latitude for nearest-DA lookup"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude for nearest-DA lookup","title":"Lon"},"description":"Longitude for nearest-DA lookup"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusProfile"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kelowna/census/batch":{"post":{"summary":"Get Census Batch","description":"Get multiple census profiles by DA IDs in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of DA IDs.\nExample: {\"ids\": [\"48820001\", \"48820002\"]}\nMaximum 100 DA IDs per request.","operationId":"get_census_batch_api_kelowna_census_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Census Batch Api Kelowna Census Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kelowna/census/export":{"get":{"summary":"Export Census","description":"Export census data as CSV.\n\nSupports filtering by population range and geography type.\nMaximum 10,000 records per export.","operationId":"export_census_api_kelowna_census_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv only","default":"csv","title":"Format"},"description":"Export format: csv only"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"min_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Minimum population filter","title":"Min Population"},"description":"Minimum population filter"},{"name":"max_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Maximum population filter","title":"Max Population"},"description":"Maximum population filter"},{"name":"geography_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Geography type filter (DA, CT, CMA)","title":"Geography Type"},"description":"Geography type filter (DA, CT, CMA)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kelowna/census/list":{"get":{"summary":"List Census Profiles","description":"List all census profiles with pagination.\n\nUse this endpoint to browse available census profiles and discover valid DA IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_census_profiles_api_kelowna_census_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Census Profiles Api Kelowna Census List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kelowna/census/by-gps":{"get":{"summary":"Get Census By Gps","description":"Get census data for GPS coordinates.","operationId":"get_census_by_gps_api_kelowna_census_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90,"minimum":-90,"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":180,"minimum":-180,"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kelowna/census/by-dls":{"get":{"summary":"Get Census By Dls","description":"Get census data for DLS coordinates.","operationId":"get_census_by_dls_api_kelowna_census_by_dls_get","parameters":[{"name":"dls","in":"query","required":true,"schema":{"type":"string","description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)","title":"Dls"},"description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kelowna/census/map-data":{"get":{"summary":"Get Census Map Data","description":"Get lightweight DA points for choropleth map rendering.\n\nReturns centroid coordinates and key metrics (income, age, population,\nhousehold size, employment rate) for all DAs in the city.\nUsed by the census dashboard to render color-coded maps.","operationId":"get_census_map_data_api_kelowna_census_map_data_get","parameters":[{"name":"year","in":"query","required":false,"schema":{"type":"integer","description":"Census year for DA map data","default":2021,"title":"Year"},"description":"Census year for DA map data"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kelowna/census/stats":{"get":{"summary":"Census Stats","description":"Get census data statistics.","operationId":"census_stats_api_kelowna_census_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kelowna/census/compare":{"get":{"summary":"Census Compare","description":"Compare key census metrics across multiple years.\n\nReturns side-by-side comparison of population, households,\navg_income, median_age, density, and land_area for each requested year.\nYears without data return null for that year's values.","operationId":"census_compare_api_kelowna_census_compare_get","parameters":[{"name":"years","in":"query","required":false,"schema":{"type":"string","description":"Comma-separated census years (e.g., 2016,2021)","default":"2021","title":"Years"},"description":"Comma-separated census years (e.g., 2016,2021)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kelowna/census/time-series":{"get":{"summary":"Census Timeseries","description":"Get year-by-year census trends for this city.\n\nReturns population, income, age, and household trends across all\navailable census years. Useful for spotting long-term demographic shifts.","operationId":"census_timeseries_api_kelowna_census_time_series_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kelowna/geography/list":{"get":{"summary":"Geography List","description":"List geography boundaries for this city.","operationId":"geography_list_api_kelowna_geography_list_get","parameters":[{"name":"type","in":"query","required":false,"schema":{"type":"string","title":"Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kelowna/geography/by-gps":{"get":{"summary":"Geography By Gps","description":"Find the geography boundary containing a GPS point.","operationId":"geography_by_gps_api_kelowna_geography_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","title":"Lat"}},{"name":"lon","in":"query","required":true,"schema":{"type":"number","title":"Lon"}},{"name":"type","in":"query","required":false,"schema":{"type":"string","default":"DA","title":"Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kelowna/geography/stats":{"get":{"summary":"Geography Stats","description":"Get geography statistics for this city.","operationId":"geography_stats_api_kelowna_geography_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kelowna/geography/{geoid}":{"get":{"summary":"Geography Boundary","description":"Get a specific geography boundary by geoid, including GeoJSON polygon.","operationId":"geography_boundary_api_kelowna_geography__geoid__get","parameters":[{"name":"geoid","in":"path","required":true,"schema":{"type":"string","title":"Geoid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kelowna/census/rental/list":{"get":{"summary":"List Rental Prices","description":"List rental price records for this city, with optional unit type filter.","operationId":"list_rental_prices_api_kelowna_census_rental_list_get","parameters":[{"name":"unit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":50,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalPriceListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kelowna/census/rental/trend":{"get":{"summary":"Get Rental Trend","description":"Get rental price time series for a specific unit type.","operationId":"get_rental_trend_api_kelowna_census_rental_trend_get","parameters":[{"name":"unit_type","in":"query","required":true,"schema":{"type":"string","description":"Rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Rental unit type (e.g. 'Apartment - 1 bedroom')"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalTrendResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kelowna/census/rental/types":{"get":{"summary":"Get Rental Types","description":"Get available rental unit types for this city.","operationId":"get_rental_types_api_kelowna_census_rental_types_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kelowna/zoning/by-gps":{"get":{"summary":"Get Zoning By Gps","description":"Get zoning district for GPS coordinates.","operationId":"get_zoning_by_gps_api_kelowna_zoning_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZoningByGPSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kelowna/zoning/by-id/{district_id}":{"get":{"summary":"Get Zoning By Id","description":"Get a single zoning district by its numeric ID.","operationId":"get_zoning_by_id_api_kelowna_zoning_by_id__district_id__get","parameters":[{"name":"district_id","in":"path","required":true,"schema":{"type":"integer","description":"Zoning district numeric ID","title":"District Id"},"description":"Zoning district numeric ID"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning By Id Api Kelowna Zoning By Id  District Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kelowna/zoning/by-code/{code}":{"get":{"summary":"Get Zoning By Code","description":"Get all districts with a specific zone code.","operationId":"get_zoning_by_code_api_kelowna_zoning_by_code__code__get","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","description":"Zone code (e.g., C-C1, R-G)","title":"Code"},"description":"Zone code (e.g., C-C1, R-G)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoningDistrict"},"title":"Response Get Zoning By Code Api Kelowna Zoning By Code  Code  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kelowna/zoning/batch":{"post":{"summary":"Get Zoning Batch","description":"Get multiple zoning districts by zone codes in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of zone codes.\nExample: {\"ids\": [\"CR20-C20/R20\", \"C-C1\", \"R-G\"]}\nMaximum 100 zone codes per request.","operationId":"get_zoning_batch_api_kelowna_zoning_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning Batch Api Kelowna Zoning Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kelowna/zoning/list":{"get":{"summary":"List Zoning Districts","description":"List all zoning districts with pagination.\n\nUse this endpoint to browse available zoning districts and discover valid IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_zoning_districts_api_kelowna_zoning_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Zoning Districts Api Kelowna Zoning List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kelowna/zoning/codes":{"get":{"summary":"List Zone Codes","description":"List all zone codes with descriptions.","operationId":"list_zone_codes_api_kelowna_zoning_codes_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"type":"string","description":"Filter by major category (e.g., Commercial, Residential)","title":"Category"},"description":"Filter by major category (e.g., Commercial, Residential)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoneCodeInfo"},"title":"Response List Zone Codes Api Kelowna Zoning Codes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kelowna/zoning/stats":{"get":{"summary":"Zoning Stats","description":"Get zoning statistics.","operationId":"zoning_stats_api_kelowna_zoning_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kelowna/zoning/export":{"get":{"summary":"Export Zoning","description":"Export zoning district data as CSV or GeoJSON.\n\nSupports filtering by zone code, category, and area range.\nMaximum 10,000 records per export.","operationId":"export_zoning_api_kelowna_zoning_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"zone_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Zone code filter (e.g., CR2)","title":"Zone Code"},"description":"Zone code filter (e.g., CR2)"},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Major category filter","title":"Category"},"description":"Major category filter"},{"name":"min_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum area in sq km","title":"Min Area"},"description":"Minimum area in sq km"},{"name":"max_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum area in sq km","title":"Max Area"},"description":"Maximum area in sq km"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kelowna/health":{"get":{"summary":"City Health","description":"City-specific health check.","operationId":"city_health_api_kelowna_health_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saanich/entries/{kind}":{"get":{"summary":"List Entries","operationId":"list_entries_api_saanich_entries__kind__get","parameters":[{"name":"kind","in":"path","required":true,"schema":{"type":"string","description":"Canonical entry kind: property, permit, zoning, or safety","title":"Kind"},"description":"Canonical entry kind: property, permit, zoning, or safety"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"_services","in":"query","required":false,"schema":{"title":" Services"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Entries Api Saanich Entries  Kind  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saanich/census/profile":{"get":{"summary":"Get Census Profile","description":"Get census profile for a specific Dissemination Area.\n\nProvide either da_id directly, OR lat+lon to find the nearest DA automatically.","operationId":"get_census_profile_api_saanich_census_profile_get","parameters":[{"name":"da_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Dissemination Area ID (e.g., 48820001)","title":"Da Id"},"description":"Dissemination Area ID (e.g., 48820001)"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude for nearest-DA lookup","title":"Lat"},"description":"Latitude for nearest-DA lookup"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude for nearest-DA lookup","title":"Lon"},"description":"Longitude for nearest-DA lookup"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusProfile"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saanich/census/batch":{"post":{"summary":"Get Census Batch","description":"Get multiple census profiles by DA IDs in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of DA IDs.\nExample: {\"ids\": [\"48820001\", \"48820002\"]}\nMaximum 100 DA IDs per request.","operationId":"get_census_batch_api_saanich_census_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Census Batch Api Saanich Census Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saanich/census/export":{"get":{"summary":"Export Census","description":"Export census data as CSV.\n\nSupports filtering by population range and geography type.\nMaximum 10,000 records per export.","operationId":"export_census_api_saanich_census_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv only","default":"csv","title":"Format"},"description":"Export format: csv only"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"min_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Minimum population filter","title":"Min Population"},"description":"Minimum population filter"},{"name":"max_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Maximum population filter","title":"Max Population"},"description":"Maximum population filter"},{"name":"geography_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Geography type filter (DA, CT, CMA)","title":"Geography Type"},"description":"Geography type filter (DA, CT, CMA)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saanich/census/list":{"get":{"summary":"List Census Profiles","description":"List all census profiles with pagination.\n\nUse this endpoint to browse available census profiles and discover valid DA IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_census_profiles_api_saanich_census_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Census Profiles Api Saanich Census List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saanich/census/by-gps":{"get":{"summary":"Get Census By Gps","description":"Get census data for GPS coordinates.","operationId":"get_census_by_gps_api_saanich_census_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90,"minimum":-90,"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":180,"minimum":-180,"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saanich/census/by-dls":{"get":{"summary":"Get Census By Dls","description":"Get census data for DLS coordinates.","operationId":"get_census_by_dls_api_saanich_census_by_dls_get","parameters":[{"name":"dls","in":"query","required":true,"schema":{"type":"string","description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)","title":"Dls"},"description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saanich/census/map-data":{"get":{"summary":"Get Census Map Data","description":"Get lightweight DA points for choropleth map rendering.\n\nReturns centroid coordinates and key metrics (income, age, population,\nhousehold size, employment rate) for all DAs in the city.\nUsed by the census dashboard to render color-coded maps.","operationId":"get_census_map_data_api_saanich_census_map_data_get","parameters":[{"name":"year","in":"query","required":false,"schema":{"type":"integer","description":"Census year for DA map data","default":2021,"title":"Year"},"description":"Census year for DA map data"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saanich/census/stats":{"get":{"summary":"Census Stats","description":"Get census data statistics.","operationId":"census_stats_api_saanich_census_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saanich/census/compare":{"get":{"summary":"Census Compare","description":"Compare key census metrics across multiple years.\n\nReturns side-by-side comparison of population, households,\navg_income, median_age, density, and land_area for each requested year.\nYears without data return null for that year's values.","operationId":"census_compare_api_saanich_census_compare_get","parameters":[{"name":"years","in":"query","required":false,"schema":{"type":"string","description":"Comma-separated census years (e.g., 2016,2021)","default":"2021","title":"Years"},"description":"Comma-separated census years (e.g., 2016,2021)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saanich/census/time-series":{"get":{"summary":"Census Timeseries","description":"Get year-by-year census trends for this city.\n\nReturns population, income, age, and household trends across all\navailable census years. Useful for spotting long-term demographic shifts.","operationId":"census_timeseries_api_saanich_census_time_series_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saanich/geography/list":{"get":{"summary":"Geography List","description":"List geography boundaries for this city.","operationId":"geography_list_api_saanich_geography_list_get","parameters":[{"name":"type","in":"query","required":false,"schema":{"type":"string","title":"Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saanich/geography/by-gps":{"get":{"summary":"Geography By Gps","description":"Find the geography boundary containing a GPS point.","operationId":"geography_by_gps_api_saanich_geography_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","title":"Lat"}},{"name":"lon","in":"query","required":true,"schema":{"type":"number","title":"Lon"}},{"name":"type","in":"query","required":false,"schema":{"type":"string","default":"DA","title":"Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saanich/geography/stats":{"get":{"summary":"Geography Stats","description":"Get geography statistics for this city.","operationId":"geography_stats_api_saanich_geography_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saanich/geography/{geoid}":{"get":{"summary":"Geography Boundary","description":"Get a specific geography boundary by geoid, including GeoJSON polygon.","operationId":"geography_boundary_api_saanich_geography__geoid__get","parameters":[{"name":"geoid","in":"path","required":true,"schema":{"type":"string","title":"Geoid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saanich/census/rental/list":{"get":{"summary":"List Rental Prices","description":"List rental price records for this city, with optional unit type filter.","operationId":"list_rental_prices_api_saanich_census_rental_list_get","parameters":[{"name":"unit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":50,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalPriceListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saanich/census/rental/trend":{"get":{"summary":"Get Rental Trend","description":"Get rental price time series for a specific unit type.","operationId":"get_rental_trend_api_saanich_census_rental_trend_get","parameters":[{"name":"unit_type","in":"query","required":true,"schema":{"type":"string","description":"Rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Rental unit type (e.g. 'Apartment - 1 bedroom')"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalTrendResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saanich/census/rental/types":{"get":{"summary":"Get Rental Types","description":"Get available rental unit types for this city.","operationId":"get_rental_types_api_saanich_census_rental_types_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saanich/zoning/by-gps":{"get":{"summary":"Get Zoning By Gps","description":"Get zoning district for GPS coordinates.","operationId":"get_zoning_by_gps_api_saanich_zoning_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZoningByGPSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saanich/zoning/by-id/{district_id}":{"get":{"summary":"Get Zoning By Id","description":"Get a single zoning district by its numeric ID.","operationId":"get_zoning_by_id_api_saanich_zoning_by_id__district_id__get","parameters":[{"name":"district_id","in":"path","required":true,"schema":{"type":"integer","description":"Zoning district numeric ID","title":"District Id"},"description":"Zoning district numeric ID"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning By Id Api Saanich Zoning By Id  District Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saanich/zoning/by-code/{code}":{"get":{"summary":"Get Zoning By Code","description":"Get all districts with a specific zone code.","operationId":"get_zoning_by_code_api_saanich_zoning_by_code__code__get","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","description":"Zone code (e.g., C-C1, R-G)","title":"Code"},"description":"Zone code (e.g., C-C1, R-G)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoningDistrict"},"title":"Response Get Zoning By Code Api Saanich Zoning By Code  Code  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saanich/zoning/batch":{"post":{"summary":"Get Zoning Batch","description":"Get multiple zoning districts by zone codes in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of zone codes.\nExample: {\"ids\": [\"CR20-C20/R20\", \"C-C1\", \"R-G\"]}\nMaximum 100 zone codes per request.","operationId":"get_zoning_batch_api_saanich_zoning_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning Batch Api Saanich Zoning Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saanich/zoning/list":{"get":{"summary":"List Zoning Districts","description":"List all zoning districts with pagination.\n\nUse this endpoint to browse available zoning districts and discover valid IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_zoning_districts_api_saanich_zoning_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Zoning Districts Api Saanich Zoning List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saanich/zoning/codes":{"get":{"summary":"List Zone Codes","description":"List all zone codes with descriptions.","operationId":"list_zone_codes_api_saanich_zoning_codes_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"type":"string","description":"Filter by major category (e.g., Commercial, Residential)","title":"Category"},"description":"Filter by major category (e.g., Commercial, Residential)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoneCodeInfo"},"title":"Response List Zone Codes Api Saanich Zoning Codes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saanich/zoning/stats":{"get":{"summary":"Zoning Stats","description":"Get zoning statistics.","operationId":"zoning_stats_api_saanich_zoning_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saanich/zoning/export":{"get":{"summary":"Export Zoning","description":"Export zoning district data as CSV or GeoJSON.\n\nSupports filtering by zone code, category, and area range.\nMaximum 10,000 records per export.","operationId":"export_zoning_api_saanich_zoning_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"zone_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Zone code filter (e.g., CR2)","title":"Zone Code"},"description":"Zone code filter (e.g., CR2)"},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Major category filter","title":"Category"},"description":"Major category filter"},{"name":"min_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum area in sq km","title":"Min Area"},"description":"Minimum area in sq km"},{"name":"max_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum area in sq km","title":"Max Area"},"description":"Maximum area in sq km"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saanich/health":{"get":{"summary":"City Health","description":"City-specific health check.","operationId":"city_health_api_saanich_health_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/delta/entries/{kind}":{"get":{"summary":"List Entries","operationId":"list_entries_api_delta_entries__kind__get","parameters":[{"name":"kind","in":"path","required":true,"schema":{"type":"string","description":"Canonical entry kind: property, permit, zoning, or safety","title":"Kind"},"description":"Canonical entry kind: property, permit, zoning, or safety"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"_services","in":"query","required":false,"schema":{"title":" Services"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Entries Api Delta Entries  Kind  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/delta/census/profile":{"get":{"summary":"Get Census Profile","description":"Get census profile for a specific Dissemination Area.\n\nProvide either da_id directly, OR lat+lon to find the nearest DA automatically.","operationId":"get_census_profile_api_delta_census_profile_get","parameters":[{"name":"da_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Dissemination Area ID (e.g., 48820001)","title":"Da Id"},"description":"Dissemination Area ID (e.g., 48820001)"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude for nearest-DA lookup","title":"Lat"},"description":"Latitude for nearest-DA lookup"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude for nearest-DA lookup","title":"Lon"},"description":"Longitude for nearest-DA lookup"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusProfile"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/delta/census/batch":{"post":{"summary":"Get Census Batch","description":"Get multiple census profiles by DA IDs in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of DA IDs.\nExample: {\"ids\": [\"48820001\", \"48820002\"]}\nMaximum 100 DA IDs per request.","operationId":"get_census_batch_api_delta_census_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Census Batch Api Delta Census Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/delta/census/export":{"get":{"summary":"Export Census","description":"Export census data as CSV.\n\nSupports filtering by population range and geography type.\nMaximum 10,000 records per export.","operationId":"export_census_api_delta_census_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv only","default":"csv","title":"Format"},"description":"Export format: csv only"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"min_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Minimum population filter","title":"Min Population"},"description":"Minimum population filter"},{"name":"max_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Maximum population filter","title":"Max Population"},"description":"Maximum population filter"},{"name":"geography_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Geography type filter (DA, CT, CMA)","title":"Geography Type"},"description":"Geography type filter (DA, CT, CMA)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/delta/census/list":{"get":{"summary":"List Census Profiles","description":"List all census profiles with pagination.\n\nUse this endpoint to browse available census profiles and discover valid DA IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_census_profiles_api_delta_census_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Census Profiles Api Delta Census List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/delta/census/by-gps":{"get":{"summary":"Get Census By Gps","description":"Get census data for GPS coordinates.","operationId":"get_census_by_gps_api_delta_census_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90,"minimum":-90,"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":180,"minimum":-180,"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/delta/census/by-dls":{"get":{"summary":"Get Census By Dls","description":"Get census data for DLS coordinates.","operationId":"get_census_by_dls_api_delta_census_by_dls_get","parameters":[{"name":"dls","in":"query","required":true,"schema":{"type":"string","description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)","title":"Dls"},"description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/delta/census/map-data":{"get":{"summary":"Get Census Map Data","description":"Get lightweight DA points for choropleth map rendering.\n\nReturns centroid coordinates and key metrics (income, age, population,\nhousehold size, employment rate) for all DAs in the city.\nUsed by the census dashboard to render color-coded maps.","operationId":"get_census_map_data_api_delta_census_map_data_get","parameters":[{"name":"year","in":"query","required":false,"schema":{"type":"integer","description":"Census year for DA map data","default":2021,"title":"Year"},"description":"Census year for DA map data"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/delta/census/stats":{"get":{"summary":"Census Stats","description":"Get census data statistics.","operationId":"census_stats_api_delta_census_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/delta/census/compare":{"get":{"summary":"Census Compare","description":"Compare key census metrics across multiple years.\n\nReturns side-by-side comparison of population, households,\navg_income, median_age, density, and land_area for each requested year.\nYears without data return null for that year's values.","operationId":"census_compare_api_delta_census_compare_get","parameters":[{"name":"years","in":"query","required":false,"schema":{"type":"string","description":"Comma-separated census years (e.g., 2016,2021)","default":"2021","title":"Years"},"description":"Comma-separated census years (e.g., 2016,2021)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/delta/census/time-series":{"get":{"summary":"Census Timeseries","description":"Get year-by-year census trends for this city.\n\nReturns population, income, age, and household trends across all\navailable census years. Useful for spotting long-term demographic shifts.","operationId":"census_timeseries_api_delta_census_time_series_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/delta/geography/list":{"get":{"summary":"Geography List","description":"List geography boundaries for this city.","operationId":"geography_list_api_delta_geography_list_get","parameters":[{"name":"type","in":"query","required":false,"schema":{"type":"string","title":"Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/delta/geography/by-gps":{"get":{"summary":"Geography By Gps","description":"Find the geography boundary containing a GPS point.","operationId":"geography_by_gps_api_delta_geography_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","title":"Lat"}},{"name":"lon","in":"query","required":true,"schema":{"type":"number","title":"Lon"}},{"name":"type","in":"query","required":false,"schema":{"type":"string","default":"DA","title":"Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/delta/geography/stats":{"get":{"summary":"Geography Stats","description":"Get geography statistics for this city.","operationId":"geography_stats_api_delta_geography_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/delta/geography/{geoid}":{"get":{"summary":"Geography Boundary","description":"Get a specific geography boundary by geoid, including GeoJSON polygon.","operationId":"geography_boundary_api_delta_geography__geoid__get","parameters":[{"name":"geoid","in":"path","required":true,"schema":{"type":"string","title":"Geoid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/delta/census/rental/list":{"get":{"summary":"List Rental Prices","description":"List rental price records for this city, with optional unit type filter.","operationId":"list_rental_prices_api_delta_census_rental_list_get","parameters":[{"name":"unit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":50,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalPriceListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/delta/census/rental/trend":{"get":{"summary":"Get Rental Trend","description":"Get rental price time series for a specific unit type.","operationId":"get_rental_trend_api_delta_census_rental_trend_get","parameters":[{"name":"unit_type","in":"query","required":true,"schema":{"type":"string","description":"Rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Rental unit type (e.g. 'Apartment - 1 bedroom')"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalTrendResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/delta/census/rental/types":{"get":{"summary":"Get Rental Types","description":"Get available rental unit types for this city.","operationId":"get_rental_types_api_delta_census_rental_types_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/delta/permits/stats":{"get":{"summary":"Building Stats","description":"Get building permit statistics.","operationId":"building_stats_api_delta_permits_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/delta/permits/search":{"get":{"summary":"Search Building Permits","description":"Search building permits by address, contractor, applicant, permit number, and/or permit type.","operationId":"search_building_permits_api_delta_permits_search_get","parameters":[{"name":"address","in":"query","required":false,"schema":{"type":"string","description":"Address to search","title":"Address"},"description":"Address to search"},{"name":"q","in":"query","required":false,"schema":{"type":"string","description":"General text search (address, contractor, applicant, permit #)","title":"Q"},"description":"General text search (address, contractor, applicant, permit #)"},{"name":"permit_type","in":"query","required":false,"schema":{"type":"string","description":"Filter by permit type","title":"Permit Type"},"description":"Filter by permit type"},{"name":"bbox","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bounding box: min_lon,min_lat,max_lon,max_lat","title":"Bbox"},"description":"Bounding box: min_lon,min_lat,max_lon,max_lat"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max results","default":20,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset","default":0,"title":"Offset"},"description":"Results offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/delta/permits/nearby":{"get":{"summary":"Nearby Building Permits","description":"Coordinate-first alias for nearby building permits.","operationId":"nearby_building_permits_api_delta_permits_nearby_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":84.0,"minimum":41.0,"description":"Canadian latitude","title":"Lat"},"description":"Canadian latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":-52.0,"minimum":-142.0,"description":"Canadian longitude","title":"Lon"},"description":"Canadian longitude"},{"name":"radius_m","in":"query","required":false,"schema":{"type":"integer","maximum":50000,"minimum":1,"default":1000,"title":"Radius M"}},{"name":"permit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Permit Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/delta/permits/export":{"get":{"summary":"Export Building Permits","description":"Export building permit data as CSV or GeoJSON.\n\nSupports filtering by address, permit type, and date range.\nMaximum 10,000 records per export.","operationId":"export_building_permits_api_delta_permits_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Address filter","title":"Address"},"description":"Address filter"},{"name":"permit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Permit type filter","title":"Permit Type"},"description":"Permit type filter"},{"name":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Start date (YYYY-MM-DD)","title":"Date From"},"description":"Start date (YYYY-MM-DD)"},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"End date (YYYY-MM-DD)","title":"Date To"},"description":"End date (YYYY-MM-DD)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/delta/permits/recent":{"get":{"summary":"Recent Building Permits","description":"Get recent building permits sorted by application date (newest first).\n\nUse this to see where construction activity is happening right now.","operationId":"recent_building_permits_api_delta_permits_recent_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Max results","default":20,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset","default":0,"title":"Offset"},"description":"Results offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/delta/permits/batch":{"post":{"summary":"Get Building Permits Batch","description":"Get multiple building permits by permit numbers in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of permit numbers.\nExample: {\"ids\": [\"BP123456\", \"BP789012\"]}\nMaximum 100 permit numbers per request.","operationId":"get_building_permits_batch_api_delta_permits_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Building Permits Batch Api Delta Permits Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/delta/permits/{permit_number}":{"get":{"summary":"Get Building Permit","description":"Get building permit details by permit number.\n\nServes HTML for browsers, JSON for API clients.","operationId":"get_building_permit_api_delta_permits__permit_number__get","parameters":[{"name":"permit_number","in":"path","required":true,"schema":{"type":"string","description":"Permit number","title":"Permit Number"},"description":"Permit number"},{"name":"_city_name","in":"query","required":false,"schema":{"default":"Delta","title":" City Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/delta/health":{"get":{"summary":"City Health","description":"City-specific health check.","operationId":"city_health_api_delta_health_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/maple-ridge/entries/{kind}":{"get":{"summary":"List Entries","operationId":"list_entries_api_maple_ridge_entries__kind__get","parameters":[{"name":"kind","in":"path","required":true,"schema":{"type":"string","description":"Canonical entry kind: property, permit, zoning, or safety","title":"Kind"},"description":"Canonical entry kind: property, permit, zoning, or safety"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"_services","in":"query","required":false,"schema":{"title":" Services"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Entries Api Maple Ridge Entries  Kind  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/maple-ridge/census/profile":{"get":{"summary":"Get Census Profile","description":"Get census profile for a specific Dissemination Area.\n\nProvide either da_id directly, OR lat+lon to find the nearest DA automatically.","operationId":"get_census_profile_api_maple_ridge_census_profile_get","parameters":[{"name":"da_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Dissemination Area ID (e.g., 48820001)","title":"Da Id"},"description":"Dissemination Area ID (e.g., 48820001)"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude for nearest-DA lookup","title":"Lat"},"description":"Latitude for nearest-DA lookup"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude for nearest-DA lookup","title":"Lon"},"description":"Longitude for nearest-DA lookup"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusProfile"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/maple-ridge/census/batch":{"post":{"summary":"Get Census Batch","description":"Get multiple census profiles by DA IDs in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of DA IDs.\nExample: {\"ids\": [\"48820001\", \"48820002\"]}\nMaximum 100 DA IDs per request.","operationId":"get_census_batch_api_maple_ridge_census_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Census Batch Api Maple Ridge Census Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/maple-ridge/census/export":{"get":{"summary":"Export Census","description":"Export census data as CSV.\n\nSupports filtering by population range and geography type.\nMaximum 10,000 records per export.","operationId":"export_census_api_maple_ridge_census_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv only","default":"csv","title":"Format"},"description":"Export format: csv only"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"min_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Minimum population filter","title":"Min Population"},"description":"Minimum population filter"},{"name":"max_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Maximum population filter","title":"Max Population"},"description":"Maximum population filter"},{"name":"geography_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Geography type filter (DA, CT, CMA)","title":"Geography Type"},"description":"Geography type filter (DA, CT, CMA)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/maple-ridge/census/list":{"get":{"summary":"List Census Profiles","description":"List all census profiles with pagination.\n\nUse this endpoint to browse available census profiles and discover valid DA IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_census_profiles_api_maple_ridge_census_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Census Profiles Api Maple Ridge Census List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/maple-ridge/census/by-gps":{"get":{"summary":"Get Census By Gps","description":"Get census data for GPS coordinates.","operationId":"get_census_by_gps_api_maple_ridge_census_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90,"minimum":-90,"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":180,"minimum":-180,"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/maple-ridge/census/by-dls":{"get":{"summary":"Get Census By Dls","description":"Get census data for DLS coordinates.","operationId":"get_census_by_dls_api_maple_ridge_census_by_dls_get","parameters":[{"name":"dls","in":"query","required":true,"schema":{"type":"string","description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)","title":"Dls"},"description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/maple-ridge/census/map-data":{"get":{"summary":"Get Census Map Data","description":"Get lightweight DA points for choropleth map rendering.\n\nReturns centroid coordinates and key metrics (income, age, population,\nhousehold size, employment rate) for all DAs in the city.\nUsed by the census dashboard to render color-coded maps.","operationId":"get_census_map_data_api_maple_ridge_census_map_data_get","parameters":[{"name":"year","in":"query","required":false,"schema":{"type":"integer","description":"Census year for DA map data","default":2021,"title":"Year"},"description":"Census year for DA map data"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/maple-ridge/census/stats":{"get":{"summary":"Census Stats","description":"Get census data statistics.","operationId":"census_stats_api_maple_ridge_census_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/maple-ridge/census/compare":{"get":{"summary":"Census Compare","description":"Compare key census metrics across multiple years.\n\nReturns side-by-side comparison of population, households,\navg_income, median_age, density, and land_area for each requested year.\nYears without data return null for that year's values.","operationId":"census_compare_api_maple_ridge_census_compare_get","parameters":[{"name":"years","in":"query","required":false,"schema":{"type":"string","description":"Comma-separated census years (e.g., 2016,2021)","default":"2021","title":"Years"},"description":"Comma-separated census years (e.g., 2016,2021)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/maple-ridge/census/time-series":{"get":{"summary":"Census Timeseries","description":"Get year-by-year census trends for this city.\n\nReturns population, income, age, and household trends across all\navailable census years. Useful for spotting long-term demographic shifts.","operationId":"census_timeseries_api_maple_ridge_census_time_series_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/maple-ridge/geography/list":{"get":{"summary":"Geography List","description":"List geography boundaries for this city.","operationId":"geography_list_api_maple_ridge_geography_list_get","parameters":[{"name":"type","in":"query","required":false,"schema":{"type":"string","title":"Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/maple-ridge/geography/by-gps":{"get":{"summary":"Geography By Gps","description":"Find the geography boundary containing a GPS point.","operationId":"geography_by_gps_api_maple_ridge_geography_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","title":"Lat"}},{"name":"lon","in":"query","required":true,"schema":{"type":"number","title":"Lon"}},{"name":"type","in":"query","required":false,"schema":{"type":"string","default":"DA","title":"Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/maple-ridge/geography/stats":{"get":{"summary":"Geography Stats","description":"Get geography statistics for this city.","operationId":"geography_stats_api_maple_ridge_geography_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/maple-ridge/geography/{geoid}":{"get":{"summary":"Geography Boundary","description":"Get a specific geography boundary by geoid, including GeoJSON polygon.","operationId":"geography_boundary_api_maple_ridge_geography__geoid__get","parameters":[{"name":"geoid","in":"path","required":true,"schema":{"type":"string","title":"Geoid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/maple-ridge/census/rental/list":{"get":{"summary":"List Rental Prices","description":"List rental price records for this city, with optional unit type filter.","operationId":"list_rental_prices_api_maple_ridge_census_rental_list_get","parameters":[{"name":"unit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":50,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalPriceListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/maple-ridge/census/rental/trend":{"get":{"summary":"Get Rental Trend","description":"Get rental price time series for a specific unit type.","operationId":"get_rental_trend_api_maple_ridge_census_rental_trend_get","parameters":[{"name":"unit_type","in":"query","required":true,"schema":{"type":"string","description":"Rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Rental unit type (e.g. 'Apartment - 1 bedroom')"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalTrendResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/maple-ridge/census/rental/types":{"get":{"summary":"Get Rental Types","description":"Get available rental unit types for this city.","operationId":"get_rental_types_api_maple_ridge_census_rental_types_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/maple-ridge/zoning/by-gps":{"get":{"summary":"Get Zoning By Gps","description":"Get zoning district for GPS coordinates.","operationId":"get_zoning_by_gps_api_maple_ridge_zoning_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZoningByGPSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/maple-ridge/zoning/by-id/{district_id}":{"get":{"summary":"Get Zoning By Id","description":"Get a single zoning district by its numeric ID.","operationId":"get_zoning_by_id_api_maple_ridge_zoning_by_id__district_id__get","parameters":[{"name":"district_id","in":"path","required":true,"schema":{"type":"integer","description":"Zoning district numeric ID","title":"District Id"},"description":"Zoning district numeric ID"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning By Id Api Maple Ridge Zoning By Id  District Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/maple-ridge/zoning/by-code/{code}":{"get":{"summary":"Get Zoning By Code","description":"Get all districts with a specific zone code.","operationId":"get_zoning_by_code_api_maple_ridge_zoning_by_code__code__get","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","description":"Zone code (e.g., C-C1, R-G)","title":"Code"},"description":"Zone code (e.g., C-C1, R-G)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoningDistrict"},"title":"Response Get Zoning By Code Api Maple Ridge Zoning By Code  Code  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/maple-ridge/zoning/batch":{"post":{"summary":"Get Zoning Batch","description":"Get multiple zoning districts by zone codes in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of zone codes.\nExample: {\"ids\": [\"CR20-C20/R20\", \"C-C1\", \"R-G\"]}\nMaximum 100 zone codes per request.","operationId":"get_zoning_batch_api_maple_ridge_zoning_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning Batch Api Maple Ridge Zoning Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/maple-ridge/zoning/list":{"get":{"summary":"List Zoning Districts","description":"List all zoning districts with pagination.\n\nUse this endpoint to browse available zoning districts and discover valid IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_zoning_districts_api_maple_ridge_zoning_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Zoning Districts Api Maple Ridge Zoning List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/maple-ridge/zoning/codes":{"get":{"summary":"List Zone Codes","description":"List all zone codes with descriptions.","operationId":"list_zone_codes_api_maple_ridge_zoning_codes_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"type":"string","description":"Filter by major category (e.g., Commercial, Residential)","title":"Category"},"description":"Filter by major category (e.g., Commercial, Residential)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoneCodeInfo"},"title":"Response List Zone Codes Api Maple Ridge Zoning Codes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/maple-ridge/zoning/stats":{"get":{"summary":"Zoning Stats","description":"Get zoning statistics.","operationId":"zoning_stats_api_maple_ridge_zoning_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/maple-ridge/zoning/export":{"get":{"summary":"Export Zoning","description":"Export zoning district data as CSV or GeoJSON.\n\nSupports filtering by zone code, category, and area range.\nMaximum 10,000 records per export.","operationId":"export_zoning_api_maple_ridge_zoning_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"zone_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Zone code filter (e.g., CR2)","title":"Zone Code"},"description":"Zone code filter (e.g., CR2)"},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Major category filter","title":"Category"},"description":"Major category filter"},{"name":"min_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum area in sq km","title":"Min Area"},"description":"Minimum area in sq km"},{"name":"max_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum area in sq km","title":"Max Area"},"description":"Maximum area in sq km"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/maple-ridge/permits/stats":{"get":{"summary":"Building Stats","description":"Get building permit statistics.","operationId":"building_stats_api_maple_ridge_permits_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/maple-ridge/permits/search":{"get":{"summary":"Search Building Permits","description":"Search building permits by address, contractor, applicant, permit number, and/or permit type.","operationId":"search_building_permits_api_maple_ridge_permits_search_get","parameters":[{"name":"address","in":"query","required":false,"schema":{"type":"string","description":"Address to search","title":"Address"},"description":"Address to search"},{"name":"q","in":"query","required":false,"schema":{"type":"string","description":"General text search (address, contractor, applicant, permit #)","title":"Q"},"description":"General text search (address, contractor, applicant, permit #)"},{"name":"permit_type","in":"query","required":false,"schema":{"type":"string","description":"Filter by permit type","title":"Permit Type"},"description":"Filter by permit type"},{"name":"bbox","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bounding box: min_lon,min_lat,max_lon,max_lat","title":"Bbox"},"description":"Bounding box: min_lon,min_lat,max_lon,max_lat"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max results","default":20,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset","default":0,"title":"Offset"},"description":"Results offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/maple-ridge/permits/nearby":{"get":{"summary":"Nearby Building Permits","description":"Coordinate-first alias for nearby building permits.","operationId":"nearby_building_permits_api_maple_ridge_permits_nearby_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":84.0,"minimum":41.0,"description":"Canadian latitude","title":"Lat"},"description":"Canadian latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":-52.0,"minimum":-142.0,"description":"Canadian longitude","title":"Lon"},"description":"Canadian longitude"},{"name":"radius_m","in":"query","required":false,"schema":{"type":"integer","maximum":50000,"minimum":1,"default":1000,"title":"Radius M"}},{"name":"permit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Permit Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/maple-ridge/permits/export":{"get":{"summary":"Export Building Permits","description":"Export building permit data as CSV or GeoJSON.\n\nSupports filtering by address, permit type, and date range.\nMaximum 10,000 records per export.","operationId":"export_building_permits_api_maple_ridge_permits_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Address filter","title":"Address"},"description":"Address filter"},{"name":"permit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Permit type filter","title":"Permit Type"},"description":"Permit type filter"},{"name":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Start date (YYYY-MM-DD)","title":"Date From"},"description":"Start date (YYYY-MM-DD)"},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"End date (YYYY-MM-DD)","title":"Date To"},"description":"End date (YYYY-MM-DD)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/maple-ridge/permits/recent":{"get":{"summary":"Recent Building Permits","description":"Get recent building permits sorted by application date (newest first).\n\nUse this to see where construction activity is happening right now.","operationId":"recent_building_permits_api_maple_ridge_permits_recent_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Max results","default":20,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset","default":0,"title":"Offset"},"description":"Results offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/maple-ridge/permits/batch":{"post":{"summary":"Get Building Permits Batch","description":"Get multiple building permits by permit numbers in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of permit numbers.\nExample: {\"ids\": [\"BP123456\", \"BP789012\"]}\nMaximum 100 permit numbers per request.","operationId":"get_building_permits_batch_api_maple_ridge_permits_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Building Permits Batch Api Maple Ridge Permits Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/maple-ridge/permits/{permit_number}":{"get":{"summary":"Get Building Permit","description":"Get building permit details by permit number.\n\nServes HTML for browsers, JSON for API clients.","operationId":"get_building_permit_api_maple_ridge_permits__permit_number__get","parameters":[{"name":"permit_number","in":"path","required":true,"schema":{"type":"string","description":"Permit number","title":"Permit Number"},"description":"Permit number"},{"name":"_city_name","in":"query","required":false,"schema":{"default":"Maple Ridge","title":" City Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/maple-ridge/health":{"get":{"summary":"City Health","description":"City-specific health check.","operationId":"city_health_api_maple_ridge_health_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/new-westminster/entries/{kind}":{"get":{"summary":"List Entries","operationId":"list_entries_api_new_westminster_entries__kind__get","parameters":[{"name":"kind","in":"path","required":true,"schema":{"type":"string","description":"Canonical entry kind: property, permit, zoning, or safety","title":"Kind"},"description":"Canonical entry kind: property, permit, zoning, or safety"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"_services","in":"query","required":false,"schema":{"title":" Services"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Entries Api New Westminster Entries  Kind  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/new-westminster/census/profile":{"get":{"summary":"Get Census Profile","description":"Get census profile for a specific Dissemination Area.\n\nProvide either da_id directly, OR lat+lon to find the nearest DA automatically.","operationId":"get_census_profile_api_new_westminster_census_profile_get","parameters":[{"name":"da_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Dissemination Area ID (e.g., 48820001)","title":"Da Id"},"description":"Dissemination Area ID (e.g., 48820001)"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude for nearest-DA lookup","title":"Lat"},"description":"Latitude for nearest-DA lookup"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude for nearest-DA lookup","title":"Lon"},"description":"Longitude for nearest-DA lookup"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusProfile"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/new-westminster/census/batch":{"post":{"summary":"Get Census Batch","description":"Get multiple census profiles by DA IDs in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of DA IDs.\nExample: {\"ids\": [\"48820001\", \"48820002\"]}\nMaximum 100 DA IDs per request.","operationId":"get_census_batch_api_new_westminster_census_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Census Batch Api New Westminster Census Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/new-westminster/census/export":{"get":{"summary":"Export Census","description":"Export census data as CSV.\n\nSupports filtering by population range and geography type.\nMaximum 10,000 records per export.","operationId":"export_census_api_new_westminster_census_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv only","default":"csv","title":"Format"},"description":"Export format: csv only"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"min_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Minimum population filter","title":"Min Population"},"description":"Minimum population filter"},{"name":"max_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Maximum population filter","title":"Max Population"},"description":"Maximum population filter"},{"name":"geography_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Geography type filter (DA, CT, CMA)","title":"Geography Type"},"description":"Geography type filter (DA, CT, CMA)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/new-westminster/census/list":{"get":{"summary":"List Census Profiles","description":"List all census profiles with pagination.\n\nUse this endpoint to browse available census profiles and discover valid DA IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_census_profiles_api_new_westminster_census_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Census Profiles Api New Westminster Census List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/new-westminster/census/by-gps":{"get":{"summary":"Get Census By Gps","description":"Get census data for GPS coordinates.","operationId":"get_census_by_gps_api_new_westminster_census_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90,"minimum":-90,"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":180,"minimum":-180,"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/new-westminster/census/by-dls":{"get":{"summary":"Get Census By Dls","description":"Get census data for DLS coordinates.","operationId":"get_census_by_dls_api_new_westminster_census_by_dls_get","parameters":[{"name":"dls","in":"query","required":true,"schema":{"type":"string","description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)","title":"Dls"},"description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/new-westminster/census/map-data":{"get":{"summary":"Get Census Map Data","description":"Get lightweight DA points for choropleth map rendering.\n\nReturns centroid coordinates and key metrics (income, age, population,\nhousehold size, employment rate) for all DAs in the city.\nUsed by the census dashboard to render color-coded maps.","operationId":"get_census_map_data_api_new_westminster_census_map_data_get","parameters":[{"name":"year","in":"query","required":false,"schema":{"type":"integer","description":"Census year for DA map data","default":2021,"title":"Year"},"description":"Census year for DA map data"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/new-westminster/census/stats":{"get":{"summary":"Census Stats","description":"Get census data statistics.","operationId":"census_stats_api_new_westminster_census_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/new-westminster/census/compare":{"get":{"summary":"Census Compare","description":"Compare key census metrics across multiple years.\n\nReturns side-by-side comparison of population, households,\navg_income, median_age, density, and land_area for each requested year.\nYears without data return null for that year's values.","operationId":"census_compare_api_new_westminster_census_compare_get","parameters":[{"name":"years","in":"query","required":false,"schema":{"type":"string","description":"Comma-separated census years (e.g., 2016,2021)","default":"2021","title":"Years"},"description":"Comma-separated census years (e.g., 2016,2021)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/new-westminster/census/time-series":{"get":{"summary":"Census Timeseries","description":"Get year-by-year census trends for this city.\n\nReturns population, income, age, and household trends across all\navailable census years. Useful for spotting long-term demographic shifts.","operationId":"census_timeseries_api_new_westminster_census_time_series_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/new-westminster/geography/list":{"get":{"summary":"Geography List","description":"List geography boundaries for this city.","operationId":"geography_list_api_new_westminster_geography_list_get","parameters":[{"name":"type","in":"query","required":false,"schema":{"type":"string","title":"Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/new-westminster/geography/by-gps":{"get":{"summary":"Geography By Gps","description":"Find the geography boundary containing a GPS point.","operationId":"geography_by_gps_api_new_westminster_geography_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","title":"Lat"}},{"name":"lon","in":"query","required":true,"schema":{"type":"number","title":"Lon"}},{"name":"type","in":"query","required":false,"schema":{"type":"string","default":"DA","title":"Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/new-westminster/geography/stats":{"get":{"summary":"Geography Stats","description":"Get geography statistics for this city.","operationId":"geography_stats_api_new_westminster_geography_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/new-westminster/geography/{geoid}":{"get":{"summary":"Geography Boundary","description":"Get a specific geography boundary by geoid, including GeoJSON polygon.","operationId":"geography_boundary_api_new_westminster_geography__geoid__get","parameters":[{"name":"geoid","in":"path","required":true,"schema":{"type":"string","title":"Geoid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/new-westminster/census/rental/list":{"get":{"summary":"List Rental Prices","description":"List rental price records for this city, with optional unit type filter.","operationId":"list_rental_prices_api_new_westminster_census_rental_list_get","parameters":[{"name":"unit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":50,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalPriceListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/new-westminster/census/rental/trend":{"get":{"summary":"Get Rental Trend","description":"Get rental price time series for a specific unit type.","operationId":"get_rental_trend_api_new_westminster_census_rental_trend_get","parameters":[{"name":"unit_type","in":"query","required":true,"schema":{"type":"string","description":"Rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Rental unit type (e.g. 'Apartment - 1 bedroom')"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalTrendResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/new-westminster/census/rental/types":{"get":{"summary":"Get Rental Types","description":"Get available rental unit types for this city.","operationId":"get_rental_types_api_new_westminster_census_rental_types_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/new-westminster/zoning/by-gps":{"get":{"summary":"Get Zoning By Gps","description":"Get zoning district for GPS coordinates.","operationId":"get_zoning_by_gps_api_new_westminster_zoning_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZoningByGPSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/new-westminster/zoning/by-id/{district_id}":{"get":{"summary":"Get Zoning By Id","description":"Get a single zoning district by its numeric ID.","operationId":"get_zoning_by_id_api_new_westminster_zoning_by_id__district_id__get","parameters":[{"name":"district_id","in":"path","required":true,"schema":{"type":"integer","description":"Zoning district numeric ID","title":"District Id"},"description":"Zoning district numeric ID"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning By Id Api New Westminster Zoning By Id  District Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/new-westminster/zoning/by-code/{code}":{"get":{"summary":"Get Zoning By Code","description":"Get all districts with a specific zone code.","operationId":"get_zoning_by_code_api_new_westminster_zoning_by_code__code__get","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","description":"Zone code (e.g., C-C1, R-G)","title":"Code"},"description":"Zone code (e.g., C-C1, R-G)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoningDistrict"},"title":"Response Get Zoning By Code Api New Westminster Zoning By Code  Code  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/new-westminster/zoning/batch":{"post":{"summary":"Get Zoning Batch","description":"Get multiple zoning districts by zone codes in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of zone codes.\nExample: {\"ids\": [\"CR20-C20/R20\", \"C-C1\", \"R-G\"]}\nMaximum 100 zone codes per request.","operationId":"get_zoning_batch_api_new_westminster_zoning_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning Batch Api New Westminster Zoning Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/new-westminster/zoning/list":{"get":{"summary":"List Zoning Districts","description":"List all zoning districts with pagination.\n\nUse this endpoint to browse available zoning districts and discover valid IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_zoning_districts_api_new_westminster_zoning_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Zoning Districts Api New Westminster Zoning List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/new-westminster/zoning/codes":{"get":{"summary":"List Zone Codes","description":"List all zone codes with descriptions.","operationId":"list_zone_codes_api_new_westminster_zoning_codes_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"type":"string","description":"Filter by major category (e.g., Commercial, Residential)","title":"Category"},"description":"Filter by major category (e.g., Commercial, Residential)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoneCodeInfo"},"title":"Response List Zone Codes Api New Westminster Zoning Codes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/new-westminster/zoning/stats":{"get":{"summary":"Zoning Stats","description":"Get zoning statistics.","operationId":"zoning_stats_api_new_westminster_zoning_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/new-westminster/zoning/export":{"get":{"summary":"Export Zoning","description":"Export zoning district data as CSV or GeoJSON.\n\nSupports filtering by zone code, category, and area range.\nMaximum 10,000 records per export.","operationId":"export_zoning_api_new_westminster_zoning_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"zone_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Zone code filter (e.g., CR2)","title":"Zone Code"},"description":"Zone code filter (e.g., CR2)"},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Major category filter","title":"Category"},"description":"Major category filter"},{"name":"min_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum area in sq km","title":"Min Area"},"description":"Minimum area in sq km"},{"name":"max_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum area in sq km","title":"Max Area"},"description":"Maximum area in sq km"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/new-westminster/permits/stats":{"get":{"summary":"Building Stats","description":"Get building permit statistics.","operationId":"building_stats_api_new_westminster_permits_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/new-westminster/permits/search":{"get":{"summary":"Search Building Permits","description":"Search building permits by address, contractor, applicant, permit number, and/or permit type.","operationId":"search_building_permits_api_new_westminster_permits_search_get","parameters":[{"name":"address","in":"query","required":false,"schema":{"type":"string","description":"Address to search","title":"Address"},"description":"Address to search"},{"name":"q","in":"query","required":false,"schema":{"type":"string","description":"General text search (address, contractor, applicant, permit #)","title":"Q"},"description":"General text search (address, contractor, applicant, permit #)"},{"name":"permit_type","in":"query","required":false,"schema":{"type":"string","description":"Filter by permit type","title":"Permit Type"},"description":"Filter by permit type"},{"name":"bbox","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bounding box: min_lon,min_lat,max_lon,max_lat","title":"Bbox"},"description":"Bounding box: min_lon,min_lat,max_lon,max_lat"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max results","default":20,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset","default":0,"title":"Offset"},"description":"Results offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/new-westminster/permits/nearby":{"get":{"summary":"Nearby Building Permits","description":"Coordinate-first alias for nearby building permits.","operationId":"nearby_building_permits_api_new_westminster_permits_nearby_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":84.0,"minimum":41.0,"description":"Canadian latitude","title":"Lat"},"description":"Canadian latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":-52.0,"minimum":-142.0,"description":"Canadian longitude","title":"Lon"},"description":"Canadian longitude"},{"name":"radius_m","in":"query","required":false,"schema":{"type":"integer","maximum":50000,"minimum":1,"default":1000,"title":"Radius M"}},{"name":"permit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Permit Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/new-westminster/permits/export":{"get":{"summary":"Export Building Permits","description":"Export building permit data as CSV or GeoJSON.\n\nSupports filtering by address, permit type, and date range.\nMaximum 10,000 records per export.","operationId":"export_building_permits_api_new_westminster_permits_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Address filter","title":"Address"},"description":"Address filter"},{"name":"permit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Permit type filter","title":"Permit Type"},"description":"Permit type filter"},{"name":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Start date (YYYY-MM-DD)","title":"Date From"},"description":"Start date (YYYY-MM-DD)"},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"End date (YYYY-MM-DD)","title":"Date To"},"description":"End date (YYYY-MM-DD)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/new-westminster/permits/recent":{"get":{"summary":"Recent Building Permits","description":"Get recent building permits sorted by application date (newest first).\n\nUse this to see where construction activity is happening right now.","operationId":"recent_building_permits_api_new_westminster_permits_recent_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Max results","default":20,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset","default":0,"title":"Offset"},"description":"Results offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/new-westminster/permits/batch":{"post":{"summary":"Get Building Permits Batch","description":"Get multiple building permits by permit numbers in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of permit numbers.\nExample: {\"ids\": [\"BP123456\", \"BP789012\"]}\nMaximum 100 permit numbers per request.","operationId":"get_building_permits_batch_api_new_westminster_permits_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Building Permits Batch Api New Westminster Permits Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/new-westminster/permits/{permit_number}":{"get":{"summary":"Get Building Permit","description":"Get building permit details by permit number.\n\nServes HTML for browsers, JSON for API clients.","operationId":"get_building_permit_api_new_westminster_permits__permit_number__get","parameters":[{"name":"permit_number","in":"path","required":true,"schema":{"type":"string","description":"Permit number","title":"Permit Number"},"description":"Permit number"},{"name":"_city_name","in":"query","required":false,"schema":{"default":"New Westminster","title":" City Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/new-westminster/health":{"get":{"summary":"City Health","description":"City-specific health check.","operationId":"city_health_api_new_westminster_health_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/port-coquitlam/entries/{kind}":{"get":{"summary":"List Entries","operationId":"list_entries_api_port_coquitlam_entries__kind__get","parameters":[{"name":"kind","in":"path","required":true,"schema":{"type":"string","description":"Canonical entry kind: property, permit, zoning, or safety","title":"Kind"},"description":"Canonical entry kind: property, permit, zoning, or safety"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"_services","in":"query","required":false,"schema":{"title":" Services"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Entries Api Port Coquitlam Entries  Kind  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/port-coquitlam/census/profile":{"get":{"summary":"Get Census Profile","description":"Get census profile for a specific Dissemination Area.\n\nProvide either da_id directly, OR lat+lon to find the nearest DA automatically.","operationId":"get_census_profile_api_port_coquitlam_census_profile_get","parameters":[{"name":"da_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Dissemination Area ID (e.g., 48820001)","title":"Da Id"},"description":"Dissemination Area ID (e.g., 48820001)"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude for nearest-DA lookup","title":"Lat"},"description":"Latitude for nearest-DA lookup"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude for nearest-DA lookup","title":"Lon"},"description":"Longitude for nearest-DA lookup"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusProfile"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/port-coquitlam/census/batch":{"post":{"summary":"Get Census Batch","description":"Get multiple census profiles by DA IDs in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of DA IDs.\nExample: {\"ids\": [\"48820001\", \"48820002\"]}\nMaximum 100 DA IDs per request.","operationId":"get_census_batch_api_port_coquitlam_census_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Census Batch Api Port Coquitlam Census Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/port-coquitlam/census/export":{"get":{"summary":"Export Census","description":"Export census data as CSV.\n\nSupports filtering by population range and geography type.\nMaximum 10,000 records per export.","operationId":"export_census_api_port_coquitlam_census_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv only","default":"csv","title":"Format"},"description":"Export format: csv only"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"min_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Minimum population filter","title":"Min Population"},"description":"Minimum population filter"},{"name":"max_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Maximum population filter","title":"Max Population"},"description":"Maximum population filter"},{"name":"geography_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Geography type filter (DA, CT, CMA)","title":"Geography Type"},"description":"Geography type filter (DA, CT, CMA)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/port-coquitlam/census/list":{"get":{"summary":"List Census Profiles","description":"List all census profiles with pagination.\n\nUse this endpoint to browse available census profiles and discover valid DA IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_census_profiles_api_port_coquitlam_census_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Census Profiles Api Port Coquitlam Census List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/port-coquitlam/census/by-gps":{"get":{"summary":"Get Census By Gps","description":"Get census data for GPS coordinates.","operationId":"get_census_by_gps_api_port_coquitlam_census_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90,"minimum":-90,"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":180,"minimum":-180,"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/port-coquitlam/census/by-dls":{"get":{"summary":"Get Census By Dls","description":"Get census data for DLS coordinates.","operationId":"get_census_by_dls_api_port_coquitlam_census_by_dls_get","parameters":[{"name":"dls","in":"query","required":true,"schema":{"type":"string","description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)","title":"Dls"},"description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/port-coquitlam/census/map-data":{"get":{"summary":"Get Census Map Data","description":"Get lightweight DA points for choropleth map rendering.\n\nReturns centroid coordinates and key metrics (income, age, population,\nhousehold size, employment rate) for all DAs in the city.\nUsed by the census dashboard to render color-coded maps.","operationId":"get_census_map_data_api_port_coquitlam_census_map_data_get","parameters":[{"name":"year","in":"query","required":false,"schema":{"type":"integer","description":"Census year for DA map data","default":2021,"title":"Year"},"description":"Census year for DA map data"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/port-coquitlam/census/stats":{"get":{"summary":"Census Stats","description":"Get census data statistics.","operationId":"census_stats_api_port_coquitlam_census_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/port-coquitlam/census/compare":{"get":{"summary":"Census Compare","description":"Compare key census metrics across multiple years.\n\nReturns side-by-side comparison of population, households,\navg_income, median_age, density, and land_area for each requested year.\nYears without data return null for that year's values.","operationId":"census_compare_api_port_coquitlam_census_compare_get","parameters":[{"name":"years","in":"query","required":false,"schema":{"type":"string","description":"Comma-separated census years (e.g., 2016,2021)","default":"2021","title":"Years"},"description":"Comma-separated census years (e.g., 2016,2021)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/port-coquitlam/census/time-series":{"get":{"summary":"Census Timeseries","description":"Get year-by-year census trends for this city.\n\nReturns population, income, age, and household trends across all\navailable census years. Useful for spotting long-term demographic shifts.","operationId":"census_timeseries_api_port_coquitlam_census_time_series_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/port-coquitlam/geography/list":{"get":{"summary":"Geography List","description":"List geography boundaries for this city.","operationId":"geography_list_api_port_coquitlam_geography_list_get","parameters":[{"name":"type","in":"query","required":false,"schema":{"type":"string","title":"Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/port-coquitlam/geography/by-gps":{"get":{"summary":"Geography By Gps","description":"Find the geography boundary containing a GPS point.","operationId":"geography_by_gps_api_port_coquitlam_geography_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","title":"Lat"}},{"name":"lon","in":"query","required":true,"schema":{"type":"number","title":"Lon"}},{"name":"type","in":"query","required":false,"schema":{"type":"string","default":"DA","title":"Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/port-coquitlam/geography/stats":{"get":{"summary":"Geography Stats","description":"Get geography statistics for this city.","operationId":"geography_stats_api_port_coquitlam_geography_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/port-coquitlam/geography/{geoid}":{"get":{"summary":"Geography Boundary","description":"Get a specific geography boundary by geoid, including GeoJSON polygon.","operationId":"geography_boundary_api_port_coquitlam_geography__geoid__get","parameters":[{"name":"geoid","in":"path","required":true,"schema":{"type":"string","title":"Geoid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/port-coquitlam/census/rental/list":{"get":{"summary":"List Rental Prices","description":"List rental price records for this city, with optional unit type filter.","operationId":"list_rental_prices_api_port_coquitlam_census_rental_list_get","parameters":[{"name":"unit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":50,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalPriceListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/port-coquitlam/census/rental/trend":{"get":{"summary":"Get Rental Trend","description":"Get rental price time series for a specific unit type.","operationId":"get_rental_trend_api_port_coquitlam_census_rental_trend_get","parameters":[{"name":"unit_type","in":"query","required":true,"schema":{"type":"string","description":"Rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Rental unit type (e.g. 'Apartment - 1 bedroom')"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalTrendResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/port-coquitlam/census/rental/types":{"get":{"summary":"Get Rental Types","description":"Get available rental unit types for this city.","operationId":"get_rental_types_api_port_coquitlam_census_rental_types_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/port-coquitlam/zoning/by-gps":{"get":{"summary":"Get Zoning By Gps","description":"Get zoning district for GPS coordinates.","operationId":"get_zoning_by_gps_api_port_coquitlam_zoning_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZoningByGPSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/port-coquitlam/zoning/by-id/{district_id}":{"get":{"summary":"Get Zoning By Id","description":"Get a single zoning district by its numeric ID.","operationId":"get_zoning_by_id_api_port_coquitlam_zoning_by_id__district_id__get","parameters":[{"name":"district_id","in":"path","required":true,"schema":{"type":"integer","description":"Zoning district numeric ID","title":"District Id"},"description":"Zoning district numeric ID"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning By Id Api Port Coquitlam Zoning By Id  District Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/port-coquitlam/zoning/by-code/{code}":{"get":{"summary":"Get Zoning By Code","description":"Get all districts with a specific zone code.","operationId":"get_zoning_by_code_api_port_coquitlam_zoning_by_code__code__get","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","description":"Zone code (e.g., C-C1, R-G)","title":"Code"},"description":"Zone code (e.g., C-C1, R-G)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoningDistrict"},"title":"Response Get Zoning By Code Api Port Coquitlam Zoning By Code  Code  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/port-coquitlam/zoning/batch":{"post":{"summary":"Get Zoning Batch","description":"Get multiple zoning districts by zone codes in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of zone codes.\nExample: {\"ids\": [\"CR20-C20/R20\", \"C-C1\", \"R-G\"]}\nMaximum 100 zone codes per request.","operationId":"get_zoning_batch_api_port_coquitlam_zoning_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning Batch Api Port Coquitlam Zoning Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/port-coquitlam/zoning/list":{"get":{"summary":"List Zoning Districts","description":"List all zoning districts with pagination.\n\nUse this endpoint to browse available zoning districts and discover valid IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_zoning_districts_api_port_coquitlam_zoning_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Zoning Districts Api Port Coquitlam Zoning List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/port-coquitlam/zoning/codes":{"get":{"summary":"List Zone Codes","description":"List all zone codes with descriptions.","operationId":"list_zone_codes_api_port_coquitlam_zoning_codes_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"type":"string","description":"Filter by major category (e.g., Commercial, Residential)","title":"Category"},"description":"Filter by major category (e.g., Commercial, Residential)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoneCodeInfo"},"title":"Response List Zone Codes Api Port Coquitlam Zoning Codes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/port-coquitlam/zoning/stats":{"get":{"summary":"Zoning Stats","description":"Get zoning statistics.","operationId":"zoning_stats_api_port_coquitlam_zoning_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/port-coquitlam/zoning/export":{"get":{"summary":"Export Zoning","description":"Export zoning district data as CSV or GeoJSON.\n\nSupports filtering by zone code, category, and area range.\nMaximum 10,000 records per export.","operationId":"export_zoning_api_port_coquitlam_zoning_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"zone_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Zone code filter (e.g., CR2)","title":"Zone Code"},"description":"Zone code filter (e.g., CR2)"},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Major category filter","title":"Category"},"description":"Major category filter"},{"name":"min_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum area in sq km","title":"Min Area"},"description":"Minimum area in sq km"},{"name":"max_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum area in sq km","title":"Max Area"},"description":"Maximum area in sq km"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/port-coquitlam/health":{"get":{"summary":"City Health","description":"City-specific health check.","operationId":"city_health_api_port_coquitlam_health_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/port-moody/entries/{kind}":{"get":{"summary":"List Entries","operationId":"list_entries_api_port_moody_entries__kind__get","parameters":[{"name":"kind","in":"path","required":true,"schema":{"type":"string","description":"Canonical entry kind: property, permit, zoning, or safety","title":"Kind"},"description":"Canonical entry kind: property, permit, zoning, or safety"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"_services","in":"query","required":false,"schema":{"title":" Services"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Entries Api Port Moody Entries  Kind  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/port-moody/census/profile":{"get":{"summary":"Get Census Profile","description":"Get census profile for a specific Dissemination Area.\n\nProvide either da_id directly, OR lat+lon to find the nearest DA automatically.","operationId":"get_census_profile_api_port_moody_census_profile_get","parameters":[{"name":"da_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Dissemination Area ID (e.g., 48820001)","title":"Da Id"},"description":"Dissemination Area ID (e.g., 48820001)"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude for nearest-DA lookup","title":"Lat"},"description":"Latitude for nearest-DA lookup"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude for nearest-DA lookup","title":"Lon"},"description":"Longitude for nearest-DA lookup"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusProfile"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/port-moody/census/batch":{"post":{"summary":"Get Census Batch","description":"Get multiple census profiles by DA IDs in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of DA IDs.\nExample: {\"ids\": [\"48820001\", \"48820002\"]}\nMaximum 100 DA IDs per request.","operationId":"get_census_batch_api_port_moody_census_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Census Batch Api Port Moody Census Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/port-moody/census/export":{"get":{"summary":"Export Census","description":"Export census data as CSV.\n\nSupports filtering by population range and geography type.\nMaximum 10,000 records per export.","operationId":"export_census_api_port_moody_census_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv only","default":"csv","title":"Format"},"description":"Export format: csv only"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"min_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Minimum population filter","title":"Min Population"},"description":"Minimum population filter"},{"name":"max_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Maximum population filter","title":"Max Population"},"description":"Maximum population filter"},{"name":"geography_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Geography type filter (DA, CT, CMA)","title":"Geography Type"},"description":"Geography type filter (DA, CT, CMA)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/port-moody/census/list":{"get":{"summary":"List Census Profiles","description":"List all census profiles with pagination.\n\nUse this endpoint to browse available census profiles and discover valid DA IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_census_profiles_api_port_moody_census_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Census Profiles Api Port Moody Census List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/port-moody/census/by-gps":{"get":{"summary":"Get Census By Gps","description":"Get census data for GPS coordinates.","operationId":"get_census_by_gps_api_port_moody_census_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90,"minimum":-90,"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":180,"minimum":-180,"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/port-moody/census/by-dls":{"get":{"summary":"Get Census By Dls","description":"Get census data for DLS coordinates.","operationId":"get_census_by_dls_api_port_moody_census_by_dls_get","parameters":[{"name":"dls","in":"query","required":true,"schema":{"type":"string","description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)","title":"Dls"},"description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/port-moody/census/map-data":{"get":{"summary":"Get Census Map Data","description":"Get lightweight DA points for choropleth map rendering.\n\nReturns centroid coordinates and key metrics (income, age, population,\nhousehold size, employment rate) for all DAs in the city.\nUsed by the census dashboard to render color-coded maps.","operationId":"get_census_map_data_api_port_moody_census_map_data_get","parameters":[{"name":"year","in":"query","required":false,"schema":{"type":"integer","description":"Census year for DA map data","default":2021,"title":"Year"},"description":"Census year for DA map data"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/port-moody/census/stats":{"get":{"summary":"Census Stats","description":"Get census data statistics.","operationId":"census_stats_api_port_moody_census_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/port-moody/census/compare":{"get":{"summary":"Census Compare","description":"Compare key census metrics across multiple years.\n\nReturns side-by-side comparison of population, households,\navg_income, median_age, density, and land_area for each requested year.\nYears without data return null for that year's values.","operationId":"census_compare_api_port_moody_census_compare_get","parameters":[{"name":"years","in":"query","required":false,"schema":{"type":"string","description":"Comma-separated census years (e.g., 2016,2021)","default":"2021","title":"Years"},"description":"Comma-separated census years (e.g., 2016,2021)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/port-moody/census/time-series":{"get":{"summary":"Census Timeseries","description":"Get year-by-year census trends for this city.\n\nReturns population, income, age, and household trends across all\navailable census years. Useful for spotting long-term demographic shifts.","operationId":"census_timeseries_api_port_moody_census_time_series_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/port-moody/geography/list":{"get":{"summary":"Geography List","description":"List geography boundaries for this city.","operationId":"geography_list_api_port_moody_geography_list_get","parameters":[{"name":"type","in":"query","required":false,"schema":{"type":"string","title":"Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/port-moody/geography/by-gps":{"get":{"summary":"Geography By Gps","description":"Find the geography boundary containing a GPS point.","operationId":"geography_by_gps_api_port_moody_geography_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","title":"Lat"}},{"name":"lon","in":"query","required":true,"schema":{"type":"number","title":"Lon"}},{"name":"type","in":"query","required":false,"schema":{"type":"string","default":"DA","title":"Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/port-moody/geography/stats":{"get":{"summary":"Geography Stats","description":"Get geography statistics for this city.","operationId":"geography_stats_api_port_moody_geography_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/port-moody/geography/{geoid}":{"get":{"summary":"Geography Boundary","description":"Get a specific geography boundary by geoid, including GeoJSON polygon.","operationId":"geography_boundary_api_port_moody_geography__geoid__get","parameters":[{"name":"geoid","in":"path","required":true,"schema":{"type":"string","title":"Geoid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/port-moody/census/rental/list":{"get":{"summary":"List Rental Prices","description":"List rental price records for this city, with optional unit type filter.","operationId":"list_rental_prices_api_port_moody_census_rental_list_get","parameters":[{"name":"unit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":50,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalPriceListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/port-moody/census/rental/trend":{"get":{"summary":"Get Rental Trend","description":"Get rental price time series for a specific unit type.","operationId":"get_rental_trend_api_port_moody_census_rental_trend_get","parameters":[{"name":"unit_type","in":"query","required":true,"schema":{"type":"string","description":"Rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Rental unit type (e.g. 'Apartment - 1 bedroom')"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalTrendResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/port-moody/census/rental/types":{"get":{"summary":"Get Rental Types","description":"Get available rental unit types for this city.","operationId":"get_rental_types_api_port_moody_census_rental_types_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/port-moody/zoning/by-gps":{"get":{"summary":"Get Zoning By Gps","description":"Get zoning district for GPS coordinates.","operationId":"get_zoning_by_gps_api_port_moody_zoning_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZoningByGPSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/port-moody/zoning/by-id/{district_id}":{"get":{"summary":"Get Zoning By Id","description":"Get a single zoning district by its numeric ID.","operationId":"get_zoning_by_id_api_port_moody_zoning_by_id__district_id__get","parameters":[{"name":"district_id","in":"path","required":true,"schema":{"type":"integer","description":"Zoning district numeric ID","title":"District Id"},"description":"Zoning district numeric ID"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning By Id Api Port Moody Zoning By Id  District Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/port-moody/zoning/by-code/{code}":{"get":{"summary":"Get Zoning By Code","description":"Get all districts with a specific zone code.","operationId":"get_zoning_by_code_api_port_moody_zoning_by_code__code__get","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","description":"Zone code (e.g., C-C1, R-G)","title":"Code"},"description":"Zone code (e.g., C-C1, R-G)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoningDistrict"},"title":"Response Get Zoning By Code Api Port Moody Zoning By Code  Code  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/port-moody/zoning/batch":{"post":{"summary":"Get Zoning Batch","description":"Get multiple zoning districts by zone codes in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of zone codes.\nExample: {\"ids\": [\"CR20-C20/R20\", \"C-C1\", \"R-G\"]}\nMaximum 100 zone codes per request.","operationId":"get_zoning_batch_api_port_moody_zoning_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning Batch Api Port Moody Zoning Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/port-moody/zoning/list":{"get":{"summary":"List Zoning Districts","description":"List all zoning districts with pagination.\n\nUse this endpoint to browse available zoning districts and discover valid IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_zoning_districts_api_port_moody_zoning_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Zoning Districts Api Port Moody Zoning List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/port-moody/zoning/codes":{"get":{"summary":"List Zone Codes","description":"List all zone codes with descriptions.","operationId":"list_zone_codes_api_port_moody_zoning_codes_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"type":"string","description":"Filter by major category (e.g., Commercial, Residential)","title":"Category"},"description":"Filter by major category (e.g., Commercial, Residential)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoneCodeInfo"},"title":"Response List Zone Codes Api Port Moody Zoning Codes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/port-moody/zoning/stats":{"get":{"summary":"Zoning Stats","description":"Get zoning statistics.","operationId":"zoning_stats_api_port_moody_zoning_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/port-moody/zoning/export":{"get":{"summary":"Export Zoning","description":"Export zoning district data as CSV or GeoJSON.\n\nSupports filtering by zone code, category, and area range.\nMaximum 10,000 records per export.","operationId":"export_zoning_api_port_moody_zoning_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"zone_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Zone code filter (e.g., CR2)","title":"Zone Code"},"description":"Zone code filter (e.g., CR2)"},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Major category filter","title":"Category"},"description":"Major category filter"},{"name":"min_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum area in sq km","title":"Min Area"},"description":"Minimum area in sq km"},{"name":"max_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum area in sq km","title":"Max Area"},"description":"Maximum area in sq km"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/port-moody/permits/stats":{"get":{"summary":"Building Stats","description":"Get building permit statistics.","operationId":"building_stats_api_port_moody_permits_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/port-moody/permits/search":{"get":{"summary":"Search Building Permits","description":"Search building permits by address, contractor, applicant, permit number, and/or permit type.","operationId":"search_building_permits_api_port_moody_permits_search_get","parameters":[{"name":"address","in":"query","required":false,"schema":{"type":"string","description":"Address to search","title":"Address"},"description":"Address to search"},{"name":"q","in":"query","required":false,"schema":{"type":"string","description":"General text search (address, contractor, applicant, permit #)","title":"Q"},"description":"General text search (address, contractor, applicant, permit #)"},{"name":"permit_type","in":"query","required":false,"schema":{"type":"string","description":"Filter by permit type","title":"Permit Type"},"description":"Filter by permit type"},{"name":"bbox","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bounding box: min_lon,min_lat,max_lon,max_lat","title":"Bbox"},"description":"Bounding box: min_lon,min_lat,max_lon,max_lat"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max results","default":20,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset","default":0,"title":"Offset"},"description":"Results offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/port-moody/permits/nearby":{"get":{"summary":"Nearby Building Permits","description":"Coordinate-first alias for nearby building permits.","operationId":"nearby_building_permits_api_port_moody_permits_nearby_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":84.0,"minimum":41.0,"description":"Canadian latitude","title":"Lat"},"description":"Canadian latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":-52.0,"minimum":-142.0,"description":"Canadian longitude","title":"Lon"},"description":"Canadian longitude"},{"name":"radius_m","in":"query","required":false,"schema":{"type":"integer","maximum":50000,"minimum":1,"default":1000,"title":"Radius M"}},{"name":"permit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Permit Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/port-moody/permits/export":{"get":{"summary":"Export Building Permits","description":"Export building permit data as CSV or GeoJSON.\n\nSupports filtering by address, permit type, and date range.\nMaximum 10,000 records per export.","operationId":"export_building_permits_api_port_moody_permits_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Address filter","title":"Address"},"description":"Address filter"},{"name":"permit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Permit type filter","title":"Permit Type"},"description":"Permit type filter"},{"name":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Start date (YYYY-MM-DD)","title":"Date From"},"description":"Start date (YYYY-MM-DD)"},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"End date (YYYY-MM-DD)","title":"Date To"},"description":"End date (YYYY-MM-DD)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/port-moody/permits/recent":{"get":{"summary":"Recent Building Permits","description":"Get recent building permits sorted by application date (newest first).\n\nUse this to see where construction activity is happening right now.","operationId":"recent_building_permits_api_port_moody_permits_recent_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Max results","default":20,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset","default":0,"title":"Offset"},"description":"Results offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/port-moody/permits/batch":{"post":{"summary":"Get Building Permits Batch","description":"Get multiple building permits by permit numbers in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of permit numbers.\nExample: {\"ids\": [\"BP123456\", \"BP789012\"]}\nMaximum 100 permit numbers per request.","operationId":"get_building_permits_batch_api_port_moody_permits_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Building Permits Batch Api Port Moody Permits Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/port-moody/permits/{permit_number}":{"get":{"summary":"Get Building Permit","description":"Get building permit details by permit number.\n\nServes HTML for browsers, JSON for API clients.","operationId":"get_building_permit_api_port_moody_permits__permit_number__get","parameters":[{"name":"permit_number","in":"path","required":true,"schema":{"type":"string","description":"Permit number","title":"Permit Number"},"description":"Permit number"},{"name":"_city_name","in":"query","required":false,"schema":{"default":"Port Moody","title":" City Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/port-moody/health":{"get":{"summary":"City Health","description":"City-specific health check.","operationId":"city_health_api_port_moody_health_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/nanaimo/entries/{kind}":{"get":{"summary":"List Entries","operationId":"list_entries_api_nanaimo_entries__kind__get","parameters":[{"name":"kind","in":"path","required":true,"schema":{"type":"string","description":"Canonical entry kind: property, permit, zoning, or safety","title":"Kind"},"description":"Canonical entry kind: property, permit, zoning, or safety"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"_services","in":"query","required":false,"schema":{"title":" Services"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Entries Api Nanaimo Entries  Kind  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/nanaimo/census/profile":{"get":{"summary":"Get Census Profile","description":"Get census profile for a specific Dissemination Area.\n\nProvide either da_id directly, OR lat+lon to find the nearest DA automatically.","operationId":"get_census_profile_api_nanaimo_census_profile_get","parameters":[{"name":"da_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Dissemination Area ID (e.g., 48820001)","title":"Da Id"},"description":"Dissemination Area ID (e.g., 48820001)"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude for nearest-DA lookup","title":"Lat"},"description":"Latitude for nearest-DA lookup"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude for nearest-DA lookup","title":"Lon"},"description":"Longitude for nearest-DA lookup"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusProfile"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/nanaimo/census/batch":{"post":{"summary":"Get Census Batch","description":"Get multiple census profiles by DA IDs in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of DA IDs.\nExample: {\"ids\": [\"48820001\", \"48820002\"]}\nMaximum 100 DA IDs per request.","operationId":"get_census_batch_api_nanaimo_census_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Census Batch Api Nanaimo Census Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/nanaimo/census/export":{"get":{"summary":"Export Census","description":"Export census data as CSV.\n\nSupports filtering by population range and geography type.\nMaximum 10,000 records per export.","operationId":"export_census_api_nanaimo_census_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv only","default":"csv","title":"Format"},"description":"Export format: csv only"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"min_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Minimum population filter","title":"Min Population"},"description":"Minimum population filter"},{"name":"max_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Maximum population filter","title":"Max Population"},"description":"Maximum population filter"},{"name":"geography_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Geography type filter (DA, CT, CMA)","title":"Geography Type"},"description":"Geography type filter (DA, CT, CMA)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/nanaimo/census/list":{"get":{"summary":"List Census Profiles","description":"List all census profiles with pagination.\n\nUse this endpoint to browse available census profiles and discover valid DA IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_census_profiles_api_nanaimo_census_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Census Profiles Api Nanaimo Census List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/nanaimo/census/by-gps":{"get":{"summary":"Get Census By Gps","description":"Get census data for GPS coordinates.","operationId":"get_census_by_gps_api_nanaimo_census_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90,"minimum":-90,"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":180,"minimum":-180,"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/nanaimo/census/by-dls":{"get":{"summary":"Get Census By Dls","description":"Get census data for DLS coordinates.","operationId":"get_census_by_dls_api_nanaimo_census_by_dls_get","parameters":[{"name":"dls","in":"query","required":true,"schema":{"type":"string","description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)","title":"Dls"},"description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/nanaimo/census/map-data":{"get":{"summary":"Get Census Map Data","description":"Get lightweight DA points for choropleth map rendering.\n\nReturns centroid coordinates and key metrics (income, age, population,\nhousehold size, employment rate) for all DAs in the city.\nUsed by the census dashboard to render color-coded maps.","operationId":"get_census_map_data_api_nanaimo_census_map_data_get","parameters":[{"name":"year","in":"query","required":false,"schema":{"type":"integer","description":"Census year for DA map data","default":2021,"title":"Year"},"description":"Census year for DA map data"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/nanaimo/census/stats":{"get":{"summary":"Census Stats","description":"Get census data statistics.","operationId":"census_stats_api_nanaimo_census_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/nanaimo/census/compare":{"get":{"summary":"Census Compare","description":"Compare key census metrics across multiple years.\n\nReturns side-by-side comparison of population, households,\navg_income, median_age, density, and land_area for each requested year.\nYears without data return null for that year's values.","operationId":"census_compare_api_nanaimo_census_compare_get","parameters":[{"name":"years","in":"query","required":false,"schema":{"type":"string","description":"Comma-separated census years (e.g., 2016,2021)","default":"2021","title":"Years"},"description":"Comma-separated census years (e.g., 2016,2021)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/nanaimo/census/time-series":{"get":{"summary":"Census Timeseries","description":"Get year-by-year census trends for this city.\n\nReturns population, income, age, and household trends across all\navailable census years. Useful for spotting long-term demographic shifts.","operationId":"census_timeseries_api_nanaimo_census_time_series_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/nanaimo/geography/list":{"get":{"summary":"Geography List","description":"List geography boundaries for this city.","operationId":"geography_list_api_nanaimo_geography_list_get","parameters":[{"name":"type","in":"query","required":false,"schema":{"type":"string","title":"Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/nanaimo/geography/by-gps":{"get":{"summary":"Geography By Gps","description":"Find the geography boundary containing a GPS point.","operationId":"geography_by_gps_api_nanaimo_geography_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","title":"Lat"}},{"name":"lon","in":"query","required":true,"schema":{"type":"number","title":"Lon"}},{"name":"type","in":"query","required":false,"schema":{"type":"string","default":"DA","title":"Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/nanaimo/geography/stats":{"get":{"summary":"Geography Stats","description":"Get geography statistics for this city.","operationId":"geography_stats_api_nanaimo_geography_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/nanaimo/geography/{geoid}":{"get":{"summary":"Geography Boundary","description":"Get a specific geography boundary by geoid, including GeoJSON polygon.","operationId":"geography_boundary_api_nanaimo_geography__geoid__get","parameters":[{"name":"geoid","in":"path","required":true,"schema":{"type":"string","title":"Geoid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/nanaimo/census/rental/list":{"get":{"summary":"List Rental Prices","description":"List rental price records for this city, with optional unit type filter.","operationId":"list_rental_prices_api_nanaimo_census_rental_list_get","parameters":[{"name":"unit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":50,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalPriceListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/nanaimo/census/rental/trend":{"get":{"summary":"Get Rental Trend","description":"Get rental price time series for a specific unit type.","operationId":"get_rental_trend_api_nanaimo_census_rental_trend_get","parameters":[{"name":"unit_type","in":"query","required":true,"schema":{"type":"string","description":"Rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Rental unit type (e.g. 'Apartment - 1 bedroom')"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalTrendResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/nanaimo/census/rental/types":{"get":{"summary":"Get Rental Types","description":"Get available rental unit types for this city.","operationId":"get_rental_types_api_nanaimo_census_rental_types_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/nanaimo/zoning/by-gps":{"get":{"summary":"Get Zoning By Gps","description":"Get zoning district for GPS coordinates.","operationId":"get_zoning_by_gps_api_nanaimo_zoning_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZoningByGPSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/nanaimo/zoning/by-id/{district_id}":{"get":{"summary":"Get Zoning By Id","description":"Get a single zoning district by its numeric ID.","operationId":"get_zoning_by_id_api_nanaimo_zoning_by_id__district_id__get","parameters":[{"name":"district_id","in":"path","required":true,"schema":{"type":"integer","description":"Zoning district numeric ID","title":"District Id"},"description":"Zoning district numeric ID"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning By Id Api Nanaimo Zoning By Id  District Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/nanaimo/zoning/by-code/{code}":{"get":{"summary":"Get Zoning By Code","description":"Get all districts with a specific zone code.","operationId":"get_zoning_by_code_api_nanaimo_zoning_by_code__code__get","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","description":"Zone code (e.g., C-C1, R-G)","title":"Code"},"description":"Zone code (e.g., C-C1, R-G)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoningDistrict"},"title":"Response Get Zoning By Code Api Nanaimo Zoning By Code  Code  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/nanaimo/zoning/batch":{"post":{"summary":"Get Zoning Batch","description":"Get multiple zoning districts by zone codes in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of zone codes.\nExample: {\"ids\": [\"CR20-C20/R20\", \"C-C1\", \"R-G\"]}\nMaximum 100 zone codes per request.","operationId":"get_zoning_batch_api_nanaimo_zoning_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning Batch Api Nanaimo Zoning Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/nanaimo/zoning/list":{"get":{"summary":"List Zoning Districts","description":"List all zoning districts with pagination.\n\nUse this endpoint to browse available zoning districts and discover valid IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_zoning_districts_api_nanaimo_zoning_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Zoning Districts Api Nanaimo Zoning List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/nanaimo/zoning/codes":{"get":{"summary":"List Zone Codes","description":"List all zone codes with descriptions.","operationId":"list_zone_codes_api_nanaimo_zoning_codes_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"type":"string","description":"Filter by major category (e.g., Commercial, Residential)","title":"Category"},"description":"Filter by major category (e.g., Commercial, Residential)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoneCodeInfo"},"title":"Response List Zone Codes Api Nanaimo Zoning Codes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/nanaimo/zoning/stats":{"get":{"summary":"Zoning Stats","description":"Get zoning statistics.","operationId":"zoning_stats_api_nanaimo_zoning_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/nanaimo/zoning/export":{"get":{"summary":"Export Zoning","description":"Export zoning district data as CSV or GeoJSON.\n\nSupports filtering by zone code, category, and area range.\nMaximum 10,000 records per export.","operationId":"export_zoning_api_nanaimo_zoning_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"zone_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Zone code filter (e.g., CR2)","title":"Zone Code"},"description":"Zone code filter (e.g., CR2)"},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Major category filter","title":"Category"},"description":"Major category filter"},{"name":"min_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum area in sq km","title":"Min Area"},"description":"Minimum area in sq km"},{"name":"max_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum area in sq km","title":"Max Area"},"description":"Maximum area in sq km"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/nanaimo/health":{"get":{"summary":"City Health","description":"City-specific health check.","operationId":"city_health_api_nanaimo_health_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kamloops/entries/{kind}":{"get":{"summary":"List Entries","operationId":"list_entries_api_kamloops_entries__kind__get","parameters":[{"name":"kind","in":"path","required":true,"schema":{"type":"string","description":"Canonical entry kind: property, permit, zoning, or safety","title":"Kind"},"description":"Canonical entry kind: property, permit, zoning, or safety"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"_services","in":"query","required":false,"schema":{"title":" Services"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Entries Api Kamloops Entries  Kind  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kamloops/census/profile":{"get":{"summary":"Get Census Profile","description":"Get census profile for a specific Dissemination Area.\n\nProvide either da_id directly, OR lat+lon to find the nearest DA automatically.","operationId":"get_census_profile_api_kamloops_census_profile_get","parameters":[{"name":"da_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Dissemination Area ID (e.g., 48820001)","title":"Da Id"},"description":"Dissemination Area ID (e.g., 48820001)"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude for nearest-DA lookup","title":"Lat"},"description":"Latitude for nearest-DA lookup"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude for nearest-DA lookup","title":"Lon"},"description":"Longitude for nearest-DA lookup"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusProfile"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kamloops/census/batch":{"post":{"summary":"Get Census Batch","description":"Get multiple census profiles by DA IDs in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of DA IDs.\nExample: {\"ids\": [\"48820001\", \"48820002\"]}\nMaximum 100 DA IDs per request.","operationId":"get_census_batch_api_kamloops_census_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Census Batch Api Kamloops Census Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kamloops/census/export":{"get":{"summary":"Export Census","description":"Export census data as CSV.\n\nSupports filtering by population range and geography type.\nMaximum 10,000 records per export.","operationId":"export_census_api_kamloops_census_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv only","default":"csv","title":"Format"},"description":"Export format: csv only"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"min_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Minimum population filter","title":"Min Population"},"description":"Minimum population filter"},{"name":"max_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Maximum population filter","title":"Max Population"},"description":"Maximum population filter"},{"name":"geography_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Geography type filter (DA, CT, CMA)","title":"Geography Type"},"description":"Geography type filter (DA, CT, CMA)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kamloops/census/list":{"get":{"summary":"List Census Profiles","description":"List all census profiles with pagination.\n\nUse this endpoint to browse available census profiles and discover valid DA IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_census_profiles_api_kamloops_census_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Census Profiles Api Kamloops Census List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kamloops/census/by-gps":{"get":{"summary":"Get Census By Gps","description":"Get census data for GPS coordinates.","operationId":"get_census_by_gps_api_kamloops_census_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90,"minimum":-90,"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":180,"minimum":-180,"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kamloops/census/by-dls":{"get":{"summary":"Get Census By Dls","description":"Get census data for DLS coordinates.","operationId":"get_census_by_dls_api_kamloops_census_by_dls_get","parameters":[{"name":"dls","in":"query","required":true,"schema":{"type":"string","description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)","title":"Dls"},"description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kamloops/census/map-data":{"get":{"summary":"Get Census Map Data","description":"Get lightweight DA points for choropleth map rendering.\n\nReturns centroid coordinates and key metrics (income, age, population,\nhousehold size, employment rate) for all DAs in the city.\nUsed by the census dashboard to render color-coded maps.","operationId":"get_census_map_data_api_kamloops_census_map_data_get","parameters":[{"name":"year","in":"query","required":false,"schema":{"type":"integer","description":"Census year for DA map data","default":2021,"title":"Year"},"description":"Census year for DA map data"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kamloops/census/stats":{"get":{"summary":"Census Stats","description":"Get census data statistics.","operationId":"census_stats_api_kamloops_census_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kamloops/census/compare":{"get":{"summary":"Census Compare","description":"Compare key census metrics across multiple years.\n\nReturns side-by-side comparison of population, households,\navg_income, median_age, density, and land_area for each requested year.\nYears without data return null for that year's values.","operationId":"census_compare_api_kamloops_census_compare_get","parameters":[{"name":"years","in":"query","required":false,"schema":{"type":"string","description":"Comma-separated census years (e.g., 2016,2021)","default":"2021","title":"Years"},"description":"Comma-separated census years (e.g., 2016,2021)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kamloops/census/time-series":{"get":{"summary":"Census Timeseries","description":"Get year-by-year census trends for this city.\n\nReturns population, income, age, and household trends across all\navailable census years. Useful for spotting long-term demographic shifts.","operationId":"census_timeseries_api_kamloops_census_time_series_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kamloops/geography/list":{"get":{"summary":"Geography List","description":"List geography boundaries for this city.","operationId":"geography_list_api_kamloops_geography_list_get","parameters":[{"name":"type","in":"query","required":false,"schema":{"type":"string","title":"Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kamloops/geography/by-gps":{"get":{"summary":"Geography By Gps","description":"Find the geography boundary containing a GPS point.","operationId":"geography_by_gps_api_kamloops_geography_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","title":"Lat"}},{"name":"lon","in":"query","required":true,"schema":{"type":"number","title":"Lon"}},{"name":"type","in":"query","required":false,"schema":{"type":"string","default":"DA","title":"Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kamloops/geography/stats":{"get":{"summary":"Geography Stats","description":"Get geography statistics for this city.","operationId":"geography_stats_api_kamloops_geography_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kamloops/geography/{geoid}":{"get":{"summary":"Geography Boundary","description":"Get a specific geography boundary by geoid, including GeoJSON polygon.","operationId":"geography_boundary_api_kamloops_geography__geoid__get","parameters":[{"name":"geoid","in":"path","required":true,"schema":{"type":"string","title":"Geoid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kamloops/census/rental/list":{"get":{"summary":"List Rental Prices","description":"List rental price records for this city, with optional unit type filter.","operationId":"list_rental_prices_api_kamloops_census_rental_list_get","parameters":[{"name":"unit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":50,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalPriceListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kamloops/census/rental/trend":{"get":{"summary":"Get Rental Trend","description":"Get rental price time series for a specific unit type.","operationId":"get_rental_trend_api_kamloops_census_rental_trend_get","parameters":[{"name":"unit_type","in":"query","required":true,"schema":{"type":"string","description":"Rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Rental unit type (e.g. 'Apartment - 1 bedroom')"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalTrendResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kamloops/census/rental/types":{"get":{"summary":"Get Rental Types","description":"Get available rental unit types for this city.","operationId":"get_rental_types_api_kamloops_census_rental_types_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kamloops/zoning/by-gps":{"get":{"summary":"Get Zoning By Gps","description":"Get zoning district for GPS coordinates.","operationId":"get_zoning_by_gps_api_kamloops_zoning_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZoningByGPSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kamloops/zoning/by-id/{district_id}":{"get":{"summary":"Get Zoning By Id","description":"Get a single zoning district by its numeric ID.","operationId":"get_zoning_by_id_api_kamloops_zoning_by_id__district_id__get","parameters":[{"name":"district_id","in":"path","required":true,"schema":{"type":"integer","description":"Zoning district numeric ID","title":"District Id"},"description":"Zoning district numeric ID"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning By Id Api Kamloops Zoning By Id  District Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kamloops/zoning/by-code/{code}":{"get":{"summary":"Get Zoning By Code","description":"Get all districts with a specific zone code.","operationId":"get_zoning_by_code_api_kamloops_zoning_by_code__code__get","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","description":"Zone code (e.g., C-C1, R-G)","title":"Code"},"description":"Zone code (e.g., C-C1, R-G)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoningDistrict"},"title":"Response Get Zoning By Code Api Kamloops Zoning By Code  Code  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kamloops/zoning/batch":{"post":{"summary":"Get Zoning Batch","description":"Get multiple zoning districts by zone codes in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of zone codes.\nExample: {\"ids\": [\"CR20-C20/R20\", \"C-C1\", \"R-G\"]}\nMaximum 100 zone codes per request.","operationId":"get_zoning_batch_api_kamloops_zoning_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning Batch Api Kamloops Zoning Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kamloops/zoning/list":{"get":{"summary":"List Zoning Districts","description":"List all zoning districts with pagination.\n\nUse this endpoint to browse available zoning districts and discover valid IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_zoning_districts_api_kamloops_zoning_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Zoning Districts Api Kamloops Zoning List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kamloops/zoning/codes":{"get":{"summary":"List Zone Codes","description":"List all zone codes with descriptions.","operationId":"list_zone_codes_api_kamloops_zoning_codes_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"type":"string","description":"Filter by major category (e.g., Commercial, Residential)","title":"Category"},"description":"Filter by major category (e.g., Commercial, Residential)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoneCodeInfo"},"title":"Response List Zone Codes Api Kamloops Zoning Codes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kamloops/zoning/stats":{"get":{"summary":"Zoning Stats","description":"Get zoning statistics.","operationId":"zoning_stats_api_kamloops_zoning_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kamloops/zoning/export":{"get":{"summary":"Export Zoning","description":"Export zoning district data as CSV or GeoJSON.\n\nSupports filtering by zone code, category, and area range.\nMaximum 10,000 records per export.","operationId":"export_zoning_api_kamloops_zoning_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"zone_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Zone code filter (e.g., CR2)","title":"Zone Code"},"description":"Zone code filter (e.g., CR2)"},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Major category filter","title":"Category"},"description":"Major category filter"},{"name":"min_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum area in sq km","title":"Min Area"},"description":"Minimum area in sq km"},{"name":"max_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum area in sq km","title":"Max Area"},"description":"Maximum area in sq km"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kamloops/permits/stats":{"get":{"summary":"Building Stats","description":"Get building permit statistics.","operationId":"building_stats_api_kamloops_permits_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kamloops/permits/search":{"get":{"summary":"Search Building Permits","description":"Search building permits by address, contractor, applicant, permit number, and/or permit type.","operationId":"search_building_permits_api_kamloops_permits_search_get","parameters":[{"name":"address","in":"query","required":false,"schema":{"type":"string","description":"Address to search","title":"Address"},"description":"Address to search"},{"name":"q","in":"query","required":false,"schema":{"type":"string","description":"General text search (address, contractor, applicant, permit #)","title":"Q"},"description":"General text search (address, contractor, applicant, permit #)"},{"name":"permit_type","in":"query","required":false,"schema":{"type":"string","description":"Filter by permit type","title":"Permit Type"},"description":"Filter by permit type"},{"name":"bbox","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bounding box: min_lon,min_lat,max_lon,max_lat","title":"Bbox"},"description":"Bounding box: min_lon,min_lat,max_lon,max_lat"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max results","default":20,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset","default":0,"title":"Offset"},"description":"Results offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kamloops/permits/nearby":{"get":{"summary":"Nearby Building Permits","description":"Coordinate-first alias for nearby building permits.","operationId":"nearby_building_permits_api_kamloops_permits_nearby_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":84.0,"minimum":41.0,"description":"Canadian latitude","title":"Lat"},"description":"Canadian latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":-52.0,"minimum":-142.0,"description":"Canadian longitude","title":"Lon"},"description":"Canadian longitude"},{"name":"radius_m","in":"query","required":false,"schema":{"type":"integer","maximum":50000,"minimum":1,"default":1000,"title":"Radius M"}},{"name":"permit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Permit Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kamloops/permits/export":{"get":{"summary":"Export Building Permits","description":"Export building permit data as CSV or GeoJSON.\n\nSupports filtering by address, permit type, and date range.\nMaximum 10,000 records per export.","operationId":"export_building_permits_api_kamloops_permits_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Address filter","title":"Address"},"description":"Address filter"},{"name":"permit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Permit type filter","title":"Permit Type"},"description":"Permit type filter"},{"name":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Start date (YYYY-MM-DD)","title":"Date From"},"description":"Start date (YYYY-MM-DD)"},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"End date (YYYY-MM-DD)","title":"Date To"},"description":"End date (YYYY-MM-DD)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kamloops/permits/recent":{"get":{"summary":"Recent Building Permits","description":"Get recent building permits sorted by application date (newest first).\n\nUse this to see where construction activity is happening right now.","operationId":"recent_building_permits_api_kamloops_permits_recent_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Max results","default":20,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset","default":0,"title":"Offset"},"description":"Results offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kamloops/permits/batch":{"post":{"summary":"Get Building Permits Batch","description":"Get multiple building permits by permit numbers in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of permit numbers.\nExample: {\"ids\": [\"BP123456\", \"BP789012\"]}\nMaximum 100 permit numbers per request.","operationId":"get_building_permits_batch_api_kamloops_permits_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Building Permits Batch Api Kamloops Permits Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kamloops/permits/{permit_number}":{"get":{"summary":"Get Building Permit","description":"Get building permit details by permit number.\n\nServes HTML for browsers, JSON for API clients.","operationId":"get_building_permit_api_kamloops_permits__permit_number__get","parameters":[{"name":"permit_number","in":"path","required":true,"schema":{"type":"string","description":"Permit number","title":"Permit Number"},"description":"Permit number"},{"name":"_city_name","in":"query","required":false,"schema":{"default":"Kamloops","title":" City Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/kamloops/health":{"get":{"summary":"City Health","description":"City-specific health check.","operationId":"city_health_api_kamloops_health_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/chilliwack/entries/{kind}":{"get":{"summary":"List Entries","operationId":"list_entries_api_chilliwack_entries__kind__get","parameters":[{"name":"kind","in":"path","required":true,"schema":{"type":"string","description":"Canonical entry kind: property, permit, zoning, or safety","title":"Kind"},"description":"Canonical entry kind: property, permit, zoning, or safety"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"_services","in":"query","required":false,"schema":{"title":" Services"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Entries Api Chilliwack Entries  Kind  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/chilliwack/census/profile":{"get":{"summary":"Get Census Profile","description":"Get census profile for a specific Dissemination Area.\n\nProvide either da_id directly, OR lat+lon to find the nearest DA automatically.","operationId":"get_census_profile_api_chilliwack_census_profile_get","parameters":[{"name":"da_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Dissemination Area ID (e.g., 48820001)","title":"Da Id"},"description":"Dissemination Area ID (e.g., 48820001)"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude for nearest-DA lookup","title":"Lat"},"description":"Latitude for nearest-DA lookup"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude for nearest-DA lookup","title":"Lon"},"description":"Longitude for nearest-DA lookup"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusProfile"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/chilliwack/census/batch":{"post":{"summary":"Get Census Batch","description":"Get multiple census profiles by DA IDs in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of DA IDs.\nExample: {\"ids\": [\"48820001\", \"48820002\"]}\nMaximum 100 DA IDs per request.","operationId":"get_census_batch_api_chilliwack_census_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Census Batch Api Chilliwack Census Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/chilliwack/census/export":{"get":{"summary":"Export Census","description":"Export census data as CSV.\n\nSupports filtering by population range and geography type.\nMaximum 10,000 records per export.","operationId":"export_census_api_chilliwack_census_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv only","default":"csv","title":"Format"},"description":"Export format: csv only"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"min_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Minimum population filter","title":"Min Population"},"description":"Minimum population filter"},{"name":"max_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Maximum population filter","title":"Max Population"},"description":"Maximum population filter"},{"name":"geography_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Geography type filter (DA, CT, CMA)","title":"Geography Type"},"description":"Geography type filter (DA, CT, CMA)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/chilliwack/census/list":{"get":{"summary":"List Census Profiles","description":"List all census profiles with pagination.\n\nUse this endpoint to browse available census profiles and discover valid DA IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_census_profiles_api_chilliwack_census_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Census Profiles Api Chilliwack Census List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/chilliwack/census/by-gps":{"get":{"summary":"Get Census By Gps","description":"Get census data for GPS coordinates.","operationId":"get_census_by_gps_api_chilliwack_census_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90,"minimum":-90,"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":180,"minimum":-180,"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/chilliwack/census/by-dls":{"get":{"summary":"Get Census By Dls","description":"Get census data for DLS coordinates.","operationId":"get_census_by_dls_api_chilliwack_census_by_dls_get","parameters":[{"name":"dls","in":"query","required":true,"schema":{"type":"string","description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)","title":"Dls"},"description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/chilliwack/census/map-data":{"get":{"summary":"Get Census Map Data","description":"Get lightweight DA points for choropleth map rendering.\n\nReturns centroid coordinates and key metrics (income, age, population,\nhousehold size, employment rate) for all DAs in the city.\nUsed by the census dashboard to render color-coded maps.","operationId":"get_census_map_data_api_chilliwack_census_map_data_get","parameters":[{"name":"year","in":"query","required":false,"schema":{"type":"integer","description":"Census year for DA map data","default":2021,"title":"Year"},"description":"Census year for DA map data"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/chilliwack/census/stats":{"get":{"summary":"Census Stats","description":"Get census data statistics.","operationId":"census_stats_api_chilliwack_census_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/chilliwack/census/compare":{"get":{"summary":"Census Compare","description":"Compare key census metrics across multiple years.\n\nReturns side-by-side comparison of population, households,\navg_income, median_age, density, and land_area for each requested year.\nYears without data return null for that year's values.","operationId":"census_compare_api_chilliwack_census_compare_get","parameters":[{"name":"years","in":"query","required":false,"schema":{"type":"string","description":"Comma-separated census years (e.g., 2016,2021)","default":"2021","title":"Years"},"description":"Comma-separated census years (e.g., 2016,2021)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/chilliwack/census/time-series":{"get":{"summary":"Census Timeseries","description":"Get year-by-year census trends for this city.\n\nReturns population, income, age, and household trends across all\navailable census years. Useful for spotting long-term demographic shifts.","operationId":"census_timeseries_api_chilliwack_census_time_series_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/chilliwack/geography/list":{"get":{"summary":"Geography List","description":"List geography boundaries for this city.","operationId":"geography_list_api_chilliwack_geography_list_get","parameters":[{"name":"type","in":"query","required":false,"schema":{"type":"string","title":"Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/chilliwack/geography/by-gps":{"get":{"summary":"Geography By Gps","description":"Find the geography boundary containing a GPS point.","operationId":"geography_by_gps_api_chilliwack_geography_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","title":"Lat"}},{"name":"lon","in":"query","required":true,"schema":{"type":"number","title":"Lon"}},{"name":"type","in":"query","required":false,"schema":{"type":"string","default":"DA","title":"Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/chilliwack/geography/stats":{"get":{"summary":"Geography Stats","description":"Get geography statistics for this city.","operationId":"geography_stats_api_chilliwack_geography_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/chilliwack/geography/{geoid}":{"get":{"summary":"Geography Boundary","description":"Get a specific geography boundary by geoid, including GeoJSON polygon.","operationId":"geography_boundary_api_chilliwack_geography__geoid__get","parameters":[{"name":"geoid","in":"path","required":true,"schema":{"type":"string","title":"Geoid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/chilliwack/census/rental/list":{"get":{"summary":"List Rental Prices","description":"List rental price records for this city, with optional unit type filter.","operationId":"list_rental_prices_api_chilliwack_census_rental_list_get","parameters":[{"name":"unit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":50,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalPriceListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/chilliwack/census/rental/trend":{"get":{"summary":"Get Rental Trend","description":"Get rental price time series for a specific unit type.","operationId":"get_rental_trend_api_chilliwack_census_rental_trend_get","parameters":[{"name":"unit_type","in":"query","required":true,"schema":{"type":"string","description":"Rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Rental unit type (e.g. 'Apartment - 1 bedroom')"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalTrendResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/chilliwack/census/rental/types":{"get":{"summary":"Get Rental Types","description":"Get available rental unit types for this city.","operationId":"get_rental_types_api_chilliwack_census_rental_types_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/chilliwack/zoning/by-gps":{"get":{"summary":"Get Zoning By Gps","description":"Get zoning district for GPS coordinates.","operationId":"get_zoning_by_gps_api_chilliwack_zoning_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZoningByGPSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/chilliwack/zoning/by-id/{district_id}":{"get":{"summary":"Get Zoning By Id","description":"Get a single zoning district by its numeric ID.","operationId":"get_zoning_by_id_api_chilliwack_zoning_by_id__district_id__get","parameters":[{"name":"district_id","in":"path","required":true,"schema":{"type":"integer","description":"Zoning district numeric ID","title":"District Id"},"description":"Zoning district numeric ID"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning By Id Api Chilliwack Zoning By Id  District Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/chilliwack/zoning/by-code/{code}":{"get":{"summary":"Get Zoning By Code","description":"Get all districts with a specific zone code.","operationId":"get_zoning_by_code_api_chilliwack_zoning_by_code__code__get","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","description":"Zone code (e.g., C-C1, R-G)","title":"Code"},"description":"Zone code (e.g., C-C1, R-G)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoningDistrict"},"title":"Response Get Zoning By Code Api Chilliwack Zoning By Code  Code  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/chilliwack/zoning/batch":{"post":{"summary":"Get Zoning Batch","description":"Get multiple zoning districts by zone codes in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of zone codes.\nExample: {\"ids\": [\"CR20-C20/R20\", \"C-C1\", \"R-G\"]}\nMaximum 100 zone codes per request.","operationId":"get_zoning_batch_api_chilliwack_zoning_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning Batch Api Chilliwack Zoning Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/chilliwack/zoning/list":{"get":{"summary":"List Zoning Districts","description":"List all zoning districts with pagination.\n\nUse this endpoint to browse available zoning districts and discover valid IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_zoning_districts_api_chilliwack_zoning_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Zoning Districts Api Chilliwack Zoning List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/chilliwack/zoning/codes":{"get":{"summary":"List Zone Codes","description":"List all zone codes with descriptions.","operationId":"list_zone_codes_api_chilliwack_zoning_codes_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"type":"string","description":"Filter by major category (e.g., Commercial, Residential)","title":"Category"},"description":"Filter by major category (e.g., Commercial, Residential)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoneCodeInfo"},"title":"Response List Zone Codes Api Chilliwack Zoning Codes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/chilliwack/zoning/stats":{"get":{"summary":"Zoning Stats","description":"Get zoning statistics.","operationId":"zoning_stats_api_chilliwack_zoning_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/chilliwack/zoning/export":{"get":{"summary":"Export Zoning","description":"Export zoning district data as CSV or GeoJSON.\n\nSupports filtering by zone code, category, and area range.\nMaximum 10,000 records per export.","operationId":"export_zoning_api_chilliwack_zoning_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"zone_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Zone code filter (e.g., CR2)","title":"Zone Code"},"description":"Zone code filter (e.g., CR2)"},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Major category filter","title":"Category"},"description":"Major category filter"},{"name":"min_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum area in sq km","title":"Min Area"},"description":"Minimum area in sq km"},{"name":"max_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum area in sq km","title":"Max Area"},"description":"Maximum area in sq km"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/chilliwack/health":{"get":{"summary":"City Health","description":"City-specific health check.","operationId":"city_health_api_chilliwack_health_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/prince-george/entries/{kind}":{"get":{"summary":"List Entries","operationId":"list_entries_api_prince_george_entries__kind__get","parameters":[{"name":"kind","in":"path","required":true,"schema":{"type":"string","description":"Canonical entry kind: property, permit, zoning, or safety","title":"Kind"},"description":"Canonical entry kind: property, permit, zoning, or safety"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"_services","in":"query","required":false,"schema":{"title":" Services"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Entries Api Prince George Entries  Kind  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/prince-george/census/profile":{"get":{"summary":"Get Census Profile","description":"Get census profile for a specific Dissemination Area.\n\nProvide either da_id directly, OR lat+lon to find the nearest DA automatically.","operationId":"get_census_profile_api_prince_george_census_profile_get","parameters":[{"name":"da_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Dissemination Area ID (e.g., 48820001)","title":"Da Id"},"description":"Dissemination Area ID (e.g., 48820001)"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude for nearest-DA lookup","title":"Lat"},"description":"Latitude for nearest-DA lookup"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude for nearest-DA lookup","title":"Lon"},"description":"Longitude for nearest-DA lookup"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusProfile"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/prince-george/census/batch":{"post":{"summary":"Get Census Batch","description":"Get multiple census profiles by DA IDs in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of DA IDs.\nExample: {\"ids\": [\"48820001\", \"48820002\"]}\nMaximum 100 DA IDs per request.","operationId":"get_census_batch_api_prince_george_census_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Census Batch Api Prince George Census Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/prince-george/census/export":{"get":{"summary":"Export Census","description":"Export census data as CSV.\n\nSupports filtering by population range and geography type.\nMaximum 10,000 records per export.","operationId":"export_census_api_prince_george_census_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv only","default":"csv","title":"Format"},"description":"Export format: csv only"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"min_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Minimum population filter","title":"Min Population"},"description":"Minimum population filter"},{"name":"max_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Maximum population filter","title":"Max Population"},"description":"Maximum population filter"},{"name":"geography_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Geography type filter (DA, CT, CMA)","title":"Geography Type"},"description":"Geography type filter (DA, CT, CMA)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/prince-george/census/list":{"get":{"summary":"List Census Profiles","description":"List all census profiles with pagination.\n\nUse this endpoint to browse available census profiles and discover valid DA IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_census_profiles_api_prince_george_census_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Census Profiles Api Prince George Census List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/prince-george/census/by-gps":{"get":{"summary":"Get Census By Gps","description":"Get census data for GPS coordinates.","operationId":"get_census_by_gps_api_prince_george_census_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90,"minimum":-90,"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":180,"minimum":-180,"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/prince-george/census/by-dls":{"get":{"summary":"Get Census By Dls","description":"Get census data for DLS coordinates.","operationId":"get_census_by_dls_api_prince_george_census_by_dls_get","parameters":[{"name":"dls","in":"query","required":true,"schema":{"type":"string","description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)","title":"Dls"},"description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/prince-george/census/map-data":{"get":{"summary":"Get Census Map Data","description":"Get lightweight DA points for choropleth map rendering.\n\nReturns centroid coordinates and key metrics (income, age, population,\nhousehold size, employment rate) for all DAs in the city.\nUsed by the census dashboard to render color-coded maps.","operationId":"get_census_map_data_api_prince_george_census_map_data_get","parameters":[{"name":"year","in":"query","required":false,"schema":{"type":"integer","description":"Census year for DA map data","default":2021,"title":"Year"},"description":"Census year for DA map data"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/prince-george/census/stats":{"get":{"summary":"Census Stats","description":"Get census data statistics.","operationId":"census_stats_api_prince_george_census_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/prince-george/census/compare":{"get":{"summary":"Census Compare","description":"Compare key census metrics across multiple years.\n\nReturns side-by-side comparison of population, households,\navg_income, median_age, density, and land_area for each requested year.\nYears without data return null for that year's values.","operationId":"census_compare_api_prince_george_census_compare_get","parameters":[{"name":"years","in":"query","required":false,"schema":{"type":"string","description":"Comma-separated census years (e.g., 2016,2021)","default":"2021","title":"Years"},"description":"Comma-separated census years (e.g., 2016,2021)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/prince-george/census/time-series":{"get":{"summary":"Census Timeseries","description":"Get year-by-year census trends for this city.\n\nReturns population, income, age, and household trends across all\navailable census years. Useful for spotting long-term demographic shifts.","operationId":"census_timeseries_api_prince_george_census_time_series_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/prince-george/geography/list":{"get":{"summary":"Geography List","description":"List geography boundaries for this city.","operationId":"geography_list_api_prince_george_geography_list_get","parameters":[{"name":"type","in":"query","required":false,"schema":{"type":"string","title":"Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/prince-george/geography/by-gps":{"get":{"summary":"Geography By Gps","description":"Find the geography boundary containing a GPS point.","operationId":"geography_by_gps_api_prince_george_geography_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","title":"Lat"}},{"name":"lon","in":"query","required":true,"schema":{"type":"number","title":"Lon"}},{"name":"type","in":"query","required":false,"schema":{"type":"string","default":"DA","title":"Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/prince-george/geography/stats":{"get":{"summary":"Geography Stats","description":"Get geography statistics for this city.","operationId":"geography_stats_api_prince_george_geography_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/prince-george/geography/{geoid}":{"get":{"summary":"Geography Boundary","description":"Get a specific geography boundary by geoid, including GeoJSON polygon.","operationId":"geography_boundary_api_prince_george_geography__geoid__get","parameters":[{"name":"geoid","in":"path","required":true,"schema":{"type":"string","title":"Geoid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/prince-george/census/rental/list":{"get":{"summary":"List Rental Prices","description":"List rental price records for this city, with optional unit type filter.","operationId":"list_rental_prices_api_prince_george_census_rental_list_get","parameters":[{"name":"unit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":50,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalPriceListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/prince-george/census/rental/trend":{"get":{"summary":"Get Rental Trend","description":"Get rental price time series for a specific unit type.","operationId":"get_rental_trend_api_prince_george_census_rental_trend_get","parameters":[{"name":"unit_type","in":"query","required":true,"schema":{"type":"string","description":"Rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Rental unit type (e.g. 'Apartment - 1 bedroom')"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalTrendResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/prince-george/census/rental/types":{"get":{"summary":"Get Rental Types","description":"Get available rental unit types for this city.","operationId":"get_rental_types_api_prince_george_census_rental_types_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/prince-george/zoning/by-gps":{"get":{"summary":"Get Zoning By Gps","description":"Get zoning district for GPS coordinates.","operationId":"get_zoning_by_gps_api_prince_george_zoning_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZoningByGPSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/prince-george/zoning/by-id/{district_id}":{"get":{"summary":"Get Zoning By Id","description":"Get a single zoning district by its numeric ID.","operationId":"get_zoning_by_id_api_prince_george_zoning_by_id__district_id__get","parameters":[{"name":"district_id","in":"path","required":true,"schema":{"type":"integer","description":"Zoning district numeric ID","title":"District Id"},"description":"Zoning district numeric ID"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning By Id Api Prince George Zoning By Id  District Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/prince-george/zoning/by-code/{code}":{"get":{"summary":"Get Zoning By Code","description":"Get all districts with a specific zone code.","operationId":"get_zoning_by_code_api_prince_george_zoning_by_code__code__get","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","description":"Zone code (e.g., C-C1, R-G)","title":"Code"},"description":"Zone code (e.g., C-C1, R-G)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoningDistrict"},"title":"Response Get Zoning By Code Api Prince George Zoning By Code  Code  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/prince-george/zoning/batch":{"post":{"summary":"Get Zoning Batch","description":"Get multiple zoning districts by zone codes in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of zone codes.\nExample: {\"ids\": [\"CR20-C20/R20\", \"C-C1\", \"R-G\"]}\nMaximum 100 zone codes per request.","operationId":"get_zoning_batch_api_prince_george_zoning_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning Batch Api Prince George Zoning Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/prince-george/zoning/list":{"get":{"summary":"List Zoning Districts","description":"List all zoning districts with pagination.\n\nUse this endpoint to browse available zoning districts and discover valid IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_zoning_districts_api_prince_george_zoning_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Zoning Districts Api Prince George Zoning List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/prince-george/zoning/codes":{"get":{"summary":"List Zone Codes","description":"List all zone codes with descriptions.","operationId":"list_zone_codes_api_prince_george_zoning_codes_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"type":"string","description":"Filter by major category (e.g., Commercial, Residential)","title":"Category"},"description":"Filter by major category (e.g., Commercial, Residential)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoneCodeInfo"},"title":"Response List Zone Codes Api Prince George Zoning Codes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/prince-george/zoning/stats":{"get":{"summary":"Zoning Stats","description":"Get zoning statistics.","operationId":"zoning_stats_api_prince_george_zoning_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/prince-george/zoning/export":{"get":{"summary":"Export Zoning","description":"Export zoning district data as CSV or GeoJSON.\n\nSupports filtering by zone code, category, and area range.\nMaximum 10,000 records per export.","operationId":"export_zoning_api_prince_george_zoning_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"zone_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Zone code filter (e.g., CR2)","title":"Zone Code"},"description":"Zone code filter (e.g., CR2)"},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Major category filter","title":"Category"},"description":"Major category filter"},{"name":"min_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum area in sq km","title":"Min Area"},"description":"Minimum area in sq km"},{"name":"max_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum area in sq km","title":"Max Area"},"description":"Maximum area in sq km"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/prince-george/permits/stats":{"get":{"summary":"Building Stats","description":"Get building permit statistics.","operationId":"building_stats_api_prince_george_permits_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/prince-george/permits/search":{"get":{"summary":"Search Building Permits","description":"Search building permits by address, contractor, applicant, permit number, and/or permit type.","operationId":"search_building_permits_api_prince_george_permits_search_get","parameters":[{"name":"address","in":"query","required":false,"schema":{"type":"string","description":"Address to search","title":"Address"},"description":"Address to search"},{"name":"q","in":"query","required":false,"schema":{"type":"string","description":"General text search (address, contractor, applicant, permit #)","title":"Q"},"description":"General text search (address, contractor, applicant, permit #)"},{"name":"permit_type","in":"query","required":false,"schema":{"type":"string","description":"Filter by permit type","title":"Permit Type"},"description":"Filter by permit type"},{"name":"bbox","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bounding box: min_lon,min_lat,max_lon,max_lat","title":"Bbox"},"description":"Bounding box: min_lon,min_lat,max_lon,max_lat"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max results","default":20,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset","default":0,"title":"Offset"},"description":"Results offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/prince-george/permits/nearby":{"get":{"summary":"Nearby Building Permits","description":"Coordinate-first alias for nearby building permits.","operationId":"nearby_building_permits_api_prince_george_permits_nearby_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":84.0,"minimum":41.0,"description":"Canadian latitude","title":"Lat"},"description":"Canadian latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":-52.0,"minimum":-142.0,"description":"Canadian longitude","title":"Lon"},"description":"Canadian longitude"},{"name":"radius_m","in":"query","required":false,"schema":{"type":"integer","maximum":50000,"minimum":1,"default":1000,"title":"Radius M"}},{"name":"permit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Permit Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/prince-george/permits/export":{"get":{"summary":"Export Building Permits","description":"Export building permit data as CSV or GeoJSON.\n\nSupports filtering by address, permit type, and date range.\nMaximum 10,000 records per export.","operationId":"export_building_permits_api_prince_george_permits_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Address filter","title":"Address"},"description":"Address filter"},{"name":"permit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Permit type filter","title":"Permit Type"},"description":"Permit type filter"},{"name":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Start date (YYYY-MM-DD)","title":"Date From"},"description":"Start date (YYYY-MM-DD)"},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"End date (YYYY-MM-DD)","title":"Date To"},"description":"End date (YYYY-MM-DD)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/prince-george/permits/recent":{"get":{"summary":"Recent Building Permits","description":"Get recent building permits sorted by application date (newest first).\n\nUse this to see where construction activity is happening right now.","operationId":"recent_building_permits_api_prince_george_permits_recent_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Max results","default":20,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset","default":0,"title":"Offset"},"description":"Results offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/prince-george/permits/batch":{"post":{"summary":"Get Building Permits Batch","description":"Get multiple building permits by permit numbers in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of permit numbers.\nExample: {\"ids\": [\"BP123456\", \"BP789012\"]}\nMaximum 100 permit numbers per request.","operationId":"get_building_permits_batch_api_prince_george_permits_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Building Permits Batch Api Prince George Permits Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/prince-george/permits/{permit_number}":{"get":{"summary":"Get Building Permit","description":"Get building permit details by permit number.\n\nServes HTML for browsers, JSON for API clients.","operationId":"get_building_permit_api_prince_george_permits__permit_number__get","parameters":[{"name":"permit_number","in":"path","required":true,"schema":{"type":"string","description":"Permit number","title":"Permit Number"},"description":"Permit number"},{"name":"_city_name","in":"query","required":false,"schema":{"default":"Prince George","title":" City Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/prince-george/health":{"get":{"summary":"City Health","description":"City-specific health check.","operationId":"city_health_api_prince_george_health_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vernon/entries/{kind}":{"get":{"summary":"List Entries","operationId":"list_entries_api_vernon_entries__kind__get","parameters":[{"name":"kind","in":"path","required":true,"schema":{"type":"string","description":"Canonical entry kind: property, permit, zoning, or safety","title":"Kind"},"description":"Canonical entry kind: property, permit, zoning, or safety"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"_services","in":"query","required":false,"schema":{"title":" Services"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Entries Api Vernon Entries  Kind  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vernon/census/profile":{"get":{"summary":"Get Census Profile","description":"Get census profile for a specific Dissemination Area.\n\nProvide either da_id directly, OR lat+lon to find the nearest DA automatically.","operationId":"get_census_profile_api_vernon_census_profile_get","parameters":[{"name":"da_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Dissemination Area ID (e.g., 48820001)","title":"Da Id"},"description":"Dissemination Area ID (e.g., 48820001)"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude for nearest-DA lookup","title":"Lat"},"description":"Latitude for nearest-DA lookup"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude for nearest-DA lookup","title":"Lon"},"description":"Longitude for nearest-DA lookup"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusProfile"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vernon/census/batch":{"post":{"summary":"Get Census Batch","description":"Get multiple census profiles by DA IDs in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of DA IDs.\nExample: {\"ids\": [\"48820001\", \"48820002\"]}\nMaximum 100 DA IDs per request.","operationId":"get_census_batch_api_vernon_census_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Census Batch Api Vernon Census Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vernon/census/export":{"get":{"summary":"Export Census","description":"Export census data as CSV.\n\nSupports filtering by population range and geography type.\nMaximum 10,000 records per export.","operationId":"export_census_api_vernon_census_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv only","default":"csv","title":"Format"},"description":"Export format: csv only"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"min_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Minimum population filter","title":"Min Population"},"description":"Minimum population filter"},{"name":"max_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Maximum population filter","title":"Max Population"},"description":"Maximum population filter"},{"name":"geography_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Geography type filter (DA, CT, CMA)","title":"Geography Type"},"description":"Geography type filter (DA, CT, CMA)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vernon/census/list":{"get":{"summary":"List Census Profiles","description":"List all census profiles with pagination.\n\nUse this endpoint to browse available census profiles and discover valid DA IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_census_profiles_api_vernon_census_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Census Profiles Api Vernon Census List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vernon/census/by-gps":{"get":{"summary":"Get Census By Gps","description":"Get census data for GPS coordinates.","operationId":"get_census_by_gps_api_vernon_census_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90,"minimum":-90,"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":180,"minimum":-180,"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vernon/census/by-dls":{"get":{"summary":"Get Census By Dls","description":"Get census data for DLS coordinates.","operationId":"get_census_by_dls_api_vernon_census_by_dls_get","parameters":[{"name":"dls","in":"query","required":true,"schema":{"type":"string","description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)","title":"Dls"},"description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vernon/census/map-data":{"get":{"summary":"Get Census Map Data","description":"Get lightweight DA points for choropleth map rendering.\n\nReturns centroid coordinates and key metrics (income, age, population,\nhousehold size, employment rate) for all DAs in the city.\nUsed by the census dashboard to render color-coded maps.","operationId":"get_census_map_data_api_vernon_census_map_data_get","parameters":[{"name":"year","in":"query","required":false,"schema":{"type":"integer","description":"Census year for DA map data","default":2021,"title":"Year"},"description":"Census year for DA map data"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vernon/census/stats":{"get":{"summary":"Census Stats","description":"Get census data statistics.","operationId":"census_stats_api_vernon_census_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vernon/census/compare":{"get":{"summary":"Census Compare","description":"Compare key census metrics across multiple years.\n\nReturns side-by-side comparison of population, households,\navg_income, median_age, density, and land_area for each requested year.\nYears without data return null for that year's values.","operationId":"census_compare_api_vernon_census_compare_get","parameters":[{"name":"years","in":"query","required":false,"schema":{"type":"string","description":"Comma-separated census years (e.g., 2016,2021)","default":"2021","title":"Years"},"description":"Comma-separated census years (e.g., 2016,2021)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vernon/census/time-series":{"get":{"summary":"Census Timeseries","description":"Get year-by-year census trends for this city.\n\nReturns population, income, age, and household trends across all\navailable census years. Useful for spotting long-term demographic shifts.","operationId":"census_timeseries_api_vernon_census_time_series_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vernon/geography/list":{"get":{"summary":"Geography List","description":"List geography boundaries for this city.","operationId":"geography_list_api_vernon_geography_list_get","parameters":[{"name":"type","in":"query","required":false,"schema":{"type":"string","title":"Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vernon/geography/by-gps":{"get":{"summary":"Geography By Gps","description":"Find the geography boundary containing a GPS point.","operationId":"geography_by_gps_api_vernon_geography_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","title":"Lat"}},{"name":"lon","in":"query","required":true,"schema":{"type":"number","title":"Lon"}},{"name":"type","in":"query","required":false,"schema":{"type":"string","default":"DA","title":"Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vernon/geography/stats":{"get":{"summary":"Geography Stats","description":"Get geography statistics for this city.","operationId":"geography_stats_api_vernon_geography_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vernon/geography/{geoid}":{"get":{"summary":"Geography Boundary","description":"Get a specific geography boundary by geoid, including GeoJSON polygon.","operationId":"geography_boundary_api_vernon_geography__geoid__get","parameters":[{"name":"geoid","in":"path","required":true,"schema":{"type":"string","title":"Geoid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vernon/census/rental/list":{"get":{"summary":"List Rental Prices","description":"List rental price records for this city, with optional unit type filter.","operationId":"list_rental_prices_api_vernon_census_rental_list_get","parameters":[{"name":"unit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":50,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalPriceListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vernon/census/rental/trend":{"get":{"summary":"Get Rental Trend","description":"Get rental price time series for a specific unit type.","operationId":"get_rental_trend_api_vernon_census_rental_trend_get","parameters":[{"name":"unit_type","in":"query","required":true,"schema":{"type":"string","description":"Rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Rental unit type (e.g. 'Apartment - 1 bedroom')"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalTrendResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vernon/census/rental/types":{"get":{"summary":"Get Rental Types","description":"Get available rental unit types for this city.","operationId":"get_rental_types_api_vernon_census_rental_types_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vernon/zoning/by-gps":{"get":{"summary":"Get Zoning By Gps","description":"Get zoning district for GPS coordinates.","operationId":"get_zoning_by_gps_api_vernon_zoning_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZoningByGPSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vernon/zoning/by-id/{district_id}":{"get":{"summary":"Get Zoning By Id","description":"Get a single zoning district by its numeric ID.","operationId":"get_zoning_by_id_api_vernon_zoning_by_id__district_id__get","parameters":[{"name":"district_id","in":"path","required":true,"schema":{"type":"integer","description":"Zoning district numeric ID","title":"District Id"},"description":"Zoning district numeric ID"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning By Id Api Vernon Zoning By Id  District Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vernon/zoning/by-code/{code}":{"get":{"summary":"Get Zoning By Code","description":"Get all districts with a specific zone code.","operationId":"get_zoning_by_code_api_vernon_zoning_by_code__code__get","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","description":"Zone code (e.g., C-C1, R-G)","title":"Code"},"description":"Zone code (e.g., C-C1, R-G)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoningDistrict"},"title":"Response Get Zoning By Code Api Vernon Zoning By Code  Code  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vernon/zoning/batch":{"post":{"summary":"Get Zoning Batch","description":"Get multiple zoning districts by zone codes in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of zone codes.\nExample: {\"ids\": [\"CR20-C20/R20\", \"C-C1\", \"R-G\"]}\nMaximum 100 zone codes per request.","operationId":"get_zoning_batch_api_vernon_zoning_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning Batch Api Vernon Zoning Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vernon/zoning/list":{"get":{"summary":"List Zoning Districts","description":"List all zoning districts with pagination.\n\nUse this endpoint to browse available zoning districts and discover valid IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_zoning_districts_api_vernon_zoning_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Zoning Districts Api Vernon Zoning List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vernon/zoning/codes":{"get":{"summary":"List Zone Codes","description":"List all zone codes with descriptions.","operationId":"list_zone_codes_api_vernon_zoning_codes_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"type":"string","description":"Filter by major category (e.g., Commercial, Residential)","title":"Category"},"description":"Filter by major category (e.g., Commercial, Residential)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoneCodeInfo"},"title":"Response List Zone Codes Api Vernon Zoning Codes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vernon/zoning/stats":{"get":{"summary":"Zoning Stats","description":"Get zoning statistics.","operationId":"zoning_stats_api_vernon_zoning_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vernon/zoning/export":{"get":{"summary":"Export Zoning","description":"Export zoning district data as CSV or GeoJSON.\n\nSupports filtering by zone code, category, and area range.\nMaximum 10,000 records per export.","operationId":"export_zoning_api_vernon_zoning_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"zone_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Zone code filter (e.g., CR2)","title":"Zone Code"},"description":"Zone code filter (e.g., CR2)"},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Major category filter","title":"Category"},"description":"Major category filter"},{"name":"min_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum area in sq km","title":"Min Area"},"description":"Minimum area in sq km"},{"name":"max_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum area in sq km","title":"Max Area"},"description":"Maximum area in sq km"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/vernon/health":{"get":{"summary":"City Health","description":"City-specific health check.","operationId":"city_health_api_vernon_health_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/penticton/entries/{kind}":{"get":{"summary":"List Entries","operationId":"list_entries_api_penticton_entries__kind__get","parameters":[{"name":"kind","in":"path","required":true,"schema":{"type":"string","description":"Canonical entry kind: property, permit, zoning, or safety","title":"Kind"},"description":"Canonical entry kind: property, permit, zoning, or safety"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"_services","in":"query","required":false,"schema":{"title":" Services"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Entries Api Penticton Entries  Kind  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/penticton/census/profile":{"get":{"summary":"Get Census Profile","description":"Get census profile for a specific Dissemination Area.\n\nProvide either da_id directly, OR lat+lon to find the nearest DA automatically.","operationId":"get_census_profile_api_penticton_census_profile_get","parameters":[{"name":"da_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Dissemination Area ID (e.g., 48820001)","title":"Da Id"},"description":"Dissemination Area ID (e.g., 48820001)"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude for nearest-DA lookup","title":"Lat"},"description":"Latitude for nearest-DA lookup"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude for nearest-DA lookup","title":"Lon"},"description":"Longitude for nearest-DA lookup"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusProfile"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/penticton/census/batch":{"post":{"summary":"Get Census Batch","description":"Get multiple census profiles by DA IDs in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of DA IDs.\nExample: {\"ids\": [\"48820001\", \"48820002\"]}\nMaximum 100 DA IDs per request.","operationId":"get_census_batch_api_penticton_census_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Census Batch Api Penticton Census Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/penticton/census/export":{"get":{"summary":"Export Census","description":"Export census data as CSV.\n\nSupports filtering by population range and geography type.\nMaximum 10,000 records per export.","operationId":"export_census_api_penticton_census_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv only","default":"csv","title":"Format"},"description":"Export format: csv only"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"min_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Minimum population filter","title":"Min Population"},"description":"Minimum population filter"},{"name":"max_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Maximum population filter","title":"Max Population"},"description":"Maximum population filter"},{"name":"geography_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Geography type filter (DA, CT, CMA)","title":"Geography Type"},"description":"Geography type filter (DA, CT, CMA)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/penticton/census/list":{"get":{"summary":"List Census Profiles","description":"List all census profiles with pagination.\n\nUse this endpoint to browse available census profiles and discover valid DA IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_census_profiles_api_penticton_census_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Census Profiles Api Penticton Census List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/penticton/census/by-gps":{"get":{"summary":"Get Census By Gps","description":"Get census data for GPS coordinates.","operationId":"get_census_by_gps_api_penticton_census_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90,"minimum":-90,"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":180,"minimum":-180,"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/penticton/census/by-dls":{"get":{"summary":"Get Census By Dls","description":"Get census data for DLS coordinates.","operationId":"get_census_by_dls_api_penticton_census_by_dls_get","parameters":[{"name":"dls","in":"query","required":true,"schema":{"type":"string","description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)","title":"Dls"},"description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/penticton/census/map-data":{"get":{"summary":"Get Census Map Data","description":"Get lightweight DA points for choropleth map rendering.\n\nReturns centroid coordinates and key metrics (income, age, population,\nhousehold size, employment rate) for all DAs in the city.\nUsed by the census dashboard to render color-coded maps.","operationId":"get_census_map_data_api_penticton_census_map_data_get","parameters":[{"name":"year","in":"query","required":false,"schema":{"type":"integer","description":"Census year for DA map data","default":2021,"title":"Year"},"description":"Census year for DA map data"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/penticton/census/stats":{"get":{"summary":"Census Stats","description":"Get census data statistics.","operationId":"census_stats_api_penticton_census_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/penticton/census/compare":{"get":{"summary":"Census Compare","description":"Compare key census metrics across multiple years.\n\nReturns side-by-side comparison of population, households,\navg_income, median_age, density, and land_area for each requested year.\nYears without data return null for that year's values.","operationId":"census_compare_api_penticton_census_compare_get","parameters":[{"name":"years","in":"query","required":false,"schema":{"type":"string","description":"Comma-separated census years (e.g., 2016,2021)","default":"2021","title":"Years"},"description":"Comma-separated census years (e.g., 2016,2021)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/penticton/census/time-series":{"get":{"summary":"Census Timeseries","description":"Get year-by-year census trends for this city.\n\nReturns population, income, age, and household trends across all\navailable census years. Useful for spotting long-term demographic shifts.","operationId":"census_timeseries_api_penticton_census_time_series_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/penticton/geography/list":{"get":{"summary":"Geography List","description":"List geography boundaries for this city.","operationId":"geography_list_api_penticton_geography_list_get","parameters":[{"name":"type","in":"query","required":false,"schema":{"type":"string","title":"Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/penticton/geography/by-gps":{"get":{"summary":"Geography By Gps","description":"Find the geography boundary containing a GPS point.","operationId":"geography_by_gps_api_penticton_geography_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","title":"Lat"}},{"name":"lon","in":"query","required":true,"schema":{"type":"number","title":"Lon"}},{"name":"type","in":"query","required":false,"schema":{"type":"string","default":"DA","title":"Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/penticton/geography/stats":{"get":{"summary":"Geography Stats","description":"Get geography statistics for this city.","operationId":"geography_stats_api_penticton_geography_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/penticton/geography/{geoid}":{"get":{"summary":"Geography Boundary","description":"Get a specific geography boundary by geoid, including GeoJSON polygon.","operationId":"geography_boundary_api_penticton_geography__geoid__get","parameters":[{"name":"geoid","in":"path","required":true,"schema":{"type":"string","title":"Geoid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/penticton/census/rental/list":{"get":{"summary":"List Rental Prices","description":"List rental price records for this city, with optional unit type filter.","operationId":"list_rental_prices_api_penticton_census_rental_list_get","parameters":[{"name":"unit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":50,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalPriceListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/penticton/census/rental/trend":{"get":{"summary":"Get Rental Trend","description":"Get rental price time series for a specific unit type.","operationId":"get_rental_trend_api_penticton_census_rental_trend_get","parameters":[{"name":"unit_type","in":"query","required":true,"schema":{"type":"string","description":"Rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Rental unit type (e.g. 'Apartment - 1 bedroom')"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalTrendResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/penticton/census/rental/types":{"get":{"summary":"Get Rental Types","description":"Get available rental unit types for this city.","operationId":"get_rental_types_api_penticton_census_rental_types_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/penticton/zoning/by-gps":{"get":{"summary":"Get Zoning By Gps","description":"Get zoning district for GPS coordinates.","operationId":"get_zoning_by_gps_api_penticton_zoning_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZoningByGPSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/penticton/zoning/by-id/{district_id}":{"get":{"summary":"Get Zoning By Id","description":"Get a single zoning district by its numeric ID.","operationId":"get_zoning_by_id_api_penticton_zoning_by_id__district_id__get","parameters":[{"name":"district_id","in":"path","required":true,"schema":{"type":"integer","description":"Zoning district numeric ID","title":"District Id"},"description":"Zoning district numeric ID"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning By Id Api Penticton Zoning By Id  District Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/penticton/zoning/by-code/{code}":{"get":{"summary":"Get Zoning By Code","description":"Get all districts with a specific zone code.","operationId":"get_zoning_by_code_api_penticton_zoning_by_code__code__get","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","description":"Zone code (e.g., C-C1, R-G)","title":"Code"},"description":"Zone code (e.g., C-C1, R-G)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoningDistrict"},"title":"Response Get Zoning By Code Api Penticton Zoning By Code  Code  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/penticton/zoning/batch":{"post":{"summary":"Get Zoning Batch","description":"Get multiple zoning districts by zone codes in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of zone codes.\nExample: {\"ids\": [\"CR20-C20/R20\", \"C-C1\", \"R-G\"]}\nMaximum 100 zone codes per request.","operationId":"get_zoning_batch_api_penticton_zoning_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning Batch Api Penticton Zoning Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/penticton/zoning/list":{"get":{"summary":"List Zoning Districts","description":"List all zoning districts with pagination.\n\nUse this endpoint to browse available zoning districts and discover valid IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_zoning_districts_api_penticton_zoning_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Zoning Districts Api Penticton Zoning List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/penticton/zoning/codes":{"get":{"summary":"List Zone Codes","description":"List all zone codes with descriptions.","operationId":"list_zone_codes_api_penticton_zoning_codes_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"type":"string","description":"Filter by major category (e.g., Commercial, Residential)","title":"Category"},"description":"Filter by major category (e.g., Commercial, Residential)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoneCodeInfo"},"title":"Response List Zone Codes Api Penticton Zoning Codes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/penticton/zoning/stats":{"get":{"summary":"Zoning Stats","description":"Get zoning statistics.","operationId":"zoning_stats_api_penticton_zoning_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/penticton/zoning/export":{"get":{"summary":"Export Zoning","description":"Export zoning district data as CSV or GeoJSON.\n\nSupports filtering by zone code, category, and area range.\nMaximum 10,000 records per export.","operationId":"export_zoning_api_penticton_zoning_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"zone_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Zone code filter (e.g., CR2)","title":"Zone Code"},"description":"Zone code filter (e.g., CR2)"},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Major category filter","title":"Category"},"description":"Major category filter"},{"name":"min_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum area in sq km","title":"Min Area"},"description":"Minimum area in sq km"},{"name":"max_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum area in sq km","title":"Max Area"},"description":"Maximum area in sq km"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/penticton/health":{"get":{"summary":"City Health","description":"City-specific health check.","operationId":"city_health_api_penticton_health_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/courtenay/entries/{kind}":{"get":{"summary":"List Entries","operationId":"list_entries_api_courtenay_entries__kind__get","parameters":[{"name":"kind","in":"path","required":true,"schema":{"type":"string","description":"Canonical entry kind: property, permit, zoning, or safety","title":"Kind"},"description":"Canonical entry kind: property, permit, zoning, or safety"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"_services","in":"query","required":false,"schema":{"title":" Services"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Entries Api Courtenay Entries  Kind  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/courtenay/census/profile":{"get":{"summary":"Get Census Profile","description":"Get census profile for a specific Dissemination Area.\n\nProvide either da_id directly, OR lat+lon to find the nearest DA automatically.","operationId":"get_census_profile_api_courtenay_census_profile_get","parameters":[{"name":"da_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Dissemination Area ID (e.g., 48820001)","title":"Da Id"},"description":"Dissemination Area ID (e.g., 48820001)"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude for nearest-DA lookup","title":"Lat"},"description":"Latitude for nearest-DA lookup"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude for nearest-DA lookup","title":"Lon"},"description":"Longitude for nearest-DA lookup"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusProfile"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/courtenay/census/batch":{"post":{"summary":"Get Census Batch","description":"Get multiple census profiles by DA IDs in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of DA IDs.\nExample: {\"ids\": [\"48820001\", \"48820002\"]}\nMaximum 100 DA IDs per request.","operationId":"get_census_batch_api_courtenay_census_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Census Batch Api Courtenay Census Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/courtenay/census/export":{"get":{"summary":"Export Census","description":"Export census data as CSV.\n\nSupports filtering by population range and geography type.\nMaximum 10,000 records per export.","operationId":"export_census_api_courtenay_census_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv only","default":"csv","title":"Format"},"description":"Export format: csv only"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"min_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Minimum population filter","title":"Min Population"},"description":"Minimum population filter"},{"name":"max_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Maximum population filter","title":"Max Population"},"description":"Maximum population filter"},{"name":"geography_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Geography type filter (DA, CT, CMA)","title":"Geography Type"},"description":"Geography type filter (DA, CT, CMA)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/courtenay/census/list":{"get":{"summary":"List Census Profiles","description":"List all census profiles with pagination.\n\nUse this endpoint to browse available census profiles and discover valid DA IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_census_profiles_api_courtenay_census_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Census Profiles Api Courtenay Census List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/courtenay/census/by-gps":{"get":{"summary":"Get Census By Gps","description":"Get census data for GPS coordinates.","operationId":"get_census_by_gps_api_courtenay_census_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90,"minimum":-90,"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":180,"minimum":-180,"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/courtenay/census/by-dls":{"get":{"summary":"Get Census By Dls","description":"Get census data for DLS coordinates.","operationId":"get_census_by_dls_api_courtenay_census_by_dls_get","parameters":[{"name":"dls","in":"query","required":true,"schema":{"type":"string","description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)","title":"Dls"},"description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/courtenay/census/map-data":{"get":{"summary":"Get Census Map Data","description":"Get lightweight DA points for choropleth map rendering.\n\nReturns centroid coordinates and key metrics (income, age, population,\nhousehold size, employment rate) for all DAs in the city.\nUsed by the census dashboard to render color-coded maps.","operationId":"get_census_map_data_api_courtenay_census_map_data_get","parameters":[{"name":"year","in":"query","required":false,"schema":{"type":"integer","description":"Census year for DA map data","default":2021,"title":"Year"},"description":"Census year for DA map data"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/courtenay/census/stats":{"get":{"summary":"Census Stats","description":"Get census data statistics.","operationId":"census_stats_api_courtenay_census_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/courtenay/census/compare":{"get":{"summary":"Census Compare","description":"Compare key census metrics across multiple years.\n\nReturns side-by-side comparison of population, households,\navg_income, median_age, density, and land_area for each requested year.\nYears without data return null for that year's values.","operationId":"census_compare_api_courtenay_census_compare_get","parameters":[{"name":"years","in":"query","required":false,"schema":{"type":"string","description":"Comma-separated census years (e.g., 2016,2021)","default":"2021","title":"Years"},"description":"Comma-separated census years (e.g., 2016,2021)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/courtenay/census/time-series":{"get":{"summary":"Census Timeseries","description":"Get year-by-year census trends for this city.\n\nReturns population, income, age, and household trends across all\navailable census years. Useful for spotting long-term demographic shifts.","operationId":"census_timeseries_api_courtenay_census_time_series_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/courtenay/geography/list":{"get":{"summary":"Geography List","description":"List geography boundaries for this city.","operationId":"geography_list_api_courtenay_geography_list_get","parameters":[{"name":"type","in":"query","required":false,"schema":{"type":"string","title":"Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/courtenay/geography/by-gps":{"get":{"summary":"Geography By Gps","description":"Find the geography boundary containing a GPS point.","operationId":"geography_by_gps_api_courtenay_geography_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","title":"Lat"}},{"name":"lon","in":"query","required":true,"schema":{"type":"number","title":"Lon"}},{"name":"type","in":"query","required":false,"schema":{"type":"string","default":"DA","title":"Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/courtenay/geography/stats":{"get":{"summary":"Geography Stats","description":"Get geography statistics for this city.","operationId":"geography_stats_api_courtenay_geography_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/courtenay/geography/{geoid}":{"get":{"summary":"Geography Boundary","description":"Get a specific geography boundary by geoid, including GeoJSON polygon.","operationId":"geography_boundary_api_courtenay_geography__geoid__get","parameters":[{"name":"geoid","in":"path","required":true,"schema":{"type":"string","title":"Geoid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/courtenay/census/rental/list":{"get":{"summary":"List Rental Prices","description":"List rental price records for this city, with optional unit type filter.","operationId":"list_rental_prices_api_courtenay_census_rental_list_get","parameters":[{"name":"unit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":50,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalPriceListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/courtenay/census/rental/trend":{"get":{"summary":"Get Rental Trend","description":"Get rental price time series for a specific unit type.","operationId":"get_rental_trend_api_courtenay_census_rental_trend_get","parameters":[{"name":"unit_type","in":"query","required":true,"schema":{"type":"string","description":"Rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Rental unit type (e.g. 'Apartment - 1 bedroom')"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalTrendResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/courtenay/census/rental/types":{"get":{"summary":"Get Rental Types","description":"Get available rental unit types for this city.","operationId":"get_rental_types_api_courtenay_census_rental_types_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/courtenay/zoning/by-gps":{"get":{"summary":"Get Zoning By Gps","description":"Get zoning district for GPS coordinates.","operationId":"get_zoning_by_gps_api_courtenay_zoning_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZoningByGPSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/courtenay/zoning/by-id/{district_id}":{"get":{"summary":"Get Zoning By Id","description":"Get a single zoning district by its numeric ID.","operationId":"get_zoning_by_id_api_courtenay_zoning_by_id__district_id__get","parameters":[{"name":"district_id","in":"path","required":true,"schema":{"type":"integer","description":"Zoning district numeric ID","title":"District Id"},"description":"Zoning district numeric ID"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning By Id Api Courtenay Zoning By Id  District Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/courtenay/zoning/by-code/{code}":{"get":{"summary":"Get Zoning By Code","description":"Get all districts with a specific zone code.","operationId":"get_zoning_by_code_api_courtenay_zoning_by_code__code__get","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","description":"Zone code (e.g., C-C1, R-G)","title":"Code"},"description":"Zone code (e.g., C-C1, R-G)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoningDistrict"},"title":"Response Get Zoning By Code Api Courtenay Zoning By Code  Code  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/courtenay/zoning/batch":{"post":{"summary":"Get Zoning Batch","description":"Get multiple zoning districts by zone codes in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of zone codes.\nExample: {\"ids\": [\"CR20-C20/R20\", \"C-C1\", \"R-G\"]}\nMaximum 100 zone codes per request.","operationId":"get_zoning_batch_api_courtenay_zoning_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning Batch Api Courtenay Zoning Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/courtenay/zoning/list":{"get":{"summary":"List Zoning Districts","description":"List all zoning districts with pagination.\n\nUse this endpoint to browse available zoning districts and discover valid IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_zoning_districts_api_courtenay_zoning_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Zoning Districts Api Courtenay Zoning List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/courtenay/zoning/codes":{"get":{"summary":"List Zone Codes","description":"List all zone codes with descriptions.","operationId":"list_zone_codes_api_courtenay_zoning_codes_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"type":"string","description":"Filter by major category (e.g., Commercial, Residential)","title":"Category"},"description":"Filter by major category (e.g., Commercial, Residential)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoneCodeInfo"},"title":"Response List Zone Codes Api Courtenay Zoning Codes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/courtenay/zoning/stats":{"get":{"summary":"Zoning Stats","description":"Get zoning statistics.","operationId":"zoning_stats_api_courtenay_zoning_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/courtenay/zoning/export":{"get":{"summary":"Export Zoning","description":"Export zoning district data as CSV or GeoJSON.\n\nSupports filtering by zone code, category, and area range.\nMaximum 10,000 records per export.","operationId":"export_zoning_api_courtenay_zoning_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"zone_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Zone code filter (e.g., CR2)","title":"Zone Code"},"description":"Zone code filter (e.g., CR2)"},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Major category filter","title":"Category"},"description":"Major category filter"},{"name":"min_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum area in sq km","title":"Min Area"},"description":"Minimum area in sq km"},{"name":"max_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum area in sq km","title":"Max Area"},"description":"Maximum area in sq km"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/courtenay/health":{"get":{"summary":"City Health","description":"City-specific health check.","operationId":"city_health_api_courtenay_health_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/squamish/entries/{kind}":{"get":{"summary":"List Entries","operationId":"list_entries_api_squamish_entries__kind__get","parameters":[{"name":"kind","in":"path","required":true,"schema":{"type":"string","description":"Canonical entry kind: property, permit, zoning, or safety","title":"Kind"},"description":"Canonical entry kind: property, permit, zoning, or safety"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"_services","in":"query","required":false,"schema":{"title":" Services"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Entries Api Squamish Entries  Kind  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/squamish/census/profile":{"get":{"summary":"Get Census Profile","description":"Get census profile for a specific Dissemination Area.\n\nProvide either da_id directly, OR lat+lon to find the nearest DA automatically.","operationId":"get_census_profile_api_squamish_census_profile_get","parameters":[{"name":"da_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Dissemination Area ID (e.g., 48820001)","title":"Da Id"},"description":"Dissemination Area ID (e.g., 48820001)"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude for nearest-DA lookup","title":"Lat"},"description":"Latitude for nearest-DA lookup"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude for nearest-DA lookup","title":"Lon"},"description":"Longitude for nearest-DA lookup"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusProfile"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/squamish/census/batch":{"post":{"summary":"Get Census Batch","description":"Get multiple census profiles by DA IDs in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of DA IDs.\nExample: {\"ids\": [\"48820001\", \"48820002\"]}\nMaximum 100 DA IDs per request.","operationId":"get_census_batch_api_squamish_census_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Census Batch Api Squamish Census Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/squamish/census/export":{"get":{"summary":"Export Census","description":"Export census data as CSV.\n\nSupports filtering by population range and geography type.\nMaximum 10,000 records per export.","operationId":"export_census_api_squamish_census_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv only","default":"csv","title":"Format"},"description":"Export format: csv only"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"min_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Minimum population filter","title":"Min Population"},"description":"Minimum population filter"},{"name":"max_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Maximum population filter","title":"Max Population"},"description":"Maximum population filter"},{"name":"geography_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Geography type filter (DA, CT, CMA)","title":"Geography Type"},"description":"Geography type filter (DA, CT, CMA)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/squamish/census/list":{"get":{"summary":"List Census Profiles","description":"List all census profiles with pagination.\n\nUse this endpoint to browse available census profiles and discover valid DA IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_census_profiles_api_squamish_census_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Census Profiles Api Squamish Census List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/squamish/census/by-gps":{"get":{"summary":"Get Census By Gps","description":"Get census data for GPS coordinates.","operationId":"get_census_by_gps_api_squamish_census_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90,"minimum":-90,"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":180,"minimum":-180,"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/squamish/census/by-dls":{"get":{"summary":"Get Census By Dls","description":"Get census data for DLS coordinates.","operationId":"get_census_by_dls_api_squamish_census_by_dls_get","parameters":[{"name":"dls","in":"query","required":true,"schema":{"type":"string","description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)","title":"Dls"},"description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/squamish/census/map-data":{"get":{"summary":"Get Census Map Data","description":"Get lightweight DA points for choropleth map rendering.\n\nReturns centroid coordinates and key metrics (income, age, population,\nhousehold size, employment rate) for all DAs in the city.\nUsed by the census dashboard to render color-coded maps.","operationId":"get_census_map_data_api_squamish_census_map_data_get","parameters":[{"name":"year","in":"query","required":false,"schema":{"type":"integer","description":"Census year for DA map data","default":2021,"title":"Year"},"description":"Census year for DA map data"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/squamish/census/stats":{"get":{"summary":"Census Stats","description":"Get census data statistics.","operationId":"census_stats_api_squamish_census_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/squamish/census/compare":{"get":{"summary":"Census Compare","description":"Compare key census metrics across multiple years.\n\nReturns side-by-side comparison of population, households,\navg_income, median_age, density, and land_area for each requested year.\nYears without data return null for that year's values.","operationId":"census_compare_api_squamish_census_compare_get","parameters":[{"name":"years","in":"query","required":false,"schema":{"type":"string","description":"Comma-separated census years (e.g., 2016,2021)","default":"2021","title":"Years"},"description":"Comma-separated census years (e.g., 2016,2021)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/squamish/census/time-series":{"get":{"summary":"Census Timeseries","description":"Get year-by-year census trends for this city.\n\nReturns population, income, age, and household trends across all\navailable census years. Useful for spotting long-term demographic shifts.","operationId":"census_timeseries_api_squamish_census_time_series_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/squamish/geography/list":{"get":{"summary":"Geography List","description":"List geography boundaries for this city.","operationId":"geography_list_api_squamish_geography_list_get","parameters":[{"name":"type","in":"query","required":false,"schema":{"type":"string","title":"Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/squamish/geography/by-gps":{"get":{"summary":"Geography By Gps","description":"Find the geography boundary containing a GPS point.","operationId":"geography_by_gps_api_squamish_geography_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","title":"Lat"}},{"name":"lon","in":"query","required":true,"schema":{"type":"number","title":"Lon"}},{"name":"type","in":"query","required":false,"schema":{"type":"string","default":"DA","title":"Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/squamish/geography/stats":{"get":{"summary":"Geography Stats","description":"Get geography statistics for this city.","operationId":"geography_stats_api_squamish_geography_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/squamish/geography/{geoid}":{"get":{"summary":"Geography Boundary","description":"Get a specific geography boundary by geoid, including GeoJSON polygon.","operationId":"geography_boundary_api_squamish_geography__geoid__get","parameters":[{"name":"geoid","in":"path","required":true,"schema":{"type":"string","title":"Geoid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/squamish/census/rental/list":{"get":{"summary":"List Rental Prices","description":"List rental price records for this city, with optional unit type filter.","operationId":"list_rental_prices_api_squamish_census_rental_list_get","parameters":[{"name":"unit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":50,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalPriceListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/squamish/census/rental/trend":{"get":{"summary":"Get Rental Trend","description":"Get rental price time series for a specific unit type.","operationId":"get_rental_trend_api_squamish_census_rental_trend_get","parameters":[{"name":"unit_type","in":"query","required":true,"schema":{"type":"string","description":"Rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Rental unit type (e.g. 'Apartment - 1 bedroom')"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalTrendResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/squamish/census/rental/types":{"get":{"summary":"Get Rental Types","description":"Get available rental unit types for this city.","operationId":"get_rental_types_api_squamish_census_rental_types_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/squamish/zoning/by-gps":{"get":{"summary":"Get Zoning By Gps","description":"Get zoning district for GPS coordinates.","operationId":"get_zoning_by_gps_api_squamish_zoning_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZoningByGPSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/squamish/zoning/by-id/{district_id}":{"get":{"summary":"Get Zoning By Id","description":"Get a single zoning district by its numeric ID.","operationId":"get_zoning_by_id_api_squamish_zoning_by_id__district_id__get","parameters":[{"name":"district_id","in":"path","required":true,"schema":{"type":"integer","description":"Zoning district numeric ID","title":"District Id"},"description":"Zoning district numeric ID"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning By Id Api Squamish Zoning By Id  District Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/squamish/zoning/by-code/{code}":{"get":{"summary":"Get Zoning By Code","description":"Get all districts with a specific zone code.","operationId":"get_zoning_by_code_api_squamish_zoning_by_code__code__get","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","description":"Zone code (e.g., C-C1, R-G)","title":"Code"},"description":"Zone code (e.g., C-C1, R-G)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoningDistrict"},"title":"Response Get Zoning By Code Api Squamish Zoning By Code  Code  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/squamish/zoning/batch":{"post":{"summary":"Get Zoning Batch","description":"Get multiple zoning districts by zone codes in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of zone codes.\nExample: {\"ids\": [\"CR20-C20/R20\", \"C-C1\", \"R-G\"]}\nMaximum 100 zone codes per request.","operationId":"get_zoning_batch_api_squamish_zoning_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning Batch Api Squamish Zoning Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/squamish/zoning/list":{"get":{"summary":"List Zoning Districts","description":"List all zoning districts with pagination.\n\nUse this endpoint to browse available zoning districts and discover valid IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_zoning_districts_api_squamish_zoning_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Zoning Districts Api Squamish Zoning List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/squamish/zoning/codes":{"get":{"summary":"List Zone Codes","description":"List all zone codes with descriptions.","operationId":"list_zone_codes_api_squamish_zoning_codes_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"type":"string","description":"Filter by major category (e.g., Commercial, Residential)","title":"Category"},"description":"Filter by major category (e.g., Commercial, Residential)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoneCodeInfo"},"title":"Response List Zone Codes Api Squamish Zoning Codes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/squamish/zoning/stats":{"get":{"summary":"Zoning Stats","description":"Get zoning statistics.","operationId":"zoning_stats_api_squamish_zoning_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/squamish/zoning/export":{"get":{"summary":"Export Zoning","description":"Export zoning district data as CSV or GeoJSON.\n\nSupports filtering by zone code, category, and area range.\nMaximum 10,000 records per export.","operationId":"export_zoning_api_squamish_zoning_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"zone_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Zone code filter (e.g., CR2)","title":"Zone Code"},"description":"Zone code filter (e.g., CR2)"},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Major category filter","title":"Category"},"description":"Major category filter"},{"name":"min_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum area in sq km","title":"Min Area"},"description":"Minimum area in sq km"},{"name":"max_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum area in sq km","title":"Max Area"},"description":"Maximum area in sq km"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/squamish/permits/stats":{"get":{"summary":"Building Stats","description":"Get building permit statistics.","operationId":"building_stats_api_squamish_permits_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/squamish/permits/search":{"get":{"summary":"Search Building Permits","description":"Search building permits by address, contractor, applicant, permit number, and/or permit type.","operationId":"search_building_permits_api_squamish_permits_search_get","parameters":[{"name":"address","in":"query","required":false,"schema":{"type":"string","description":"Address to search","title":"Address"},"description":"Address to search"},{"name":"q","in":"query","required":false,"schema":{"type":"string","description":"General text search (address, contractor, applicant, permit #)","title":"Q"},"description":"General text search (address, contractor, applicant, permit #)"},{"name":"permit_type","in":"query","required":false,"schema":{"type":"string","description":"Filter by permit type","title":"Permit Type"},"description":"Filter by permit type"},{"name":"bbox","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bounding box: min_lon,min_lat,max_lon,max_lat","title":"Bbox"},"description":"Bounding box: min_lon,min_lat,max_lon,max_lat"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max results","default":20,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset","default":0,"title":"Offset"},"description":"Results offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/squamish/permits/nearby":{"get":{"summary":"Nearby Building Permits","description":"Coordinate-first alias for nearby building permits.","operationId":"nearby_building_permits_api_squamish_permits_nearby_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":84.0,"minimum":41.0,"description":"Canadian latitude","title":"Lat"},"description":"Canadian latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":-52.0,"minimum":-142.0,"description":"Canadian longitude","title":"Lon"},"description":"Canadian longitude"},{"name":"radius_m","in":"query","required":false,"schema":{"type":"integer","maximum":50000,"minimum":1,"default":1000,"title":"Radius M"}},{"name":"permit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Permit Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/squamish/permits/export":{"get":{"summary":"Export Building Permits","description":"Export building permit data as CSV or GeoJSON.\n\nSupports filtering by address, permit type, and date range.\nMaximum 10,000 records per export.","operationId":"export_building_permits_api_squamish_permits_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Address filter","title":"Address"},"description":"Address filter"},{"name":"permit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Permit type filter","title":"Permit Type"},"description":"Permit type filter"},{"name":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Start date (YYYY-MM-DD)","title":"Date From"},"description":"Start date (YYYY-MM-DD)"},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"End date (YYYY-MM-DD)","title":"Date To"},"description":"End date (YYYY-MM-DD)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/squamish/permits/recent":{"get":{"summary":"Recent Building Permits","description":"Get recent building permits sorted by application date (newest first).\n\nUse this to see where construction activity is happening right now.","operationId":"recent_building_permits_api_squamish_permits_recent_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Max results","default":20,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset","default":0,"title":"Offset"},"description":"Results offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/squamish/permits/batch":{"post":{"summary":"Get Building Permits Batch","description":"Get multiple building permits by permit numbers in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of permit numbers.\nExample: {\"ids\": [\"BP123456\", \"BP789012\"]}\nMaximum 100 permit numbers per request.","operationId":"get_building_permits_batch_api_squamish_permits_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Building Permits Batch Api Squamish Permits Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/squamish/permits/{permit_number}":{"get":{"summary":"Get Building Permit","description":"Get building permit details by permit number.\n\nServes HTML for browsers, JSON for API clients.","operationId":"get_building_permit_api_squamish_permits__permit_number__get","parameters":[{"name":"permit_number","in":"path","required":true,"schema":{"type":"string","description":"Permit number","title":"Permit Number"},"description":"Permit number"},{"name":"_city_name","in":"query","required":false,"schema":{"default":"Squamish","title":" City Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/squamish/health":{"get":{"summary":"City Health","description":"City-specific health check.","operationId":"city_health_api_squamish_health_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/wood-buffalo/entries/{kind}":{"get":{"summary":"List Entries","operationId":"list_entries_api_wood_buffalo_entries__kind__get","parameters":[{"name":"kind","in":"path","required":true,"schema":{"type":"string","description":"Canonical entry kind: property, permit, zoning, or safety","title":"Kind"},"description":"Canonical entry kind: property, permit, zoning, or safety"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"_services","in":"query","required":false,"schema":{"title":" Services"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Entries Api Wood Buffalo Entries  Kind  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/wood-buffalo/census/profile":{"get":{"summary":"Get Census Profile","description":"Get census profile for a specific Dissemination Area.\n\nProvide either da_id directly, OR lat+lon to find the nearest DA automatically.","operationId":"get_census_profile_api_wood_buffalo_census_profile_get","parameters":[{"name":"da_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Dissemination Area ID (e.g., 48820001)","title":"Da Id"},"description":"Dissemination Area ID (e.g., 48820001)"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude for nearest-DA lookup","title":"Lat"},"description":"Latitude for nearest-DA lookup"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude for nearest-DA lookup","title":"Lon"},"description":"Longitude for nearest-DA lookup"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusProfile"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/wood-buffalo/census/batch":{"post":{"summary":"Get Census Batch","description":"Get multiple census profiles by DA IDs in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of DA IDs.\nExample: {\"ids\": [\"48820001\", \"48820002\"]}\nMaximum 100 DA IDs per request.","operationId":"get_census_batch_api_wood_buffalo_census_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Census Batch Api Wood Buffalo Census Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/wood-buffalo/census/export":{"get":{"summary":"Export Census","description":"Export census data as CSV.\n\nSupports filtering by population range and geography type.\nMaximum 10,000 records per export.","operationId":"export_census_api_wood_buffalo_census_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv only","default":"csv","title":"Format"},"description":"Export format: csv only"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"min_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Minimum population filter","title":"Min Population"},"description":"Minimum population filter"},{"name":"max_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Maximum population filter","title":"Max Population"},"description":"Maximum population filter"},{"name":"geography_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Geography type filter (DA, CT, CMA)","title":"Geography Type"},"description":"Geography type filter (DA, CT, CMA)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/wood-buffalo/census/list":{"get":{"summary":"List Census Profiles","description":"List all census profiles with pagination.\n\nUse this endpoint to browse available census profiles and discover valid DA IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_census_profiles_api_wood_buffalo_census_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Census Profiles Api Wood Buffalo Census List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/wood-buffalo/census/by-gps":{"get":{"summary":"Get Census By Gps","description":"Get census data for GPS coordinates.","operationId":"get_census_by_gps_api_wood_buffalo_census_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90,"minimum":-90,"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":180,"minimum":-180,"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/wood-buffalo/census/by-dls":{"get":{"summary":"Get Census By Dls","description":"Get census data for DLS coordinates.","operationId":"get_census_by_dls_api_wood_buffalo_census_by_dls_get","parameters":[{"name":"dls","in":"query","required":true,"schema":{"type":"string","description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)","title":"Dls"},"description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/wood-buffalo/census/map-data":{"get":{"summary":"Get Census Map Data","description":"Get lightweight DA points for choropleth map rendering.\n\nReturns centroid coordinates and key metrics (income, age, population,\nhousehold size, employment rate) for all DAs in the city.\nUsed by the census dashboard to render color-coded maps.","operationId":"get_census_map_data_api_wood_buffalo_census_map_data_get","parameters":[{"name":"year","in":"query","required":false,"schema":{"type":"integer","description":"Census year for DA map data","default":2021,"title":"Year"},"description":"Census year for DA map data"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/wood-buffalo/census/stats":{"get":{"summary":"Census Stats","description":"Get census data statistics.","operationId":"census_stats_api_wood_buffalo_census_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/wood-buffalo/census/compare":{"get":{"summary":"Census Compare","description":"Compare key census metrics across multiple years.\n\nReturns side-by-side comparison of population, households,\navg_income, median_age, density, and land_area for each requested year.\nYears without data return null for that year's values.","operationId":"census_compare_api_wood_buffalo_census_compare_get","parameters":[{"name":"years","in":"query","required":false,"schema":{"type":"string","description":"Comma-separated census years (e.g., 2016,2021)","default":"2021","title":"Years"},"description":"Comma-separated census years (e.g., 2016,2021)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/wood-buffalo/census/time-series":{"get":{"summary":"Census Timeseries","description":"Get year-by-year census trends for this city.\n\nReturns population, income, age, and household trends across all\navailable census years. Useful for spotting long-term demographic shifts.","operationId":"census_timeseries_api_wood_buffalo_census_time_series_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/wood-buffalo/geography/list":{"get":{"summary":"Geography List","description":"List geography boundaries for this city.","operationId":"geography_list_api_wood_buffalo_geography_list_get","parameters":[{"name":"type","in":"query","required":false,"schema":{"type":"string","title":"Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/wood-buffalo/geography/by-gps":{"get":{"summary":"Geography By Gps","description":"Find the geography boundary containing a GPS point.","operationId":"geography_by_gps_api_wood_buffalo_geography_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","title":"Lat"}},{"name":"lon","in":"query","required":true,"schema":{"type":"number","title":"Lon"}},{"name":"type","in":"query","required":false,"schema":{"type":"string","default":"DA","title":"Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/wood-buffalo/geography/stats":{"get":{"summary":"Geography Stats","description":"Get geography statistics for this city.","operationId":"geography_stats_api_wood_buffalo_geography_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/wood-buffalo/geography/{geoid}":{"get":{"summary":"Geography Boundary","description":"Get a specific geography boundary by geoid, including GeoJSON polygon.","operationId":"geography_boundary_api_wood_buffalo_geography__geoid__get","parameters":[{"name":"geoid","in":"path","required":true,"schema":{"type":"string","title":"Geoid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/wood-buffalo/census/rental/list":{"get":{"summary":"List Rental Prices","description":"List rental price records for this city, with optional unit type filter.","operationId":"list_rental_prices_api_wood_buffalo_census_rental_list_get","parameters":[{"name":"unit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":50,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalPriceListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/wood-buffalo/census/rental/trend":{"get":{"summary":"Get Rental Trend","description":"Get rental price time series for a specific unit type.","operationId":"get_rental_trend_api_wood_buffalo_census_rental_trend_get","parameters":[{"name":"unit_type","in":"query","required":true,"schema":{"type":"string","description":"Rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Rental unit type (e.g. 'Apartment - 1 bedroom')"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalTrendResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/wood-buffalo/census/rental/types":{"get":{"summary":"Get Rental Types","description":"Get available rental unit types for this city.","operationId":"get_rental_types_api_wood_buffalo_census_rental_types_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/wood-buffalo/zoning/by-gps":{"get":{"summary":"Get Zoning By Gps","description":"Get zoning district for GPS coordinates.","operationId":"get_zoning_by_gps_api_wood_buffalo_zoning_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZoningByGPSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/wood-buffalo/zoning/by-id/{district_id}":{"get":{"summary":"Get Zoning By Id","description":"Get a single zoning district by its numeric ID.","operationId":"get_zoning_by_id_api_wood_buffalo_zoning_by_id__district_id__get","parameters":[{"name":"district_id","in":"path","required":true,"schema":{"type":"integer","description":"Zoning district numeric ID","title":"District Id"},"description":"Zoning district numeric ID"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning By Id Api Wood Buffalo Zoning By Id  District Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/wood-buffalo/zoning/by-code/{code}":{"get":{"summary":"Get Zoning By Code","description":"Get all districts with a specific zone code.","operationId":"get_zoning_by_code_api_wood_buffalo_zoning_by_code__code__get","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","description":"Zone code (e.g., C-C1, R-G)","title":"Code"},"description":"Zone code (e.g., C-C1, R-G)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoningDistrict"},"title":"Response Get Zoning By Code Api Wood Buffalo Zoning By Code  Code  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/wood-buffalo/zoning/batch":{"post":{"summary":"Get Zoning Batch","description":"Get multiple zoning districts by zone codes in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of zone codes.\nExample: {\"ids\": [\"CR20-C20/R20\", \"C-C1\", \"R-G\"]}\nMaximum 100 zone codes per request.","operationId":"get_zoning_batch_api_wood_buffalo_zoning_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning Batch Api Wood Buffalo Zoning Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/wood-buffalo/zoning/list":{"get":{"summary":"List Zoning Districts","description":"List all zoning districts with pagination.\n\nUse this endpoint to browse available zoning districts and discover valid IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_zoning_districts_api_wood_buffalo_zoning_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Zoning Districts Api Wood Buffalo Zoning List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/wood-buffalo/zoning/codes":{"get":{"summary":"List Zone Codes","description":"List all zone codes with descriptions.","operationId":"list_zone_codes_api_wood_buffalo_zoning_codes_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"type":"string","description":"Filter by major category (e.g., Commercial, Residential)","title":"Category"},"description":"Filter by major category (e.g., Commercial, Residential)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoneCodeInfo"},"title":"Response List Zone Codes Api Wood Buffalo Zoning Codes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/wood-buffalo/zoning/stats":{"get":{"summary":"Zoning Stats","description":"Get zoning statistics.","operationId":"zoning_stats_api_wood_buffalo_zoning_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/wood-buffalo/zoning/export":{"get":{"summary":"Export Zoning","description":"Export zoning district data as CSV or GeoJSON.\n\nSupports filtering by zone code, category, and area range.\nMaximum 10,000 records per export.","operationId":"export_zoning_api_wood_buffalo_zoning_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"zone_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Zone code filter (e.g., CR2)","title":"Zone Code"},"description":"Zone code filter (e.g., CR2)"},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Major category filter","title":"Category"},"description":"Major category filter"},{"name":"min_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum area in sq km","title":"Min Area"},"description":"Minimum area in sq km"},{"name":"max_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum area in sq km","title":"Max Area"},"description":"Maximum area in sq km"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/wood-buffalo/permits/stats":{"get":{"summary":"Building Stats","description":"Get building permit statistics.","operationId":"building_stats_api_wood_buffalo_permits_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/wood-buffalo/permits/search":{"get":{"summary":"Search Building Permits","description":"Search building permits by address, contractor, applicant, permit number, and/or permit type.","operationId":"search_building_permits_api_wood_buffalo_permits_search_get","parameters":[{"name":"address","in":"query","required":false,"schema":{"type":"string","description":"Address to search","title":"Address"},"description":"Address to search"},{"name":"q","in":"query","required":false,"schema":{"type":"string","description":"General text search (address, contractor, applicant, permit #)","title":"Q"},"description":"General text search (address, contractor, applicant, permit #)"},{"name":"permit_type","in":"query","required":false,"schema":{"type":"string","description":"Filter by permit type","title":"Permit Type"},"description":"Filter by permit type"},{"name":"bbox","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bounding box: min_lon,min_lat,max_lon,max_lat","title":"Bbox"},"description":"Bounding box: min_lon,min_lat,max_lon,max_lat"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max results","default":20,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset","default":0,"title":"Offset"},"description":"Results offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/wood-buffalo/permits/nearby":{"get":{"summary":"Nearby Building Permits","description":"Coordinate-first alias for nearby building permits.","operationId":"nearby_building_permits_api_wood_buffalo_permits_nearby_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":84.0,"minimum":41.0,"description":"Canadian latitude","title":"Lat"},"description":"Canadian latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":-52.0,"minimum":-142.0,"description":"Canadian longitude","title":"Lon"},"description":"Canadian longitude"},{"name":"radius_m","in":"query","required":false,"schema":{"type":"integer","maximum":50000,"minimum":1,"default":1000,"title":"Radius M"}},{"name":"permit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Permit Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/wood-buffalo/permits/export":{"get":{"summary":"Export Building Permits","description":"Export building permit data as CSV or GeoJSON.\n\nSupports filtering by address, permit type, and date range.\nMaximum 10,000 records per export.","operationId":"export_building_permits_api_wood_buffalo_permits_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Address filter","title":"Address"},"description":"Address filter"},{"name":"permit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Permit type filter","title":"Permit Type"},"description":"Permit type filter"},{"name":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Start date (YYYY-MM-DD)","title":"Date From"},"description":"Start date (YYYY-MM-DD)"},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"End date (YYYY-MM-DD)","title":"Date To"},"description":"End date (YYYY-MM-DD)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/wood-buffalo/permits/recent":{"get":{"summary":"Recent Building Permits","description":"Get recent building permits sorted by application date (newest first).\n\nUse this to see where construction activity is happening right now.","operationId":"recent_building_permits_api_wood_buffalo_permits_recent_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Max results","default":20,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset","default":0,"title":"Offset"},"description":"Results offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/wood-buffalo/permits/batch":{"post":{"summary":"Get Building Permits Batch","description":"Get multiple building permits by permit numbers in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of permit numbers.\nExample: {\"ids\": [\"BP123456\", \"BP789012\"]}\nMaximum 100 permit numbers per request.","operationId":"get_building_permits_batch_api_wood_buffalo_permits_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Building Permits Batch Api Wood Buffalo Permits Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/wood-buffalo/permits/{permit_number}":{"get":{"summary":"Get Building Permit","description":"Get building permit details by permit number.\n\nServes HTML for browsers, JSON for API clients.","operationId":"get_building_permit_api_wood_buffalo_permits__permit_number__get","parameters":[{"name":"permit_number","in":"path","required":true,"schema":{"type":"string","description":"Permit number","title":"Permit Number"},"description":"Permit number"},{"name":"_city_name","in":"query","required":false,"schema":{"default":"Wood Buffalo","title":" City Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/wood-buffalo/health":{"get":{"summary":"City Health","description":"City-specific health check.","operationId":"city_health_api_wood_buffalo_health_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/richmond/entries/{kind}":{"get":{"summary":"List Entries","operationId":"list_entries_api_richmond_entries__kind__get","parameters":[{"name":"kind","in":"path","required":true,"schema":{"type":"string","description":"Canonical entry kind: property, permit, zoning, or safety","title":"Kind"},"description":"Canonical entry kind: property, permit, zoning, or safety"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"_services","in":"query","required":false,"schema":{"title":" Services"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Entries Api Richmond Entries  Kind  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/richmond/property/search":{"get":{"summary":"Search Property","description":"Search for properties by address, or browse all if no address specified.\nSupports sorting by assessed_value, address, year_built, community, or lot_size_sqft.\nSupports value range filtering with min_value and max_value.\n Supports property_type and year range filters.","operationId":"search_property_api_richmond_property_search_get","parameters":[{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Street address to search (omit to browse all)","title":"Address"},"description":"Street address to search (omit to browse all)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max results to return (up to 1000 for map browse)","default":10,"title":"Limit"},"description":"Max results to return (up to 1000 for map browse)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset for pagination","default":0,"title":"Offset"},"description":"Results offset for pagination"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft","title":"Sort By"},"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"asc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"},{"name":"property_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property type filter (e.g. RE, Residential)","title":"Property Type"},"description":"Property type filter (e.g. RE, Residential)"},{"name":"min_year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter: minimum year built","title":"Min Year"},"description":"Filter: minimum year built"},{"name":"max_year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter: maximum year built","title":"Max Year"},"description":"Filter: maximum year built"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertySearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/richmond/property/list":{"get":{"summary":"List Property","description":"List all properties with pagination, sorting, and value range filtering.\n\nUse this endpoint to browse available property records and discover valid roll numbers.\nReturns paginated results with total count for client-side pagination.\nSort by assessed_value with order=desc to find the most expensive properties.","operationId":"list_property_api_richmond_property_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft","title":"Sort By"},"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"asc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Property Api Richmond Property List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/richmond/property/geojson":{"get":{"summary":"Property Geojson","operationId":"property_geojson_api_richmond_property_geojson_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500000,"minimum":1,"description":"Max features to return (cap prevents browser overload for large cities)","default":50000,"title":"Limit"},"description":"Max features to return (cap prevents browser overload for large cities)"},{"name":"sw_lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport south-west latitude","title":"Sw Lat"},"description":"Viewport south-west latitude"},{"name":"sw_lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport south-west longitude","title":"Sw Lon"},"description":"Viewport south-west longitude"},{"name":"ne_lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport north-east latitude","title":"Ne Lat"},"description":"Viewport north-east latitude"},{"name":"ne_lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport north-east longitude","title":"Ne Lon"},"description":"Viewport north-east longitude"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Offset for pagination through viewport results (use with limit)","default":0,"title":"Offset"},"description":"Offset for pagination through viewport results (use with limit)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/richmond/property/top":{"get":{"summary":"Top Property","description":"Get top-N properties sorted by any numeric column.\n\nConvenience endpoint for AI agents and dashboards. Returns the top\nN properties sorted by the given column. Defaults to most expensive\n(assessed_value descending). Combine with min_value/max_value to\nfind e.g. the most expensive residential properties.","operationId":"top_property_api_richmond_property_top_get","parameters":[{"name":"n","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Number of top properties to return","default":10,"title":"N"},"description":"Number of top properties to return"},{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","description":"Sort column: assessed_value, year_built, lot_size_sqft","default":"assessed_value","title":"Sort By"},"description":"Sort column: assessed_value, year_built, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"desc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Top Property Api Richmond Property Top Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/richmond/property/stats":{"get":{"summary":"Property Stats","description":"Get property assessment statistics.","operationId":"property_stats_api_richmond_property_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/richmond/property/autocomplete":{"get":{"summary":"Property Autocomplete","description":"Get address and roll number suggestions for typeahead search.","operationId":"property_autocomplete_api_richmond_property_autocomplete_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"description":"Search query for address/roll number suggestions","title":"Q"},"description":"Search query for address/roll number suggestions"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":25,"minimum":1,"description":"Max suggestions to return","default":10,"title":"Limit"},"description":"Max suggestions to return"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/richmond/property/geocode":{"post":{"summary":"Property Geocode","description":"Geocode property addresses to lat/lon coordinates.\n\nAccepts a JSON body with 'addresses' (list of address strings, max 50).\nReturns cached results instantly; uncached addresses are geocoded via Nominatim.\n\nExample: {\"addresses\": [\"123 Main St\", \"456 Oak Ave\"]}","operationId":"property_geocode_api_richmond_property_geocode_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/richmond/property/by-dls":{"get":{"summary":"Get Property By Dls","description":"Get property assessment by DLS coordinates.","operationId":"get_property_by_dls_api_richmond_property_by_dls_get","parameters":[{"name":"quarter","in":"query","required":true,"schema":{"type":"string","description":"Quarter section (e.g., SW)","title":"Quarter"},"description":"Quarter section (e.g., SW)"},{"name":"section","in":"query","required":true,"schema":{"type":"integer","description":"Section number","title":"Section"},"description":"Section number"},{"name":"township","in":"query","required":true,"schema":{"type":"integer","description":"Township number","title":"Township"},"description":"Township number"},{"name":"range","in":"query","required":true,"schema":{"type":"integer","description":"Range number","title":"Range"},"description":"Range number"},{"name":"meridian","in":"query","required":true,"schema":{"type":"integer","description":"Meridian number","title":"Meridian"},"description":"Meridian number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyAssessment"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/richmond/property/by-gps":{"get":{"summary":"Get Property By Gps","description":"Find coordinate-bearing assessment records nearest a GPS point.\n\nResults are point-nearness matches unless the municipal source supplies\nparcel polygons; clients should not interpret proximity as legal parcel\ncontainment.","operationId":"get_property_by_gps_api_richmond_property_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":84.0,"minimum":41.0,"description":"Canadian latitude","title":"Lat"},"description":"Canadian latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":-52.0,"minimum":-142.0,"description":"Canadian longitude","title":"Lon"},"description":"Canadian longitude"},{"name":"radius_m","in":"query","required":false,"schema":{"type":"integer","maximum":5000,"minimum":1,"description":"Maximum point distance","default":100,"title":"Radius M"},"description":"Maximum point distance"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":10,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Property By Gps Api Richmond Property By Gps Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/richmond/property/by-roll/{roll_number}":{"get":{"summary":"Get Property By Roll","description":"Get property assessment by roll number.","operationId":"get_property_by_roll_api_richmond_property_by_roll__roll_number__get","parameters":[{"name":"roll_number","in":"path","required":true,"schema":{"type":"string","description":"Property roll number","title":"Roll Number"},"description":"Property roll number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyAssessment"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/richmond/property/report":{"get":{"summary":"Property Report Lookup","description":"Consolidated report by roll number, address, or GPS.","operationId":"property_report_lookup_api_richmond_property_report_get","parameters":[{"name":"roll_number","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property roll number","title":"Roll Number"},"description":"Property roll number"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Street address","title":"Address"},"description":"Street address"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyReport"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/richmond/property/report/{roll_number}":{"get":{"summary":"Property Report","description":"Get consolidated property report: assessment + building permits + zoning + DLS.","operationId":"property_report_api_richmond_property_report__roll_number__get","parameters":[{"name":"roll_number","in":"path","required":true,"schema":{"type":"string","description":"Property roll number","title":"Roll Number"},"description":"Property roll number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyReport"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/richmond/property/batch":{"post":{"summary":"Get Properties Batch","description":"Get multiple properties by roll numbers in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of roll numbers.\nExample: {\"ids\": [\"123456789\", \"987654321\"]}\nMaximum 100 roll numbers per request.","operationId":"get_properties_batch_api_richmond_property_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Properties Batch Api Richmond Property Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/richmond/property/export":{"get":{"summary":"Export Properties","description":"Export property data as CSV or GeoJSON.\n\nSupports filtering by address, property type, and assessed value range.\nMaximum 10,000 records per export.","operationId":"export_properties_api_richmond_property_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Address filter","title":"Address"},"description":"Address filter"},{"name":"property_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property type filter","title":"Property Type"},"description":"Property type filter"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum assessed value","title":"Min Value"},"description":"Minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum assessed value","title":"Max Value"},"description":"Maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/richmond/census/profile":{"get":{"summary":"Get Census Profile","description":"Get census profile for a specific Dissemination Area.\n\nProvide either da_id directly, OR lat+lon to find the nearest DA automatically.","operationId":"get_census_profile_api_richmond_census_profile_get","parameters":[{"name":"da_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Dissemination Area ID (e.g., 48820001)","title":"Da Id"},"description":"Dissemination Area ID (e.g., 48820001)"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude for nearest-DA lookup","title":"Lat"},"description":"Latitude for nearest-DA lookup"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude for nearest-DA lookup","title":"Lon"},"description":"Longitude for nearest-DA lookup"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusProfile"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/richmond/census/batch":{"post":{"summary":"Get Census Batch","description":"Get multiple census profiles by DA IDs in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of DA IDs.\nExample: {\"ids\": [\"48820001\", \"48820002\"]}\nMaximum 100 DA IDs per request.","operationId":"get_census_batch_api_richmond_census_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Census Batch Api Richmond Census Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/richmond/census/export":{"get":{"summary":"Export Census","description":"Export census data as CSV.\n\nSupports filtering by population range and geography type.\nMaximum 10,000 records per export.","operationId":"export_census_api_richmond_census_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv only","default":"csv","title":"Format"},"description":"Export format: csv only"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"min_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Minimum population filter","title":"Min Population"},"description":"Minimum population filter"},{"name":"max_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Maximum population filter","title":"Max Population"},"description":"Maximum population filter"},{"name":"geography_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Geography type filter (DA, CT, CMA)","title":"Geography Type"},"description":"Geography type filter (DA, CT, CMA)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/richmond/census/list":{"get":{"summary":"List Census Profiles","description":"List all census profiles with pagination.\n\nUse this endpoint to browse available census profiles and discover valid DA IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_census_profiles_api_richmond_census_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Census Profiles Api Richmond Census List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/richmond/census/by-gps":{"get":{"summary":"Get Census By Gps","description":"Get census data for GPS coordinates.","operationId":"get_census_by_gps_api_richmond_census_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90,"minimum":-90,"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":180,"minimum":-180,"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/richmond/census/by-dls":{"get":{"summary":"Get Census By Dls","description":"Get census data for DLS coordinates.","operationId":"get_census_by_dls_api_richmond_census_by_dls_get","parameters":[{"name":"dls","in":"query","required":true,"schema":{"type":"string","description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)","title":"Dls"},"description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/richmond/census/map-data":{"get":{"summary":"Get Census Map Data","description":"Get lightweight DA points for choropleth map rendering.\n\nReturns centroid coordinates and key metrics (income, age, population,\nhousehold size, employment rate) for all DAs in the city.\nUsed by the census dashboard to render color-coded maps.","operationId":"get_census_map_data_api_richmond_census_map_data_get","parameters":[{"name":"year","in":"query","required":false,"schema":{"type":"integer","description":"Census year for DA map data","default":2021,"title":"Year"},"description":"Census year for DA map data"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/richmond/census/stats":{"get":{"summary":"Census Stats","description":"Get census data statistics.","operationId":"census_stats_api_richmond_census_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/richmond/census/compare":{"get":{"summary":"Census Compare","description":"Compare key census metrics across multiple years.\n\nReturns side-by-side comparison of population, households,\navg_income, median_age, density, and land_area for each requested year.\nYears without data return null for that year's values.","operationId":"census_compare_api_richmond_census_compare_get","parameters":[{"name":"years","in":"query","required":false,"schema":{"type":"string","description":"Comma-separated census years (e.g., 2016,2021)","default":"2021","title":"Years"},"description":"Comma-separated census years (e.g., 2016,2021)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/richmond/census/time-series":{"get":{"summary":"Census Timeseries","description":"Get year-by-year census trends for this city.\n\nReturns population, income, age, and household trends across all\navailable census years. Useful for spotting long-term demographic shifts.","operationId":"census_timeseries_api_richmond_census_time_series_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/richmond/geography/list":{"get":{"summary":"Geography List","description":"List geography boundaries for this city.","operationId":"geography_list_api_richmond_geography_list_get","parameters":[{"name":"type","in":"query","required":false,"schema":{"type":"string","title":"Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/richmond/geography/by-gps":{"get":{"summary":"Geography By Gps","description":"Find the geography boundary containing a GPS point.","operationId":"geography_by_gps_api_richmond_geography_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","title":"Lat"}},{"name":"lon","in":"query","required":true,"schema":{"type":"number","title":"Lon"}},{"name":"type","in":"query","required":false,"schema":{"type":"string","default":"DA","title":"Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/richmond/geography/stats":{"get":{"summary":"Geography Stats","description":"Get geography statistics for this city.","operationId":"geography_stats_api_richmond_geography_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/richmond/geography/{geoid}":{"get":{"summary":"Geography Boundary","description":"Get a specific geography boundary by geoid, including GeoJSON polygon.","operationId":"geography_boundary_api_richmond_geography__geoid__get","parameters":[{"name":"geoid","in":"path","required":true,"schema":{"type":"string","title":"Geoid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/richmond/census/rental/list":{"get":{"summary":"List Rental Prices","description":"List rental price records for this city, with optional unit type filter.","operationId":"list_rental_prices_api_richmond_census_rental_list_get","parameters":[{"name":"unit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":50,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalPriceListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/richmond/census/rental/trend":{"get":{"summary":"Get Rental Trend","description":"Get rental price time series for a specific unit type.","operationId":"get_rental_trend_api_richmond_census_rental_trend_get","parameters":[{"name":"unit_type","in":"query","required":true,"schema":{"type":"string","description":"Rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Rental unit type (e.g. 'Apartment - 1 bedroom')"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalTrendResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/richmond/census/rental/types":{"get":{"summary":"Get Rental Types","description":"Get available rental unit types for this city.","operationId":"get_rental_types_api_richmond_census_rental_types_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/richmond/zoning/by-gps":{"get":{"summary":"Get Zoning By Gps","description":"Get zoning district for GPS coordinates.","operationId":"get_zoning_by_gps_api_richmond_zoning_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZoningByGPSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/richmond/zoning/by-id/{district_id}":{"get":{"summary":"Get Zoning By Id","description":"Get a single zoning district by its numeric ID.","operationId":"get_zoning_by_id_api_richmond_zoning_by_id__district_id__get","parameters":[{"name":"district_id","in":"path","required":true,"schema":{"type":"integer","description":"Zoning district numeric ID","title":"District Id"},"description":"Zoning district numeric ID"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning By Id Api Richmond Zoning By Id  District Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/richmond/zoning/by-code/{code}":{"get":{"summary":"Get Zoning By Code","description":"Get all districts with a specific zone code.","operationId":"get_zoning_by_code_api_richmond_zoning_by_code__code__get","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","description":"Zone code (e.g., C-C1, R-G)","title":"Code"},"description":"Zone code (e.g., C-C1, R-G)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoningDistrict"},"title":"Response Get Zoning By Code Api Richmond Zoning By Code  Code  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/richmond/zoning/batch":{"post":{"summary":"Get Zoning Batch","description":"Get multiple zoning districts by zone codes in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of zone codes.\nExample: {\"ids\": [\"CR20-C20/R20\", \"C-C1\", \"R-G\"]}\nMaximum 100 zone codes per request.","operationId":"get_zoning_batch_api_richmond_zoning_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning Batch Api Richmond Zoning Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/richmond/zoning/list":{"get":{"summary":"List Zoning Districts","description":"List all zoning districts with pagination.\n\nUse this endpoint to browse available zoning districts and discover valid IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_zoning_districts_api_richmond_zoning_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Zoning Districts Api Richmond Zoning List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/richmond/zoning/codes":{"get":{"summary":"List Zone Codes","description":"List all zone codes with descriptions.","operationId":"list_zone_codes_api_richmond_zoning_codes_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"type":"string","description":"Filter by major category (e.g., Commercial, Residential)","title":"Category"},"description":"Filter by major category (e.g., Commercial, Residential)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoneCodeInfo"},"title":"Response List Zone Codes Api Richmond Zoning Codes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/richmond/zoning/stats":{"get":{"summary":"Zoning Stats","description":"Get zoning statistics.","operationId":"zoning_stats_api_richmond_zoning_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/richmond/zoning/export":{"get":{"summary":"Export Zoning","description":"Export zoning district data as CSV or GeoJSON.\n\nSupports filtering by zone code, category, and area range.\nMaximum 10,000 records per export.","operationId":"export_zoning_api_richmond_zoning_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"zone_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Zone code filter (e.g., CR2)","title":"Zone Code"},"description":"Zone code filter (e.g., CR2)"},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Major category filter","title":"Category"},"description":"Major category filter"},{"name":"min_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum area in sq km","title":"Min Area"},"description":"Minimum area in sq km"},{"name":"max_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum area in sq km","title":"Max Area"},"description":"Maximum area in sq km"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/richmond/health":{"get":{"summary":"City Health","description":"City-specific health check.","operationId":"city_health_api_richmond_health_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/north-vancouver/entries/{kind}":{"get":{"summary":"List Entries","operationId":"list_entries_api_north_vancouver_entries__kind__get","parameters":[{"name":"kind","in":"path","required":true,"schema":{"type":"string","description":"Canonical entry kind: property, permit, zoning, or safety","title":"Kind"},"description":"Canonical entry kind: property, permit, zoning, or safety"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"_services","in":"query","required":false,"schema":{"title":" Services"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Entries Api North Vancouver Entries  Kind  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/north-vancouver/census/profile":{"get":{"summary":"Get Census Profile","description":"Get census profile for a specific Dissemination Area.\n\nProvide either da_id directly, OR lat+lon to find the nearest DA automatically.","operationId":"get_census_profile_api_north_vancouver_census_profile_get","parameters":[{"name":"da_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Dissemination Area ID (e.g., 48820001)","title":"Da Id"},"description":"Dissemination Area ID (e.g., 48820001)"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude for nearest-DA lookup","title":"Lat"},"description":"Latitude for nearest-DA lookup"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude for nearest-DA lookup","title":"Lon"},"description":"Longitude for nearest-DA lookup"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusProfile"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/north-vancouver/census/batch":{"post":{"summary":"Get Census Batch","description":"Get multiple census profiles by DA IDs in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of DA IDs.\nExample: {\"ids\": [\"48820001\", \"48820002\"]}\nMaximum 100 DA IDs per request.","operationId":"get_census_batch_api_north_vancouver_census_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Census Batch Api North Vancouver Census Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/north-vancouver/census/export":{"get":{"summary":"Export Census","description":"Export census data as CSV.\n\nSupports filtering by population range and geography type.\nMaximum 10,000 records per export.","operationId":"export_census_api_north_vancouver_census_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv only","default":"csv","title":"Format"},"description":"Export format: csv only"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"min_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Minimum population filter","title":"Min Population"},"description":"Minimum population filter"},{"name":"max_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Maximum population filter","title":"Max Population"},"description":"Maximum population filter"},{"name":"geography_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Geography type filter (DA, CT, CMA)","title":"Geography Type"},"description":"Geography type filter (DA, CT, CMA)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/north-vancouver/census/list":{"get":{"summary":"List Census Profiles","description":"List all census profiles with pagination.\n\nUse this endpoint to browse available census profiles and discover valid DA IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_census_profiles_api_north_vancouver_census_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Census Profiles Api North Vancouver Census List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/north-vancouver/census/by-gps":{"get":{"summary":"Get Census By Gps","description":"Get census data for GPS coordinates.","operationId":"get_census_by_gps_api_north_vancouver_census_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90,"minimum":-90,"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":180,"minimum":-180,"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/north-vancouver/census/by-dls":{"get":{"summary":"Get Census By Dls","description":"Get census data for DLS coordinates.","operationId":"get_census_by_dls_api_north_vancouver_census_by_dls_get","parameters":[{"name":"dls","in":"query","required":true,"schema":{"type":"string","description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)","title":"Dls"},"description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/north-vancouver/census/map-data":{"get":{"summary":"Get Census Map Data","description":"Get lightweight DA points for choropleth map rendering.\n\nReturns centroid coordinates and key metrics (income, age, population,\nhousehold size, employment rate) for all DAs in the city.\nUsed by the census dashboard to render color-coded maps.","operationId":"get_census_map_data_api_north_vancouver_census_map_data_get","parameters":[{"name":"year","in":"query","required":false,"schema":{"type":"integer","description":"Census year for DA map data","default":2021,"title":"Year"},"description":"Census year for DA map data"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/north-vancouver/census/stats":{"get":{"summary":"Census Stats","description":"Get census data statistics.","operationId":"census_stats_api_north_vancouver_census_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/north-vancouver/census/compare":{"get":{"summary":"Census Compare","description":"Compare key census metrics across multiple years.\n\nReturns side-by-side comparison of population, households,\navg_income, median_age, density, and land_area for each requested year.\nYears without data return null for that year's values.","operationId":"census_compare_api_north_vancouver_census_compare_get","parameters":[{"name":"years","in":"query","required":false,"schema":{"type":"string","description":"Comma-separated census years (e.g., 2016,2021)","default":"2021","title":"Years"},"description":"Comma-separated census years (e.g., 2016,2021)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/north-vancouver/census/time-series":{"get":{"summary":"Census Timeseries","description":"Get year-by-year census trends for this city.\n\nReturns population, income, age, and household trends across all\navailable census years. Useful for spotting long-term demographic shifts.","operationId":"census_timeseries_api_north_vancouver_census_time_series_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/north-vancouver/geography/list":{"get":{"summary":"Geography List","description":"List geography boundaries for this city.","operationId":"geography_list_api_north_vancouver_geography_list_get","parameters":[{"name":"type","in":"query","required":false,"schema":{"type":"string","title":"Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/north-vancouver/geography/by-gps":{"get":{"summary":"Geography By Gps","description":"Find the geography boundary containing a GPS point.","operationId":"geography_by_gps_api_north_vancouver_geography_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","title":"Lat"}},{"name":"lon","in":"query","required":true,"schema":{"type":"number","title":"Lon"}},{"name":"type","in":"query","required":false,"schema":{"type":"string","default":"DA","title":"Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/north-vancouver/geography/stats":{"get":{"summary":"Geography Stats","description":"Get geography statistics for this city.","operationId":"geography_stats_api_north_vancouver_geography_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/north-vancouver/geography/{geoid}":{"get":{"summary":"Geography Boundary","description":"Get a specific geography boundary by geoid, including GeoJSON polygon.","operationId":"geography_boundary_api_north_vancouver_geography__geoid__get","parameters":[{"name":"geoid","in":"path","required":true,"schema":{"type":"string","title":"Geoid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/north-vancouver/census/rental/list":{"get":{"summary":"List Rental Prices","description":"List rental price records for this city, with optional unit type filter.","operationId":"list_rental_prices_api_north_vancouver_census_rental_list_get","parameters":[{"name":"unit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":50,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalPriceListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/north-vancouver/census/rental/trend":{"get":{"summary":"Get Rental Trend","description":"Get rental price time series for a specific unit type.","operationId":"get_rental_trend_api_north_vancouver_census_rental_trend_get","parameters":[{"name":"unit_type","in":"query","required":true,"schema":{"type":"string","description":"Rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Rental unit type (e.g. 'Apartment - 1 bedroom')"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalTrendResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/north-vancouver/census/rental/types":{"get":{"summary":"Get Rental Types","description":"Get available rental unit types for this city.","operationId":"get_rental_types_api_north_vancouver_census_rental_types_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/north-vancouver/zoning/by-gps":{"get":{"summary":"Get Zoning By Gps","description":"Get zoning district for GPS coordinates.","operationId":"get_zoning_by_gps_api_north_vancouver_zoning_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZoningByGPSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/north-vancouver/zoning/by-id/{district_id}":{"get":{"summary":"Get Zoning By Id","description":"Get a single zoning district by its numeric ID.","operationId":"get_zoning_by_id_api_north_vancouver_zoning_by_id__district_id__get","parameters":[{"name":"district_id","in":"path","required":true,"schema":{"type":"integer","description":"Zoning district numeric ID","title":"District Id"},"description":"Zoning district numeric ID"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning By Id Api North Vancouver Zoning By Id  District Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/north-vancouver/zoning/by-code/{code}":{"get":{"summary":"Get Zoning By Code","description":"Get all districts with a specific zone code.","operationId":"get_zoning_by_code_api_north_vancouver_zoning_by_code__code__get","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","description":"Zone code (e.g., C-C1, R-G)","title":"Code"},"description":"Zone code (e.g., C-C1, R-G)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoningDistrict"},"title":"Response Get Zoning By Code Api North Vancouver Zoning By Code  Code  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/north-vancouver/zoning/batch":{"post":{"summary":"Get Zoning Batch","description":"Get multiple zoning districts by zone codes in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of zone codes.\nExample: {\"ids\": [\"CR20-C20/R20\", \"C-C1\", \"R-G\"]}\nMaximum 100 zone codes per request.","operationId":"get_zoning_batch_api_north_vancouver_zoning_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning Batch Api North Vancouver Zoning Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/north-vancouver/zoning/list":{"get":{"summary":"List Zoning Districts","description":"List all zoning districts with pagination.\n\nUse this endpoint to browse available zoning districts and discover valid IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_zoning_districts_api_north_vancouver_zoning_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Zoning Districts Api North Vancouver Zoning List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/north-vancouver/zoning/codes":{"get":{"summary":"List Zone Codes","description":"List all zone codes with descriptions.","operationId":"list_zone_codes_api_north_vancouver_zoning_codes_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"type":"string","description":"Filter by major category (e.g., Commercial, Residential)","title":"Category"},"description":"Filter by major category (e.g., Commercial, Residential)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoneCodeInfo"},"title":"Response List Zone Codes Api North Vancouver Zoning Codes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/north-vancouver/zoning/stats":{"get":{"summary":"Zoning Stats","description":"Get zoning statistics.","operationId":"zoning_stats_api_north_vancouver_zoning_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/north-vancouver/zoning/export":{"get":{"summary":"Export Zoning","description":"Export zoning district data as CSV or GeoJSON.\n\nSupports filtering by zone code, category, and area range.\nMaximum 10,000 records per export.","operationId":"export_zoning_api_north_vancouver_zoning_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"zone_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Zone code filter (e.g., CR2)","title":"Zone Code"},"description":"Zone code filter (e.g., CR2)"},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Major category filter","title":"Category"},"description":"Major category filter"},{"name":"min_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum area in sq km","title":"Min Area"},"description":"Minimum area in sq km"},{"name":"max_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum area in sq km","title":"Max Area"},"description":"Maximum area in sq km"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/north-vancouver/permits/stats":{"get":{"summary":"Building Stats","description":"Get building permit statistics.","operationId":"building_stats_api_north_vancouver_permits_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/north-vancouver/permits/search":{"get":{"summary":"Search Building Permits","description":"Search building permits by address, contractor, applicant, permit number, and/or permit type.","operationId":"search_building_permits_api_north_vancouver_permits_search_get","parameters":[{"name":"address","in":"query","required":false,"schema":{"type":"string","description":"Address to search","title":"Address"},"description":"Address to search"},{"name":"q","in":"query","required":false,"schema":{"type":"string","description":"General text search (address, contractor, applicant, permit #)","title":"Q"},"description":"General text search (address, contractor, applicant, permit #)"},{"name":"permit_type","in":"query","required":false,"schema":{"type":"string","description":"Filter by permit type","title":"Permit Type"},"description":"Filter by permit type"},{"name":"bbox","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bounding box: min_lon,min_lat,max_lon,max_lat","title":"Bbox"},"description":"Bounding box: min_lon,min_lat,max_lon,max_lat"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max results","default":20,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset","default":0,"title":"Offset"},"description":"Results offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/north-vancouver/permits/nearby":{"get":{"summary":"Nearby Building Permits","description":"Coordinate-first alias for nearby building permits.","operationId":"nearby_building_permits_api_north_vancouver_permits_nearby_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":84.0,"minimum":41.0,"description":"Canadian latitude","title":"Lat"},"description":"Canadian latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":-52.0,"minimum":-142.0,"description":"Canadian longitude","title":"Lon"},"description":"Canadian longitude"},{"name":"radius_m","in":"query","required":false,"schema":{"type":"integer","maximum":50000,"minimum":1,"default":1000,"title":"Radius M"}},{"name":"permit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Permit Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/north-vancouver/permits/export":{"get":{"summary":"Export Building Permits","description":"Export building permit data as CSV or GeoJSON.\n\nSupports filtering by address, permit type, and date range.\nMaximum 10,000 records per export.","operationId":"export_building_permits_api_north_vancouver_permits_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Address filter","title":"Address"},"description":"Address filter"},{"name":"permit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Permit type filter","title":"Permit Type"},"description":"Permit type filter"},{"name":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Start date (YYYY-MM-DD)","title":"Date From"},"description":"Start date (YYYY-MM-DD)"},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"End date (YYYY-MM-DD)","title":"Date To"},"description":"End date (YYYY-MM-DD)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/north-vancouver/permits/recent":{"get":{"summary":"Recent Building Permits","description":"Get recent building permits sorted by application date (newest first).\n\nUse this to see where construction activity is happening right now.","operationId":"recent_building_permits_api_north_vancouver_permits_recent_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Max results","default":20,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset","default":0,"title":"Offset"},"description":"Results offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/north-vancouver/permits/batch":{"post":{"summary":"Get Building Permits Batch","description":"Get multiple building permits by permit numbers in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of permit numbers.\nExample: {\"ids\": [\"BP123456\", \"BP789012\"]}\nMaximum 100 permit numbers per request.","operationId":"get_building_permits_batch_api_north_vancouver_permits_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Building Permits Batch Api North Vancouver Permits Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/north-vancouver/permits/{permit_number}":{"get":{"summary":"Get Building Permit","description":"Get building permit details by permit number.\n\nServes HTML for browsers, JSON for API clients.","operationId":"get_building_permit_api_north_vancouver_permits__permit_number__get","parameters":[{"name":"permit_number","in":"path","required":true,"schema":{"type":"string","description":"Permit number","title":"Permit Number"},"description":"Permit number"},{"name":"_city_name","in":"query","required":false,"schema":{"default":"North Vancouver","title":" City Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/north-vancouver/health":{"get":{"summary":"City Health","description":"City-specific health check.","operationId":"city_health_api_north_vancouver_health_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mission/entries/{kind}":{"get":{"summary":"List Entries","operationId":"list_entries_api_mission_entries__kind__get","parameters":[{"name":"kind","in":"path","required":true,"schema":{"type":"string","description":"Canonical entry kind: property, permit, zoning, or safety","title":"Kind"},"description":"Canonical entry kind: property, permit, zoning, or safety"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"_services","in":"query","required":false,"schema":{"title":" Services"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Entries Api Mission Entries  Kind  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mission/property/search":{"get":{"summary":"Search Property","description":"Search for properties by address, or browse all if no address specified.\nSupports sorting by assessed_value, address, year_built, community, or lot_size_sqft.\nSupports value range filtering with min_value and max_value.\n Supports property_type and year range filters.","operationId":"search_property_api_mission_property_search_get","parameters":[{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Street address to search (omit to browse all)","title":"Address"},"description":"Street address to search (omit to browse all)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max results to return (up to 1000 for map browse)","default":10,"title":"Limit"},"description":"Max results to return (up to 1000 for map browse)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset for pagination","default":0,"title":"Offset"},"description":"Results offset for pagination"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft","title":"Sort By"},"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"asc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"},{"name":"property_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property type filter (e.g. RE, Residential)","title":"Property Type"},"description":"Property type filter (e.g. RE, Residential)"},{"name":"min_year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter: minimum year built","title":"Min Year"},"description":"Filter: minimum year built"},{"name":"max_year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter: maximum year built","title":"Max Year"},"description":"Filter: maximum year built"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertySearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mission/property/list":{"get":{"summary":"List Property","description":"List all properties with pagination, sorting, and value range filtering.\n\nUse this endpoint to browse available property records and discover valid roll numbers.\nReturns paginated results with total count for client-side pagination.\nSort by assessed_value with order=desc to find the most expensive properties.","operationId":"list_property_api_mission_property_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft","title":"Sort By"},"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"asc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Property Api Mission Property List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mission/property/geojson":{"get":{"summary":"Property Geojson","operationId":"property_geojson_api_mission_property_geojson_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500000,"minimum":1,"description":"Max features to return (cap prevents browser overload for large cities)","default":50000,"title":"Limit"},"description":"Max features to return (cap prevents browser overload for large cities)"},{"name":"sw_lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport south-west latitude","title":"Sw Lat"},"description":"Viewport south-west latitude"},{"name":"sw_lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport south-west longitude","title":"Sw Lon"},"description":"Viewport south-west longitude"},{"name":"ne_lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport north-east latitude","title":"Ne Lat"},"description":"Viewport north-east latitude"},{"name":"ne_lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport north-east longitude","title":"Ne Lon"},"description":"Viewport north-east longitude"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Offset for pagination through viewport results (use with limit)","default":0,"title":"Offset"},"description":"Offset for pagination through viewport results (use with limit)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mission/property/top":{"get":{"summary":"Top Property","description":"Get top-N properties sorted by any numeric column.\n\nConvenience endpoint for AI agents and dashboards. Returns the top\nN properties sorted by the given column. Defaults to most expensive\n(assessed_value descending). Combine with min_value/max_value to\nfind e.g. the most expensive residential properties.","operationId":"top_property_api_mission_property_top_get","parameters":[{"name":"n","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Number of top properties to return","default":10,"title":"N"},"description":"Number of top properties to return"},{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","description":"Sort column: assessed_value, year_built, lot_size_sqft","default":"assessed_value","title":"Sort By"},"description":"Sort column: assessed_value, year_built, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"desc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Top Property Api Mission Property Top Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mission/property/stats":{"get":{"summary":"Property Stats","description":"Get property assessment statistics.","operationId":"property_stats_api_mission_property_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mission/property/autocomplete":{"get":{"summary":"Property Autocomplete","description":"Get address and roll number suggestions for typeahead search.","operationId":"property_autocomplete_api_mission_property_autocomplete_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"description":"Search query for address/roll number suggestions","title":"Q"},"description":"Search query for address/roll number suggestions"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":25,"minimum":1,"description":"Max suggestions to return","default":10,"title":"Limit"},"description":"Max suggestions to return"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mission/property/geocode":{"post":{"summary":"Property Geocode","description":"Geocode property addresses to lat/lon coordinates.\n\nAccepts a JSON body with 'addresses' (list of address strings, max 50).\nReturns cached results instantly; uncached addresses are geocoded via Nominatim.\n\nExample: {\"addresses\": [\"123 Main St\", \"456 Oak Ave\"]}","operationId":"property_geocode_api_mission_property_geocode_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mission/property/by-dls":{"get":{"summary":"Get Property By Dls","description":"Get property assessment by DLS coordinates.","operationId":"get_property_by_dls_api_mission_property_by_dls_get","parameters":[{"name":"quarter","in":"query","required":true,"schema":{"type":"string","description":"Quarter section (e.g., SW)","title":"Quarter"},"description":"Quarter section (e.g., SW)"},{"name":"section","in":"query","required":true,"schema":{"type":"integer","description":"Section number","title":"Section"},"description":"Section number"},{"name":"township","in":"query","required":true,"schema":{"type":"integer","description":"Township number","title":"Township"},"description":"Township number"},{"name":"range","in":"query","required":true,"schema":{"type":"integer","description":"Range number","title":"Range"},"description":"Range number"},{"name":"meridian","in":"query","required":true,"schema":{"type":"integer","description":"Meridian number","title":"Meridian"},"description":"Meridian number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyAssessment"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mission/property/by-gps":{"get":{"summary":"Get Property By Gps","description":"Find coordinate-bearing assessment records nearest a GPS point.\n\nResults are point-nearness matches unless the municipal source supplies\nparcel polygons; clients should not interpret proximity as legal parcel\ncontainment.","operationId":"get_property_by_gps_api_mission_property_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":84.0,"minimum":41.0,"description":"Canadian latitude","title":"Lat"},"description":"Canadian latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":-52.0,"minimum":-142.0,"description":"Canadian longitude","title":"Lon"},"description":"Canadian longitude"},{"name":"radius_m","in":"query","required":false,"schema":{"type":"integer","maximum":5000,"minimum":1,"description":"Maximum point distance","default":100,"title":"Radius M"},"description":"Maximum point distance"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":10,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Property By Gps Api Mission Property By Gps Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mission/property/by-roll/{roll_number}":{"get":{"summary":"Get Property By Roll","description":"Get property assessment by roll number.","operationId":"get_property_by_roll_api_mission_property_by_roll__roll_number__get","parameters":[{"name":"roll_number","in":"path","required":true,"schema":{"type":"string","description":"Property roll number","title":"Roll Number"},"description":"Property roll number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyAssessment"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mission/property/report":{"get":{"summary":"Property Report Lookup","description":"Consolidated report by roll number, address, or GPS.","operationId":"property_report_lookup_api_mission_property_report_get","parameters":[{"name":"roll_number","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property roll number","title":"Roll Number"},"description":"Property roll number"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Street address","title":"Address"},"description":"Street address"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyReport"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mission/property/report/{roll_number}":{"get":{"summary":"Property Report","description":"Get consolidated property report: assessment + building permits + zoning + DLS.","operationId":"property_report_api_mission_property_report__roll_number__get","parameters":[{"name":"roll_number","in":"path","required":true,"schema":{"type":"string","description":"Property roll number","title":"Roll Number"},"description":"Property roll number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyReport"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mission/property/batch":{"post":{"summary":"Get Properties Batch","description":"Get multiple properties by roll numbers in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of roll numbers.\nExample: {\"ids\": [\"123456789\", \"987654321\"]}\nMaximum 100 roll numbers per request.","operationId":"get_properties_batch_api_mission_property_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Properties Batch Api Mission Property Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mission/property/export":{"get":{"summary":"Export Properties","description":"Export property data as CSV or GeoJSON.\n\nSupports filtering by address, property type, and assessed value range.\nMaximum 10,000 records per export.","operationId":"export_properties_api_mission_property_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Address filter","title":"Address"},"description":"Address filter"},{"name":"property_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property type filter","title":"Property Type"},"description":"Property type filter"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum assessed value","title":"Min Value"},"description":"Minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum assessed value","title":"Max Value"},"description":"Maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mission/census/profile":{"get":{"summary":"Get Census Profile","description":"Get census profile for a specific Dissemination Area.\n\nProvide either da_id directly, OR lat+lon to find the nearest DA automatically.","operationId":"get_census_profile_api_mission_census_profile_get","parameters":[{"name":"da_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Dissemination Area ID (e.g., 48820001)","title":"Da Id"},"description":"Dissemination Area ID (e.g., 48820001)"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude for nearest-DA lookup","title":"Lat"},"description":"Latitude for nearest-DA lookup"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude for nearest-DA lookup","title":"Lon"},"description":"Longitude for nearest-DA lookup"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusProfile"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mission/census/batch":{"post":{"summary":"Get Census Batch","description":"Get multiple census profiles by DA IDs in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of DA IDs.\nExample: {\"ids\": [\"48820001\", \"48820002\"]}\nMaximum 100 DA IDs per request.","operationId":"get_census_batch_api_mission_census_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Census Batch Api Mission Census Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mission/census/export":{"get":{"summary":"Export Census","description":"Export census data as CSV.\n\nSupports filtering by population range and geography type.\nMaximum 10,000 records per export.","operationId":"export_census_api_mission_census_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv only","default":"csv","title":"Format"},"description":"Export format: csv only"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"min_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Minimum population filter","title":"Min Population"},"description":"Minimum population filter"},{"name":"max_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Maximum population filter","title":"Max Population"},"description":"Maximum population filter"},{"name":"geography_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Geography type filter (DA, CT, CMA)","title":"Geography Type"},"description":"Geography type filter (DA, CT, CMA)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mission/census/list":{"get":{"summary":"List Census Profiles","description":"List all census profiles with pagination.\n\nUse this endpoint to browse available census profiles and discover valid DA IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_census_profiles_api_mission_census_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Census Profiles Api Mission Census List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mission/census/by-gps":{"get":{"summary":"Get Census By Gps","description":"Get census data for GPS coordinates.","operationId":"get_census_by_gps_api_mission_census_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90,"minimum":-90,"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":180,"minimum":-180,"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mission/census/by-dls":{"get":{"summary":"Get Census By Dls","description":"Get census data for DLS coordinates.","operationId":"get_census_by_dls_api_mission_census_by_dls_get","parameters":[{"name":"dls","in":"query","required":true,"schema":{"type":"string","description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)","title":"Dls"},"description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mission/census/map-data":{"get":{"summary":"Get Census Map Data","description":"Get lightweight DA points for choropleth map rendering.\n\nReturns centroid coordinates and key metrics (income, age, population,\nhousehold size, employment rate) for all DAs in the city.\nUsed by the census dashboard to render color-coded maps.","operationId":"get_census_map_data_api_mission_census_map_data_get","parameters":[{"name":"year","in":"query","required":false,"schema":{"type":"integer","description":"Census year for DA map data","default":2021,"title":"Year"},"description":"Census year for DA map data"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mission/census/stats":{"get":{"summary":"Census Stats","description":"Get census data statistics.","operationId":"census_stats_api_mission_census_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mission/census/compare":{"get":{"summary":"Census Compare","description":"Compare key census metrics across multiple years.\n\nReturns side-by-side comparison of population, households,\navg_income, median_age, density, and land_area for each requested year.\nYears without data return null for that year's values.","operationId":"census_compare_api_mission_census_compare_get","parameters":[{"name":"years","in":"query","required":false,"schema":{"type":"string","description":"Comma-separated census years (e.g., 2016,2021)","default":"2021","title":"Years"},"description":"Comma-separated census years (e.g., 2016,2021)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mission/census/time-series":{"get":{"summary":"Census Timeseries","description":"Get year-by-year census trends for this city.\n\nReturns population, income, age, and household trends across all\navailable census years. Useful for spotting long-term demographic shifts.","operationId":"census_timeseries_api_mission_census_time_series_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mission/geography/list":{"get":{"summary":"Geography List","description":"List geography boundaries for this city.","operationId":"geography_list_api_mission_geography_list_get","parameters":[{"name":"type","in":"query","required":false,"schema":{"type":"string","title":"Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mission/geography/by-gps":{"get":{"summary":"Geography By Gps","description":"Find the geography boundary containing a GPS point.","operationId":"geography_by_gps_api_mission_geography_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","title":"Lat"}},{"name":"lon","in":"query","required":true,"schema":{"type":"number","title":"Lon"}},{"name":"type","in":"query","required":false,"schema":{"type":"string","default":"DA","title":"Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mission/geography/stats":{"get":{"summary":"Geography Stats","description":"Get geography statistics for this city.","operationId":"geography_stats_api_mission_geography_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mission/geography/{geoid}":{"get":{"summary":"Geography Boundary","description":"Get a specific geography boundary by geoid, including GeoJSON polygon.","operationId":"geography_boundary_api_mission_geography__geoid__get","parameters":[{"name":"geoid","in":"path","required":true,"schema":{"type":"string","title":"Geoid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mission/census/rental/list":{"get":{"summary":"List Rental Prices","description":"List rental price records for this city, with optional unit type filter.","operationId":"list_rental_prices_api_mission_census_rental_list_get","parameters":[{"name":"unit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":50,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalPriceListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mission/census/rental/trend":{"get":{"summary":"Get Rental Trend","description":"Get rental price time series for a specific unit type.","operationId":"get_rental_trend_api_mission_census_rental_trend_get","parameters":[{"name":"unit_type","in":"query","required":true,"schema":{"type":"string","description":"Rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Rental unit type (e.g. 'Apartment - 1 bedroom')"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalTrendResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mission/census/rental/types":{"get":{"summary":"Get Rental Types","description":"Get available rental unit types for this city.","operationId":"get_rental_types_api_mission_census_rental_types_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mission/zoning/by-gps":{"get":{"summary":"Get Zoning By Gps","description":"Get zoning district for GPS coordinates.","operationId":"get_zoning_by_gps_api_mission_zoning_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZoningByGPSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mission/zoning/by-id/{district_id}":{"get":{"summary":"Get Zoning By Id","description":"Get a single zoning district by its numeric ID.","operationId":"get_zoning_by_id_api_mission_zoning_by_id__district_id__get","parameters":[{"name":"district_id","in":"path","required":true,"schema":{"type":"integer","description":"Zoning district numeric ID","title":"District Id"},"description":"Zoning district numeric ID"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning By Id Api Mission Zoning By Id  District Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mission/zoning/by-code/{code}":{"get":{"summary":"Get Zoning By Code","description":"Get all districts with a specific zone code.","operationId":"get_zoning_by_code_api_mission_zoning_by_code__code__get","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","description":"Zone code (e.g., C-C1, R-G)","title":"Code"},"description":"Zone code (e.g., C-C1, R-G)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoningDistrict"},"title":"Response Get Zoning By Code Api Mission Zoning By Code  Code  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mission/zoning/batch":{"post":{"summary":"Get Zoning Batch","description":"Get multiple zoning districts by zone codes in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of zone codes.\nExample: {\"ids\": [\"CR20-C20/R20\", \"C-C1\", \"R-G\"]}\nMaximum 100 zone codes per request.","operationId":"get_zoning_batch_api_mission_zoning_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning Batch Api Mission Zoning Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mission/zoning/list":{"get":{"summary":"List Zoning Districts","description":"List all zoning districts with pagination.\n\nUse this endpoint to browse available zoning districts and discover valid IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_zoning_districts_api_mission_zoning_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Zoning Districts Api Mission Zoning List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mission/zoning/codes":{"get":{"summary":"List Zone Codes","description":"List all zone codes with descriptions.","operationId":"list_zone_codes_api_mission_zoning_codes_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"type":"string","description":"Filter by major category (e.g., Commercial, Residential)","title":"Category"},"description":"Filter by major category (e.g., Commercial, Residential)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoneCodeInfo"},"title":"Response List Zone Codes Api Mission Zoning Codes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mission/zoning/stats":{"get":{"summary":"Zoning Stats","description":"Get zoning statistics.","operationId":"zoning_stats_api_mission_zoning_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mission/zoning/export":{"get":{"summary":"Export Zoning","description":"Export zoning district data as CSV or GeoJSON.\n\nSupports filtering by zone code, category, and area range.\nMaximum 10,000 records per export.","operationId":"export_zoning_api_mission_zoning_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"zone_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Zone code filter (e.g., CR2)","title":"Zone Code"},"description":"Zone code filter (e.g., CR2)"},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Major category filter","title":"Category"},"description":"Major category filter"},{"name":"min_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum area in sq km","title":"Min Area"},"description":"Minimum area in sq km"},{"name":"max_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum area in sq km","title":"Max Area"},"description":"Maximum area in sq km"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mission/permits/stats":{"get":{"summary":"Building Stats","description":"Get building permit statistics.","operationId":"building_stats_api_mission_permits_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mission/permits/search":{"get":{"summary":"Search Building Permits","description":"Search building permits by address, contractor, applicant, permit number, and/or permit type.","operationId":"search_building_permits_api_mission_permits_search_get","parameters":[{"name":"address","in":"query","required":false,"schema":{"type":"string","description":"Address to search","title":"Address"},"description":"Address to search"},{"name":"q","in":"query","required":false,"schema":{"type":"string","description":"General text search (address, contractor, applicant, permit #)","title":"Q"},"description":"General text search (address, contractor, applicant, permit #)"},{"name":"permit_type","in":"query","required":false,"schema":{"type":"string","description":"Filter by permit type","title":"Permit Type"},"description":"Filter by permit type"},{"name":"bbox","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bounding box: min_lon,min_lat,max_lon,max_lat","title":"Bbox"},"description":"Bounding box: min_lon,min_lat,max_lon,max_lat"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max results","default":20,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset","default":0,"title":"Offset"},"description":"Results offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mission/permits/nearby":{"get":{"summary":"Nearby Building Permits","description":"Coordinate-first alias for nearby building permits.","operationId":"nearby_building_permits_api_mission_permits_nearby_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":84.0,"minimum":41.0,"description":"Canadian latitude","title":"Lat"},"description":"Canadian latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":-52.0,"minimum":-142.0,"description":"Canadian longitude","title":"Lon"},"description":"Canadian longitude"},{"name":"radius_m","in":"query","required":false,"schema":{"type":"integer","maximum":50000,"minimum":1,"default":1000,"title":"Radius M"}},{"name":"permit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Permit Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mission/permits/export":{"get":{"summary":"Export Building Permits","description":"Export building permit data as CSV or GeoJSON.\n\nSupports filtering by address, permit type, and date range.\nMaximum 10,000 records per export.","operationId":"export_building_permits_api_mission_permits_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Address filter","title":"Address"},"description":"Address filter"},{"name":"permit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Permit type filter","title":"Permit Type"},"description":"Permit type filter"},{"name":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Start date (YYYY-MM-DD)","title":"Date From"},"description":"Start date (YYYY-MM-DD)"},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"End date (YYYY-MM-DD)","title":"Date To"},"description":"End date (YYYY-MM-DD)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mission/permits/recent":{"get":{"summary":"Recent Building Permits","description":"Get recent building permits sorted by application date (newest first).\n\nUse this to see where construction activity is happening right now.","operationId":"recent_building_permits_api_mission_permits_recent_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Max results","default":20,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset","default":0,"title":"Offset"},"description":"Results offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mission/permits/batch":{"post":{"summary":"Get Building Permits Batch","description":"Get multiple building permits by permit numbers in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of permit numbers.\nExample: {\"ids\": [\"BP123456\", \"BP789012\"]}\nMaximum 100 permit numbers per request.","operationId":"get_building_permits_batch_api_mission_permits_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Building Permits Batch Api Mission Permits Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mission/permits/{permit_number}":{"get":{"summary":"Get Building Permit","description":"Get building permit details by permit number.\n\nServes HTML for browsers, JSON for API clients.","operationId":"get_building_permit_api_mission_permits__permit_number__get","parameters":[{"name":"permit_number","in":"path","required":true,"schema":{"type":"string","description":"Permit number","title":"Permit Number"},"description":"Permit number"},{"name":"_city_name","in":"query","required":false,"schema":{"default":"Mission","title":" City Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/mission/health":{"get":{"summary":"City Health","description":"City-specific health check.","operationId":"city_health_api_mission_health_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/fort-st-john/entries/{kind}":{"get":{"summary":"List Entries","operationId":"list_entries_api_fort_st_john_entries__kind__get","parameters":[{"name":"kind","in":"path","required":true,"schema":{"type":"string","description":"Canonical entry kind: property, permit, zoning, or safety","title":"Kind"},"description":"Canonical entry kind: property, permit, zoning, or safety"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"_services","in":"query","required":false,"schema":{"title":" Services"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Entries Api Fort St John Entries  Kind  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/fort-st-john/property/search":{"get":{"summary":"Search Property","description":"Search for properties by address, or browse all if no address specified.\nSupports sorting by assessed_value, address, year_built, community, or lot_size_sqft.\nSupports value range filtering with min_value and max_value.\n Supports property_type and year range filters.","operationId":"search_property_api_fort_st_john_property_search_get","parameters":[{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Street address to search (omit to browse all)","title":"Address"},"description":"Street address to search (omit to browse all)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max results to return (up to 1000 for map browse)","default":10,"title":"Limit"},"description":"Max results to return (up to 1000 for map browse)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset for pagination","default":0,"title":"Offset"},"description":"Results offset for pagination"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft","title":"Sort By"},"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"asc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"},{"name":"property_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property type filter (e.g. RE, Residential)","title":"Property Type"},"description":"Property type filter (e.g. RE, Residential)"},{"name":"min_year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter: minimum year built","title":"Min Year"},"description":"Filter: minimum year built"},{"name":"max_year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter: maximum year built","title":"Max Year"},"description":"Filter: maximum year built"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertySearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/fort-st-john/property/list":{"get":{"summary":"List Property","description":"List all properties with pagination, sorting, and value range filtering.\n\nUse this endpoint to browse available property records and discover valid roll numbers.\nReturns paginated results with total count for client-side pagination.\nSort by assessed_value with order=desc to find the most expensive properties.","operationId":"list_property_api_fort_st_john_property_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft","title":"Sort By"},"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"asc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Property Api Fort St John Property List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/fort-st-john/property/geojson":{"get":{"summary":"Property Geojson","operationId":"property_geojson_api_fort_st_john_property_geojson_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500000,"minimum":1,"description":"Max features to return (cap prevents browser overload for large cities)","default":50000,"title":"Limit"},"description":"Max features to return (cap prevents browser overload for large cities)"},{"name":"sw_lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport south-west latitude","title":"Sw Lat"},"description":"Viewport south-west latitude"},{"name":"sw_lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport south-west longitude","title":"Sw Lon"},"description":"Viewport south-west longitude"},{"name":"ne_lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport north-east latitude","title":"Ne Lat"},"description":"Viewport north-east latitude"},{"name":"ne_lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport north-east longitude","title":"Ne Lon"},"description":"Viewport north-east longitude"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Offset for pagination through viewport results (use with limit)","default":0,"title":"Offset"},"description":"Offset for pagination through viewport results (use with limit)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/fort-st-john/property/top":{"get":{"summary":"Top Property","description":"Get top-N properties sorted by any numeric column.\n\nConvenience endpoint for AI agents and dashboards. Returns the top\nN properties sorted by the given column. Defaults to most expensive\n(assessed_value descending). Combine with min_value/max_value to\nfind e.g. the most expensive residential properties.","operationId":"top_property_api_fort_st_john_property_top_get","parameters":[{"name":"n","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Number of top properties to return","default":10,"title":"N"},"description":"Number of top properties to return"},{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","description":"Sort column: assessed_value, year_built, lot_size_sqft","default":"assessed_value","title":"Sort By"},"description":"Sort column: assessed_value, year_built, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"desc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Top Property Api Fort St John Property Top Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/fort-st-john/property/stats":{"get":{"summary":"Property Stats","description":"Get property assessment statistics.","operationId":"property_stats_api_fort_st_john_property_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/fort-st-john/property/autocomplete":{"get":{"summary":"Property Autocomplete","description":"Get address and roll number suggestions for typeahead search.","operationId":"property_autocomplete_api_fort_st_john_property_autocomplete_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"description":"Search query for address/roll number suggestions","title":"Q"},"description":"Search query for address/roll number suggestions"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":25,"minimum":1,"description":"Max suggestions to return","default":10,"title":"Limit"},"description":"Max suggestions to return"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/fort-st-john/property/geocode":{"post":{"summary":"Property Geocode","description":"Geocode property addresses to lat/lon coordinates.\n\nAccepts a JSON body with 'addresses' (list of address strings, max 50).\nReturns cached results instantly; uncached addresses are geocoded via Nominatim.\n\nExample: {\"addresses\": [\"123 Main St\", \"456 Oak Ave\"]}","operationId":"property_geocode_api_fort_st_john_property_geocode_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/fort-st-john/property/by-dls":{"get":{"summary":"Get Property By Dls","description":"Get property assessment by DLS coordinates.","operationId":"get_property_by_dls_api_fort_st_john_property_by_dls_get","parameters":[{"name":"quarter","in":"query","required":true,"schema":{"type":"string","description":"Quarter section (e.g., SW)","title":"Quarter"},"description":"Quarter section (e.g., SW)"},{"name":"section","in":"query","required":true,"schema":{"type":"integer","description":"Section number","title":"Section"},"description":"Section number"},{"name":"township","in":"query","required":true,"schema":{"type":"integer","description":"Township number","title":"Township"},"description":"Township number"},{"name":"range","in":"query","required":true,"schema":{"type":"integer","description":"Range number","title":"Range"},"description":"Range number"},{"name":"meridian","in":"query","required":true,"schema":{"type":"integer","description":"Meridian number","title":"Meridian"},"description":"Meridian number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyAssessment"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/fort-st-john/property/by-gps":{"get":{"summary":"Get Property By Gps","description":"Find coordinate-bearing assessment records nearest a GPS point.\n\nResults are point-nearness matches unless the municipal source supplies\nparcel polygons; clients should not interpret proximity as legal parcel\ncontainment.","operationId":"get_property_by_gps_api_fort_st_john_property_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":84.0,"minimum":41.0,"description":"Canadian latitude","title":"Lat"},"description":"Canadian latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":-52.0,"minimum":-142.0,"description":"Canadian longitude","title":"Lon"},"description":"Canadian longitude"},{"name":"radius_m","in":"query","required":false,"schema":{"type":"integer","maximum":5000,"minimum":1,"description":"Maximum point distance","default":100,"title":"Radius M"},"description":"Maximum point distance"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":10,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Property By Gps Api Fort St John Property By Gps Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/fort-st-john/property/by-roll/{roll_number}":{"get":{"summary":"Get Property By Roll","description":"Get property assessment by roll number.","operationId":"get_property_by_roll_api_fort_st_john_property_by_roll__roll_number__get","parameters":[{"name":"roll_number","in":"path","required":true,"schema":{"type":"string","description":"Property roll number","title":"Roll Number"},"description":"Property roll number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyAssessment"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/fort-st-john/property/report":{"get":{"summary":"Property Report Lookup","description":"Consolidated report by roll number, address, or GPS.","operationId":"property_report_lookup_api_fort_st_john_property_report_get","parameters":[{"name":"roll_number","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property roll number","title":"Roll Number"},"description":"Property roll number"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Street address","title":"Address"},"description":"Street address"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyReport"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/fort-st-john/property/report/{roll_number}":{"get":{"summary":"Property Report","description":"Get consolidated property report: assessment + building permits + zoning + DLS.","operationId":"property_report_api_fort_st_john_property_report__roll_number__get","parameters":[{"name":"roll_number","in":"path","required":true,"schema":{"type":"string","description":"Property roll number","title":"Roll Number"},"description":"Property roll number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyReport"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/fort-st-john/property/batch":{"post":{"summary":"Get Properties Batch","description":"Get multiple properties by roll numbers in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of roll numbers.\nExample: {\"ids\": [\"123456789\", \"987654321\"]}\nMaximum 100 roll numbers per request.","operationId":"get_properties_batch_api_fort_st_john_property_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Properties Batch Api Fort St John Property Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/fort-st-john/property/export":{"get":{"summary":"Export Properties","description":"Export property data as CSV or GeoJSON.\n\nSupports filtering by address, property type, and assessed value range.\nMaximum 10,000 records per export.","operationId":"export_properties_api_fort_st_john_property_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Address filter","title":"Address"},"description":"Address filter"},{"name":"property_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property type filter","title":"Property Type"},"description":"Property type filter"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum assessed value","title":"Min Value"},"description":"Minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum assessed value","title":"Max Value"},"description":"Maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/fort-st-john/census/profile":{"get":{"summary":"Get Census Profile","description":"Get census profile for a specific Dissemination Area.\n\nProvide either da_id directly, OR lat+lon to find the nearest DA automatically.","operationId":"get_census_profile_api_fort_st_john_census_profile_get","parameters":[{"name":"da_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Dissemination Area ID (e.g., 48820001)","title":"Da Id"},"description":"Dissemination Area ID (e.g., 48820001)"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude for nearest-DA lookup","title":"Lat"},"description":"Latitude for nearest-DA lookup"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude for nearest-DA lookup","title":"Lon"},"description":"Longitude for nearest-DA lookup"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusProfile"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/fort-st-john/census/batch":{"post":{"summary":"Get Census Batch","description":"Get multiple census profiles by DA IDs in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of DA IDs.\nExample: {\"ids\": [\"48820001\", \"48820002\"]}\nMaximum 100 DA IDs per request.","operationId":"get_census_batch_api_fort_st_john_census_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Census Batch Api Fort St John Census Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/fort-st-john/census/export":{"get":{"summary":"Export Census","description":"Export census data as CSV.\n\nSupports filtering by population range and geography type.\nMaximum 10,000 records per export.","operationId":"export_census_api_fort_st_john_census_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv only","default":"csv","title":"Format"},"description":"Export format: csv only"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"min_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Minimum population filter","title":"Min Population"},"description":"Minimum population filter"},{"name":"max_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Maximum population filter","title":"Max Population"},"description":"Maximum population filter"},{"name":"geography_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Geography type filter (DA, CT, CMA)","title":"Geography Type"},"description":"Geography type filter (DA, CT, CMA)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/fort-st-john/census/list":{"get":{"summary":"List Census Profiles","description":"List all census profiles with pagination.\n\nUse this endpoint to browse available census profiles and discover valid DA IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_census_profiles_api_fort_st_john_census_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Census Profiles Api Fort St John Census List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/fort-st-john/census/by-gps":{"get":{"summary":"Get Census By Gps","description":"Get census data for GPS coordinates.","operationId":"get_census_by_gps_api_fort_st_john_census_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90,"minimum":-90,"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":180,"minimum":-180,"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/fort-st-john/census/by-dls":{"get":{"summary":"Get Census By Dls","description":"Get census data for DLS coordinates.","operationId":"get_census_by_dls_api_fort_st_john_census_by_dls_get","parameters":[{"name":"dls","in":"query","required":true,"schema":{"type":"string","description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)","title":"Dls"},"description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/fort-st-john/census/map-data":{"get":{"summary":"Get Census Map Data","description":"Get lightweight DA points for choropleth map rendering.\n\nReturns centroid coordinates and key metrics (income, age, population,\nhousehold size, employment rate) for all DAs in the city.\nUsed by the census dashboard to render color-coded maps.","operationId":"get_census_map_data_api_fort_st_john_census_map_data_get","parameters":[{"name":"year","in":"query","required":false,"schema":{"type":"integer","description":"Census year for DA map data","default":2021,"title":"Year"},"description":"Census year for DA map data"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/fort-st-john/census/stats":{"get":{"summary":"Census Stats","description":"Get census data statistics.","operationId":"census_stats_api_fort_st_john_census_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/fort-st-john/census/compare":{"get":{"summary":"Census Compare","description":"Compare key census metrics across multiple years.\n\nReturns side-by-side comparison of population, households,\navg_income, median_age, density, and land_area for each requested year.\nYears without data return null for that year's values.","operationId":"census_compare_api_fort_st_john_census_compare_get","parameters":[{"name":"years","in":"query","required":false,"schema":{"type":"string","description":"Comma-separated census years (e.g., 2016,2021)","default":"2021","title":"Years"},"description":"Comma-separated census years (e.g., 2016,2021)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/fort-st-john/census/time-series":{"get":{"summary":"Census Timeseries","description":"Get year-by-year census trends for this city.\n\nReturns population, income, age, and household trends across all\navailable census years. Useful for spotting long-term demographic shifts.","operationId":"census_timeseries_api_fort_st_john_census_time_series_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/fort-st-john/geography/list":{"get":{"summary":"Geography List","description":"List geography boundaries for this city.","operationId":"geography_list_api_fort_st_john_geography_list_get","parameters":[{"name":"type","in":"query","required":false,"schema":{"type":"string","title":"Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/fort-st-john/geography/by-gps":{"get":{"summary":"Geography By Gps","description":"Find the geography boundary containing a GPS point.","operationId":"geography_by_gps_api_fort_st_john_geography_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","title":"Lat"}},{"name":"lon","in":"query","required":true,"schema":{"type":"number","title":"Lon"}},{"name":"type","in":"query","required":false,"schema":{"type":"string","default":"DA","title":"Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/fort-st-john/geography/stats":{"get":{"summary":"Geography Stats","description":"Get geography statistics for this city.","operationId":"geography_stats_api_fort_st_john_geography_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/fort-st-john/geography/{geoid}":{"get":{"summary":"Geography Boundary","description":"Get a specific geography boundary by geoid, including GeoJSON polygon.","operationId":"geography_boundary_api_fort_st_john_geography__geoid__get","parameters":[{"name":"geoid","in":"path","required":true,"schema":{"type":"string","title":"Geoid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/fort-st-john/census/rental/list":{"get":{"summary":"List Rental Prices","description":"List rental price records for this city, with optional unit type filter.","operationId":"list_rental_prices_api_fort_st_john_census_rental_list_get","parameters":[{"name":"unit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":50,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalPriceListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/fort-st-john/census/rental/trend":{"get":{"summary":"Get Rental Trend","description":"Get rental price time series for a specific unit type.","operationId":"get_rental_trend_api_fort_st_john_census_rental_trend_get","parameters":[{"name":"unit_type","in":"query","required":true,"schema":{"type":"string","description":"Rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Rental unit type (e.g. 'Apartment - 1 bedroom')"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalTrendResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/fort-st-john/census/rental/types":{"get":{"summary":"Get Rental Types","description":"Get available rental unit types for this city.","operationId":"get_rental_types_api_fort_st_john_census_rental_types_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/fort-st-john/zoning/by-gps":{"get":{"summary":"Get Zoning By Gps","description":"Get zoning district for GPS coordinates.","operationId":"get_zoning_by_gps_api_fort_st_john_zoning_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZoningByGPSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/fort-st-john/zoning/by-id/{district_id}":{"get":{"summary":"Get Zoning By Id","description":"Get a single zoning district by its numeric ID.","operationId":"get_zoning_by_id_api_fort_st_john_zoning_by_id__district_id__get","parameters":[{"name":"district_id","in":"path","required":true,"schema":{"type":"integer","description":"Zoning district numeric ID","title":"District Id"},"description":"Zoning district numeric ID"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning By Id Api Fort St John Zoning By Id  District Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/fort-st-john/zoning/by-code/{code}":{"get":{"summary":"Get Zoning By Code","description":"Get all districts with a specific zone code.","operationId":"get_zoning_by_code_api_fort_st_john_zoning_by_code__code__get","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","description":"Zone code (e.g., C-C1, R-G)","title":"Code"},"description":"Zone code (e.g., C-C1, R-G)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoningDistrict"},"title":"Response Get Zoning By Code Api Fort St John Zoning By Code  Code  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/fort-st-john/zoning/batch":{"post":{"summary":"Get Zoning Batch","description":"Get multiple zoning districts by zone codes in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of zone codes.\nExample: {\"ids\": [\"CR20-C20/R20\", \"C-C1\", \"R-G\"]}\nMaximum 100 zone codes per request.","operationId":"get_zoning_batch_api_fort_st_john_zoning_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning Batch Api Fort St John Zoning Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/fort-st-john/zoning/list":{"get":{"summary":"List Zoning Districts","description":"List all zoning districts with pagination.\n\nUse this endpoint to browse available zoning districts and discover valid IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_zoning_districts_api_fort_st_john_zoning_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Zoning Districts Api Fort St John Zoning List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/fort-st-john/zoning/codes":{"get":{"summary":"List Zone Codes","description":"List all zone codes with descriptions.","operationId":"list_zone_codes_api_fort_st_john_zoning_codes_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"type":"string","description":"Filter by major category (e.g., Commercial, Residential)","title":"Category"},"description":"Filter by major category (e.g., Commercial, Residential)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoneCodeInfo"},"title":"Response List Zone Codes Api Fort St John Zoning Codes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/fort-st-john/zoning/stats":{"get":{"summary":"Zoning Stats","description":"Get zoning statistics.","operationId":"zoning_stats_api_fort_st_john_zoning_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/fort-st-john/zoning/export":{"get":{"summary":"Export Zoning","description":"Export zoning district data as CSV or GeoJSON.\n\nSupports filtering by zone code, category, and area range.\nMaximum 10,000 records per export.","operationId":"export_zoning_api_fort_st_john_zoning_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"zone_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Zone code filter (e.g., CR2)","title":"Zone Code"},"description":"Zone code filter (e.g., CR2)"},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Major category filter","title":"Category"},"description":"Major category filter"},{"name":"min_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum area in sq km","title":"Min Area"},"description":"Minimum area in sq km"},{"name":"max_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum area in sq km","title":"Max Area"},"description":"Maximum area in sq km"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/fort-st-john/health":{"get":{"summary":"City Health","description":"City-specific health check.","operationId":"city_health_api_fort_st_john_health_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/terrace/entries/{kind}":{"get":{"summary":"List Entries","operationId":"list_entries_api_terrace_entries__kind__get","parameters":[{"name":"kind","in":"path","required":true,"schema":{"type":"string","description":"Canonical entry kind: property, permit, zoning, or safety","title":"Kind"},"description":"Canonical entry kind: property, permit, zoning, or safety"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"_services","in":"query","required":false,"schema":{"title":" Services"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Entries Api Terrace Entries  Kind  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/terrace/census/profile":{"get":{"summary":"Get Census Profile","description":"Get census profile for a specific Dissemination Area.\n\nProvide either da_id directly, OR lat+lon to find the nearest DA automatically.","operationId":"get_census_profile_api_terrace_census_profile_get","parameters":[{"name":"da_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Dissemination Area ID (e.g., 48820001)","title":"Da Id"},"description":"Dissemination Area ID (e.g., 48820001)"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude for nearest-DA lookup","title":"Lat"},"description":"Latitude for nearest-DA lookup"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude for nearest-DA lookup","title":"Lon"},"description":"Longitude for nearest-DA lookup"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusProfile"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/terrace/census/batch":{"post":{"summary":"Get Census Batch","description":"Get multiple census profiles by DA IDs in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of DA IDs.\nExample: {\"ids\": [\"48820001\", \"48820002\"]}\nMaximum 100 DA IDs per request.","operationId":"get_census_batch_api_terrace_census_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Census Batch Api Terrace Census Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/terrace/census/export":{"get":{"summary":"Export Census","description":"Export census data as CSV.\n\nSupports filtering by population range and geography type.\nMaximum 10,000 records per export.","operationId":"export_census_api_terrace_census_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv only","default":"csv","title":"Format"},"description":"Export format: csv only"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"min_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Minimum population filter","title":"Min Population"},"description":"Minimum population filter"},{"name":"max_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Maximum population filter","title":"Max Population"},"description":"Maximum population filter"},{"name":"geography_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Geography type filter (DA, CT, CMA)","title":"Geography Type"},"description":"Geography type filter (DA, CT, CMA)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/terrace/census/list":{"get":{"summary":"List Census Profiles","description":"List all census profiles with pagination.\n\nUse this endpoint to browse available census profiles and discover valid DA IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_census_profiles_api_terrace_census_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Census Profiles Api Terrace Census List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/terrace/census/by-gps":{"get":{"summary":"Get Census By Gps","description":"Get census data for GPS coordinates.","operationId":"get_census_by_gps_api_terrace_census_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90,"minimum":-90,"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":180,"minimum":-180,"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/terrace/census/by-dls":{"get":{"summary":"Get Census By Dls","description":"Get census data for DLS coordinates.","operationId":"get_census_by_dls_api_terrace_census_by_dls_get","parameters":[{"name":"dls","in":"query","required":true,"schema":{"type":"string","description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)","title":"Dls"},"description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/terrace/census/map-data":{"get":{"summary":"Get Census Map Data","description":"Get lightweight DA points for choropleth map rendering.\n\nReturns centroid coordinates and key metrics (income, age, population,\nhousehold size, employment rate) for all DAs in the city.\nUsed by the census dashboard to render color-coded maps.","operationId":"get_census_map_data_api_terrace_census_map_data_get","parameters":[{"name":"year","in":"query","required":false,"schema":{"type":"integer","description":"Census year for DA map data","default":2021,"title":"Year"},"description":"Census year for DA map data"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/terrace/census/stats":{"get":{"summary":"Census Stats","description":"Get census data statistics.","operationId":"census_stats_api_terrace_census_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/terrace/census/compare":{"get":{"summary":"Census Compare","description":"Compare key census metrics across multiple years.\n\nReturns side-by-side comparison of population, households,\navg_income, median_age, density, and land_area for each requested year.\nYears without data return null for that year's values.","operationId":"census_compare_api_terrace_census_compare_get","parameters":[{"name":"years","in":"query","required":false,"schema":{"type":"string","description":"Comma-separated census years (e.g., 2016,2021)","default":"2021","title":"Years"},"description":"Comma-separated census years (e.g., 2016,2021)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/terrace/census/time-series":{"get":{"summary":"Census Timeseries","description":"Get year-by-year census trends for this city.\n\nReturns population, income, age, and household trends across all\navailable census years. Useful for spotting long-term demographic shifts.","operationId":"census_timeseries_api_terrace_census_time_series_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/terrace/geography/list":{"get":{"summary":"Geography List","description":"List geography boundaries for this city.","operationId":"geography_list_api_terrace_geography_list_get","parameters":[{"name":"type","in":"query","required":false,"schema":{"type":"string","title":"Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/terrace/geography/by-gps":{"get":{"summary":"Geography By Gps","description":"Find the geography boundary containing a GPS point.","operationId":"geography_by_gps_api_terrace_geography_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","title":"Lat"}},{"name":"lon","in":"query","required":true,"schema":{"type":"number","title":"Lon"}},{"name":"type","in":"query","required":false,"schema":{"type":"string","default":"DA","title":"Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/terrace/geography/stats":{"get":{"summary":"Geography Stats","description":"Get geography statistics for this city.","operationId":"geography_stats_api_terrace_geography_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/terrace/geography/{geoid}":{"get":{"summary":"Geography Boundary","description":"Get a specific geography boundary by geoid, including GeoJSON polygon.","operationId":"geography_boundary_api_terrace_geography__geoid__get","parameters":[{"name":"geoid","in":"path","required":true,"schema":{"type":"string","title":"Geoid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/terrace/census/rental/list":{"get":{"summary":"List Rental Prices","description":"List rental price records for this city, with optional unit type filter.","operationId":"list_rental_prices_api_terrace_census_rental_list_get","parameters":[{"name":"unit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":50,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalPriceListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/terrace/census/rental/trend":{"get":{"summary":"Get Rental Trend","description":"Get rental price time series for a specific unit type.","operationId":"get_rental_trend_api_terrace_census_rental_trend_get","parameters":[{"name":"unit_type","in":"query","required":true,"schema":{"type":"string","description":"Rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Rental unit type (e.g. 'Apartment - 1 bedroom')"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalTrendResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/terrace/census/rental/types":{"get":{"summary":"Get Rental Types","description":"Get available rental unit types for this city.","operationId":"get_rental_types_api_terrace_census_rental_types_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/terrace/zoning/by-gps":{"get":{"summary":"Get Zoning By Gps","description":"Get zoning district for GPS coordinates.","operationId":"get_zoning_by_gps_api_terrace_zoning_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZoningByGPSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/terrace/zoning/by-id/{district_id}":{"get":{"summary":"Get Zoning By Id","description":"Get a single zoning district by its numeric ID.","operationId":"get_zoning_by_id_api_terrace_zoning_by_id__district_id__get","parameters":[{"name":"district_id","in":"path","required":true,"schema":{"type":"integer","description":"Zoning district numeric ID","title":"District Id"},"description":"Zoning district numeric ID"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning By Id Api Terrace Zoning By Id  District Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/terrace/zoning/by-code/{code}":{"get":{"summary":"Get Zoning By Code","description":"Get all districts with a specific zone code.","operationId":"get_zoning_by_code_api_terrace_zoning_by_code__code__get","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","description":"Zone code (e.g., C-C1, R-G)","title":"Code"},"description":"Zone code (e.g., C-C1, R-G)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoningDistrict"},"title":"Response Get Zoning By Code Api Terrace Zoning By Code  Code  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/terrace/zoning/batch":{"post":{"summary":"Get Zoning Batch","description":"Get multiple zoning districts by zone codes in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of zone codes.\nExample: {\"ids\": [\"CR20-C20/R20\", \"C-C1\", \"R-G\"]}\nMaximum 100 zone codes per request.","operationId":"get_zoning_batch_api_terrace_zoning_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning Batch Api Terrace Zoning Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/terrace/zoning/list":{"get":{"summary":"List Zoning Districts","description":"List all zoning districts with pagination.\n\nUse this endpoint to browse available zoning districts and discover valid IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_zoning_districts_api_terrace_zoning_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Zoning Districts Api Terrace Zoning List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/terrace/zoning/codes":{"get":{"summary":"List Zone Codes","description":"List all zone codes with descriptions.","operationId":"list_zone_codes_api_terrace_zoning_codes_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"type":"string","description":"Filter by major category (e.g., Commercial, Residential)","title":"Category"},"description":"Filter by major category (e.g., Commercial, Residential)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoneCodeInfo"},"title":"Response List Zone Codes Api Terrace Zoning Codes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/terrace/zoning/stats":{"get":{"summary":"Zoning Stats","description":"Get zoning statistics.","operationId":"zoning_stats_api_terrace_zoning_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/terrace/zoning/export":{"get":{"summary":"Export Zoning","description":"Export zoning district data as CSV or GeoJSON.\n\nSupports filtering by zone code, category, and area range.\nMaximum 10,000 records per export.","operationId":"export_zoning_api_terrace_zoning_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"zone_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Zone code filter (e.g., CR2)","title":"Zone Code"},"description":"Zone code filter (e.g., CR2)"},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Major category filter","title":"Category"},"description":"Major category filter"},{"name":"min_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum area in sq km","title":"Min Area"},"description":"Minimum area in sq km"},{"name":"max_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum area in sq km","title":"Max Area"},"description":"Maximum area in sq km"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/terrace/health":{"get":{"summary":"City Health","description":"City-specific health check.","operationId":"city_health_api_terrace_health_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/yellowknife/entries/{kind}":{"get":{"summary":"List Entries","operationId":"list_entries_api_yellowknife_entries__kind__get","parameters":[{"name":"kind","in":"path","required":true,"schema":{"type":"string","description":"Canonical entry kind: property, permit, zoning, or safety","title":"Kind"},"description":"Canonical entry kind: property, permit, zoning, or safety"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"_services","in":"query","required":false,"schema":{"title":" Services"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Entries Api Yellowknife Entries  Kind  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/yellowknife/property/search":{"get":{"summary":"Search Property","description":"Search for properties by address, or browse all if no address specified.\nSupports sorting by assessed_value, address, year_built, community, or lot_size_sqft.\nSupports value range filtering with min_value and max_value.\n Supports property_type and year range filters.","operationId":"search_property_api_yellowknife_property_search_get","parameters":[{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Street address to search (omit to browse all)","title":"Address"},"description":"Street address to search (omit to browse all)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max results to return (up to 1000 for map browse)","default":10,"title":"Limit"},"description":"Max results to return (up to 1000 for map browse)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset for pagination","default":0,"title":"Offset"},"description":"Results offset for pagination"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft","title":"Sort By"},"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"asc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"},{"name":"property_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property type filter (e.g. RE, Residential)","title":"Property Type"},"description":"Property type filter (e.g. RE, Residential)"},{"name":"min_year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter: minimum year built","title":"Min Year"},"description":"Filter: minimum year built"},{"name":"max_year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter: maximum year built","title":"Max Year"},"description":"Filter: maximum year built"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertySearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/yellowknife/property/list":{"get":{"summary":"List Property","description":"List all properties with pagination, sorting, and value range filtering.\n\nUse this endpoint to browse available property records and discover valid roll numbers.\nReturns paginated results with total count for client-side pagination.\nSort by assessed_value with order=desc to find the most expensive properties.","operationId":"list_property_api_yellowknife_property_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft","title":"Sort By"},"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"asc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Property Api Yellowknife Property List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/yellowknife/property/geojson":{"get":{"summary":"Property Geojson","operationId":"property_geojson_api_yellowknife_property_geojson_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500000,"minimum":1,"description":"Max features to return (cap prevents browser overload for large cities)","default":50000,"title":"Limit"},"description":"Max features to return (cap prevents browser overload for large cities)"},{"name":"sw_lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport south-west latitude","title":"Sw Lat"},"description":"Viewport south-west latitude"},{"name":"sw_lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport south-west longitude","title":"Sw Lon"},"description":"Viewport south-west longitude"},{"name":"ne_lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport north-east latitude","title":"Ne Lat"},"description":"Viewport north-east latitude"},{"name":"ne_lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport north-east longitude","title":"Ne Lon"},"description":"Viewport north-east longitude"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Offset for pagination through viewport results (use with limit)","default":0,"title":"Offset"},"description":"Offset for pagination through viewport results (use with limit)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/yellowknife/property/top":{"get":{"summary":"Top Property","description":"Get top-N properties sorted by any numeric column.\n\nConvenience endpoint for AI agents and dashboards. Returns the top\nN properties sorted by the given column. Defaults to most expensive\n(assessed_value descending). Combine with min_value/max_value to\nfind e.g. the most expensive residential properties.","operationId":"top_property_api_yellowknife_property_top_get","parameters":[{"name":"n","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Number of top properties to return","default":10,"title":"N"},"description":"Number of top properties to return"},{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","description":"Sort column: assessed_value, year_built, lot_size_sqft","default":"assessed_value","title":"Sort By"},"description":"Sort column: assessed_value, year_built, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"desc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Top Property Api Yellowknife Property Top Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/yellowknife/property/stats":{"get":{"summary":"Property Stats","description":"Get property assessment statistics.","operationId":"property_stats_api_yellowknife_property_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/yellowknife/property/autocomplete":{"get":{"summary":"Property Autocomplete","description":"Get address and roll number suggestions for typeahead search.","operationId":"property_autocomplete_api_yellowknife_property_autocomplete_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"description":"Search query for address/roll number suggestions","title":"Q"},"description":"Search query for address/roll number suggestions"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":25,"minimum":1,"description":"Max suggestions to return","default":10,"title":"Limit"},"description":"Max suggestions to return"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/yellowknife/property/geocode":{"post":{"summary":"Property Geocode","description":"Geocode property addresses to lat/lon coordinates.\n\nAccepts a JSON body with 'addresses' (list of address strings, max 50).\nReturns cached results instantly; uncached addresses are geocoded via Nominatim.\n\nExample: {\"addresses\": [\"123 Main St\", \"456 Oak Ave\"]}","operationId":"property_geocode_api_yellowknife_property_geocode_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/yellowknife/property/by-dls":{"get":{"summary":"Get Property By Dls","description":"Get property assessment by DLS coordinates.","operationId":"get_property_by_dls_api_yellowknife_property_by_dls_get","parameters":[{"name":"quarter","in":"query","required":true,"schema":{"type":"string","description":"Quarter section (e.g., SW)","title":"Quarter"},"description":"Quarter section (e.g., SW)"},{"name":"section","in":"query","required":true,"schema":{"type":"integer","description":"Section number","title":"Section"},"description":"Section number"},{"name":"township","in":"query","required":true,"schema":{"type":"integer","description":"Township number","title":"Township"},"description":"Township number"},{"name":"range","in":"query","required":true,"schema":{"type":"integer","description":"Range number","title":"Range"},"description":"Range number"},{"name":"meridian","in":"query","required":true,"schema":{"type":"integer","description":"Meridian number","title":"Meridian"},"description":"Meridian number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyAssessment"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/yellowknife/property/by-gps":{"get":{"summary":"Get Property By Gps","description":"Find coordinate-bearing assessment records nearest a GPS point.\n\nResults are point-nearness matches unless the municipal source supplies\nparcel polygons; clients should not interpret proximity as legal parcel\ncontainment.","operationId":"get_property_by_gps_api_yellowknife_property_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":84.0,"minimum":41.0,"description":"Canadian latitude","title":"Lat"},"description":"Canadian latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":-52.0,"minimum":-142.0,"description":"Canadian longitude","title":"Lon"},"description":"Canadian longitude"},{"name":"radius_m","in":"query","required":false,"schema":{"type":"integer","maximum":5000,"minimum":1,"description":"Maximum point distance","default":100,"title":"Radius M"},"description":"Maximum point distance"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":10,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Property By Gps Api Yellowknife Property By Gps Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/yellowknife/property/by-roll/{roll_number}":{"get":{"summary":"Get Property By Roll","description":"Get property assessment by roll number.","operationId":"get_property_by_roll_api_yellowknife_property_by_roll__roll_number__get","parameters":[{"name":"roll_number","in":"path","required":true,"schema":{"type":"string","description":"Property roll number","title":"Roll Number"},"description":"Property roll number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyAssessment"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/yellowknife/property/report":{"get":{"summary":"Property Report Lookup","description":"Consolidated report by roll number, address, or GPS.","operationId":"property_report_lookup_api_yellowknife_property_report_get","parameters":[{"name":"roll_number","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property roll number","title":"Roll Number"},"description":"Property roll number"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Street address","title":"Address"},"description":"Street address"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyReport"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/yellowknife/property/report/{roll_number}":{"get":{"summary":"Property Report","description":"Get consolidated property report: assessment + building permits + zoning + DLS.","operationId":"property_report_api_yellowknife_property_report__roll_number__get","parameters":[{"name":"roll_number","in":"path","required":true,"schema":{"type":"string","description":"Property roll number","title":"Roll Number"},"description":"Property roll number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyReport"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/yellowknife/property/batch":{"post":{"summary":"Get Properties Batch","description":"Get multiple properties by roll numbers in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of roll numbers.\nExample: {\"ids\": [\"123456789\", \"987654321\"]}\nMaximum 100 roll numbers per request.","operationId":"get_properties_batch_api_yellowknife_property_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Properties Batch Api Yellowknife Property Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/yellowknife/property/export":{"get":{"summary":"Export Properties","description":"Export property data as CSV or GeoJSON.\n\nSupports filtering by address, property type, and assessed value range.\nMaximum 10,000 records per export.","operationId":"export_properties_api_yellowknife_property_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Address filter","title":"Address"},"description":"Address filter"},{"name":"property_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property type filter","title":"Property Type"},"description":"Property type filter"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum assessed value","title":"Min Value"},"description":"Minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum assessed value","title":"Max Value"},"description":"Maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/yellowknife/census/profile":{"get":{"summary":"Get Census Profile","description":"Get census profile for a specific Dissemination Area.\n\nProvide either da_id directly, OR lat+lon to find the nearest DA automatically.","operationId":"get_census_profile_api_yellowknife_census_profile_get","parameters":[{"name":"da_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Dissemination Area ID (e.g., 48820001)","title":"Da Id"},"description":"Dissemination Area ID (e.g., 48820001)"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude for nearest-DA lookup","title":"Lat"},"description":"Latitude for nearest-DA lookup"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude for nearest-DA lookup","title":"Lon"},"description":"Longitude for nearest-DA lookup"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusProfile"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/yellowknife/census/batch":{"post":{"summary":"Get Census Batch","description":"Get multiple census profiles by DA IDs in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of DA IDs.\nExample: {\"ids\": [\"48820001\", \"48820002\"]}\nMaximum 100 DA IDs per request.","operationId":"get_census_batch_api_yellowknife_census_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Census Batch Api Yellowknife Census Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/yellowknife/census/export":{"get":{"summary":"Export Census","description":"Export census data as CSV.\n\nSupports filtering by population range and geography type.\nMaximum 10,000 records per export.","operationId":"export_census_api_yellowknife_census_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv only","default":"csv","title":"Format"},"description":"Export format: csv only"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"min_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Minimum population filter","title":"Min Population"},"description":"Minimum population filter"},{"name":"max_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Maximum population filter","title":"Max Population"},"description":"Maximum population filter"},{"name":"geography_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Geography type filter (DA, CT, CMA)","title":"Geography Type"},"description":"Geography type filter (DA, CT, CMA)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/yellowknife/census/list":{"get":{"summary":"List Census Profiles","description":"List all census profiles with pagination.\n\nUse this endpoint to browse available census profiles and discover valid DA IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_census_profiles_api_yellowknife_census_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Census Profiles Api Yellowknife Census List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/yellowknife/census/by-gps":{"get":{"summary":"Get Census By Gps","description":"Get census data for GPS coordinates.","operationId":"get_census_by_gps_api_yellowknife_census_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90,"minimum":-90,"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":180,"minimum":-180,"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/yellowknife/census/by-dls":{"get":{"summary":"Get Census By Dls","description":"Get census data for DLS coordinates.","operationId":"get_census_by_dls_api_yellowknife_census_by_dls_get","parameters":[{"name":"dls","in":"query","required":true,"schema":{"type":"string","description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)","title":"Dls"},"description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/yellowknife/census/map-data":{"get":{"summary":"Get Census Map Data","description":"Get lightweight DA points for choropleth map rendering.\n\nReturns centroid coordinates and key metrics (income, age, population,\nhousehold size, employment rate) for all DAs in the city.\nUsed by the census dashboard to render color-coded maps.","operationId":"get_census_map_data_api_yellowknife_census_map_data_get","parameters":[{"name":"year","in":"query","required":false,"schema":{"type":"integer","description":"Census year for DA map data","default":2021,"title":"Year"},"description":"Census year for DA map data"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/yellowknife/census/stats":{"get":{"summary":"Census Stats","description":"Get census data statistics.","operationId":"census_stats_api_yellowknife_census_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/yellowknife/census/compare":{"get":{"summary":"Census Compare","description":"Compare key census metrics across multiple years.\n\nReturns side-by-side comparison of population, households,\navg_income, median_age, density, and land_area for each requested year.\nYears without data return null for that year's values.","operationId":"census_compare_api_yellowknife_census_compare_get","parameters":[{"name":"years","in":"query","required":false,"schema":{"type":"string","description":"Comma-separated census years (e.g., 2016,2021)","default":"2021","title":"Years"},"description":"Comma-separated census years (e.g., 2016,2021)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/yellowknife/census/time-series":{"get":{"summary":"Census Timeseries","description":"Get year-by-year census trends for this city.\n\nReturns population, income, age, and household trends across all\navailable census years. Useful for spotting long-term demographic shifts.","operationId":"census_timeseries_api_yellowknife_census_time_series_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/yellowknife/geography/list":{"get":{"summary":"Geography List","description":"List geography boundaries for this city.","operationId":"geography_list_api_yellowknife_geography_list_get","parameters":[{"name":"type","in":"query","required":false,"schema":{"type":"string","title":"Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/yellowknife/geography/by-gps":{"get":{"summary":"Geography By Gps","description":"Find the geography boundary containing a GPS point.","operationId":"geography_by_gps_api_yellowknife_geography_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","title":"Lat"}},{"name":"lon","in":"query","required":true,"schema":{"type":"number","title":"Lon"}},{"name":"type","in":"query","required":false,"schema":{"type":"string","default":"DA","title":"Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/yellowknife/geography/stats":{"get":{"summary":"Geography Stats","description":"Get geography statistics for this city.","operationId":"geography_stats_api_yellowknife_geography_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/yellowknife/geography/{geoid}":{"get":{"summary":"Geography Boundary","description":"Get a specific geography boundary by geoid, including GeoJSON polygon.","operationId":"geography_boundary_api_yellowknife_geography__geoid__get","parameters":[{"name":"geoid","in":"path","required":true,"schema":{"type":"string","title":"Geoid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/yellowknife/census/rental/list":{"get":{"summary":"List Rental Prices","description":"List rental price records for this city, with optional unit type filter.","operationId":"list_rental_prices_api_yellowknife_census_rental_list_get","parameters":[{"name":"unit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":50,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalPriceListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/yellowknife/census/rental/trend":{"get":{"summary":"Get Rental Trend","description":"Get rental price time series for a specific unit type.","operationId":"get_rental_trend_api_yellowknife_census_rental_trend_get","parameters":[{"name":"unit_type","in":"query","required":true,"schema":{"type":"string","description":"Rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Rental unit type (e.g. 'Apartment - 1 bedroom')"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalTrendResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/yellowknife/census/rental/types":{"get":{"summary":"Get Rental Types","description":"Get available rental unit types for this city.","operationId":"get_rental_types_api_yellowknife_census_rental_types_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/yellowknife/zoning/by-gps":{"get":{"summary":"Get Zoning By Gps","description":"Get zoning district for GPS coordinates.","operationId":"get_zoning_by_gps_api_yellowknife_zoning_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZoningByGPSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/yellowknife/zoning/by-id/{district_id}":{"get":{"summary":"Get Zoning By Id","description":"Get a single zoning district by its numeric ID.","operationId":"get_zoning_by_id_api_yellowknife_zoning_by_id__district_id__get","parameters":[{"name":"district_id","in":"path","required":true,"schema":{"type":"integer","description":"Zoning district numeric ID","title":"District Id"},"description":"Zoning district numeric ID"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning By Id Api Yellowknife Zoning By Id  District Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/yellowknife/zoning/by-code/{code}":{"get":{"summary":"Get Zoning By Code","description":"Get all districts with a specific zone code.","operationId":"get_zoning_by_code_api_yellowknife_zoning_by_code__code__get","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","description":"Zone code (e.g., C-C1, R-G)","title":"Code"},"description":"Zone code (e.g., C-C1, R-G)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoningDistrict"},"title":"Response Get Zoning By Code Api Yellowknife Zoning By Code  Code  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/yellowknife/zoning/batch":{"post":{"summary":"Get Zoning Batch","description":"Get multiple zoning districts by zone codes in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of zone codes.\nExample: {\"ids\": [\"CR20-C20/R20\", \"C-C1\", \"R-G\"]}\nMaximum 100 zone codes per request.","operationId":"get_zoning_batch_api_yellowknife_zoning_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning Batch Api Yellowknife Zoning Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/yellowknife/zoning/list":{"get":{"summary":"List Zoning Districts","description":"List all zoning districts with pagination.\n\nUse this endpoint to browse available zoning districts and discover valid IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_zoning_districts_api_yellowknife_zoning_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Zoning Districts Api Yellowknife Zoning List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/yellowknife/zoning/codes":{"get":{"summary":"List Zone Codes","description":"List all zone codes with descriptions.","operationId":"list_zone_codes_api_yellowknife_zoning_codes_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"type":"string","description":"Filter by major category (e.g., Commercial, Residential)","title":"Category"},"description":"Filter by major category (e.g., Commercial, Residential)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoneCodeInfo"},"title":"Response List Zone Codes Api Yellowknife Zoning Codes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/yellowknife/zoning/stats":{"get":{"summary":"Zoning Stats","description":"Get zoning statistics.","operationId":"zoning_stats_api_yellowknife_zoning_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/yellowknife/zoning/export":{"get":{"summary":"Export Zoning","description":"Export zoning district data as CSV or GeoJSON.\n\nSupports filtering by zone code, category, and area range.\nMaximum 10,000 records per export.","operationId":"export_zoning_api_yellowknife_zoning_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"zone_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Zone code filter (e.g., CR2)","title":"Zone Code"},"description":"Zone code filter (e.g., CR2)"},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Major category filter","title":"Category"},"description":"Major category filter"},{"name":"min_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum area in sq km","title":"Min Area"},"description":"Minimum area in sq km"},{"name":"max_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum area in sq km","title":"Max Area"},"description":"Maximum area in sq km"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/yellowknife/health":{"get":{"summary":"City Health","description":"City-specific health check.","operationId":"city_health_api_yellowknife_health_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/moncton/entries/{kind}":{"get":{"summary":"List Entries","operationId":"list_entries_api_moncton_entries__kind__get","parameters":[{"name":"kind","in":"path","required":true,"schema":{"type":"string","description":"Canonical entry kind: property, permit, zoning, or safety","title":"Kind"},"description":"Canonical entry kind: property, permit, zoning, or safety"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"_services","in":"query","required":false,"schema":{"title":" Services"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Entries Api Moncton Entries  Kind  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/moncton/property/search":{"get":{"summary":"Search Property","description":"Search for properties by address, or browse all if no address specified.\nSupports sorting by assessed_value, address, year_built, community, or lot_size_sqft.\nSupports value range filtering with min_value and max_value.\n Supports property_type and year range filters.","operationId":"search_property_api_moncton_property_search_get","parameters":[{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Street address to search (omit to browse all)","title":"Address"},"description":"Street address to search (omit to browse all)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max results to return (up to 1000 for map browse)","default":10,"title":"Limit"},"description":"Max results to return (up to 1000 for map browse)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset for pagination","default":0,"title":"Offset"},"description":"Results offset for pagination"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft","title":"Sort By"},"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"asc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"},{"name":"property_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property type filter (e.g. RE, Residential)","title":"Property Type"},"description":"Property type filter (e.g. RE, Residential)"},{"name":"min_year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter: minimum year built","title":"Min Year"},"description":"Filter: minimum year built"},{"name":"max_year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter: maximum year built","title":"Max Year"},"description":"Filter: maximum year built"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertySearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/moncton/property/list":{"get":{"summary":"List Property","description":"List all properties with pagination, sorting, and value range filtering.\n\nUse this endpoint to browse available property records and discover valid roll numbers.\nReturns paginated results with total count for client-side pagination.\nSort by assessed_value with order=desc to find the most expensive properties.","operationId":"list_property_api_moncton_property_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft","title":"Sort By"},"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"asc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Property Api Moncton Property List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/moncton/property/geojson":{"get":{"summary":"Property Geojson","operationId":"property_geojson_api_moncton_property_geojson_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500000,"minimum":1,"description":"Max features to return (cap prevents browser overload for large cities)","default":50000,"title":"Limit"},"description":"Max features to return (cap prevents browser overload for large cities)"},{"name":"sw_lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport south-west latitude","title":"Sw Lat"},"description":"Viewport south-west latitude"},{"name":"sw_lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport south-west longitude","title":"Sw Lon"},"description":"Viewport south-west longitude"},{"name":"ne_lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport north-east latitude","title":"Ne Lat"},"description":"Viewport north-east latitude"},{"name":"ne_lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport north-east longitude","title":"Ne Lon"},"description":"Viewport north-east longitude"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Offset for pagination through viewport results (use with limit)","default":0,"title":"Offset"},"description":"Offset for pagination through viewport results (use with limit)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/moncton/property/top":{"get":{"summary":"Top Property","description":"Get top-N properties sorted by any numeric column.\n\nConvenience endpoint for AI agents and dashboards. Returns the top\nN properties sorted by the given column. Defaults to most expensive\n(assessed_value descending). Combine with min_value/max_value to\nfind e.g. the most expensive residential properties.","operationId":"top_property_api_moncton_property_top_get","parameters":[{"name":"n","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Number of top properties to return","default":10,"title":"N"},"description":"Number of top properties to return"},{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","description":"Sort column: assessed_value, year_built, lot_size_sqft","default":"assessed_value","title":"Sort By"},"description":"Sort column: assessed_value, year_built, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"desc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Top Property Api Moncton Property Top Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/moncton/property/stats":{"get":{"summary":"Property Stats","description":"Get property assessment statistics.","operationId":"property_stats_api_moncton_property_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/moncton/property/autocomplete":{"get":{"summary":"Property Autocomplete","description":"Get address and roll number suggestions for typeahead search.","operationId":"property_autocomplete_api_moncton_property_autocomplete_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"description":"Search query for address/roll number suggestions","title":"Q"},"description":"Search query for address/roll number suggestions"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":25,"minimum":1,"description":"Max suggestions to return","default":10,"title":"Limit"},"description":"Max suggestions to return"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/moncton/property/geocode":{"post":{"summary":"Property Geocode","description":"Geocode property addresses to lat/lon coordinates.\n\nAccepts a JSON body with 'addresses' (list of address strings, max 50).\nReturns cached results instantly; uncached addresses are geocoded via Nominatim.\n\nExample: {\"addresses\": [\"123 Main St\", \"456 Oak Ave\"]}","operationId":"property_geocode_api_moncton_property_geocode_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/moncton/property/by-dls":{"get":{"summary":"Get Property By Dls","description":"Get property assessment by DLS coordinates.","operationId":"get_property_by_dls_api_moncton_property_by_dls_get","parameters":[{"name":"quarter","in":"query","required":true,"schema":{"type":"string","description":"Quarter section (e.g., SW)","title":"Quarter"},"description":"Quarter section (e.g., SW)"},{"name":"section","in":"query","required":true,"schema":{"type":"integer","description":"Section number","title":"Section"},"description":"Section number"},{"name":"township","in":"query","required":true,"schema":{"type":"integer","description":"Township number","title":"Township"},"description":"Township number"},{"name":"range","in":"query","required":true,"schema":{"type":"integer","description":"Range number","title":"Range"},"description":"Range number"},{"name":"meridian","in":"query","required":true,"schema":{"type":"integer","description":"Meridian number","title":"Meridian"},"description":"Meridian number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyAssessment"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/moncton/property/by-gps":{"get":{"summary":"Get Property By Gps","description":"Find coordinate-bearing assessment records nearest a GPS point.\n\nResults are point-nearness matches unless the municipal source supplies\nparcel polygons; clients should not interpret proximity as legal parcel\ncontainment.","operationId":"get_property_by_gps_api_moncton_property_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":84.0,"minimum":41.0,"description":"Canadian latitude","title":"Lat"},"description":"Canadian latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":-52.0,"minimum":-142.0,"description":"Canadian longitude","title":"Lon"},"description":"Canadian longitude"},{"name":"radius_m","in":"query","required":false,"schema":{"type":"integer","maximum":5000,"minimum":1,"description":"Maximum point distance","default":100,"title":"Radius M"},"description":"Maximum point distance"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":10,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Property By Gps Api Moncton Property By Gps Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/moncton/property/by-roll/{roll_number}":{"get":{"summary":"Get Property By Roll","description":"Get property assessment by roll number.","operationId":"get_property_by_roll_api_moncton_property_by_roll__roll_number__get","parameters":[{"name":"roll_number","in":"path","required":true,"schema":{"type":"string","description":"Property roll number","title":"Roll Number"},"description":"Property roll number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyAssessment"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/moncton/property/report":{"get":{"summary":"Property Report Lookup","description":"Consolidated report by roll number, address, or GPS.","operationId":"property_report_lookup_api_moncton_property_report_get","parameters":[{"name":"roll_number","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property roll number","title":"Roll Number"},"description":"Property roll number"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Street address","title":"Address"},"description":"Street address"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyReport"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/moncton/property/report/{roll_number}":{"get":{"summary":"Property Report","description":"Get consolidated property report: assessment + building permits + zoning + DLS.","operationId":"property_report_api_moncton_property_report__roll_number__get","parameters":[{"name":"roll_number","in":"path","required":true,"schema":{"type":"string","description":"Property roll number","title":"Roll Number"},"description":"Property roll number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyReport"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/moncton/property/batch":{"post":{"summary":"Get Properties Batch","description":"Get multiple properties by roll numbers in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of roll numbers.\nExample: {\"ids\": [\"123456789\", \"987654321\"]}\nMaximum 100 roll numbers per request.","operationId":"get_properties_batch_api_moncton_property_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Properties Batch Api Moncton Property Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/moncton/property/export":{"get":{"summary":"Export Properties","description":"Export property data as CSV or GeoJSON.\n\nSupports filtering by address, property type, and assessed value range.\nMaximum 10,000 records per export.","operationId":"export_properties_api_moncton_property_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Address filter","title":"Address"},"description":"Address filter"},{"name":"property_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property type filter","title":"Property Type"},"description":"Property type filter"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum assessed value","title":"Min Value"},"description":"Minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum assessed value","title":"Max Value"},"description":"Maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/moncton/census/profile":{"get":{"summary":"Get Census Profile","description":"Get census profile for a specific Dissemination Area.\n\nProvide either da_id directly, OR lat+lon to find the nearest DA automatically.","operationId":"get_census_profile_api_moncton_census_profile_get","parameters":[{"name":"da_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Dissemination Area ID (e.g., 48820001)","title":"Da Id"},"description":"Dissemination Area ID (e.g., 48820001)"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude for nearest-DA lookup","title":"Lat"},"description":"Latitude for nearest-DA lookup"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude for nearest-DA lookup","title":"Lon"},"description":"Longitude for nearest-DA lookup"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusProfile"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/moncton/census/batch":{"post":{"summary":"Get Census Batch","description":"Get multiple census profiles by DA IDs in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of DA IDs.\nExample: {\"ids\": [\"48820001\", \"48820002\"]}\nMaximum 100 DA IDs per request.","operationId":"get_census_batch_api_moncton_census_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Census Batch Api Moncton Census Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/moncton/census/export":{"get":{"summary":"Export Census","description":"Export census data as CSV.\n\nSupports filtering by population range and geography type.\nMaximum 10,000 records per export.","operationId":"export_census_api_moncton_census_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv only","default":"csv","title":"Format"},"description":"Export format: csv only"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"min_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Minimum population filter","title":"Min Population"},"description":"Minimum population filter"},{"name":"max_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Maximum population filter","title":"Max Population"},"description":"Maximum population filter"},{"name":"geography_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Geography type filter (DA, CT, CMA)","title":"Geography Type"},"description":"Geography type filter (DA, CT, CMA)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/moncton/census/list":{"get":{"summary":"List Census Profiles","description":"List all census profiles with pagination.\n\nUse this endpoint to browse available census profiles and discover valid DA IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_census_profiles_api_moncton_census_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Census Profiles Api Moncton Census List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/moncton/census/by-gps":{"get":{"summary":"Get Census By Gps","description":"Get census data for GPS coordinates.","operationId":"get_census_by_gps_api_moncton_census_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90,"minimum":-90,"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":180,"minimum":-180,"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/moncton/census/by-dls":{"get":{"summary":"Get Census By Dls","description":"Get census data for DLS coordinates.","operationId":"get_census_by_dls_api_moncton_census_by_dls_get","parameters":[{"name":"dls","in":"query","required":true,"schema":{"type":"string","description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)","title":"Dls"},"description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/moncton/census/map-data":{"get":{"summary":"Get Census Map Data","description":"Get lightweight DA points for choropleth map rendering.\n\nReturns centroid coordinates and key metrics (income, age, population,\nhousehold size, employment rate) for all DAs in the city.\nUsed by the census dashboard to render color-coded maps.","operationId":"get_census_map_data_api_moncton_census_map_data_get","parameters":[{"name":"year","in":"query","required":false,"schema":{"type":"integer","description":"Census year for DA map data","default":2021,"title":"Year"},"description":"Census year for DA map data"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/moncton/census/stats":{"get":{"summary":"Census Stats","description":"Get census data statistics.","operationId":"census_stats_api_moncton_census_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/moncton/census/compare":{"get":{"summary":"Census Compare","description":"Compare key census metrics across multiple years.\n\nReturns side-by-side comparison of population, households,\navg_income, median_age, density, and land_area for each requested year.\nYears without data return null for that year's values.","operationId":"census_compare_api_moncton_census_compare_get","parameters":[{"name":"years","in":"query","required":false,"schema":{"type":"string","description":"Comma-separated census years (e.g., 2016,2021)","default":"2021","title":"Years"},"description":"Comma-separated census years (e.g., 2016,2021)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/moncton/census/time-series":{"get":{"summary":"Census Timeseries","description":"Get year-by-year census trends for this city.\n\nReturns population, income, age, and household trends across all\navailable census years. Useful for spotting long-term demographic shifts.","operationId":"census_timeseries_api_moncton_census_time_series_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/moncton/geography/list":{"get":{"summary":"Geography List","description":"List geography boundaries for this city.","operationId":"geography_list_api_moncton_geography_list_get","parameters":[{"name":"type","in":"query","required":false,"schema":{"type":"string","title":"Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/moncton/geography/by-gps":{"get":{"summary":"Geography By Gps","description":"Find the geography boundary containing a GPS point.","operationId":"geography_by_gps_api_moncton_geography_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","title":"Lat"}},{"name":"lon","in":"query","required":true,"schema":{"type":"number","title":"Lon"}},{"name":"type","in":"query","required":false,"schema":{"type":"string","default":"DA","title":"Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/moncton/geography/stats":{"get":{"summary":"Geography Stats","description":"Get geography statistics for this city.","operationId":"geography_stats_api_moncton_geography_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/moncton/geography/{geoid}":{"get":{"summary":"Geography Boundary","description":"Get a specific geography boundary by geoid, including GeoJSON polygon.","operationId":"geography_boundary_api_moncton_geography__geoid__get","parameters":[{"name":"geoid","in":"path","required":true,"schema":{"type":"string","title":"Geoid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/moncton/census/rental/list":{"get":{"summary":"List Rental Prices","description":"List rental price records for this city, with optional unit type filter.","operationId":"list_rental_prices_api_moncton_census_rental_list_get","parameters":[{"name":"unit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":50,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalPriceListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/moncton/census/rental/trend":{"get":{"summary":"Get Rental Trend","description":"Get rental price time series for a specific unit type.","operationId":"get_rental_trend_api_moncton_census_rental_trend_get","parameters":[{"name":"unit_type","in":"query","required":true,"schema":{"type":"string","description":"Rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Rental unit type (e.g. 'Apartment - 1 bedroom')"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalTrendResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/moncton/census/rental/types":{"get":{"summary":"Get Rental Types","description":"Get available rental unit types for this city.","operationId":"get_rental_types_api_moncton_census_rental_types_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/moncton/health":{"get":{"summary":"City Health","description":"City-specific health check.","operationId":"city_health_api_moncton_health_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saint-john/entries/{kind}":{"get":{"summary":"List Entries","operationId":"list_entries_api_saint_john_entries__kind__get","parameters":[{"name":"kind","in":"path","required":true,"schema":{"type":"string","description":"Canonical entry kind: property, permit, zoning, or safety","title":"Kind"},"description":"Canonical entry kind: property, permit, zoning, or safety"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"_services","in":"query","required":false,"schema":{"title":" Services"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Entries Api Saint John Entries  Kind  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saint-john/property/search":{"get":{"summary":"Search Property","description":"Search for properties by address, or browse all if no address specified.\nSupports sorting by assessed_value, address, year_built, community, or lot_size_sqft.\nSupports value range filtering with min_value and max_value.\n Supports property_type and year range filters.","operationId":"search_property_api_saint_john_property_search_get","parameters":[{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Street address to search (omit to browse all)","title":"Address"},"description":"Street address to search (omit to browse all)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max results to return (up to 1000 for map browse)","default":10,"title":"Limit"},"description":"Max results to return (up to 1000 for map browse)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset for pagination","default":0,"title":"Offset"},"description":"Results offset for pagination"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft","title":"Sort By"},"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"asc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"},{"name":"property_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property type filter (e.g. RE, Residential)","title":"Property Type"},"description":"Property type filter (e.g. RE, Residential)"},{"name":"min_year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter: minimum year built","title":"Min Year"},"description":"Filter: minimum year built"},{"name":"max_year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter: maximum year built","title":"Max Year"},"description":"Filter: maximum year built"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertySearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saint-john/property/list":{"get":{"summary":"List Property","description":"List all properties with pagination, sorting, and value range filtering.\n\nUse this endpoint to browse available property records and discover valid roll numbers.\nReturns paginated results with total count for client-side pagination.\nSort by assessed_value with order=desc to find the most expensive properties.","operationId":"list_property_api_saint_john_property_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft","title":"Sort By"},"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"asc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Property Api Saint John Property List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saint-john/property/geojson":{"get":{"summary":"Property Geojson","operationId":"property_geojson_api_saint_john_property_geojson_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500000,"minimum":1,"description":"Max features to return (cap prevents browser overload for large cities)","default":50000,"title":"Limit"},"description":"Max features to return (cap prevents browser overload for large cities)"},{"name":"sw_lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport south-west latitude","title":"Sw Lat"},"description":"Viewport south-west latitude"},{"name":"sw_lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport south-west longitude","title":"Sw Lon"},"description":"Viewport south-west longitude"},{"name":"ne_lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport north-east latitude","title":"Ne Lat"},"description":"Viewport north-east latitude"},{"name":"ne_lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport north-east longitude","title":"Ne Lon"},"description":"Viewport north-east longitude"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Offset for pagination through viewport results (use with limit)","default":0,"title":"Offset"},"description":"Offset for pagination through viewport results (use with limit)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saint-john/property/top":{"get":{"summary":"Top Property","description":"Get top-N properties sorted by any numeric column.\n\nConvenience endpoint for AI agents and dashboards. Returns the top\nN properties sorted by the given column. Defaults to most expensive\n(assessed_value descending). Combine with min_value/max_value to\nfind e.g. the most expensive residential properties.","operationId":"top_property_api_saint_john_property_top_get","parameters":[{"name":"n","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Number of top properties to return","default":10,"title":"N"},"description":"Number of top properties to return"},{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","description":"Sort column: assessed_value, year_built, lot_size_sqft","default":"assessed_value","title":"Sort By"},"description":"Sort column: assessed_value, year_built, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"desc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Top Property Api Saint John Property Top Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saint-john/property/stats":{"get":{"summary":"Property Stats","description":"Get property assessment statistics.","operationId":"property_stats_api_saint_john_property_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saint-john/property/autocomplete":{"get":{"summary":"Property Autocomplete","description":"Get address and roll number suggestions for typeahead search.","operationId":"property_autocomplete_api_saint_john_property_autocomplete_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"description":"Search query for address/roll number suggestions","title":"Q"},"description":"Search query for address/roll number suggestions"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":25,"minimum":1,"description":"Max suggestions to return","default":10,"title":"Limit"},"description":"Max suggestions to return"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saint-john/property/geocode":{"post":{"summary":"Property Geocode","description":"Geocode property addresses to lat/lon coordinates.\n\nAccepts a JSON body with 'addresses' (list of address strings, max 50).\nReturns cached results instantly; uncached addresses are geocoded via Nominatim.\n\nExample: {\"addresses\": [\"123 Main St\", \"456 Oak Ave\"]}","operationId":"property_geocode_api_saint_john_property_geocode_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saint-john/property/by-dls":{"get":{"summary":"Get Property By Dls","description":"Get property assessment by DLS coordinates.","operationId":"get_property_by_dls_api_saint_john_property_by_dls_get","parameters":[{"name":"quarter","in":"query","required":true,"schema":{"type":"string","description":"Quarter section (e.g., SW)","title":"Quarter"},"description":"Quarter section (e.g., SW)"},{"name":"section","in":"query","required":true,"schema":{"type":"integer","description":"Section number","title":"Section"},"description":"Section number"},{"name":"township","in":"query","required":true,"schema":{"type":"integer","description":"Township number","title":"Township"},"description":"Township number"},{"name":"range","in":"query","required":true,"schema":{"type":"integer","description":"Range number","title":"Range"},"description":"Range number"},{"name":"meridian","in":"query","required":true,"schema":{"type":"integer","description":"Meridian number","title":"Meridian"},"description":"Meridian number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyAssessment"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saint-john/property/by-gps":{"get":{"summary":"Get Property By Gps","description":"Find coordinate-bearing assessment records nearest a GPS point.\n\nResults are point-nearness matches unless the municipal source supplies\nparcel polygons; clients should not interpret proximity as legal parcel\ncontainment.","operationId":"get_property_by_gps_api_saint_john_property_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":84.0,"minimum":41.0,"description":"Canadian latitude","title":"Lat"},"description":"Canadian latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":-52.0,"minimum":-142.0,"description":"Canadian longitude","title":"Lon"},"description":"Canadian longitude"},{"name":"radius_m","in":"query","required":false,"schema":{"type":"integer","maximum":5000,"minimum":1,"description":"Maximum point distance","default":100,"title":"Radius M"},"description":"Maximum point distance"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":10,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Property By Gps Api Saint John Property By Gps Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saint-john/property/by-roll/{roll_number}":{"get":{"summary":"Get Property By Roll","description":"Get property assessment by roll number.","operationId":"get_property_by_roll_api_saint_john_property_by_roll__roll_number__get","parameters":[{"name":"roll_number","in":"path","required":true,"schema":{"type":"string","description":"Property roll number","title":"Roll Number"},"description":"Property roll number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyAssessment"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saint-john/property/report":{"get":{"summary":"Property Report Lookup","description":"Consolidated report by roll number, address, or GPS.","operationId":"property_report_lookup_api_saint_john_property_report_get","parameters":[{"name":"roll_number","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property roll number","title":"Roll Number"},"description":"Property roll number"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Street address","title":"Address"},"description":"Street address"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyReport"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saint-john/property/report/{roll_number}":{"get":{"summary":"Property Report","description":"Get consolidated property report: assessment + building permits + zoning + DLS.","operationId":"property_report_api_saint_john_property_report__roll_number__get","parameters":[{"name":"roll_number","in":"path","required":true,"schema":{"type":"string","description":"Property roll number","title":"Roll Number"},"description":"Property roll number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyReport"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saint-john/property/batch":{"post":{"summary":"Get Properties Batch","description":"Get multiple properties by roll numbers in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of roll numbers.\nExample: {\"ids\": [\"123456789\", \"987654321\"]}\nMaximum 100 roll numbers per request.","operationId":"get_properties_batch_api_saint_john_property_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Properties Batch Api Saint John Property Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saint-john/property/export":{"get":{"summary":"Export Properties","description":"Export property data as CSV or GeoJSON.\n\nSupports filtering by address, property type, and assessed value range.\nMaximum 10,000 records per export.","operationId":"export_properties_api_saint_john_property_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Address filter","title":"Address"},"description":"Address filter"},{"name":"property_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property type filter","title":"Property Type"},"description":"Property type filter"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum assessed value","title":"Min Value"},"description":"Minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum assessed value","title":"Max Value"},"description":"Maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saint-john/census/profile":{"get":{"summary":"Get Census Profile","description":"Get census profile for a specific Dissemination Area.\n\nProvide either da_id directly, OR lat+lon to find the nearest DA automatically.","operationId":"get_census_profile_api_saint_john_census_profile_get","parameters":[{"name":"da_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Dissemination Area ID (e.g., 48820001)","title":"Da Id"},"description":"Dissemination Area ID (e.g., 48820001)"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude for nearest-DA lookup","title":"Lat"},"description":"Latitude for nearest-DA lookup"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude for nearest-DA lookup","title":"Lon"},"description":"Longitude for nearest-DA lookup"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusProfile"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saint-john/census/batch":{"post":{"summary":"Get Census Batch","description":"Get multiple census profiles by DA IDs in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of DA IDs.\nExample: {\"ids\": [\"48820001\", \"48820002\"]}\nMaximum 100 DA IDs per request.","operationId":"get_census_batch_api_saint_john_census_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Census Batch Api Saint John Census Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saint-john/census/export":{"get":{"summary":"Export Census","description":"Export census data as CSV.\n\nSupports filtering by population range and geography type.\nMaximum 10,000 records per export.","operationId":"export_census_api_saint_john_census_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv only","default":"csv","title":"Format"},"description":"Export format: csv only"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"min_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Minimum population filter","title":"Min Population"},"description":"Minimum population filter"},{"name":"max_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Maximum population filter","title":"Max Population"},"description":"Maximum population filter"},{"name":"geography_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Geography type filter (DA, CT, CMA)","title":"Geography Type"},"description":"Geography type filter (DA, CT, CMA)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saint-john/census/list":{"get":{"summary":"List Census Profiles","description":"List all census profiles with pagination.\n\nUse this endpoint to browse available census profiles and discover valid DA IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_census_profiles_api_saint_john_census_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Census Profiles Api Saint John Census List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saint-john/census/by-gps":{"get":{"summary":"Get Census By Gps","description":"Get census data for GPS coordinates.","operationId":"get_census_by_gps_api_saint_john_census_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90,"minimum":-90,"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":180,"minimum":-180,"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saint-john/census/by-dls":{"get":{"summary":"Get Census By Dls","description":"Get census data for DLS coordinates.","operationId":"get_census_by_dls_api_saint_john_census_by_dls_get","parameters":[{"name":"dls","in":"query","required":true,"schema":{"type":"string","description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)","title":"Dls"},"description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saint-john/census/map-data":{"get":{"summary":"Get Census Map Data","description":"Get lightweight DA points for choropleth map rendering.\n\nReturns centroid coordinates and key metrics (income, age, population,\nhousehold size, employment rate) for all DAs in the city.\nUsed by the census dashboard to render color-coded maps.","operationId":"get_census_map_data_api_saint_john_census_map_data_get","parameters":[{"name":"year","in":"query","required":false,"schema":{"type":"integer","description":"Census year for DA map data","default":2021,"title":"Year"},"description":"Census year for DA map data"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saint-john/census/stats":{"get":{"summary":"Census Stats","description":"Get census data statistics.","operationId":"census_stats_api_saint_john_census_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saint-john/census/compare":{"get":{"summary":"Census Compare","description":"Compare key census metrics across multiple years.\n\nReturns side-by-side comparison of population, households,\navg_income, median_age, density, and land_area for each requested year.\nYears without data return null for that year's values.","operationId":"census_compare_api_saint_john_census_compare_get","parameters":[{"name":"years","in":"query","required":false,"schema":{"type":"string","description":"Comma-separated census years (e.g., 2016,2021)","default":"2021","title":"Years"},"description":"Comma-separated census years (e.g., 2016,2021)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saint-john/census/time-series":{"get":{"summary":"Census Timeseries","description":"Get year-by-year census trends for this city.\n\nReturns population, income, age, and household trends across all\navailable census years. Useful for spotting long-term demographic shifts.","operationId":"census_timeseries_api_saint_john_census_time_series_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saint-john/geography/list":{"get":{"summary":"Geography List","description":"List geography boundaries for this city.","operationId":"geography_list_api_saint_john_geography_list_get","parameters":[{"name":"type","in":"query","required":false,"schema":{"type":"string","title":"Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saint-john/geography/by-gps":{"get":{"summary":"Geography By Gps","description":"Find the geography boundary containing a GPS point.","operationId":"geography_by_gps_api_saint_john_geography_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","title":"Lat"}},{"name":"lon","in":"query","required":true,"schema":{"type":"number","title":"Lon"}},{"name":"type","in":"query","required":false,"schema":{"type":"string","default":"DA","title":"Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saint-john/geography/stats":{"get":{"summary":"Geography Stats","description":"Get geography statistics for this city.","operationId":"geography_stats_api_saint_john_geography_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saint-john/geography/{geoid}":{"get":{"summary":"Geography Boundary","description":"Get a specific geography boundary by geoid, including GeoJSON polygon.","operationId":"geography_boundary_api_saint_john_geography__geoid__get","parameters":[{"name":"geoid","in":"path","required":true,"schema":{"type":"string","title":"Geoid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saint-john/census/rental/list":{"get":{"summary":"List Rental Prices","description":"List rental price records for this city, with optional unit type filter.","operationId":"list_rental_prices_api_saint_john_census_rental_list_get","parameters":[{"name":"unit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":50,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalPriceListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saint-john/census/rental/trend":{"get":{"summary":"Get Rental Trend","description":"Get rental price time series for a specific unit type.","operationId":"get_rental_trend_api_saint_john_census_rental_trend_get","parameters":[{"name":"unit_type","in":"query","required":true,"schema":{"type":"string","description":"Rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Rental unit type (e.g. 'Apartment - 1 bedroom')"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalTrendResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saint-john/census/rental/types":{"get":{"summary":"Get Rental Types","description":"Get available rental unit types for this city.","operationId":"get_rental_types_api_saint_john_census_rental_types_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/saint-john/health":{"get":{"summary":"City Health","description":"City-specific health check.","operationId":"city_health_api_saint_john_health_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/fredericton/entries/{kind}":{"get":{"summary":"List Entries","operationId":"list_entries_api_fredericton_entries__kind__get","parameters":[{"name":"kind","in":"path","required":true,"schema":{"type":"string","description":"Canonical entry kind: property, permit, zoning, or safety","title":"Kind"},"description":"Canonical entry kind: property, permit, zoning, or safety"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"_services","in":"query","required":false,"schema":{"title":" Services"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Entries Api Fredericton Entries  Kind  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/fredericton/property/search":{"get":{"summary":"Search Property","description":"Search for properties by address, or browse all if no address specified.\nSupports sorting by assessed_value, address, year_built, community, or lot_size_sqft.\nSupports value range filtering with min_value and max_value.\n Supports property_type and year range filters.","operationId":"search_property_api_fredericton_property_search_get","parameters":[{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Street address to search (omit to browse all)","title":"Address"},"description":"Street address to search (omit to browse all)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max results to return (up to 1000 for map browse)","default":10,"title":"Limit"},"description":"Max results to return (up to 1000 for map browse)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset for pagination","default":0,"title":"Offset"},"description":"Results offset for pagination"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft","title":"Sort By"},"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"asc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"},{"name":"property_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property type filter (e.g. RE, Residential)","title":"Property Type"},"description":"Property type filter (e.g. RE, Residential)"},{"name":"min_year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter: minimum year built","title":"Min Year"},"description":"Filter: minimum year built"},{"name":"max_year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter: maximum year built","title":"Max Year"},"description":"Filter: maximum year built"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertySearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/fredericton/property/list":{"get":{"summary":"List Property","description":"List all properties with pagination, sorting, and value range filtering.\n\nUse this endpoint to browse available property records and discover valid roll numbers.\nReturns paginated results with total count for client-side pagination.\nSort by assessed_value with order=desc to find the most expensive properties.","operationId":"list_property_api_fredericton_property_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft","title":"Sort By"},"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"asc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Property Api Fredericton Property List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/fredericton/property/geojson":{"get":{"summary":"Property Geojson","operationId":"property_geojson_api_fredericton_property_geojson_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500000,"minimum":1,"description":"Max features to return (cap prevents browser overload for large cities)","default":50000,"title":"Limit"},"description":"Max features to return (cap prevents browser overload for large cities)"},{"name":"sw_lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport south-west latitude","title":"Sw Lat"},"description":"Viewport south-west latitude"},{"name":"sw_lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport south-west longitude","title":"Sw Lon"},"description":"Viewport south-west longitude"},{"name":"ne_lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport north-east latitude","title":"Ne Lat"},"description":"Viewport north-east latitude"},{"name":"ne_lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport north-east longitude","title":"Ne Lon"},"description":"Viewport north-east longitude"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Offset for pagination through viewport results (use with limit)","default":0,"title":"Offset"},"description":"Offset for pagination through viewport results (use with limit)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/fredericton/property/top":{"get":{"summary":"Top Property","description":"Get top-N properties sorted by any numeric column.\n\nConvenience endpoint for AI agents and dashboards. Returns the top\nN properties sorted by the given column. Defaults to most expensive\n(assessed_value descending). Combine with min_value/max_value to\nfind e.g. the most expensive residential properties.","operationId":"top_property_api_fredericton_property_top_get","parameters":[{"name":"n","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Number of top properties to return","default":10,"title":"N"},"description":"Number of top properties to return"},{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","description":"Sort column: assessed_value, year_built, lot_size_sqft","default":"assessed_value","title":"Sort By"},"description":"Sort column: assessed_value, year_built, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"desc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Top Property Api Fredericton Property Top Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/fredericton/property/stats":{"get":{"summary":"Property Stats","description":"Get property assessment statistics.","operationId":"property_stats_api_fredericton_property_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/fredericton/property/autocomplete":{"get":{"summary":"Property Autocomplete","description":"Get address and roll number suggestions for typeahead search.","operationId":"property_autocomplete_api_fredericton_property_autocomplete_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"description":"Search query for address/roll number suggestions","title":"Q"},"description":"Search query for address/roll number suggestions"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":25,"minimum":1,"description":"Max suggestions to return","default":10,"title":"Limit"},"description":"Max suggestions to return"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/fredericton/property/geocode":{"post":{"summary":"Property Geocode","description":"Geocode property addresses to lat/lon coordinates.\n\nAccepts a JSON body with 'addresses' (list of address strings, max 50).\nReturns cached results instantly; uncached addresses are geocoded via Nominatim.\n\nExample: {\"addresses\": [\"123 Main St\", \"456 Oak Ave\"]}","operationId":"property_geocode_api_fredericton_property_geocode_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/fredericton/property/by-dls":{"get":{"summary":"Get Property By Dls","description":"Get property assessment by DLS coordinates.","operationId":"get_property_by_dls_api_fredericton_property_by_dls_get","parameters":[{"name":"quarter","in":"query","required":true,"schema":{"type":"string","description":"Quarter section (e.g., SW)","title":"Quarter"},"description":"Quarter section (e.g., SW)"},{"name":"section","in":"query","required":true,"schema":{"type":"integer","description":"Section number","title":"Section"},"description":"Section number"},{"name":"township","in":"query","required":true,"schema":{"type":"integer","description":"Township number","title":"Township"},"description":"Township number"},{"name":"range","in":"query","required":true,"schema":{"type":"integer","description":"Range number","title":"Range"},"description":"Range number"},{"name":"meridian","in":"query","required":true,"schema":{"type":"integer","description":"Meridian number","title":"Meridian"},"description":"Meridian number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyAssessment"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/fredericton/property/by-gps":{"get":{"summary":"Get Property By Gps","description":"Find coordinate-bearing assessment records nearest a GPS point.\n\nResults are point-nearness matches unless the municipal source supplies\nparcel polygons; clients should not interpret proximity as legal parcel\ncontainment.","operationId":"get_property_by_gps_api_fredericton_property_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":84.0,"minimum":41.0,"description":"Canadian latitude","title":"Lat"},"description":"Canadian latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":-52.0,"minimum":-142.0,"description":"Canadian longitude","title":"Lon"},"description":"Canadian longitude"},{"name":"radius_m","in":"query","required":false,"schema":{"type":"integer","maximum":5000,"minimum":1,"description":"Maximum point distance","default":100,"title":"Radius M"},"description":"Maximum point distance"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":10,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Property By Gps Api Fredericton Property By Gps Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/fredericton/property/by-roll/{roll_number}":{"get":{"summary":"Get Property By Roll","description":"Get property assessment by roll number.","operationId":"get_property_by_roll_api_fredericton_property_by_roll__roll_number__get","parameters":[{"name":"roll_number","in":"path","required":true,"schema":{"type":"string","description":"Property roll number","title":"Roll Number"},"description":"Property roll number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyAssessment"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/fredericton/property/report":{"get":{"summary":"Property Report Lookup","description":"Consolidated report by roll number, address, or GPS.","operationId":"property_report_lookup_api_fredericton_property_report_get","parameters":[{"name":"roll_number","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property roll number","title":"Roll Number"},"description":"Property roll number"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Street address","title":"Address"},"description":"Street address"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyReport"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/fredericton/property/report/{roll_number}":{"get":{"summary":"Property Report","description":"Get consolidated property report: assessment + building permits + zoning + DLS.","operationId":"property_report_api_fredericton_property_report__roll_number__get","parameters":[{"name":"roll_number","in":"path","required":true,"schema":{"type":"string","description":"Property roll number","title":"Roll Number"},"description":"Property roll number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyReport"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/fredericton/property/batch":{"post":{"summary":"Get Properties Batch","description":"Get multiple properties by roll numbers in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of roll numbers.\nExample: {\"ids\": [\"123456789\", \"987654321\"]}\nMaximum 100 roll numbers per request.","operationId":"get_properties_batch_api_fredericton_property_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Properties Batch Api Fredericton Property Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/fredericton/property/export":{"get":{"summary":"Export Properties","description":"Export property data as CSV or GeoJSON.\n\nSupports filtering by address, property type, and assessed value range.\nMaximum 10,000 records per export.","operationId":"export_properties_api_fredericton_property_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Address filter","title":"Address"},"description":"Address filter"},{"name":"property_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property type filter","title":"Property Type"},"description":"Property type filter"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum assessed value","title":"Min Value"},"description":"Minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum assessed value","title":"Max Value"},"description":"Maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/fredericton/census/profile":{"get":{"summary":"Get Census Profile","description":"Get census profile for a specific Dissemination Area.\n\nProvide either da_id directly, OR lat+lon to find the nearest DA automatically.","operationId":"get_census_profile_api_fredericton_census_profile_get","parameters":[{"name":"da_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Dissemination Area ID (e.g., 48820001)","title":"Da Id"},"description":"Dissemination Area ID (e.g., 48820001)"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude for nearest-DA lookup","title":"Lat"},"description":"Latitude for nearest-DA lookup"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude for nearest-DA lookup","title":"Lon"},"description":"Longitude for nearest-DA lookup"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusProfile"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/fredericton/census/batch":{"post":{"summary":"Get Census Batch","description":"Get multiple census profiles by DA IDs in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of DA IDs.\nExample: {\"ids\": [\"48820001\", \"48820002\"]}\nMaximum 100 DA IDs per request.","operationId":"get_census_batch_api_fredericton_census_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Census Batch Api Fredericton Census Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/fredericton/census/export":{"get":{"summary":"Export Census","description":"Export census data as CSV.\n\nSupports filtering by population range and geography type.\nMaximum 10,000 records per export.","operationId":"export_census_api_fredericton_census_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv only","default":"csv","title":"Format"},"description":"Export format: csv only"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"min_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Minimum population filter","title":"Min Population"},"description":"Minimum population filter"},{"name":"max_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Maximum population filter","title":"Max Population"},"description":"Maximum population filter"},{"name":"geography_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Geography type filter (DA, CT, CMA)","title":"Geography Type"},"description":"Geography type filter (DA, CT, CMA)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/fredericton/census/list":{"get":{"summary":"List Census Profiles","description":"List all census profiles with pagination.\n\nUse this endpoint to browse available census profiles and discover valid DA IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_census_profiles_api_fredericton_census_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Census Profiles Api Fredericton Census List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/fredericton/census/by-gps":{"get":{"summary":"Get Census By Gps","description":"Get census data for GPS coordinates.","operationId":"get_census_by_gps_api_fredericton_census_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90,"minimum":-90,"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":180,"minimum":-180,"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/fredericton/census/by-dls":{"get":{"summary":"Get Census By Dls","description":"Get census data for DLS coordinates.","operationId":"get_census_by_dls_api_fredericton_census_by_dls_get","parameters":[{"name":"dls","in":"query","required":true,"schema":{"type":"string","description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)","title":"Dls"},"description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/fredericton/census/map-data":{"get":{"summary":"Get Census Map Data","description":"Get lightweight DA points for choropleth map rendering.\n\nReturns centroid coordinates and key metrics (income, age, population,\nhousehold size, employment rate) for all DAs in the city.\nUsed by the census dashboard to render color-coded maps.","operationId":"get_census_map_data_api_fredericton_census_map_data_get","parameters":[{"name":"year","in":"query","required":false,"schema":{"type":"integer","description":"Census year for DA map data","default":2021,"title":"Year"},"description":"Census year for DA map data"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/fredericton/census/stats":{"get":{"summary":"Census Stats","description":"Get census data statistics.","operationId":"census_stats_api_fredericton_census_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/fredericton/census/compare":{"get":{"summary":"Census Compare","description":"Compare key census metrics across multiple years.\n\nReturns side-by-side comparison of population, households,\navg_income, median_age, density, and land_area for each requested year.\nYears without data return null for that year's values.","operationId":"census_compare_api_fredericton_census_compare_get","parameters":[{"name":"years","in":"query","required":false,"schema":{"type":"string","description":"Comma-separated census years (e.g., 2016,2021)","default":"2021","title":"Years"},"description":"Comma-separated census years (e.g., 2016,2021)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/fredericton/census/time-series":{"get":{"summary":"Census Timeseries","description":"Get year-by-year census trends for this city.\n\nReturns population, income, age, and household trends across all\navailable census years. Useful for spotting long-term demographic shifts.","operationId":"census_timeseries_api_fredericton_census_time_series_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/fredericton/geography/list":{"get":{"summary":"Geography List","description":"List geography boundaries for this city.","operationId":"geography_list_api_fredericton_geography_list_get","parameters":[{"name":"type","in":"query","required":false,"schema":{"type":"string","title":"Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/fredericton/geography/by-gps":{"get":{"summary":"Geography By Gps","description":"Find the geography boundary containing a GPS point.","operationId":"geography_by_gps_api_fredericton_geography_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","title":"Lat"}},{"name":"lon","in":"query","required":true,"schema":{"type":"number","title":"Lon"}},{"name":"type","in":"query","required":false,"schema":{"type":"string","default":"DA","title":"Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/fredericton/geography/stats":{"get":{"summary":"Geography Stats","description":"Get geography statistics for this city.","operationId":"geography_stats_api_fredericton_geography_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/fredericton/geography/{geoid}":{"get":{"summary":"Geography Boundary","description":"Get a specific geography boundary by geoid, including GeoJSON polygon.","operationId":"geography_boundary_api_fredericton_geography__geoid__get","parameters":[{"name":"geoid","in":"path","required":true,"schema":{"type":"string","title":"Geoid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/fredericton/census/rental/list":{"get":{"summary":"List Rental Prices","description":"List rental price records for this city, with optional unit type filter.","operationId":"list_rental_prices_api_fredericton_census_rental_list_get","parameters":[{"name":"unit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":50,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalPriceListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/fredericton/census/rental/trend":{"get":{"summary":"Get Rental Trend","description":"Get rental price time series for a specific unit type.","operationId":"get_rental_trend_api_fredericton_census_rental_trend_get","parameters":[{"name":"unit_type","in":"query","required":true,"schema":{"type":"string","description":"Rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Rental unit type (e.g. 'Apartment - 1 bedroom')"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalTrendResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/fredericton/census/rental/types":{"get":{"summary":"Get Rental Types","description":"Get available rental unit types for this city.","operationId":"get_rental_types_api_fredericton_census_rental_types_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/fredericton/health":{"get":{"summary":"City Health","description":"City-specific health check.","operationId":"city_health_api_fredericton_health_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/brandon/entries/{kind}":{"get":{"summary":"List Entries","operationId":"list_entries_api_brandon_entries__kind__get","parameters":[{"name":"kind","in":"path","required":true,"schema":{"type":"string","description":"Canonical entry kind: property, permit, zoning, or safety","title":"Kind"},"description":"Canonical entry kind: property, permit, zoning, or safety"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"_services","in":"query","required":false,"schema":{"title":" Services"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Entries Api Brandon Entries  Kind  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/brandon/property/search":{"get":{"summary":"Search Property","description":"Search for properties by address, or browse all if no address specified.\nSupports sorting by assessed_value, address, year_built, community, or lot_size_sqft.\nSupports value range filtering with min_value and max_value.\n Supports property_type and year range filters.","operationId":"search_property_api_brandon_property_search_get","parameters":[{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Street address to search (omit to browse all)","title":"Address"},"description":"Street address to search (omit to browse all)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max results to return (up to 1000 for map browse)","default":10,"title":"Limit"},"description":"Max results to return (up to 1000 for map browse)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset for pagination","default":0,"title":"Offset"},"description":"Results offset for pagination"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft","title":"Sort By"},"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"asc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"},{"name":"property_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property type filter (e.g. RE, Residential)","title":"Property Type"},"description":"Property type filter (e.g. RE, Residential)"},{"name":"min_year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter: minimum year built","title":"Min Year"},"description":"Filter: minimum year built"},{"name":"max_year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter: maximum year built","title":"Max Year"},"description":"Filter: maximum year built"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertySearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/brandon/property/list":{"get":{"summary":"List Property","description":"List all properties with pagination, sorting, and value range filtering.\n\nUse this endpoint to browse available property records and discover valid roll numbers.\nReturns paginated results with total count for client-side pagination.\nSort by assessed_value with order=desc to find the most expensive properties.","operationId":"list_property_api_brandon_property_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft","title":"Sort By"},"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"asc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Property Api Brandon Property List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/brandon/property/geojson":{"get":{"summary":"Property Geojson","operationId":"property_geojson_api_brandon_property_geojson_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500000,"minimum":1,"description":"Max features to return (cap prevents browser overload for large cities)","default":50000,"title":"Limit"},"description":"Max features to return (cap prevents browser overload for large cities)"},{"name":"sw_lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport south-west latitude","title":"Sw Lat"},"description":"Viewport south-west latitude"},{"name":"sw_lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport south-west longitude","title":"Sw Lon"},"description":"Viewport south-west longitude"},{"name":"ne_lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport north-east latitude","title":"Ne Lat"},"description":"Viewport north-east latitude"},{"name":"ne_lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport north-east longitude","title":"Ne Lon"},"description":"Viewport north-east longitude"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Offset for pagination through viewport results (use with limit)","default":0,"title":"Offset"},"description":"Offset for pagination through viewport results (use with limit)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/brandon/property/top":{"get":{"summary":"Top Property","description":"Get top-N properties sorted by any numeric column.\n\nConvenience endpoint for AI agents and dashboards. Returns the top\nN properties sorted by the given column. Defaults to most expensive\n(assessed_value descending). Combine with min_value/max_value to\nfind e.g. the most expensive residential properties.","operationId":"top_property_api_brandon_property_top_get","parameters":[{"name":"n","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Number of top properties to return","default":10,"title":"N"},"description":"Number of top properties to return"},{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","description":"Sort column: assessed_value, year_built, lot_size_sqft","default":"assessed_value","title":"Sort By"},"description":"Sort column: assessed_value, year_built, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"desc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Top Property Api Brandon Property Top Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/brandon/property/stats":{"get":{"summary":"Property Stats","description":"Get property assessment statistics.","operationId":"property_stats_api_brandon_property_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/brandon/property/autocomplete":{"get":{"summary":"Property Autocomplete","description":"Get address and roll number suggestions for typeahead search.","operationId":"property_autocomplete_api_brandon_property_autocomplete_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"description":"Search query for address/roll number suggestions","title":"Q"},"description":"Search query for address/roll number suggestions"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":25,"minimum":1,"description":"Max suggestions to return","default":10,"title":"Limit"},"description":"Max suggestions to return"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/brandon/property/geocode":{"post":{"summary":"Property Geocode","description":"Geocode property addresses to lat/lon coordinates.\n\nAccepts a JSON body with 'addresses' (list of address strings, max 50).\nReturns cached results instantly; uncached addresses are geocoded via Nominatim.\n\nExample: {\"addresses\": [\"123 Main St\", \"456 Oak Ave\"]}","operationId":"property_geocode_api_brandon_property_geocode_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/brandon/property/by-dls":{"get":{"summary":"Get Property By Dls","description":"Get property assessment by DLS coordinates.","operationId":"get_property_by_dls_api_brandon_property_by_dls_get","parameters":[{"name":"quarter","in":"query","required":true,"schema":{"type":"string","description":"Quarter section (e.g., SW)","title":"Quarter"},"description":"Quarter section (e.g., SW)"},{"name":"section","in":"query","required":true,"schema":{"type":"integer","description":"Section number","title":"Section"},"description":"Section number"},{"name":"township","in":"query","required":true,"schema":{"type":"integer","description":"Township number","title":"Township"},"description":"Township number"},{"name":"range","in":"query","required":true,"schema":{"type":"integer","description":"Range number","title":"Range"},"description":"Range number"},{"name":"meridian","in":"query","required":true,"schema":{"type":"integer","description":"Meridian number","title":"Meridian"},"description":"Meridian number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyAssessment"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/brandon/property/by-gps":{"get":{"summary":"Get Property By Gps","description":"Find coordinate-bearing assessment records nearest a GPS point.\n\nResults are point-nearness matches unless the municipal source supplies\nparcel polygons; clients should not interpret proximity as legal parcel\ncontainment.","operationId":"get_property_by_gps_api_brandon_property_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":84.0,"minimum":41.0,"description":"Canadian latitude","title":"Lat"},"description":"Canadian latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":-52.0,"minimum":-142.0,"description":"Canadian longitude","title":"Lon"},"description":"Canadian longitude"},{"name":"radius_m","in":"query","required":false,"schema":{"type":"integer","maximum":5000,"minimum":1,"description":"Maximum point distance","default":100,"title":"Radius M"},"description":"Maximum point distance"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":10,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Property By Gps Api Brandon Property By Gps Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/brandon/property/by-roll/{roll_number}":{"get":{"summary":"Get Property By Roll","description":"Get property assessment by roll number.","operationId":"get_property_by_roll_api_brandon_property_by_roll__roll_number__get","parameters":[{"name":"roll_number","in":"path","required":true,"schema":{"type":"string","description":"Property roll number","title":"Roll Number"},"description":"Property roll number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyAssessment"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/brandon/property/report":{"get":{"summary":"Property Report Lookup","description":"Consolidated report by roll number, address, or GPS.","operationId":"property_report_lookup_api_brandon_property_report_get","parameters":[{"name":"roll_number","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property roll number","title":"Roll Number"},"description":"Property roll number"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Street address","title":"Address"},"description":"Street address"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyReport"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/brandon/property/report/{roll_number}":{"get":{"summary":"Property Report","description":"Get consolidated property report: assessment + building permits + zoning + DLS.","operationId":"property_report_api_brandon_property_report__roll_number__get","parameters":[{"name":"roll_number","in":"path","required":true,"schema":{"type":"string","description":"Property roll number","title":"Roll Number"},"description":"Property roll number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyReport"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/brandon/property/batch":{"post":{"summary":"Get Properties Batch","description":"Get multiple properties by roll numbers in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of roll numbers.\nExample: {\"ids\": [\"123456789\", \"987654321\"]}\nMaximum 100 roll numbers per request.","operationId":"get_properties_batch_api_brandon_property_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Properties Batch Api Brandon Property Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/brandon/property/export":{"get":{"summary":"Export Properties","description":"Export property data as CSV or GeoJSON.\n\nSupports filtering by address, property type, and assessed value range.\nMaximum 10,000 records per export.","operationId":"export_properties_api_brandon_property_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Address filter","title":"Address"},"description":"Address filter"},{"name":"property_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property type filter","title":"Property Type"},"description":"Property type filter"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum assessed value","title":"Min Value"},"description":"Minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum assessed value","title":"Max Value"},"description":"Maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/brandon/census/profile":{"get":{"summary":"Get Census Profile","description":"Get census profile for a specific Dissemination Area.\n\nProvide either da_id directly, OR lat+lon to find the nearest DA automatically.","operationId":"get_census_profile_api_brandon_census_profile_get","parameters":[{"name":"da_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Dissemination Area ID (e.g., 48820001)","title":"Da Id"},"description":"Dissemination Area ID (e.g., 48820001)"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude for nearest-DA lookup","title":"Lat"},"description":"Latitude for nearest-DA lookup"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude for nearest-DA lookup","title":"Lon"},"description":"Longitude for nearest-DA lookup"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusProfile"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/brandon/census/batch":{"post":{"summary":"Get Census Batch","description":"Get multiple census profiles by DA IDs in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of DA IDs.\nExample: {\"ids\": [\"48820001\", \"48820002\"]}\nMaximum 100 DA IDs per request.","operationId":"get_census_batch_api_brandon_census_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Census Batch Api Brandon Census Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/brandon/census/export":{"get":{"summary":"Export Census","description":"Export census data as CSV.\n\nSupports filtering by population range and geography type.\nMaximum 10,000 records per export.","operationId":"export_census_api_brandon_census_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv only","default":"csv","title":"Format"},"description":"Export format: csv only"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"min_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Minimum population filter","title":"Min Population"},"description":"Minimum population filter"},{"name":"max_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Maximum population filter","title":"Max Population"},"description":"Maximum population filter"},{"name":"geography_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Geography type filter (DA, CT, CMA)","title":"Geography Type"},"description":"Geography type filter (DA, CT, CMA)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/brandon/census/list":{"get":{"summary":"List Census Profiles","description":"List all census profiles with pagination.\n\nUse this endpoint to browse available census profiles and discover valid DA IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_census_profiles_api_brandon_census_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Census Profiles Api Brandon Census List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/brandon/census/by-gps":{"get":{"summary":"Get Census By Gps","description":"Get census data for GPS coordinates.","operationId":"get_census_by_gps_api_brandon_census_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90,"minimum":-90,"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":180,"minimum":-180,"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/brandon/census/by-dls":{"get":{"summary":"Get Census By Dls","description":"Get census data for DLS coordinates.","operationId":"get_census_by_dls_api_brandon_census_by_dls_get","parameters":[{"name":"dls","in":"query","required":true,"schema":{"type":"string","description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)","title":"Dls"},"description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/brandon/census/map-data":{"get":{"summary":"Get Census Map Data","description":"Get lightweight DA points for choropleth map rendering.\n\nReturns centroid coordinates and key metrics (income, age, population,\nhousehold size, employment rate) for all DAs in the city.\nUsed by the census dashboard to render color-coded maps.","operationId":"get_census_map_data_api_brandon_census_map_data_get","parameters":[{"name":"year","in":"query","required":false,"schema":{"type":"integer","description":"Census year for DA map data","default":2021,"title":"Year"},"description":"Census year for DA map data"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/brandon/census/stats":{"get":{"summary":"Census Stats","description":"Get census data statistics.","operationId":"census_stats_api_brandon_census_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/brandon/census/compare":{"get":{"summary":"Census Compare","description":"Compare key census metrics across multiple years.\n\nReturns side-by-side comparison of population, households,\navg_income, median_age, density, and land_area for each requested year.\nYears without data return null for that year's values.","operationId":"census_compare_api_brandon_census_compare_get","parameters":[{"name":"years","in":"query","required":false,"schema":{"type":"string","description":"Comma-separated census years (e.g., 2016,2021)","default":"2021","title":"Years"},"description":"Comma-separated census years (e.g., 2016,2021)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/brandon/census/time-series":{"get":{"summary":"Census Timeseries","description":"Get year-by-year census trends for this city.\n\nReturns population, income, age, and household trends across all\navailable census years. Useful for spotting long-term demographic shifts.","operationId":"census_timeseries_api_brandon_census_time_series_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/brandon/geography/list":{"get":{"summary":"Geography List","description":"List geography boundaries for this city.","operationId":"geography_list_api_brandon_geography_list_get","parameters":[{"name":"type","in":"query","required":false,"schema":{"type":"string","title":"Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/brandon/geography/by-gps":{"get":{"summary":"Geography By Gps","description":"Find the geography boundary containing a GPS point.","operationId":"geography_by_gps_api_brandon_geography_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","title":"Lat"}},{"name":"lon","in":"query","required":true,"schema":{"type":"number","title":"Lon"}},{"name":"type","in":"query","required":false,"schema":{"type":"string","default":"DA","title":"Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/brandon/geography/stats":{"get":{"summary":"Geography Stats","description":"Get geography statistics for this city.","operationId":"geography_stats_api_brandon_geography_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/brandon/geography/{geoid}":{"get":{"summary":"Geography Boundary","description":"Get a specific geography boundary by geoid, including GeoJSON polygon.","operationId":"geography_boundary_api_brandon_geography__geoid__get","parameters":[{"name":"geoid","in":"path","required":true,"schema":{"type":"string","title":"Geoid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/brandon/census/rental/list":{"get":{"summary":"List Rental Prices","description":"List rental price records for this city, with optional unit type filter.","operationId":"list_rental_prices_api_brandon_census_rental_list_get","parameters":[{"name":"unit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":50,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalPriceListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/brandon/census/rental/trend":{"get":{"summary":"Get Rental Trend","description":"Get rental price time series for a specific unit type.","operationId":"get_rental_trend_api_brandon_census_rental_trend_get","parameters":[{"name":"unit_type","in":"query","required":true,"schema":{"type":"string","description":"Rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Rental unit type (e.g. 'Apartment - 1 bedroom')"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalTrendResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/brandon/census/rental/types":{"get":{"summary":"Get Rental Types","description":"Get available rental unit types for this city.","operationId":"get_rental_types_api_brandon_census_rental_types_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/brandon/zoning/by-gps":{"get":{"summary":"Get Zoning By Gps","description":"Get zoning district for GPS coordinates.","operationId":"get_zoning_by_gps_api_brandon_zoning_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZoningByGPSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/brandon/zoning/by-id/{district_id}":{"get":{"summary":"Get Zoning By Id","description":"Get a single zoning district by its numeric ID.","operationId":"get_zoning_by_id_api_brandon_zoning_by_id__district_id__get","parameters":[{"name":"district_id","in":"path","required":true,"schema":{"type":"integer","description":"Zoning district numeric ID","title":"District Id"},"description":"Zoning district numeric ID"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning By Id Api Brandon Zoning By Id  District Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/brandon/zoning/by-code/{code}":{"get":{"summary":"Get Zoning By Code","description":"Get all districts with a specific zone code.","operationId":"get_zoning_by_code_api_brandon_zoning_by_code__code__get","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","description":"Zone code (e.g., C-C1, R-G)","title":"Code"},"description":"Zone code (e.g., C-C1, R-G)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoningDistrict"},"title":"Response Get Zoning By Code Api Brandon Zoning By Code  Code  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/brandon/zoning/batch":{"post":{"summary":"Get Zoning Batch","description":"Get multiple zoning districts by zone codes in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of zone codes.\nExample: {\"ids\": [\"CR20-C20/R20\", \"C-C1\", \"R-G\"]}\nMaximum 100 zone codes per request.","operationId":"get_zoning_batch_api_brandon_zoning_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning Batch Api Brandon Zoning Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/brandon/zoning/list":{"get":{"summary":"List Zoning Districts","description":"List all zoning districts with pagination.\n\nUse this endpoint to browse available zoning districts and discover valid IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_zoning_districts_api_brandon_zoning_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Zoning Districts Api Brandon Zoning List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/brandon/zoning/codes":{"get":{"summary":"List Zone Codes","description":"List all zone codes with descriptions.","operationId":"list_zone_codes_api_brandon_zoning_codes_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"type":"string","description":"Filter by major category (e.g., Commercial, Residential)","title":"Category"},"description":"Filter by major category (e.g., Commercial, Residential)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoneCodeInfo"},"title":"Response List Zone Codes Api Brandon Zoning Codes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/brandon/zoning/stats":{"get":{"summary":"Zoning Stats","description":"Get zoning statistics.","operationId":"zoning_stats_api_brandon_zoning_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/brandon/zoning/export":{"get":{"summary":"Export Zoning","description":"Export zoning district data as CSV or GeoJSON.\n\nSupports filtering by zone code, category, and area range.\nMaximum 10,000 records per export.","operationId":"export_zoning_api_brandon_zoning_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"zone_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Zone code filter (e.g., CR2)","title":"Zone Code"},"description":"Zone code filter (e.g., CR2)"},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Major category filter","title":"Category"},"description":"Major category filter"},{"name":"min_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum area in sq km","title":"Min Area"},"description":"Minimum area in sq km"},{"name":"max_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum area in sq km","title":"Max Area"},"description":"Maximum area in sq km"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/brandon/health":{"get":{"summary":"City Health","description":"City-specific health check.","operationId":"city_health_api_brandon_health_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/steinbach/entries/{kind}":{"get":{"summary":"List Entries","operationId":"list_entries_api_steinbach_entries__kind__get","parameters":[{"name":"kind","in":"path","required":true,"schema":{"type":"string","description":"Canonical entry kind: property, permit, zoning, or safety","title":"Kind"},"description":"Canonical entry kind: property, permit, zoning, or safety"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"_services","in":"query","required":false,"schema":{"title":" Services"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Entries Api Steinbach Entries  Kind  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/steinbach/property/search":{"get":{"summary":"Search Property","description":"Search for properties by address, or browse all if no address specified.\nSupports sorting by assessed_value, address, year_built, community, or lot_size_sqft.\nSupports value range filtering with min_value and max_value.\n Supports property_type and year range filters.","operationId":"search_property_api_steinbach_property_search_get","parameters":[{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Street address to search (omit to browse all)","title":"Address"},"description":"Street address to search (omit to browse all)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max results to return (up to 1000 for map browse)","default":10,"title":"Limit"},"description":"Max results to return (up to 1000 for map browse)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset for pagination","default":0,"title":"Offset"},"description":"Results offset for pagination"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft","title":"Sort By"},"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"asc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"},{"name":"property_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property type filter (e.g. RE, Residential)","title":"Property Type"},"description":"Property type filter (e.g. RE, Residential)"},{"name":"min_year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter: minimum year built","title":"Min Year"},"description":"Filter: minimum year built"},{"name":"max_year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter: maximum year built","title":"Max Year"},"description":"Filter: maximum year built"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertySearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/steinbach/property/list":{"get":{"summary":"List Property","description":"List all properties with pagination, sorting, and value range filtering.\n\nUse this endpoint to browse available property records and discover valid roll numbers.\nReturns paginated results with total count for client-side pagination.\nSort by assessed_value with order=desc to find the most expensive properties.","operationId":"list_property_api_steinbach_property_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft","title":"Sort By"},"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"asc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Property Api Steinbach Property List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/steinbach/property/geojson":{"get":{"summary":"Property Geojson","operationId":"property_geojson_api_steinbach_property_geojson_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500000,"minimum":1,"description":"Max features to return (cap prevents browser overload for large cities)","default":50000,"title":"Limit"},"description":"Max features to return (cap prevents browser overload for large cities)"},{"name":"sw_lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport south-west latitude","title":"Sw Lat"},"description":"Viewport south-west latitude"},{"name":"sw_lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport south-west longitude","title":"Sw Lon"},"description":"Viewport south-west longitude"},{"name":"ne_lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport north-east latitude","title":"Ne Lat"},"description":"Viewport north-east latitude"},{"name":"ne_lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport north-east longitude","title":"Ne Lon"},"description":"Viewport north-east longitude"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Offset for pagination through viewport results (use with limit)","default":0,"title":"Offset"},"description":"Offset for pagination through viewport results (use with limit)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/steinbach/property/top":{"get":{"summary":"Top Property","description":"Get top-N properties sorted by any numeric column.\n\nConvenience endpoint for AI agents and dashboards. Returns the top\nN properties sorted by the given column. Defaults to most expensive\n(assessed_value descending). Combine with min_value/max_value to\nfind e.g. the most expensive residential properties.","operationId":"top_property_api_steinbach_property_top_get","parameters":[{"name":"n","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Number of top properties to return","default":10,"title":"N"},"description":"Number of top properties to return"},{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","description":"Sort column: assessed_value, year_built, lot_size_sqft","default":"assessed_value","title":"Sort By"},"description":"Sort column: assessed_value, year_built, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"desc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Top Property Api Steinbach Property Top Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/steinbach/property/stats":{"get":{"summary":"Property Stats","description":"Get property assessment statistics.","operationId":"property_stats_api_steinbach_property_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/steinbach/property/autocomplete":{"get":{"summary":"Property Autocomplete","description":"Get address and roll number suggestions for typeahead search.","operationId":"property_autocomplete_api_steinbach_property_autocomplete_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"description":"Search query for address/roll number suggestions","title":"Q"},"description":"Search query for address/roll number suggestions"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":25,"minimum":1,"description":"Max suggestions to return","default":10,"title":"Limit"},"description":"Max suggestions to return"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/steinbach/property/geocode":{"post":{"summary":"Property Geocode","description":"Geocode property addresses to lat/lon coordinates.\n\nAccepts a JSON body with 'addresses' (list of address strings, max 50).\nReturns cached results instantly; uncached addresses are geocoded via Nominatim.\n\nExample: {\"addresses\": [\"123 Main St\", \"456 Oak Ave\"]}","operationId":"property_geocode_api_steinbach_property_geocode_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/steinbach/property/by-dls":{"get":{"summary":"Get Property By Dls","description":"Get property assessment by DLS coordinates.","operationId":"get_property_by_dls_api_steinbach_property_by_dls_get","parameters":[{"name":"quarter","in":"query","required":true,"schema":{"type":"string","description":"Quarter section (e.g., SW)","title":"Quarter"},"description":"Quarter section (e.g., SW)"},{"name":"section","in":"query","required":true,"schema":{"type":"integer","description":"Section number","title":"Section"},"description":"Section number"},{"name":"township","in":"query","required":true,"schema":{"type":"integer","description":"Township number","title":"Township"},"description":"Township number"},{"name":"range","in":"query","required":true,"schema":{"type":"integer","description":"Range number","title":"Range"},"description":"Range number"},{"name":"meridian","in":"query","required":true,"schema":{"type":"integer","description":"Meridian number","title":"Meridian"},"description":"Meridian number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyAssessment"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/steinbach/property/by-gps":{"get":{"summary":"Get Property By Gps","description":"Find coordinate-bearing assessment records nearest a GPS point.\n\nResults are point-nearness matches unless the municipal source supplies\nparcel polygons; clients should not interpret proximity as legal parcel\ncontainment.","operationId":"get_property_by_gps_api_steinbach_property_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":84.0,"minimum":41.0,"description":"Canadian latitude","title":"Lat"},"description":"Canadian latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":-52.0,"minimum":-142.0,"description":"Canadian longitude","title":"Lon"},"description":"Canadian longitude"},{"name":"radius_m","in":"query","required":false,"schema":{"type":"integer","maximum":5000,"minimum":1,"description":"Maximum point distance","default":100,"title":"Radius M"},"description":"Maximum point distance"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":10,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Property By Gps Api Steinbach Property By Gps Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/steinbach/property/by-roll/{roll_number}":{"get":{"summary":"Get Property By Roll","description":"Get property assessment by roll number.","operationId":"get_property_by_roll_api_steinbach_property_by_roll__roll_number__get","parameters":[{"name":"roll_number","in":"path","required":true,"schema":{"type":"string","description":"Property roll number","title":"Roll Number"},"description":"Property roll number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyAssessment"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/steinbach/property/report":{"get":{"summary":"Property Report Lookup","description":"Consolidated report by roll number, address, or GPS.","operationId":"property_report_lookup_api_steinbach_property_report_get","parameters":[{"name":"roll_number","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property roll number","title":"Roll Number"},"description":"Property roll number"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Street address","title":"Address"},"description":"Street address"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyReport"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/steinbach/property/report/{roll_number}":{"get":{"summary":"Property Report","description":"Get consolidated property report: assessment + building permits + zoning + DLS.","operationId":"property_report_api_steinbach_property_report__roll_number__get","parameters":[{"name":"roll_number","in":"path","required":true,"schema":{"type":"string","description":"Property roll number","title":"Roll Number"},"description":"Property roll number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyReport"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/steinbach/property/batch":{"post":{"summary":"Get Properties Batch","description":"Get multiple properties by roll numbers in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of roll numbers.\nExample: {\"ids\": [\"123456789\", \"987654321\"]}\nMaximum 100 roll numbers per request.","operationId":"get_properties_batch_api_steinbach_property_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Properties Batch Api Steinbach Property Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/steinbach/property/export":{"get":{"summary":"Export Properties","description":"Export property data as CSV or GeoJSON.\n\nSupports filtering by address, property type, and assessed value range.\nMaximum 10,000 records per export.","operationId":"export_properties_api_steinbach_property_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Address filter","title":"Address"},"description":"Address filter"},{"name":"property_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property type filter","title":"Property Type"},"description":"Property type filter"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum assessed value","title":"Min Value"},"description":"Minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum assessed value","title":"Max Value"},"description":"Maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/steinbach/census/profile":{"get":{"summary":"Get Census Profile","description":"Get census profile for a specific Dissemination Area.\n\nProvide either da_id directly, OR lat+lon to find the nearest DA automatically.","operationId":"get_census_profile_api_steinbach_census_profile_get","parameters":[{"name":"da_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Dissemination Area ID (e.g., 48820001)","title":"Da Id"},"description":"Dissemination Area ID (e.g., 48820001)"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude for nearest-DA lookup","title":"Lat"},"description":"Latitude for nearest-DA lookup"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude for nearest-DA lookup","title":"Lon"},"description":"Longitude for nearest-DA lookup"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusProfile"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/steinbach/census/batch":{"post":{"summary":"Get Census Batch","description":"Get multiple census profiles by DA IDs in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of DA IDs.\nExample: {\"ids\": [\"48820001\", \"48820002\"]}\nMaximum 100 DA IDs per request.","operationId":"get_census_batch_api_steinbach_census_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Census Batch Api Steinbach Census Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/steinbach/census/export":{"get":{"summary":"Export Census","description":"Export census data as CSV.\n\nSupports filtering by population range and geography type.\nMaximum 10,000 records per export.","operationId":"export_census_api_steinbach_census_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv only","default":"csv","title":"Format"},"description":"Export format: csv only"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"min_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Minimum population filter","title":"Min Population"},"description":"Minimum population filter"},{"name":"max_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Maximum population filter","title":"Max Population"},"description":"Maximum population filter"},{"name":"geography_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Geography type filter (DA, CT, CMA)","title":"Geography Type"},"description":"Geography type filter (DA, CT, CMA)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/steinbach/census/list":{"get":{"summary":"List Census Profiles","description":"List all census profiles with pagination.\n\nUse this endpoint to browse available census profiles and discover valid DA IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_census_profiles_api_steinbach_census_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Census Profiles Api Steinbach Census List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/steinbach/census/by-gps":{"get":{"summary":"Get Census By Gps","description":"Get census data for GPS coordinates.","operationId":"get_census_by_gps_api_steinbach_census_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90,"minimum":-90,"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":180,"minimum":-180,"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/steinbach/census/by-dls":{"get":{"summary":"Get Census By Dls","description":"Get census data for DLS coordinates.","operationId":"get_census_by_dls_api_steinbach_census_by_dls_get","parameters":[{"name":"dls","in":"query","required":true,"schema":{"type":"string","description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)","title":"Dls"},"description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/steinbach/census/map-data":{"get":{"summary":"Get Census Map Data","description":"Get lightweight DA points for choropleth map rendering.\n\nReturns centroid coordinates and key metrics (income, age, population,\nhousehold size, employment rate) for all DAs in the city.\nUsed by the census dashboard to render color-coded maps.","operationId":"get_census_map_data_api_steinbach_census_map_data_get","parameters":[{"name":"year","in":"query","required":false,"schema":{"type":"integer","description":"Census year for DA map data","default":2021,"title":"Year"},"description":"Census year for DA map data"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/steinbach/census/stats":{"get":{"summary":"Census Stats","description":"Get census data statistics.","operationId":"census_stats_api_steinbach_census_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/steinbach/census/compare":{"get":{"summary":"Census Compare","description":"Compare key census metrics across multiple years.\n\nReturns side-by-side comparison of population, households,\navg_income, median_age, density, and land_area for each requested year.\nYears without data return null for that year's values.","operationId":"census_compare_api_steinbach_census_compare_get","parameters":[{"name":"years","in":"query","required":false,"schema":{"type":"string","description":"Comma-separated census years (e.g., 2016,2021)","default":"2021","title":"Years"},"description":"Comma-separated census years (e.g., 2016,2021)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/steinbach/census/time-series":{"get":{"summary":"Census Timeseries","description":"Get year-by-year census trends for this city.\n\nReturns population, income, age, and household trends across all\navailable census years. Useful for spotting long-term demographic shifts.","operationId":"census_timeseries_api_steinbach_census_time_series_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/steinbach/geography/list":{"get":{"summary":"Geography List","description":"List geography boundaries for this city.","operationId":"geography_list_api_steinbach_geography_list_get","parameters":[{"name":"type","in":"query","required":false,"schema":{"type":"string","title":"Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/steinbach/geography/by-gps":{"get":{"summary":"Geography By Gps","description":"Find the geography boundary containing a GPS point.","operationId":"geography_by_gps_api_steinbach_geography_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","title":"Lat"}},{"name":"lon","in":"query","required":true,"schema":{"type":"number","title":"Lon"}},{"name":"type","in":"query","required":false,"schema":{"type":"string","default":"DA","title":"Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/steinbach/geography/stats":{"get":{"summary":"Geography Stats","description":"Get geography statistics for this city.","operationId":"geography_stats_api_steinbach_geography_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/steinbach/geography/{geoid}":{"get":{"summary":"Geography Boundary","description":"Get a specific geography boundary by geoid, including GeoJSON polygon.","operationId":"geography_boundary_api_steinbach_geography__geoid__get","parameters":[{"name":"geoid","in":"path","required":true,"schema":{"type":"string","title":"Geoid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/steinbach/census/rental/list":{"get":{"summary":"List Rental Prices","description":"List rental price records for this city, with optional unit type filter.","operationId":"list_rental_prices_api_steinbach_census_rental_list_get","parameters":[{"name":"unit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":50,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalPriceListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/steinbach/census/rental/trend":{"get":{"summary":"Get Rental Trend","description":"Get rental price time series for a specific unit type.","operationId":"get_rental_trend_api_steinbach_census_rental_trend_get","parameters":[{"name":"unit_type","in":"query","required":true,"schema":{"type":"string","description":"Rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Rental unit type (e.g. 'Apartment - 1 bedroom')"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalTrendResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/steinbach/census/rental/types":{"get":{"summary":"Get Rental Types","description":"Get available rental unit types for this city.","operationId":"get_rental_types_api_steinbach_census_rental_types_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/steinbach/zoning/by-gps":{"get":{"summary":"Get Zoning By Gps","description":"Get zoning district for GPS coordinates.","operationId":"get_zoning_by_gps_api_steinbach_zoning_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZoningByGPSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/steinbach/zoning/by-id/{district_id}":{"get":{"summary":"Get Zoning By Id","description":"Get a single zoning district by its numeric ID.","operationId":"get_zoning_by_id_api_steinbach_zoning_by_id__district_id__get","parameters":[{"name":"district_id","in":"path","required":true,"schema":{"type":"integer","description":"Zoning district numeric ID","title":"District Id"},"description":"Zoning district numeric ID"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning By Id Api Steinbach Zoning By Id  District Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/steinbach/zoning/by-code/{code}":{"get":{"summary":"Get Zoning By Code","description":"Get all districts with a specific zone code.","operationId":"get_zoning_by_code_api_steinbach_zoning_by_code__code__get","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","description":"Zone code (e.g., C-C1, R-G)","title":"Code"},"description":"Zone code (e.g., C-C1, R-G)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoningDistrict"},"title":"Response Get Zoning By Code Api Steinbach Zoning By Code  Code  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/steinbach/zoning/batch":{"post":{"summary":"Get Zoning Batch","description":"Get multiple zoning districts by zone codes in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of zone codes.\nExample: {\"ids\": [\"CR20-C20/R20\", \"C-C1\", \"R-G\"]}\nMaximum 100 zone codes per request.","operationId":"get_zoning_batch_api_steinbach_zoning_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning Batch Api Steinbach Zoning Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/steinbach/zoning/list":{"get":{"summary":"List Zoning Districts","description":"List all zoning districts with pagination.\n\nUse this endpoint to browse available zoning districts and discover valid IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_zoning_districts_api_steinbach_zoning_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Zoning Districts Api Steinbach Zoning List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/steinbach/zoning/codes":{"get":{"summary":"List Zone Codes","description":"List all zone codes with descriptions.","operationId":"list_zone_codes_api_steinbach_zoning_codes_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"type":"string","description":"Filter by major category (e.g., Commercial, Residential)","title":"Category"},"description":"Filter by major category (e.g., Commercial, Residential)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoneCodeInfo"},"title":"Response List Zone Codes Api Steinbach Zoning Codes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/steinbach/zoning/stats":{"get":{"summary":"Zoning Stats","description":"Get zoning statistics.","operationId":"zoning_stats_api_steinbach_zoning_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/steinbach/zoning/export":{"get":{"summary":"Export Zoning","description":"Export zoning district data as CSV or GeoJSON.\n\nSupports filtering by zone code, category, and area range.\nMaximum 10,000 records per export.","operationId":"export_zoning_api_steinbach_zoning_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"zone_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Zone code filter (e.g., CR2)","title":"Zone Code"},"description":"Zone code filter (e.g., CR2)"},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Major category filter","title":"Category"},"description":"Major category filter"},{"name":"min_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum area in sq km","title":"Min Area"},"description":"Minimum area in sq km"},{"name":"max_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum area in sq km","title":"Max Area"},"description":"Maximum area in sq km"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/steinbach/health":{"get":{"summary":"City Health","description":"City-specific health check.","operationId":"city_health_api_steinbach_health_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/levis/entries/{kind}":{"get":{"summary":"List Entries","operationId":"list_entries_api_levis_entries__kind__get","parameters":[{"name":"kind","in":"path","required":true,"schema":{"type":"string","description":"Canonical entry kind: property, permit, zoning, or safety","title":"Kind"},"description":"Canonical entry kind: property, permit, zoning, or safety"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"_services","in":"query","required":false,"schema":{"title":" Services"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Entries Api Levis Entries  Kind  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/levis/property/search":{"get":{"summary":"Search Property","description":"Search for properties by address, or browse all if no address specified.\nSupports sorting by assessed_value, address, year_built, community, or lot_size_sqft.\nSupports value range filtering with min_value and max_value.\n Supports property_type and year range filters.","operationId":"search_property_api_levis_property_search_get","parameters":[{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Street address to search (omit to browse all)","title":"Address"},"description":"Street address to search (omit to browse all)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max results to return (up to 1000 for map browse)","default":10,"title":"Limit"},"description":"Max results to return (up to 1000 for map browse)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset for pagination","default":0,"title":"Offset"},"description":"Results offset for pagination"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft","title":"Sort By"},"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"asc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"},{"name":"property_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property type filter (e.g. RE, Residential)","title":"Property Type"},"description":"Property type filter (e.g. RE, Residential)"},{"name":"min_year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter: minimum year built","title":"Min Year"},"description":"Filter: minimum year built"},{"name":"max_year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter: maximum year built","title":"Max Year"},"description":"Filter: maximum year built"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertySearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/levis/property/list":{"get":{"summary":"List Property","description":"List all properties with pagination, sorting, and value range filtering.\n\nUse this endpoint to browse available property records and discover valid roll numbers.\nReturns paginated results with total count for client-side pagination.\nSort by assessed_value with order=desc to find the most expensive properties.","operationId":"list_property_api_levis_property_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft","title":"Sort By"},"description":"Sort column: assessed_value, address, year_built, community, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"asc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Property Api Levis Property List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/levis/property/geojson":{"get":{"summary":"Property Geojson","operationId":"property_geojson_api_levis_property_geojson_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500000,"minimum":1,"description":"Max features to return (cap prevents browser overload for large cities)","default":50000,"title":"Limit"},"description":"Max features to return (cap prevents browser overload for large cities)"},{"name":"sw_lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport south-west latitude","title":"Sw Lat"},"description":"Viewport south-west latitude"},{"name":"sw_lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport south-west longitude","title":"Sw Lon"},"description":"Viewport south-west longitude"},{"name":"ne_lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport north-east latitude","title":"Ne Lat"},"description":"Viewport north-east latitude"},{"name":"ne_lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Viewport north-east longitude","title":"Ne Lon"},"description":"Viewport north-east longitude"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Offset for pagination through viewport results (use with limit)","default":0,"title":"Offset"},"description":"Offset for pagination through viewport results (use with limit)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/levis/property/top":{"get":{"summary":"Top Property","description":"Get top-N properties sorted by any numeric column.\n\nConvenience endpoint for AI agents and dashboards. Returns the top\nN properties sorted by the given column. Defaults to most expensive\n(assessed_value descending). Combine with min_value/max_value to\nfind e.g. the most expensive residential properties.","operationId":"top_property_api_levis_property_top_get","parameters":[{"name":"n","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Number of top properties to return","default":10,"title":"N"},"description":"Number of top properties to return"},{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","description":"Sort column: assessed_value, year_built, lot_size_sqft","default":"assessed_value","title":"Sort By"},"description":"Sort column: assessed_value, year_built, lot_size_sqft"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Sort order: asc or desc","default":"desc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: minimum assessed value","title":"Min Value"},"description":"Filter: minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter: maximum assessed value","title":"Max Value"},"description":"Filter: maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Top Property Api Levis Property Top Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/levis/property/stats":{"get":{"summary":"Property Stats","description":"Get property assessment statistics.","operationId":"property_stats_api_levis_property_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/levis/property/autocomplete":{"get":{"summary":"Property Autocomplete","description":"Get address and roll number suggestions for typeahead search.","operationId":"property_autocomplete_api_levis_property_autocomplete_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"description":"Search query for address/roll number suggestions","title":"Q"},"description":"Search query for address/roll number suggestions"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":25,"minimum":1,"description":"Max suggestions to return","default":10,"title":"Limit"},"description":"Max suggestions to return"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/levis/property/geocode":{"post":{"summary":"Property Geocode","description":"Geocode property addresses to lat/lon coordinates.\n\nAccepts a JSON body with 'addresses' (list of address strings, max 50).\nReturns cached results instantly; uncached addresses are geocoded via Nominatim.\n\nExample: {\"addresses\": [\"123 Main St\", \"456 Oak Ave\"]}","operationId":"property_geocode_api_levis_property_geocode_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/levis/property/by-dls":{"get":{"summary":"Get Property By Dls","description":"Get property assessment by DLS coordinates.","operationId":"get_property_by_dls_api_levis_property_by_dls_get","parameters":[{"name":"quarter","in":"query","required":true,"schema":{"type":"string","description":"Quarter section (e.g., SW)","title":"Quarter"},"description":"Quarter section (e.g., SW)"},{"name":"section","in":"query","required":true,"schema":{"type":"integer","description":"Section number","title":"Section"},"description":"Section number"},{"name":"township","in":"query","required":true,"schema":{"type":"integer","description":"Township number","title":"Township"},"description":"Township number"},{"name":"range","in":"query","required":true,"schema":{"type":"integer","description":"Range number","title":"Range"},"description":"Range number"},{"name":"meridian","in":"query","required":true,"schema":{"type":"integer","description":"Meridian number","title":"Meridian"},"description":"Meridian number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyAssessment"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/levis/property/by-gps":{"get":{"summary":"Get Property By Gps","description":"Find coordinate-bearing assessment records nearest a GPS point.\n\nResults are point-nearness matches unless the municipal source supplies\nparcel polygons; clients should not interpret proximity as legal parcel\ncontainment.","operationId":"get_property_by_gps_api_levis_property_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":84.0,"minimum":41.0,"description":"Canadian latitude","title":"Lat"},"description":"Canadian latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":-52.0,"minimum":-142.0,"description":"Canadian longitude","title":"Lon"},"description":"Canadian longitude"},{"name":"radius_m","in":"query","required":false,"schema":{"type":"integer","maximum":5000,"minimum":1,"description":"Maximum point distance","default":100,"title":"Radius M"},"description":"Maximum point distance"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":10,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Property By Gps Api Levis Property By Gps Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/levis/property/by-roll/{roll_number}":{"get":{"summary":"Get Property By Roll","description":"Get property assessment by roll number.","operationId":"get_property_by_roll_api_levis_property_by_roll__roll_number__get","parameters":[{"name":"roll_number","in":"path","required":true,"schema":{"type":"string","description":"Property roll number","title":"Roll Number"},"description":"Property roll number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyAssessment"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/levis/property/report":{"get":{"summary":"Property Report Lookup","description":"Consolidated report by roll number, address, or GPS.","operationId":"property_report_lookup_api_levis_property_report_get","parameters":[{"name":"roll_number","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property roll number","title":"Roll Number"},"description":"Property roll number"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Street address","title":"Address"},"description":"Street address"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyReport"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/levis/property/report/{roll_number}":{"get":{"summary":"Property Report","description":"Get consolidated property report: assessment + building permits + zoning + DLS.","operationId":"property_report_api_levis_property_report__roll_number__get","parameters":[{"name":"roll_number","in":"path","required":true,"schema":{"type":"string","description":"Property roll number","title":"Roll Number"},"description":"Property roll number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyReport"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/levis/property/batch":{"post":{"summary":"Get Properties Batch","description":"Get multiple properties by roll numbers in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of roll numbers.\nExample: {\"ids\": [\"123456789\", \"987654321\"]}\nMaximum 100 roll numbers per request.","operationId":"get_properties_batch_api_levis_property_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Properties Batch Api Levis Property Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/levis/property/export":{"get":{"summary":"Export Properties","description":"Export property data as CSV or GeoJSON.\n\nSupports filtering by address, property type, and assessed value range.\nMaximum 10,000 records per export.","operationId":"export_properties_api_levis_property_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Address filter","title":"Address"},"description":"Address filter"},{"name":"property_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Property type filter","title":"Property Type"},"description":"Property type filter"},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum assessed value","title":"Min Value"},"description":"Minimum assessed value"},{"name":"max_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum assessed value","title":"Max Value"},"description":"Maximum assessed value"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/levis/census/profile":{"get":{"summary":"Get Census Profile","description":"Get census profile for a specific Dissemination Area.\n\nProvide either da_id directly, OR lat+lon to find the nearest DA automatically.","operationId":"get_census_profile_api_levis_census_profile_get","parameters":[{"name":"da_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Dissemination Area ID (e.g., 48820001)","title":"Da Id"},"description":"Dissemination Area ID (e.g., 48820001)"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude for nearest-DA lookup","title":"Lat"},"description":"Latitude for nearest-DA lookup"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude for nearest-DA lookup","title":"Lon"},"description":"Longitude for nearest-DA lookup"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusProfile"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/levis/census/batch":{"post":{"summary":"Get Census Batch","description":"Get multiple census profiles by DA IDs in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of DA IDs.\nExample: {\"ids\": [\"48820001\", \"48820002\"]}\nMaximum 100 DA IDs per request.","operationId":"get_census_batch_api_levis_census_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Census Batch Api Levis Census Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/levis/census/export":{"get":{"summary":"Export Census","description":"Export census data as CSV.\n\nSupports filtering by population range and geography type.\nMaximum 10,000 records per export.","operationId":"export_census_api_levis_census_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv only","default":"csv","title":"Format"},"description":"Export format: csv only"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"min_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Minimum population filter","title":"Min Population"},"description":"Minimum population filter"},{"name":"max_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Maximum population filter","title":"Max Population"},"description":"Maximum population filter"},{"name":"geography_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Geography type filter (DA, CT, CMA)","title":"Geography Type"},"description":"Geography type filter (DA, CT, CMA)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/levis/census/list":{"get":{"summary":"List Census Profiles","description":"List all census profiles with pagination.\n\nUse this endpoint to browse available census profiles and discover valid DA IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_census_profiles_api_levis_census_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Census Profiles Api Levis Census List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/levis/census/by-gps":{"get":{"summary":"Get Census By Gps","description":"Get census data for GPS coordinates.","operationId":"get_census_by_gps_api_levis_census_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90,"minimum":-90,"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":180,"minimum":-180,"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/levis/census/by-dls":{"get":{"summary":"Get Census By Dls","description":"Get census data for DLS coordinates.","operationId":"get_census_by_dls_api_levis_census_by_dls_get","parameters":[{"name":"dls","in":"query","required":true,"schema":{"type":"string","description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)","title":"Dls"},"description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/levis/census/map-data":{"get":{"summary":"Get Census Map Data","description":"Get lightweight DA points for choropleth map rendering.\n\nReturns centroid coordinates and key metrics (income, age, population,\nhousehold size, employment rate) for all DAs in the city.\nUsed by the census dashboard to render color-coded maps.","operationId":"get_census_map_data_api_levis_census_map_data_get","parameters":[{"name":"year","in":"query","required":false,"schema":{"type":"integer","description":"Census year for DA map data","default":2021,"title":"Year"},"description":"Census year for DA map data"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/levis/census/stats":{"get":{"summary":"Census Stats","description":"Get census data statistics.","operationId":"census_stats_api_levis_census_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/levis/census/compare":{"get":{"summary":"Census Compare","description":"Compare key census metrics across multiple years.\n\nReturns side-by-side comparison of population, households,\navg_income, median_age, density, and land_area for each requested year.\nYears without data return null for that year's values.","operationId":"census_compare_api_levis_census_compare_get","parameters":[{"name":"years","in":"query","required":false,"schema":{"type":"string","description":"Comma-separated census years (e.g., 2016,2021)","default":"2021","title":"Years"},"description":"Comma-separated census years (e.g., 2016,2021)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/levis/census/time-series":{"get":{"summary":"Census Timeseries","description":"Get year-by-year census trends for this city.\n\nReturns population, income, age, and household trends across all\navailable census years. Useful for spotting long-term demographic shifts.","operationId":"census_timeseries_api_levis_census_time_series_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/levis/geography/list":{"get":{"summary":"Geography List","description":"List geography boundaries for this city.","operationId":"geography_list_api_levis_geography_list_get","parameters":[{"name":"type","in":"query","required":false,"schema":{"type":"string","title":"Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/levis/geography/by-gps":{"get":{"summary":"Geography By Gps","description":"Find the geography boundary containing a GPS point.","operationId":"geography_by_gps_api_levis_geography_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","title":"Lat"}},{"name":"lon","in":"query","required":true,"schema":{"type":"number","title":"Lon"}},{"name":"type","in":"query","required":false,"schema":{"type":"string","default":"DA","title":"Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/levis/geography/stats":{"get":{"summary":"Geography Stats","description":"Get geography statistics for this city.","operationId":"geography_stats_api_levis_geography_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/levis/geography/{geoid}":{"get":{"summary":"Geography Boundary","description":"Get a specific geography boundary by geoid, including GeoJSON polygon.","operationId":"geography_boundary_api_levis_geography__geoid__get","parameters":[{"name":"geoid","in":"path","required":true,"schema":{"type":"string","title":"Geoid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/levis/census/rental/list":{"get":{"summary":"List Rental Prices","description":"List rental price records for this city, with optional unit type filter.","operationId":"list_rental_prices_api_levis_census_rental_list_get","parameters":[{"name":"unit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":50,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalPriceListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/levis/census/rental/trend":{"get":{"summary":"Get Rental Trend","description":"Get rental price time series for a specific unit type.","operationId":"get_rental_trend_api_levis_census_rental_trend_get","parameters":[{"name":"unit_type","in":"query","required":true,"schema":{"type":"string","description":"Rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Rental unit type (e.g. 'Apartment - 1 bedroom')"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalTrendResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/levis/census/rental/types":{"get":{"summary":"Get Rental Types","description":"Get available rental unit types for this city.","operationId":"get_rental_types_api_levis_census_rental_types_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/levis/zoning/by-gps":{"get":{"summary":"Get Zoning By Gps","description":"Get zoning district for GPS coordinates.","operationId":"get_zoning_by_gps_api_levis_zoning_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZoningByGPSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/levis/zoning/by-id/{district_id}":{"get":{"summary":"Get Zoning By Id","description":"Get a single zoning district by its numeric ID.","operationId":"get_zoning_by_id_api_levis_zoning_by_id__district_id__get","parameters":[{"name":"district_id","in":"path","required":true,"schema":{"type":"integer","description":"Zoning district numeric ID","title":"District Id"},"description":"Zoning district numeric ID"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning By Id Api Levis Zoning By Id  District Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/levis/zoning/by-code/{code}":{"get":{"summary":"Get Zoning By Code","description":"Get all districts with a specific zone code.","operationId":"get_zoning_by_code_api_levis_zoning_by_code__code__get","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","description":"Zone code (e.g., C-C1, R-G)","title":"Code"},"description":"Zone code (e.g., C-C1, R-G)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoningDistrict"},"title":"Response Get Zoning By Code Api Levis Zoning By Code  Code  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/levis/zoning/batch":{"post":{"summary":"Get Zoning Batch","description":"Get multiple zoning districts by zone codes in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of zone codes.\nExample: {\"ids\": [\"CR20-C20/R20\", \"C-C1\", \"R-G\"]}\nMaximum 100 zone codes per request.","operationId":"get_zoning_batch_api_levis_zoning_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning Batch Api Levis Zoning Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/levis/zoning/list":{"get":{"summary":"List Zoning Districts","description":"List all zoning districts with pagination.\n\nUse this endpoint to browse available zoning districts and discover valid IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_zoning_districts_api_levis_zoning_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Zoning Districts Api Levis Zoning List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/levis/zoning/codes":{"get":{"summary":"List Zone Codes","description":"List all zone codes with descriptions.","operationId":"list_zone_codes_api_levis_zoning_codes_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"type":"string","description":"Filter by major category (e.g., Commercial, Residential)","title":"Category"},"description":"Filter by major category (e.g., Commercial, Residential)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoneCodeInfo"},"title":"Response List Zone Codes Api Levis Zoning Codes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/levis/zoning/stats":{"get":{"summary":"Zoning Stats","description":"Get zoning statistics.","operationId":"zoning_stats_api_levis_zoning_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/levis/zoning/export":{"get":{"summary":"Export Zoning","description":"Export zoning district data as CSV or GeoJSON.\n\nSupports filtering by zone code, category, and area range.\nMaximum 10,000 records per export.","operationId":"export_zoning_api_levis_zoning_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"zone_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Zone code filter (e.g., CR2)","title":"Zone Code"},"description":"Zone code filter (e.g., CR2)"},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Major category filter","title":"Category"},"description":"Major category filter"},{"name":"min_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum area in sq km","title":"Min Area"},"description":"Minimum area in sq km"},{"name":"max_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum area in sq km","title":"Max Area"},"description":"Maximum area in sq km"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/levis/health":{"get":{"summary":"City Health","description":"City-specific health check.","operationId":"city_health_api_levis_health_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/trois-rivieres/entries/{kind}":{"get":{"summary":"List Entries","operationId":"list_entries_api_trois_rivieres_entries__kind__get","parameters":[{"name":"kind","in":"path","required":true,"schema":{"type":"string","description":"Canonical entry kind: property, permit, zoning, or safety","title":"Kind"},"description":"Canonical entry kind: property, permit, zoning, or safety"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"_services","in":"query","required":false,"schema":{"title":" Services"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Entries Api Trois Rivieres Entries  Kind  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/trois-rivieres/census/profile":{"get":{"summary":"Get Census Profile","description":"Get census profile for a specific Dissemination Area.\n\nProvide either da_id directly, OR lat+lon to find the nearest DA automatically.","operationId":"get_census_profile_api_trois_rivieres_census_profile_get","parameters":[{"name":"da_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Dissemination Area ID (e.g., 48820001)","title":"Da Id"},"description":"Dissemination Area ID (e.g., 48820001)"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude for nearest-DA lookup","title":"Lat"},"description":"Latitude for nearest-DA lookup"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude for nearest-DA lookup","title":"Lon"},"description":"Longitude for nearest-DA lookup"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusProfile"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/trois-rivieres/census/batch":{"post":{"summary":"Get Census Batch","description":"Get multiple census profiles by DA IDs in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of DA IDs.\nExample: {\"ids\": [\"48820001\", \"48820002\"]}\nMaximum 100 DA IDs per request.","operationId":"get_census_batch_api_trois_rivieres_census_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Census Batch Api Trois Rivieres Census Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/trois-rivieres/census/export":{"get":{"summary":"Export Census","description":"Export census data as CSV.\n\nSupports filtering by population range and geography type.\nMaximum 10,000 records per export.","operationId":"export_census_api_trois_rivieres_census_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv only","default":"csv","title":"Format"},"description":"Export format: csv only"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"min_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Minimum population filter","title":"Min Population"},"description":"Minimum population filter"},{"name":"max_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Maximum population filter","title":"Max Population"},"description":"Maximum population filter"},{"name":"geography_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Geography type filter (DA, CT, CMA)","title":"Geography Type"},"description":"Geography type filter (DA, CT, CMA)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/trois-rivieres/census/list":{"get":{"summary":"List Census Profiles","description":"List all census profiles with pagination.\n\nUse this endpoint to browse available census profiles and discover valid DA IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_census_profiles_api_trois_rivieres_census_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Census Profiles Api Trois Rivieres Census List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/trois-rivieres/census/by-gps":{"get":{"summary":"Get Census By Gps","description":"Get census data for GPS coordinates.","operationId":"get_census_by_gps_api_trois_rivieres_census_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90,"minimum":-90,"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":180,"minimum":-180,"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/trois-rivieres/census/by-dls":{"get":{"summary":"Get Census By Dls","description":"Get census data for DLS coordinates.","operationId":"get_census_by_dls_api_trois_rivieres_census_by_dls_get","parameters":[{"name":"dls","in":"query","required":true,"schema":{"type":"string","description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)","title":"Dls"},"description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/trois-rivieres/census/map-data":{"get":{"summary":"Get Census Map Data","description":"Get lightweight DA points for choropleth map rendering.\n\nReturns centroid coordinates and key metrics (income, age, population,\nhousehold size, employment rate) for all DAs in the city.\nUsed by the census dashboard to render color-coded maps.","operationId":"get_census_map_data_api_trois_rivieres_census_map_data_get","parameters":[{"name":"year","in":"query","required":false,"schema":{"type":"integer","description":"Census year for DA map data","default":2021,"title":"Year"},"description":"Census year for DA map data"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/trois-rivieres/census/stats":{"get":{"summary":"Census Stats","description":"Get census data statistics.","operationId":"census_stats_api_trois_rivieres_census_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/trois-rivieres/census/compare":{"get":{"summary":"Census Compare","description":"Compare key census metrics across multiple years.\n\nReturns side-by-side comparison of population, households,\navg_income, median_age, density, and land_area for each requested year.\nYears without data return null for that year's values.","operationId":"census_compare_api_trois_rivieres_census_compare_get","parameters":[{"name":"years","in":"query","required":false,"schema":{"type":"string","description":"Comma-separated census years (e.g., 2016,2021)","default":"2021","title":"Years"},"description":"Comma-separated census years (e.g., 2016,2021)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/trois-rivieres/census/time-series":{"get":{"summary":"Census Timeseries","description":"Get year-by-year census trends for this city.\n\nReturns population, income, age, and household trends across all\navailable census years. Useful for spotting long-term demographic shifts.","operationId":"census_timeseries_api_trois_rivieres_census_time_series_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/trois-rivieres/geography/list":{"get":{"summary":"Geography List","description":"List geography boundaries for this city.","operationId":"geography_list_api_trois_rivieres_geography_list_get","parameters":[{"name":"type","in":"query","required":false,"schema":{"type":"string","title":"Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/trois-rivieres/geography/by-gps":{"get":{"summary":"Geography By Gps","description":"Find the geography boundary containing a GPS point.","operationId":"geography_by_gps_api_trois_rivieres_geography_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","title":"Lat"}},{"name":"lon","in":"query","required":true,"schema":{"type":"number","title":"Lon"}},{"name":"type","in":"query","required":false,"schema":{"type":"string","default":"DA","title":"Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/trois-rivieres/geography/stats":{"get":{"summary":"Geography Stats","description":"Get geography statistics for this city.","operationId":"geography_stats_api_trois_rivieres_geography_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/trois-rivieres/geography/{geoid}":{"get":{"summary":"Geography Boundary","description":"Get a specific geography boundary by geoid, including GeoJSON polygon.","operationId":"geography_boundary_api_trois_rivieres_geography__geoid__get","parameters":[{"name":"geoid","in":"path","required":true,"schema":{"type":"string","title":"Geoid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/trois-rivieres/census/rental/list":{"get":{"summary":"List Rental Prices","description":"List rental price records for this city, with optional unit type filter.","operationId":"list_rental_prices_api_trois_rivieres_census_rental_list_get","parameters":[{"name":"unit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":50,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalPriceListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/trois-rivieres/census/rental/trend":{"get":{"summary":"Get Rental Trend","description":"Get rental price time series for a specific unit type.","operationId":"get_rental_trend_api_trois_rivieres_census_rental_trend_get","parameters":[{"name":"unit_type","in":"query","required":true,"schema":{"type":"string","description":"Rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Rental unit type (e.g. 'Apartment - 1 bedroom')"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalTrendResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/trois-rivieres/census/rental/types":{"get":{"summary":"Get Rental Types","description":"Get available rental unit types for this city.","operationId":"get_rental_types_api_trois_rivieres_census_rental_types_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/trois-rivieres/zoning/by-gps":{"get":{"summary":"Get Zoning By Gps","description":"Get zoning district for GPS coordinates.","operationId":"get_zoning_by_gps_api_trois_rivieres_zoning_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZoningByGPSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/trois-rivieres/zoning/by-id/{district_id}":{"get":{"summary":"Get Zoning By Id","description":"Get a single zoning district by its numeric ID.","operationId":"get_zoning_by_id_api_trois_rivieres_zoning_by_id__district_id__get","parameters":[{"name":"district_id","in":"path","required":true,"schema":{"type":"integer","description":"Zoning district numeric ID","title":"District Id"},"description":"Zoning district numeric ID"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning By Id Api Trois Rivieres Zoning By Id  District Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/trois-rivieres/zoning/by-code/{code}":{"get":{"summary":"Get Zoning By Code","description":"Get all districts with a specific zone code.","operationId":"get_zoning_by_code_api_trois_rivieres_zoning_by_code__code__get","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","description":"Zone code (e.g., C-C1, R-G)","title":"Code"},"description":"Zone code (e.g., C-C1, R-G)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoningDistrict"},"title":"Response Get Zoning By Code Api Trois Rivieres Zoning By Code  Code  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/trois-rivieres/zoning/batch":{"post":{"summary":"Get Zoning Batch","description":"Get multiple zoning districts by zone codes in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of zone codes.\nExample: {\"ids\": [\"CR20-C20/R20\", \"C-C1\", \"R-G\"]}\nMaximum 100 zone codes per request.","operationId":"get_zoning_batch_api_trois_rivieres_zoning_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Zoning Batch Api Trois Rivieres Zoning Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/trois-rivieres/zoning/list":{"get":{"summary":"List Zoning Districts","description":"List all zoning districts with pagination.\n\nUse this endpoint to browse available zoning districts and discover valid IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_zoning_districts_api_trois_rivieres_zoning_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Zoning Districts Api Trois Rivieres Zoning List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/trois-rivieres/zoning/codes":{"get":{"summary":"List Zone Codes","description":"List all zone codes with descriptions.","operationId":"list_zone_codes_api_trois_rivieres_zoning_codes_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"type":"string","description":"Filter by major category (e.g., Commercial, Residential)","title":"Category"},"description":"Filter by major category (e.g., Commercial, Residential)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoneCodeInfo"},"title":"Response List Zone Codes Api Trois Rivieres Zoning Codes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/trois-rivieres/zoning/stats":{"get":{"summary":"Zoning Stats","description":"Get zoning statistics.","operationId":"zoning_stats_api_trois_rivieres_zoning_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/trois-rivieres/zoning/export":{"get":{"summary":"Export Zoning","description":"Export zoning district data as CSV or GeoJSON.\n\nSupports filtering by zone code, category, and area range.\nMaximum 10,000 records per export.","operationId":"export_zoning_api_trois_rivieres_zoning_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"zone_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Zone code filter (e.g., CR2)","title":"Zone Code"},"description":"Zone code filter (e.g., CR2)"},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Major category filter","title":"Category"},"description":"Major category filter"},{"name":"min_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum area in sq km","title":"Min Area"},"description":"Minimum area in sq km"},{"name":"max_area","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Maximum area in sq km","title":"Max Area"},"description":"Maximum area in sq km"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/trois-rivieres/health":{"get":{"summary":"City Health","description":"City-specific health check.","operationId":"city_health_api_trois_rivieres_health_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/oakville/entries/{kind}":{"get":{"summary":"List Entries","operationId":"list_entries_api_oakville_entries__kind__get","parameters":[{"name":"kind","in":"path","required":true,"schema":{"type":"string","description":"Canonical entry kind: property, permit, zoning, or safety","title":"Kind"},"description":"Canonical entry kind: property, permit, zoning, or safety"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"_services","in":"query","required":false,"schema":{"title":" Services"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Entries Api Oakville Entries  Kind  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/oakville/census/profile":{"get":{"summary":"Get Census Profile","description":"Get census profile for a specific Dissemination Area.\n\nProvide either da_id directly, OR lat+lon to find the nearest DA automatically.","operationId":"get_census_profile_api_oakville_census_profile_get","parameters":[{"name":"da_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Dissemination Area ID (e.g., 48820001)","title":"Da Id"},"description":"Dissemination Area ID (e.g., 48820001)"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude for nearest-DA lookup","title":"Lat"},"description":"Latitude for nearest-DA lookup"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude for nearest-DA lookup","title":"Lon"},"description":"Longitude for nearest-DA lookup"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusProfile"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/oakville/census/batch":{"post":{"summary":"Get Census Batch","description":"Get multiple census profiles by DA IDs in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of DA IDs.\nExample: {\"ids\": [\"48820001\", \"48820002\"]}\nMaximum 100 DA IDs per request.","operationId":"get_census_batch_api_oakville_census_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Census Batch Api Oakville Census Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/oakville/census/export":{"get":{"summary":"Export Census","description":"Export census data as CSV.\n\nSupports filtering by population range and geography type.\nMaximum 10,000 records per export.","operationId":"export_census_api_oakville_census_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv only","default":"csv","title":"Format"},"description":"Export format: csv only"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"min_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Minimum population filter","title":"Min Population"},"description":"Minimum population filter"},{"name":"max_population","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Maximum population filter","title":"Max Population"},"description":"Maximum population filter"},{"name":"geography_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Geography type filter (DA, CT, CMA)","title":"Geography Type"},"description":"Geography type filter (DA, CT, CMA)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/oakville/census/list":{"get":{"summary":"List Census Profiles","description":"List all census profiles with pagination.\n\nUse this endpoint to browse available census profiles and discover valid DA IDs.\nReturns paginated results with total count for client-side pagination.","operationId":"list_census_profiles_api_oakville_census_list_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Census Profiles Api Oakville Census List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/oakville/census/by-gps":{"get":{"summary":"Get Census By Gps","description":"Get census data for GPS coordinates.","operationId":"get_census_by_gps_api_oakville_census_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90,"minimum":-90,"description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":180,"minimum":-180,"description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/oakville/census/by-dls":{"get":{"summary":"Get Census By Dls","description":"Get census data for DLS coordinates.","operationId":"get_census_by_dls_api_oakville_census_by_dls_get","parameters":[{"name":"dls","in":"query","required":true,"schema":{"type":"string","description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)","title":"Dls"},"description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/oakville/census/map-data":{"get":{"summary":"Get Census Map Data","description":"Get lightweight DA points for choropleth map rendering.\n\nReturns centroid coordinates and key metrics (income, age, population,\nhousehold size, employment rate) for all DAs in the city.\nUsed by the census dashboard to render color-coded maps.","operationId":"get_census_map_data_api_oakville_census_map_data_get","parameters":[{"name":"year","in":"query","required":false,"schema":{"type":"integer","description":"Census year for DA map data","default":2021,"title":"Year"},"description":"Census year for DA map data"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/oakville/census/stats":{"get":{"summary":"Census Stats","description":"Get census data statistics.","operationId":"census_stats_api_oakville_census_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/oakville/census/compare":{"get":{"summary":"Census Compare","description":"Compare key census metrics across multiple years.\n\nReturns side-by-side comparison of population, households,\navg_income, median_age, density, and land_area for each requested year.\nYears without data return null for that year's values.","operationId":"census_compare_api_oakville_census_compare_get","parameters":[{"name":"years","in":"query","required":false,"schema":{"type":"string","description":"Comma-separated census years (e.g., 2016,2021)","default":"2021","title":"Years"},"description":"Comma-separated census years (e.g., 2016,2021)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/oakville/census/time-series":{"get":{"summary":"Census Timeseries","description":"Get year-by-year census trends for this city.\n\nReturns population, income, age, and household trends across all\navailable census years. Useful for spotting long-term demographic shifts.","operationId":"census_timeseries_api_oakville_census_time_series_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/oakville/geography/list":{"get":{"summary":"Geography List","description":"List geography boundaries for this city.","operationId":"geography_list_api_oakville_geography_list_get","parameters":[{"name":"type","in":"query","required":false,"schema":{"type":"string","title":"Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/oakville/geography/by-gps":{"get":{"summary":"Geography By Gps","description":"Find the geography boundary containing a GPS point.","operationId":"geography_by_gps_api_oakville_geography_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","title":"Lat"}},{"name":"lon","in":"query","required":true,"schema":{"type":"number","title":"Lon"}},{"name":"type","in":"query","required":false,"schema":{"type":"string","default":"DA","title":"Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/oakville/geography/stats":{"get":{"summary":"Geography Stats","description":"Get geography statistics for this city.","operationId":"geography_stats_api_oakville_geography_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/oakville/geography/{geoid}":{"get":{"summary":"Geography Boundary","description":"Get a specific geography boundary by geoid, including GeoJSON polygon.","operationId":"geography_boundary_api_oakville_geography__geoid__get","parameters":[{"name":"geoid","in":"path","required":true,"schema":{"type":"string","title":"Geoid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/oakville/census/rental/list":{"get":{"summary":"List Rental Prices","description":"List rental price records for this city, with optional unit type filter.","operationId":"list_rental_prices_api_oakville_census_rental_list_get","parameters":[{"name":"unit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Filter by rental unit type (e.g. 'Apartment - 1 bedroom')"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":50,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalPriceListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/oakville/census/rental/trend":{"get":{"summary":"Get Rental Trend","description":"Get rental price time series for a specific unit type.","operationId":"get_rental_trend_api_oakville_census_rental_trend_get","parameters":[{"name":"unit_type","in":"query","required":true,"schema":{"type":"string","description":"Rental unit type (e.g. 'Apartment - 1 bedroom')","title":"Unit Type"},"description":"Rental unit type (e.g. 'Apartment - 1 bedroom')"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalTrendResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/oakville/census/rental/types":{"get":{"summary":"Get Rental Types","description":"Get available rental unit types for this city.","operationId":"get_rental_types_api_oakville_census_rental_types_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/oakville/permits/stats":{"get":{"summary":"Building Stats","description":"Get building permit statistics.","operationId":"building_stats_api_oakville_permits_stats_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/oakville/permits/search":{"get":{"summary":"Search Building Permits","description":"Search building permits by address, contractor, applicant, permit number, and/or permit type.","operationId":"search_building_permits_api_oakville_permits_search_get","parameters":[{"name":"address","in":"query","required":false,"schema":{"type":"string","description":"Address to search","title":"Address"},"description":"Address to search"},{"name":"q","in":"query","required":false,"schema":{"type":"string","description":"General text search (address, contractor, applicant, permit #)","title":"Q"},"description":"General text search (address, contractor, applicant, permit #)"},{"name":"permit_type","in":"query","required":false,"schema":{"type":"string","description":"Filter by permit type","title":"Permit Type"},"description":"Filter by permit type"},{"name":"bbox","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bounding box: min_lon,min_lat,max_lon,max_lat","title":"Bbox"},"description":"Bounding box: min_lon,min_lat,max_lon,max_lat"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max results","default":20,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset","default":0,"title":"Offset"},"description":"Results offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/oakville/permits/nearby":{"get":{"summary":"Nearby Building Permits","description":"Coordinate-first alias for nearby building permits.","operationId":"nearby_building_permits_api_oakville_permits_nearby_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":84.0,"minimum":41.0,"description":"Canadian latitude","title":"Lat"},"description":"Canadian latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","maximum":-52.0,"minimum":-142.0,"description":"Canadian longitude","title":"Lon"},"description":"Canadian longitude"},{"name":"radius_m","in":"query","required":false,"schema":{"type":"integer","maximum":50000,"minimum":1,"default":1000,"title":"Radius M"}},{"name":"permit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Permit Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/oakville/permits/export":{"get":{"summary":"Export Building Permits","description":"Export building permit data as CSV or GeoJSON.\n\nSupports filtering by address, permit type, and date range.\nMaximum 10,000 records per export.","operationId":"export_building_permits_api_oakville_permits_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"Export format: csv or geojson","default":"csv","title":"Format"},"description":"Export format: csv or geojson"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Max records to export","default":1000,"title":"Limit"},"description":"Max records to export"},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Address filter","title":"Address"},"description":"Address filter"},{"name":"permit_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Permit type filter","title":"Permit Type"},"description":"Permit type filter"},{"name":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Start date (YYYY-MM-DD)","title":"Date From"},"description":"Start date (YYYY-MM-DD)"},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"End date (YYYY-MM-DD)","title":"Date To"},"description":"End date (YYYY-MM-DD)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/oakville/permits/recent":{"get":{"summary":"Recent Building Permits","description":"Get recent building permits sorted by application date (newest first).\n\nUse this to see where construction activity is happening right now.","operationId":"recent_building_permits_api_oakville_permits_recent_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Max results","default":20,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset","default":0,"title":"Offset"},"description":"Results offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/oakville/permits/batch":{"post":{"summary":"Get Building Permits Batch","description":"Get multiple building permits by permit numbers in a single request.\n\nAccepts a JSON body with an 'ids' field containing a list of permit numbers.\nExample: {\"ids\": [\"BP123456\", \"BP789012\"]}\nMaximum 100 permit numbers per request.","operationId":"get_building_permits_batch_api_oakville_permits_batch_post","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Building Permits Batch Api Oakville Permits Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/oakville/permits/{permit_number}":{"get":{"summary":"Get Building Permit","description":"Get building permit details by permit number.\n\nServes HTML for browsers, JSON for API clients.","operationId":"get_building_permit_api_oakville_permits__permit_number__get","parameters":[{"name":"permit_number","in":"path","required":true,"schema":{"type":"string","description":"Permit number","title":"Permit Number"},"description":"Permit number"},{"name":"_city_name","in":"query","required":false,"schema":{"default":"Oakville","title":" City Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/oakville/health":{"get":{"summary":"City Health","description":"City-specific health check.","operationId":"city_health_api_oakville_health_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/canada/entries/{kind}":{"get":{"summary":"List Entries","operationId":"list_entries_api_canada_entries__kind__get","parameters":[{"name":"kind","in":"path","required":true,"schema":{"type":"string","description":"Canonical entry kind: property, permit, zoning, or safety","title":"Kind"},"description":"Canonical entry kind: property, permit, zoning, or safety"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max records to return","default":100,"title":"Limit"},"description":"Max records to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Records to skip","default":0,"title":"Offset"},"description":"Records to skip"},{"name":"_services","in":"query","required":false,"schema":{"default":{},"title":" Services"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Entries Api Canada Entries  Kind  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/canada/health":{"get":{"summary":"City Health","description":"City-specific health check.","operationId":"city_health_api_canada_health_get","parameters":[],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/{city}/dls/pricing":{"get":{"summary":"Get Dls Pricing","description":"Get price-per-acre and property stats for a specific DLS quarter-section.","operationId":"get_dls_pricing_api__city__dls_pricing_get","parameters":[{"name":"city","in":"path","required":true,"schema":{"type":"string","minLength":2,"maxLength":50,"description":"City slug (calgary only)","title":"City"},"description":"City slug (calgary only)"},{"name":"dls","in":"query","required":true,"schema":{"type":"string","minLength":5,"maxLength":50,"description":"DLS string (e.g., NE-15-025-2W5)","title":"Dls"},"description":"DLS string (e.g., NE-15-025-2W5)"},{"name":"include_properties","in":"query","required":false,"schema":{"type":"boolean","description":"Include top properties in DLS","default":false,"title":"Include Properties"},"description":"Include top properties in DLS"},{"name":"property_limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"description":"Max properties to return","default":10,"title":"Property Limit"},"description":"Max properties to return"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/{city}/dls/rankings":{"get":{"summary":"Get Dls Rankings","description":"List DLS quarter-sections ranked by price-per-acre or average value.","operationId":"get_dls_rankings_api__city__dls_rankings_get","parameters":[{"name":"city","in":"path","required":true,"schema":{"type":"string","minLength":2,"maxLength":50,"description":"City slug (calgary only)","title":"City"},"description":"City slug (calgary only)"},{"name":"min_properties","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Minimum properties per DLS","default":3,"title":"Min Properties"},"description":"Minimum properties per DLS"},{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","description":"Sort field: price_per_acre, avg_value, property_count","default":"price_per_acre","title":"Sort By"},"description":"Sort field: price_per_acre, avg_value, property_count"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"Max results","default":50,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Offset","default":0,"title":"Offset"},"description":"Offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/{city}/dls/velocity":{"get":{"summary":"Dls Velocity","operationId":"dls_velocity_api__city__dls_velocity_get","parameters":[{"name":"city","in":"path","required":true,"schema":{"type":"string","minLength":2,"maxLength":50,"description":"City slug (calgary only)","title":"City"},"description":"City slug (calgary only)"},{"name":"dls","in":"query","required":true,"schema":{"type":"string","minLength":5,"maxLength":50,"title":"Dls"}},{"name":"years","in":"query","required":false,"schema":{"type":"integer","maximum":10,"minimum":1,"default":3,"title":"Years"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/{city}/dls/heatmap":{"get":{"summary":"Dls Heatmap","operationId":"dls_heatmap_api__city__dls_heatmap_get","parameters":[{"name":"city","in":"path","required":true,"schema":{"type":"string","minLength":2,"maxLength":50,"description":"City slug (calgary only)","title":"City"},"description":"City slug (calgary only)"},{"name":"year","in":"query","required":false,"schema":{"type":"integer","title":"Year"}},{"name":"metric","in":"query","required":false,"schema":{"type":"string","default":"permit_count","title":"Metric"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":5000,"minimum":1,"default":2000,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/{city}/dls/top-permits":{"get":{"summary":"Dls Top Permits","operationId":"dls_top_permits_api__city__dls_top_permits_get","parameters":[{"name":"city","in":"path","required":true,"schema":{"type":"string","minLength":2,"maxLength":50,"description":"City slug (calgary only)","title":"City"},"description":"City slug (calgary only)"},{"name":"year","in":"query","required":false,"schema":{"type":"integer","title":"Year"}},{"name":"by","in":"query","required":false,"schema":{"type":"string","default":"permit_count","title":"By"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"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"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/{city}/dls/neighbours":{"get":{"summary":"Dls Neighbours","description":"Find nearest economically comparable DLS quarter-sections.","operationId":"dls_neighbours_api__city__dls_neighbours_get","parameters":[{"name":"city","in":"path","required":true,"schema":{"type":"string","minLength":2,"maxLength":50,"description":"City slug (calgary only)","title":"City"},"description":"City slug (calgary only)"},{"name":"dls","in":"query","required":true,"schema":{"type":"string","minLength":5,"maxLength":50,"title":"Dls"}},{"name":"radius_km","in":"query","required":false,"schema":{"type":"number","maximum":20.0,"minimum":1.0,"default":5.0,"title":"Radius Km"}},{"name":"max_neighbours","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":20,"title":"Max Neighbours"}},{"name":"metric","in":"query","required":false,"schema":{"type":"string","description":"Comparison metric: avg_value or price_per_acre","default":"avg_value","title":"Metric"},"description":"Comparison metric: avg_value or price_per_acre"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/v1/dls/geojson":{"get":{"summary":"Dls Geojson","description":"Return DLS quarter-section or section boundaries as GeoJSON FeatureCollection.","operationId":"dls_geojson_api_v1_dls_geojson_get","parameters":[{"name":"province","in":"query","required":true,"schema":{"type":"string","minLength":2,"maxLength":20,"description":"Province code: ab, sk, mb, bc","title":"Province"},"description":"Province code: ab, sk, mb, bc"},{"name":"bbox","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bounding box: min_lon,min_lat,max_lon,max_lat","title":"Bbox"},"description":"Bounding box: min_lon,min_lat,max_lon,max_lat"},{"name":"dls","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":5,"maxLength":50},{"type":"null"}],"description":"Specific DLS code to look up","title":"Dls"},"description":"Specific DLS code to look up"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":5000,"minimum":1,"description":"Max features to return","default":1000,"title":"Limit"},"description":"Max features to return"},{"name":"detail","in":"query","required":false,"schema":{"type":"string","description":"Detail level: quarter or section","default":"quarter","title":"Detail"},"description":"Detail level: quarter or section"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/property/stats":{"get":{"summary":"Legacy Property Stats","description":"Get property assessment statistics (Calgary).","operationId":"legacy_property_stats_api_property_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/property/search":{"get":{"summary":"Legacy Search Property","description":"Search for properties by address, or browse all if no address specified (Calgary).","operationId":"legacy_search_property_api_property_search_get","parameters":[{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Street address to search (omit to browse all)","title":"Address"},"description":"Street address to search (omit to browse all)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max results to return (up to 1000 for map browse)","default":10,"title":"Limit"},"description":"Max results to return (up to 1000 for map browse)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset for pagination","default":0,"title":"Offset"},"description":"Results offset for pagination"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertySearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/property/by-dls":{"get":{"summary":"Legacy Get Property By Dls","description":"Get property assessment by DLS coordinates (Calgary).","operationId":"legacy_get_property_by_dls_api_property_by_dls_get","parameters":[{"name":"quarter","in":"query","required":true,"schema":{"type":"string","description":"Quarter section (e.g., SW)","title":"Quarter"},"description":"Quarter section (e.g., SW)"},{"name":"section","in":"query","required":true,"schema":{"type":"integer","description":"Section number","title":"Section"},"description":"Section number"},{"name":"township","in":"query","required":true,"schema":{"type":"integer","description":"Township number","title":"Township"},"description":"Township number"},{"name":"range","in":"query","required":true,"schema":{"type":"integer","description":"Range number","title":"Range"},"description":"Range number"},{"name":"meridian","in":"query","required":true,"schema":{"type":"integer","description":"Meridian number","title":"Meridian"},"description":"Meridian number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyAssessment"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/property/by-roll/{roll_number}":{"get":{"summary":"Legacy Get Property By Roll","description":"Get property assessment by roll number (Calgary).","operationId":"legacy_get_property_by_roll_api_property_by_roll__roll_number__get","parameters":[{"name":"roll_number","in":"path","required":true,"schema":{"type":"string","description":"Property roll number","title":"Roll Number"},"description":"Property roll number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyAssessment"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/census/stats":{"get":{"summary":"Legacy Census Stats","description":"Get census data statistics (Calgary).","operationId":"legacy_census_stats_api_census_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/census/profile":{"get":{"summary":"Legacy Get Census Profile","description":"Get census profile for a specific Dissemination Area (Calgary).","operationId":"legacy_get_census_profile_api_census_profile_get","parameters":[{"name":"da_id","in":"query","required":true,"schema":{"type":"string","description":"Dissemination Area ID (e.g., 48820001)","title":"Da Id"},"description":"Dissemination Area ID (e.g., 48820001)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusProfile"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/census/by-gps":{"get":{"summary":"Legacy Get Census By Gps","description":"Get census data for GPS coordinates (Calgary).","operationId":"legacy_get_census_by_gps_api_census_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/census/by-dls":{"get":{"summary":"Legacy Get Census By Dls","description":"Get census data for DLS coordinates (Calgary).","operationId":"legacy_get_census_by_dls_api_census_by_dls_get","parameters":[{"name":"dls","in":"query","required":true,"schema":{"type":"string","description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)","title":"Dls"},"description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusByDLSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/census/compare":{"get":{"summary":"Legacy Census Compare","description":"Compare key census metrics across multiple years (Calgary).","operationId":"legacy_census_compare_api_census_compare_get","parameters":[{"name":"years","in":"query","required":false,"schema":{"type":"string","description":"Comma-separated census years (e.g., 2016,2021)","default":"2021","title":"Years"},"description":"Comma-separated census years (e.g., 2016,2021)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/zoning/by-gps":{"get":{"summary":"Legacy Get Zoning By Gps","description":"Get zoning district for GPS coordinates (Calgary).","operationId":"legacy_get_zoning_by_gps_api_zoning_by_gps_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","description":"Latitude","title":"Lat"},"description":"Latitude"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","description":"Longitude","title":"Lon"},"description":"Longitude"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZoningByGPSResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/zoning/by-id/{district_id}":{"get":{"summary":"Legacy Get Zoning By Id","description":"Get a single zoning district by its numeric ID (Calgary).","operationId":"legacy_get_zoning_by_id_api_zoning_by_id__district_id__get","parameters":[{"name":"district_id","in":"path","required":true,"schema":{"type":"integer","description":"Zoning district numeric ID","title":"District Id"},"description":"Zoning district numeric ID"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Legacy Get Zoning By Id Api Zoning By Id  District Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/zoning/by-code/{code}":{"get":{"summary":"Legacy Get Zoning By Code","description":"Get all districts with a specific zone code (Calgary).","operationId":"legacy_get_zoning_by_code_api_zoning_by_code__code__get","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","description":"Zone code (e.g., C-C1, R-G)","title":"Code"},"description":"Zone code (e.g., C-C1, R-G)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoningDistrict"},"title":"Response Legacy Get Zoning By Code Api Zoning By Code  Code  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/zoning/codes":{"get":{"summary":"Legacy List Zone Codes","description":"List all zone codes with descriptions (Calgary).","operationId":"legacy_list_zone_codes_api_zoning_codes_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"type":"string","description":"Filter by major category (e.g., Commercial, Residential)","title":"Category"},"description":"Filter by major category (e.g., Commercial, Residential)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZoneCodeInfo"},"title":"Response Legacy List Zone Codes Api Zoning Codes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/zoning/stats":{"get":{"summary":"Legacy Zoning Stats","description":"Get zoning statistics (Calgary).","operationId":"legacy_zoning_stats_api_zoning_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/permits/stats":{"get":{"summary":"Legacy Building Stats","description":"Get building permit statistics (Calgary).","operationId":"legacy_building_stats_api_permits_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/permits/search":{"get":{"summary":"Legacy Search Building Permits","description":"Search building permits by address and/or permit type (Calgary).","operationId":"legacy_search_building_permits_api_permits_search_get","parameters":[{"name":"address","in":"query","required":false,"schema":{"type":"string","description":"Address to search","title":"Address"},"description":"Address to search"},{"name":"permit_type","in":"query","required":false,"schema":{"type":"string","description":"Filter by permit type","title":"Permit Type"},"description":"Filter by permit type"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Max results","default":20,"title":"Limit"},"description":"Max results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset","default":0,"title":"Offset"},"description":"Results offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildingPermitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/permits/{permit_number}":{"get":{"summary":"Legacy Get Building Permit","description":"Get building permit details by permit number (Calgary).\n\nServes HTML for browsers, JSON for API clients.","operationId":"legacy_get_building_permit_api_permits__permit_number__get","parameters":[{"name":"permit_number","in":"path","required":true,"schema":{"type":"string","description":"Permit number","title":"Permit Number"},"description":"Permit number"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/property/health":{"get":{"summary":"Legacy Property Health","description":"Property Assessment API health check (Calgary).","operationId":"legacy_property_health_api_property_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/census/health":{"get":{"summary":"Legacy Census Health","description":"Census+Geography API health check (Calgary).","operationId":"legacy_census_health_api_census_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/zoning/health":{"get":{"summary":"Legacy Zoning Health","description":"Zoning & Land Use API health check (Calgary).","operationId":"legacy_zoning_health_api_zoning_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/permits/health":{"get":{"summary":"Legacy Permits Health","description":"Building Permits API health check (Calgary).","operationId":"legacy_permits_health_api_permits_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/v1/geocode/reverse":{"get":{"summary":"Reverse Geocode","description":"Reverse geocode GPS coordinates to address + DLS grid reference.\n\nAddress (Nominatim) and DLS resolution are independent.  A Nominatim\noutage still returns DLS when the point is in Western Canada.","operationId":"reverse_geocode_api_v1_geocode_reverse_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","description":"Latitude in decimal degrees","title":"Lat"},"description":"Latitude in decimal degrees"},{"name":"lon","in":"query","required":true,"schema":{"type":"number","description":"Longitude in decimal degrees (negative for West)","title":"Lon"},"description":"Longitude in decimal degrees (negative for West)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/registry/search":{"get":{"summary":"Registry Search","operationId":"registry_search_api_registry_search_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":200,"description":"Corporation name query","title":"Q"},"description":"Corporation name query"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":25,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/registry/corporation/{corporation_id}":{"get":{"summary":"Registry By Id","operationId":"registry_by_id_api_registry_corporation__corporation_id__get","parameters":[{"name":"corporation_id","in":"path","required":true,"schema":{"type":"integer","title":"Corporation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/registry/advanced":{"get":{"summary":"Registry Advanced","operationId":"registry_advanced_api_registry_advanced_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Q"}},{"name":"province","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":2},{"type":"null"}],"title":"Province"}},{"name":"city","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"City"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"act","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Act"}},{"name":"corporation_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Corporation Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/registry/stats":{"get":{"summary":"Registry Stats","operationId":"registry_stats_api_registry_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/registry/province/{province_code}":{"get":{"summary":"Registry By Province","operationId":"registry_by_province_api_registry_province__province_code__get","parameters":[{"name":"province_code","in":"path","required":true,"schema":{"type":"string","minLength":2,"maxLength":2,"title":"Province Code"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/registry/health":{"get":{"summary":"Registry Health","operationId":"registry_health_api_registry_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/alerts/subscribe":{"post":{"summary":"Alerts Subscribe","operationId":"alerts_subscribe_api_alerts_subscribe_post","parameters":[{"name":"alert_type","in":"query","required":true,"schema":{"type":"string","title":"Alert Type"}},{"name":"city_slug","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City Slug"}},{"name":"zone_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Zone Code"}},{"name":"dls","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dls"}},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lat"}},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lon"}},{"name":"radius_km","in":"query","required":false,"schema":{"type":"number","default":1.0,"title":"Radius Km"}},{"name":"webhook_url","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Webhook Url"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/alerts/subscriptions":{"get":{"summary":"Alerts List","operationId":"alerts_list_api_alerts_subscriptions_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/alerts/subscription/{sub_id}":{"delete":{"summary":"Alerts Deactivate","operationId":"alerts_deactivate_api_alerts_subscription__sub_id__delete","parameters":[{"name":"sub_id","in":"path","required":true,"schema":{"type":"integer","title":"Sub Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/alerts/snapshots":{"get":{"summary":"Alerts Snapshots","operationId":"alerts_snapshots_api_alerts_snapshots_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/alerts/stats":{"get":{"summary":"Alerts Stats","operationId":"alerts_stats_api_alerts_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/alerts/health":{"get":{"summary":"Alerts Health","operationId":"alerts_health_api_alerts_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/zapier/triggers/new-permits":{"get":{"summary":"Zapier New Permits","description":"Zapier poll trigger: new building permits issued since the given timestamp.\n\nQueries building_permits tables across all cities (or a single city if `city` is given).\nReturns up to 100 records, ordered by oldest first so Zapier can page through.","operationId":"zapier_new_permits_api_zapier_triggers_new_permits_get","parameters":[{"name":"city","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"City slug filter (e.g. calgary, toronto)","title":"City"},"description":"City slug filter (e.g. calgary, toronto)"},{"name":"since","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ISO 8601 timestamp — only return permits with issue_date > since","title":"Since"},"description":"ISO 8601 timestamp — only return permits with issue_date > since"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Zapier New Permits Api Zapier Triggers New Permits Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/zapier/triggers/zoning-changes":{"get":{"summary":"Zapier Zoning Changes","description":"Zapier poll trigger: zoning district changes since the given timestamp.\n\nQueries zoning_districts tables across all cities (or a single city).\nReturns up to 100 records with the standard Zapier pagination envelope.","operationId":"zapier_zoning_changes_api_zapier_triggers_zoning_changes_get","parameters":[{"name":"city","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"City slug filter (e.g. calgary, toronto)","title":"City"},"description":"City slug filter (e.g. calgary, toronto)"},{"name":"since","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ISO 8601 timestamp — only return zoning changes after this time","title":"Since"},"description":"ISO 8601 timestamp — only return zoning changes after this time"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Zapier Zoning Changes Api Zapier Triggers Zoning Changes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/v1/storage-status":{"get":{"tags":["upload"],"summary":"Storage Status","description":"Get storage status of the database volume.","operationId":"storage_status_api_v1_storage_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/v1/download-db/{filename}":{"get":{"tags":["upload"],"summary":"Download Database File","description":"TEMPORARY: Download a database file from the volume. Requires UPLOAD_TOKEN.","operationId":"download_database_file_api_v1_download_db__filename__get","parameters":[{"name":"filename","in":"path","required":true,"schema":{"type":"string","title":"Filename"}},{"name":"token","in":"query","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"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/v1/fetch-db/{filename}":{"post":{"tags":["upload"],"summary":"Fetch Database From Url","description":"TEMPORARY: Download a file from a URL and save to volume. Requires UPLOAD_TOKEN.","operationId":"fetch_database_from_url_api_v1_fetch_db__filename__post","parameters":[{"name":"filename","in":"path","required":true,"schema":{"type":"string","title":"Filename"}},{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}},{"name":"url","in":"query","required":true,"schema":{"type":"string","title":"Url"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/v1/extract-property-tiles":{"post":{"tags":["upload"],"summary":"Extract Property Tiles","description":"Extract uploaded tiles.db / tiles.zip archive to /data/tiles/.","operationId":"extract_property_tiles_api_v1_extract_property_tiles_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{}]}},"/api/v1/reload-databases":{"post":{"tags":["upload"],"summary":"Reload Databases","description":"Trigger database reload by re-initializing all city services.\n\nCall this after uploading new database files to make the gateway\npick up the changes without restarting the container.","operationId":"reload_databases_api_v1_reload_databases_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{}]}}},"components":{"schemas":{"APIStatus":{"properties":{"status":{"type":"string","title":"Status"},"version":{"type":"string","title":"Version"},"build":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Build"},"endpoints":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Endpoints"}},"type":"object","required":["status","version"],"title":"APIStatus","description":"API root status response."},"BatchDLSItem":{"properties":{"dls_string":{"type":"string","maxLength":30,"minLength":5,"title":"Dls String"},"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id","description":"Optional identifier for tracking"}},"type":"object","required":["dls_string"],"title":"BatchDLSItem","description":"Single item for batch DLS to GPS conversion."},"BatchDLSToGPSRequest":{"properties":{"items":{"items":{"$ref":"#/components/schemas/BatchDLSItem"},"type":"array","maxItems":1000,"minItems":1,"title":"Items","description":"List of DLS strings to convert (max 1000)"},"province":{"anyOf":[{"type":"string","enum":["AB","SK","MB","BC"]},{"type":"null"}],"title":"Province","description":"Province code for all items (auto-detected if not provided)"}},"type":"object","required":["items"],"title":"BatchDLSToGPSRequest","description":"Request schema for batch DLS to GPS conversion."},"BatchGPSItem":{"properties":{"lat":{"type":"number","maximum":90.0,"minimum":-90.0,"title":"Lat"},"lon":{"type":"number","maximum":180.0,"minimum":-180.0,"title":"Lon"},"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id","description":"Optional identifier for tracking"}},"type":"object","required":["lat","lon"],"title":"BatchGPSItem","description":"Single item for batch GPS to DLS conversion."},"BatchGPSToDLSRequest":{"properties":{"items":{"items":{"$ref":"#/components/schemas/BatchGPSItem"},"type":"array","maxItems":1000,"minItems":1,"title":"Items","description":"List of GPS coordinates to convert (max 1000)"},"province":{"anyOf":[{"type":"string","enum":["AB","SK","MB","BC"]},{"type":"null"}],"title":"Province","description":"Province code for all items (auto-detected if not provided)"}},"type":"object","required":["items"],"title":"BatchGPSToDLSRequest","description":"Request schema for batch GPS to DLS conversion."},"BatchResponse":{"properties":{"results":{"items":{"$ref":"#/components/schemas/BatchResultItem"},"type":"array","title":"Results","description":"List of conversion results"},"total":{"type":"integer","title":"Total","description":"Total number of items processed"},"successful":{"type":"integer","title":"Successful","description":"Number of successful conversions"},"failed":{"type":"integer","title":"Failed","description":"Number of failed conversions"},"credits_used":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Credits Used","description":"Number of daily allowance calls used for this batch"}},"type":"object","required":["results","total","successful","failed"],"title":"BatchResponse","description":"Response schema for batch conversions."},"BatchResultItem":{"properties":{"success":{"type":"boolean","title":"Success","description":"Whether conversion succeeded"},"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id","description":"Original identifier if provided"},"data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Data","description":"Conversion result data"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error","description":"Error message if conversion failed"},"index":{"type":"integer","title":"Index","description":"Index in original request"}},"type":"object","required":["success","index"],"title":"BatchResultItem","description":"Single result item in batch response."},"Body_complete_database_upload_api_v1_upload_db_complete_post":{"properties":{"session_id":{"type":"string","title":"Session Id"},"total_chunks":{"type":"integer","title":"Total Chunks"},"original_filename":{"type":"string","title":"Original Filename"},"checksum":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Checksum"},"target_subdir":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target Subdir"}},"type":"object","required":["session_id","total_chunks","original_filename"],"title":"Body_complete_database_upload_api_v1_upload_db_complete_post"},"Body_contact_submit_contact_post":{"properties":{"name":{"type":"string","title":"Name"},"email":{"type":"string","title":"Email"},"subject":{"type":"string","title":"Subject","default":""},"message":{"type":"string","title":"Message"},"website":{"type":"string","title":"Website","default":""},"kind":{"type":"string","title":"Kind","default":""},"company":{"type":"string","title":"Company","default":""},"volume":{"type":"string","title":"Volume","default":""}},"type":"object","required":["name","email","message"],"title":"Body_contact_submit_contact_post"},"Body_upload_database_chunk_api_v1_upload_db_chunk_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"},"chunk_number":{"type":"integer","title":"Chunk Number"},"total_chunks":{"type":"integer","title":"Total Chunks"},"session_id":{"type":"string","title":"Session Id"},"original_filename":{"type":"string","title":"Original Filename"}},"type":"object","required":["file","chunk_number","total_chunks","session_id","original_filename"],"title":"Body_upload_database_chunk_api_v1_upload_db_chunk_post"},"BuildingPermit":{"properties":{"permit_id":{"type":"string","title":"Permit Id","description":"Permit ID"},"permit_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Permit Type","description":"Permit type (null when the source omits it)"},"address":{"type":"string","title":"Address","description":"Civic address","default":""},"legal_description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Legal Description","description":"Legal land description"},"applicant":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Applicant","description":"Applicant name"},"contractor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contractor","description":"Contractor name"},"work_description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Work Description","description":"Description of work"},"estimated_value":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Estimated Value","description":"Estimated construction value"},"application_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Application Date","description":"Application date"},"issue_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Issue Date","description":"Permit issue date"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status","description":"Permit status (null when the source omits it)"},"lat":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lat","description":"Latitude"},"lon":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lon","description":"Longitude"},"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City","description":"City name"},"province":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Province","description":"Province"},"city_slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City Slug","description":"City slug identifier"}},"type":"object","required":["permit_id"],"title":"BuildingPermit","description":"Building permit record."},"BuildingPermitResponse":{"properties":{"query":{"type":"string","title":"Query"},"count":{"type":"integer","title":"Count","description":"Number of results in this page"},"total":{"type":"integer","title":"Total","description":"Total matching records across all pages"},"limit":{"type":"integer","title":"Limit","description":"Max results per page"},"offset":{"type":"integer","title":"Offset","description":"Current page offset"},"results":{"items":{"$ref":"#/components/schemas/BuildingPermit"},"type":"array","title":"Results"}},"type":"object","required":["query","count","total","limit","offset","results"],"title":"BuildingPermitResponse","description":"Building permit search results with pagination metadata."},"CensusByDLSResponse":{"properties":{"dls":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dls","description":"DLS coordinates"},"lat":{"type":"number","title":"Lat","description":"Latitude"},"lon":{"type":"number","title":"Lon","description":"Longitude"},"da_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Da Id","description":"Dissemination Area ID"},"ct_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ct Id","description":"Census Tract ID"},"cma_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cma Id","description":"Census Metropolitan Area ID"},"profile":{"anyOf":[{"$ref":"#/components/schemas/CensusProfile"},{"type":"null"}],"description":"Census profile data"},"matched_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Matched By","description":"Match method: 'exact_dls' or 'nearest_centroid'"},"distance_km":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Distance Km","description":"Distance from query point to centroid (km)"}},"type":"object","required":["lat","lon"],"title":"CensusByDLSResponse","description":"Census data linked to DLS coordinates."},"CensusProfile":{"properties":{"da_id":{"type":"string","title":"Da Id","description":"Dissemination Area ID"},"census_year":{"type":"integer","title":"Census Year","description":"Census year"},"geography_name":{"type":"string","title":"Geography Name","description":"Geography name"},"geography_type":{"type":"string","title":"Geography Type","description":"Geography type (DA, CT, CMA, etc.)"},"population":{"type":"integer","title":"Population","description":"Total population"},"households":{"type":"integer","title":"Households","description":"Number of private households"},"avg_income":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Avg Income","description":"Average household income"},"median_age":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Median Age","description":"Median age"},"median_income":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Median Income","description":"Median household income"},"dwelling_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Dwelling Count","description":"Total dwellings"},"data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Data","description":"Additional census variables"},"last_updated":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Updated","description":"Last update timestamp"}},"type":"object","required":["da_id","census_year","geography_name","geography_type","population","households"],"title":"CensusProfile","description":"Census profile for a Dissemination Area."},"ContextRequest":{"properties":{"coordinates":{"anyOf":[{"$ref":"#/components/schemas/Coordinates"},{"type":"null"}]},"address":{"anyOf":[{"type":"string","maxLength":300,"minLength":3},{"type":"null"}],"title":"Address"},"dls":{"anyOf":[{"type":"string","maxLength":40,"minLength":5},{"type":"null"}],"title":"Dls"},"city":{"anyOf":[{"type":"string","pattern":"^[a-z0-9-]+$"},{"type":"null"}],"title":"City"},"radius_m":{"type":"integer","maximum":50000.0,"minimum":1.0,"title":"Radius M","default":1000},"safety_limit":{"type":"integer","maximum":500.0,"minimum":1.0,"title":"Safety Limit","default":50},"permit_limit":{"type":"integer","maximum":250.0,"minimum":1.0,"title":"Permit Limit","default":25}},"additionalProperties":false,"type":"object","title":"ContextRequest"},"Coordinates":{"properties":{"lat":{"type":"number","maximum":84.0,"minimum":41.0,"title":"Lat","description":"Canadian latitude in decimal degrees"},"lon":{"type":"number","maximum":-52.0,"minimum":-142.0,"title":"Lon","description":"Canadian longitude in decimal degrees"}},"type":"object","required":["lat","lon"],"title":"Coordinates"},"DLSToGPSRequest":{"properties":{"dls_string":{"type":"string","maxLength":30,"minLength":5,"title":"Dls String","description":"DLS string (e.g., 'NE-02-003-04W5', 'SE 1-1-1 W4M')"},"province":{"anyOf":[{"type":"string","enum":["AB","SK","MB","BC"]},{"type":"null"}],"title":"Province","description":"Province code (auto-detected from meridian if not provided)"}},"type":"object","required":["dls_string"],"title":"DLSToGPSRequest","description":"Request schema for DLS to GPS conversion."},"DLSToGPSResponse":{"properties":{"lat":{"type":"number","title":"Lat","description":"Latitude in decimal degrees"},"lon":{"type":"number","title":"Lon","description":"Longitude in decimal degrees"},"dls":{"type":"string","title":"Dls","description":"Normalized DLS string"},"description":{"type":"string","title":"Description","description":"Description of the point"},"province":{"type":"string","title":"Province","description":"Province code"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"Optional hint (e.g., remaining free quota for anonymous users)"}},"type":"object","required":["lat","lon","dls","description","province"],"title":"DLSToGPSResponse","description":"Response schema for DLS to GPS conversion."},"DemoLoginRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name","default":"Demo User"}},"type":"object","required":["email"],"title":"DemoLoginRequest","description":"Demo login for development/testing."},"EmailLoginRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"password":{"type":"string","title":"Password"}},"type":"object","required":["email","password"],"title":"EmailLoginRequest","description":"Log in with email and password."},"EmailSignupRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"password":{"type":"string","maxLength":255,"minLength":8,"title":"Password"},"name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Name"}},"type":"object","required":["email","password"],"title":"EmailSignupRequest","description":"Sign up with email and password."},"ErrorResponse":{"properties":{"error":{"type":"string","title":"Error","description":"Error type"},"message":{"type":"string","title":"Message","description":"Error message"},"details":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Details","description":"Additional error details"}},"type":"object","required":["error","message"],"title":"ErrorResponse","description":"Standard error response schema."},"GPSToDLSRequest":{"properties":{"lat":{"type":"number","maximum":90.0,"minimum":-90.0,"title":"Lat","description":"Latitude in decimal degrees"},"lon":{"type":"number","maximum":180.0,"minimum":-180.0,"title":"Lon","description":"Longitude in decimal degrees"},"province":{"anyOf":[{"type":"string","enum":["AB","SK","MB","BC"]},{"type":"null"}],"title":"Province","description":"Province code (auto-detected if not provided)"}},"type":"object","required":["lat","lon"],"title":"GPSToDLSRequest","description":"Request schema for GPS to DLS conversion."},"GPSToDLSResponse":{"properties":{"dls":{"type":"string","title":"Dls","description":"DLS string (e.g., 'NE-02-003-04W5')"},"quarter":{"type":"string","title":"Quarter","description":"Quarter section (NE, NW, SE, SW)"},"section":{"type":"integer","maximum":36.0,"minimum":1.0,"title":"Section","description":"Section number (1-36)"},"township":{"type":"integer","minimum":1.0,"title":"Township","description":"Township number"},"range":{"type":"integer","minimum":1.0,"title":"Range","description":"Range number"},"meridian":{"type":"integer","maximum":6.0,"minimum":1.0,"title":"Meridian","description":"Meridian (1-6)"},"province":{"type":"string","title":"Province","description":"Province code"},"distance_km":{"type":"number","minimum":0.0,"title":"Distance Km","description":"Distance to section center in km"},"confidence":{"type":"string","enum":["high","medium","low"],"title":"Confidence","description":"Confidence level"},"center_lat":{"type":"number","title":"Center Lat","description":"Section center latitude"},"center_lon":{"type":"number","title":"Center Lon","description":"Section center longitude"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"Optional hint (e.g., remaining free quota for anonymous users)"}},"type":"object","required":["dls","quarter","section","township","range","meridian","province","distance_km","confidence","center_lat","center_lon"],"title":"GPSToDLSResponse","description":"Response schema for GPS to DLS conversion."},"GapResult":{"properties":{"da_id":{"type":"string","title":"Da Id"},"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City"},"population":{"type":"integer","title":"Population"},"nearby_endpoints_10km":{"type":"integer","title":"Nearby Endpoints 10Km"},"gap_score":{"type":"number","title":"Gap Score"},"severity":{"type":"string","title":"Severity"},"centroid_lat":{"type":"number","title":"Centroid Lat"},"centroid_lon":{"type":"number","title":"Centroid Lon"}},"type":"object","required":["da_id","population","nearby_endpoints_10km","gap_score","severity","centroid_lat","centroid_lon"],"title":"GapResult"},"GapSummary":{"properties":{"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City"},"das_scored":{"type":"integer","title":"Das Scored"},"total_population":{"type":"integer","title":"Total Population"},"critical_gaps":{"type":"integer","title":"Critical Gaps"},"high_gaps":{"type":"integer","title":"High Gaps"},"medium_gaps":{"type":"integer","title":"Medium Gaps"},"low_gaps":{"type":"integer","title":"Low Gaps"},"pct_underserved":{"type":"number","title":"Pct Underserved"},"avg_radios_per_da":{"type":"number","title":"Avg Radios Per Da"}},"type":"object","required":["das_scored","total_population","critical_gaps","high_gaps","medium_gaps","low_gaps","pct_underserved","avg_radios_per_da"],"title":"GapSummary"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"HealthResponse":{"properties":{"status":{"type":"string","title":"Status"},"database":{"type":"string","title":"Database"},"towers_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Towers Count"}},"type":"object","required":["status","database"],"title":"HealthResponse"},"LocationRequest":{"properties":{"coordinates":{"anyOf":[{"$ref":"#/components/schemas/Coordinates"},{"type":"null"}]},"address":{"anyOf":[{"type":"string","maxLength":300,"minLength":3},{"type":"null"}],"title":"Address"},"dls":{"anyOf":[{"type":"string","maxLength":40,"minLength":5},{"type":"null"}],"title":"Dls"},"city":{"anyOf":[{"type":"string","pattern":"^[a-z0-9-]+$"},{"type":"null"}],"title":"City"}},"additionalProperties":false,"type":"object","title":"LocationRequest","description":"Resolve exactly one representation of a Canadian location."},"LocationResponse":{"properties":{"contract_version":{"type":"string","const":"location/v2","title":"Contract Version","default":"location/v2"},"location":{"additionalProperties":true,"type":"object","title":"Location"},"quality":{"$ref":"#/components/schemas/ResolutionQuality"},"provenance":{"additionalProperties":true,"type":"object","title":"Provenance"}},"type":"object","required":["location","quality","provenance"],"title":"LocationResponse"},"PropertyAssessment":{"properties":{"roll_number":{"type":"string","title":"Roll Number","description":"Property roll number","default":""},"address":{"type":"string","title":"Address","description":"Civic address","default":""},"assessed_value":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Assessed Value","description":"Total assessed value (null = not publicly available, e.g. MPAC-restricted Ontario)"},"land_value":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Land Value","description":"Land value portion"},"improvement_value":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Improvement Value","description":"Building value portion"},"property_type":{"type":"string","title":"Property Type","description":"Property classification","default":"Unknown"},"lot_size_sqm":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lot Size Sqm","description":"Lot size in square meters"},"year_built":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Year Built","description":"Year building was constructed"},"dls":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dls","description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)"},"lat":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lat","description":"Latitude"},"lon":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lon","description":"Longitude"},"assessment_year":{"type":"integer","title":"Assessment Year","description":"Assessment year","default":2024},"neighborhood":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Neighborhood","description":"Neighborhood name"},"community_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Community Code","description":"Community code"},"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City","description":"City name"},"province":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Province","description":"Province"}},"type":"object","title":"PropertyAssessment","description":"Property assessment record.\n\nUses extra='ignore' to silently drop unknown fields from city-specific\ndatabase schemas that don't match the canonical response model. Also\nprovides safe defaults for required fields to prevent cascading\nResponseValidationError when data is incomplete."},"PropertyReport":{"properties":{"roll_number":{"type":"string","title":"Roll Number","description":"Property roll number"},"address":{"type":"string","title":"Address","description":"Civic address"},"property":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Property","description":"Property assessment data"},"permits":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Permits","description":"Building permits at this address"},"zoning":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Zoning","description":"Zoning information at this location"},"dls":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dls","description":"DLS coordinates (QTR-SEC-TWP-RNG-MER)"},"generated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Generated At","description":"Report generation timestamp (ISO 8601)"}},"type":"object","required":["roll_number","address"],"title":"PropertyReport","description":"Consolidated property report: assessment + permits + zoning + DLS."},"PropertySearchResponse":{"properties":{"query":{"type":"string","title":"Query"},"count":{"type":"integer","title":"Count","description":"Number of results in this page"},"total":{"type":"integer","title":"Total","description":"Total matching records across all pages"},"limit":{"type":"integer","title":"Limit","description":"Max results per page"},"offset":{"type":"integer","title":"Offset","description":"Current page offset"},"results":{"items":{"$ref":"#/components/schemas/PropertyAssessment"},"type":"array","title":"Results"}},"type":"object","required":["query","count","total","limit","offset","results"],"title":"PropertySearchResponse","description":"Property search results with pagination metadata."},"RentalPrice":{"properties":{"ref_date":{"type":"string","title":"Ref Date","description":"Quarter reference date (e.g. '2019-01', '2019-04')"},"geo":{"type":"string","title":"Geo","description":"CMA name"},"dguid":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dguid","description":"Geography DGUID"},"rental_unit_type":{"type":"string","title":"Rental Unit Type","description":"Type of rental unit"},"average_asking_rent":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Average Asking Rent","description":"Average asking rent in dollars"},"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City","description":"City slug (e.g. calgary, toronto)"}},"type":"object","required":["ref_date","geo","rental_unit_type"],"title":"RentalPrice","description":"Rental price record for a CMA."},"RentalPriceListResponse":{"properties":{"count":{"type":"integer","title":"Count","description":"Number of results in this page"},"total":{"type":"integer","title":"Total","description":"Total matching records"},"limit":{"type":"integer","title":"Limit","description":"Max results per page"},"offset":{"type":"integer","title":"Offset","description":"Current page offset"},"results":{"items":{"$ref":"#/components/schemas/RentalPrice"},"type":"array","title":"Results"}},"type":"object","required":["count","total","limit","offset","results"],"title":"RentalPriceListResponse","description":"Paginated rental price list."},"RentalTrendResponse":{"properties":{"city":{"type":"string","title":"City","description":"City slug"},"rental_unit_type":{"type":"string","title":"Rental Unit Type","description":"Rental unit type"},"data":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Data","description":"List of {ref_date, average_asking_rent} dicts"},"total_quarters":{"type":"integer","title":"Total Quarters","description":"Number of quarters in the series"},"min_rent":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Min Rent","description":"Minimum rent in series"},"max_rent":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Max Rent","description":"Maximum rent in series"}},"type":"object","required":["city","rental_unit_type","data","total_quarters"],"title":"RentalTrendResponse","description":"Time series of rental prices for a specific unit type."},"ResolutionQuality":{"properties":{"status":{"type":"string","enum":["resolved","partial","unresolved"],"title":"Status"},"methods":{"items":{"type":"string"},"type":"array","title":"Methods"},"warnings":{"items":{"type":"string"},"type":"array","title":"Warnings"}},"type":"object","required":["status"],"title":"ResolutionQuality"},"SafetyInvolvedPerson":{"properties":{"source_record_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Record Id"},"source_family":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Family"},"identity_scope":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Identity Scope"},"snapshot_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Snapshot Id"},"record_kind":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Record Kind"},"collision_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Collision Id"},"occurred_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Occurred At"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"grain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Grain"},"injury":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Injury"},"road_user":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Road User"},"neighbourhood":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Neighbourhood"},"street_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Street Label"},"lat":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lat"},"lon":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lon"},"city_slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City Slug"}},"type":"object","title":"SafetyInvolvedPerson","description":"One source-row safety record at involved-person grain."},"SafetySearchResponse":{"properties":{"query":{"type":"string","title":"Query"},"count":{"type":"integer","title":"Count"},"total":{"type":"integer","title":"Total"},"limit":{"type":"integer","title":"Limit"},"offset":{"type":"integer","title":"Offset"},"results":{"items":{"$ref":"#/components/schemas/SafetyInvolvedPerson"},"type":"array","title":"Results"}},"type":"object","required":["query","count","total","limit","offset","results"],"title":"SafetySearchResponse"},"SafetyStats":{"properties":{"total_rows":{"type":"integer","title":"Total Rows"},"distinct_collisions":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Distinct Collisions"},"by_injury":{"additionalProperties":{"type":"integer"},"type":"object","title":"By Injury"},"distinct_records":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Distinct Records"},"by_category":{"additionalProperties":{"type":"integer"},"type":"object","title":"By Category"},"by_family":{"additionalProperties":{"type":"integer"},"type":"object","title":"By Family"},"by_grain":{"additionalProperties":{"type":"integer"},"type":"object","title":"By Grain"},"by_record_kind":{"additionalProperties":{"type":"integer"},"type":"object","title":"By Record Kind"},"feed_rows":{"additionalProperties":{"type":"integer"},"type":"object","title":"Feed Rows"}},"type":"object","required":["total_rows"],"title":"SafetyStats"},"SubscriptionResponse":{"properties":{"tier":{"type":"string","title":"Tier","default":"free"},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Name"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"stripe_customer_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stripe Customer Id"},"stripe_subscription_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stripe Subscription Id"},"billing_cycle":{"type":"string","title":"Billing Cycle","default":"monthly"},"current_period_start":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Current Period Start"},"current_period_end":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Current Period End"}},"type":"object","title":"SubscriptionResponse","description":"Subscription info included in user response."},"TokenResponse":{"properties":{"access_token":{"type":"string","title":"Access Token"},"token_type":{"type":"string","title":"Token Type","default":"bearer"},"expires_in":{"type":"integer","title":"Expires In"},"user":{"$ref":"#/components/schemas/UserResponse"}},"type":"object","required":["access_token","expires_in","user"],"title":"TokenResponse","description":"JWT token response returned after login/signup."},"TowerResponse":{"properties":{"tower_id":{"type":"string","title":"Tower Id"},"client_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client Name"},"carrier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Carrier"},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address"},"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City"},"province":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Province"},"postal_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Postal Code"},"latitude":{"type":"number","title":"Latitude"},"longitude":{"type":"number","title":"Longitude"},"height_meters":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Height Meters"},"technology":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Technology"},"frequency_range":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Frequency Range"},"frequency_low":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Frequency Low"},"frequency_high":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Frequency High"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"antenna_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Antenna Type"},"power_watts":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Power Watts"},"distance_meters":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Distance Meters"},"distance_km":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Distance Km"},"authorization_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization Date"},"expiry_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expiry Date"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated At"},"bands":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Bands"}},"type":"object","required":["tower_id","latitude","longitude"],"title":"TowerResponse"},"TowerStatsResponse":{"properties":{"total":{"type":"integer","title":"Total"},"unique_carriers":{"type":"integer","title":"Unique Carriers"},"unique_technologies":{"type":"integer","title":"Unique Technologies"},"avg_height":{"type":"number","title":"Avg Height"},"min_height":{"type":"number","title":"Min Height"},"max_height":{"type":"number","title":"Max Height"}},"type":"object","required":["total","unique_carriers","unique_technologies","avg_height","min_height","max_height"],"title":"TowerStatsResponse"},"UploadComplete":{"properties":{"success":{"type":"boolean","title":"Success"},"message":{"type":"string","title":"Message"},"filename":{"type":"string","title":"Filename"},"size_bytes":{"type":"integer","title":"Size Bytes"},"target_path":{"type":"string","title":"Target Path"}},"type":"object","required":["success","message","filename","size_bytes","target_path"],"title":"UploadComplete"},"UserResponse":{"properties":{"id":{"type":"string","title":"Id"},"email":{"type":"string","title":"Email"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"picture_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Picture Url"},"oauth_provider":{"type":"string","title":"Oauth Provider"},"is_active":{"type":"boolean","title":"Is Active"},"is_verified":{"type":"boolean","title":"Is Verified","default":false},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"last_login_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Login At"},"subscription":{"anyOf":[{"$ref":"#/components/schemas/SubscriptionResponse"},{"type":"null"}]},"plan":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Plan"},"plan_display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Plan Display Name"}},"type":"object","required":["id","email","oauth_provider","is_active"],"title":"UserResponse","description":"Basic user response (public fields only)."},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"ZoneCodeInfo":{"properties":{"code":{"type":"string","title":"Code","description":"Zone code (e.g., C-C1, R-G)"},"label":{"type":"string","title":"Label","description":"Zone label"},"description":{"type":"string","title":"Description","description":"Full description"},"major_category":{"type":"string","title":"Major Category","description":"Major category (Residential, Commercial, etc.)"},"generalized_category":{"type":"string","title":"Generalized Category","description":"Generalized category"},"district_count":{"type":"integer","title":"District Count","description":"Number of districts with this code"}},"type":"object","required":["code","label","description","major_category","generalized_category","district_count"],"title":"ZoneCodeInfo","description":"Zone code reference information."},"ZoningByGPSResponse":{"properties":{"lat":{"type":"number","title":"Lat","description":"Query latitude"},"lon":{"type":"number","title":"Lon","description":"Query longitude"},"zone_code":{"type":"string","title":"Zone Code","description":"Zone code"},"description":{"type":"string","title":"Description","description":"Zone description"},"major_category":{"type":"string","title":"Major Category","description":"Major category"},"generalized_category":{"type":"string","title":"Generalized Category","description":"Generalized category"},"geometry":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Geometry","description":"District geometry"}},"type":"object","required":["lat","lon","zone_code","description","major_category","generalized_category"],"title":"ZoningByGPSResponse","description":"Zoning lookup result for GPS coordinates."},"ZoningDistrict":{"properties":{"id":{"type":"integer","title":"Id","description":"District ID"},"zone_code":{"type":"string","title":"Zone Code","description":"Zone code"},"area_sqkm":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Area Sqkm","description":"Area in square kilometers"},"perimeter_km":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Perimeter Km","description":"Perimeter in kilometers"},"geometry":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Geometry","description":"GeoJSON geometry"},"created":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created","description":"Created timestamp"},"updated":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated","description":"Updated timestamp"}},"type":"object","required":["id","zone_code"],"title":"ZoningDistrict","description":"Zoning district polygon."}},"securitySchemes":{"HTTPBearer":{"type":"http","scheme":"bearer"}}}}