{"openapi":"3.1.0","info":{"title":"Estonia Intel Hub","version":"0.1.0"},"paths":{"/api/analytics/overview":{"get":{"summary":"Api Overview","operationId":"api_overview_api_analytics_overview_get","parameters":[{"name":"admin_key","in":"query","required":false,"schema":{"type":"string","description":"Admin key","default":"","title":"Admin Key"},"description":"Admin key"},{"name":"bots","in":"query","required":false,"schema":{"type":"integer","description":"Include bots (0/1)","default":0,"title":"Bots"},"description":"Include bots (0/1)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/analytics/top_pages":{"get":{"summary":"Api Top Pages","operationId":"api_top_pages_api_analytics_top_pages_get","parameters":[{"name":"admin_key","in":"query","required":false,"schema":{"type":"string","default":"","title":"Admin Key"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":7,"title":"Days"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":20,"title":"Limit"}},{"name":"bots","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Bots"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/analytics/top_countries":{"get":{"summary":"Api Top Countries","operationId":"api_top_countries_api_analytics_top_countries_get","parameters":[{"name":"admin_key","in":"query","required":false,"schema":{"type":"string","default":"","title":"Admin Key"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":7,"title":"Days"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Limit"}},{"name":"bots","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Bots"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/analytics/top_cities":{"get":{"summary":"Api Top Cities","operationId":"api_top_cities_api_analytics_top_cities_get","parameters":[{"name":"admin_key","in":"query","required":false,"schema":{"type":"string","default":"","title":"Admin Key"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":7,"title":"Days"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Limit"}},{"name":"bots","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Bots"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/analytics/top_referrers":{"get":{"summary":"Api Top Refs","operationId":"api_top_refs_api_analytics_top_referrers_get","parameters":[{"name":"admin_key","in":"query","required":false,"schema":{"type":"string","default":"","title":"Admin Key"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":7,"title":"Days"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":20,"title":"Limit"}},{"name":"bots","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Bots"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/analytics/timeseries":{"get":{"summary":"Api Timeseries","operationId":"api_timeseries_api_analytics_timeseries_get","parameters":[{"name":"admin_key","in":"query","required":false,"schema":{"type":"string","default":"","title":"Admin Key"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":14,"title":"Days"}},{"name":"bots","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Bots"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/analytics/recent":{"get":{"summary":"Api Recent","operationId":"api_recent_api_analytics_recent_get","parameters":[{"name":"admin_key","in":"query","required":false,"schema":{"type":"string","default":"","title":"Admin Key"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"bots","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Bots"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/analytics/session/{session_hash}":{"get":{"summary":"Api Session","description":"All page views by one anonymous session (daily-rotating hash).","operationId":"api_session_api_analytics_session__session_hash__get","parameters":[{"name":"session_hash","in":"path","required":true,"schema":{"type":"string","title":"Session Hash"}},{"name":"admin_key","in":"query","required":false,"schema":{"type":"string","default":"","title":"Admin Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/analytics/ua_families":{"get":{"summary":"Api Ua","operationId":"api_ua_api_analytics_ua_families_get","parameters":[{"name":"admin_key","in":"query","required":false,"schema":{"type":"string","default":"","title":"Admin Key"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":7,"title":"Days"}},{"name":"bots","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Bots"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/cities":{"get":{"summary":"Api Cities","operationId":"api_cities_api_cities_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/city/{slug}/stats":{"get":{"summary":"Api City Stats","operationId":"api_city_stats_api_city__slug__stats_get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/kov/{slug}/stats":{"get":{"summary":"Api Kov Stats","description":"Endpoint for KOV data — works for both 73 local and 5 public cities.","operationId":"api_kov_stats_api_kov__slug__stats_get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/kov/{slug}":{"get":{"summary":"Api Kov Stats","description":"Endpoint for KOV data — works for both 73 local and 5 public cities.","operationId":"api_kov_stats_api_kov__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/dossier/{name}":{"get":{"summary":"Api Dossier","description":"Full dossier for a person across all KOV + sanctions + companies + tenders.","operationId":"api_dossier_api_dossier__name__get","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/inter_kov_persons":{"get":{"summary":"Api Inter Kov Persons","description":"Persons appearing in multiple KOVs — potential network brokers.","operationId":"api_inter_kov_persons_api_inter_kov_persons_get","parameters":[{"name":"min_kov","in":"query","required":false,"schema":{"type":"integer","default":3,"title":"Min Kov"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/eurostat/{dataset}":{"get":{"summary":"Api Eurostat","description":"Eurostat metric data for /eu page.","operationId":"api_eurostat_api_eurostat__dataset__get","parameters":[{"name":"dataset","in":"path","required":true,"schema":{"type":"string","title":"Dataset"}},{"name":"country","in":"query","required":false,"schema":{"type":"string","default":"","title":"Country"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/sanctions/all":{"get":{"summary":"Api Sanctions All","description":"National view of all sanctions/PEP hits with filters + CSV export.","operationId":"api_sanctions_all_api_sanctions_all_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":500,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}},{"name":"kov","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Kov"}},{"name":"kind","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Kind"}},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Q"}},{"name":"csv","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Csv"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sanctions":{"get":{"summary":"Page Sanctions","operationId":"page_sanctions_sanctions_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/timeline":{"get":{"summary":"Page Timeline","operationId":"page_timeline_timeline_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/company":{"get":{"summary":"Page Company","operationId":"page_company_company_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/health":{"get":{"summary":"Health","operationId":"health_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/rss/violations":{"get":{"summary":"Rss Violations","description":"RSS 2.0 feed of recent violations for journalists.","operationId":"rss_violations_rss_violations_get","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":7,"title":"Days"}},{"name":"severity","in":"query","required":false,"schema":{"type":"string","default":"critical,high","title":"Severity"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/health":{"get":{"summary":"Api Health","description":"System health snapshot: pipelines, DB sizes, disk, endpoints.","operationId":"api_health_api_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/company/{reg_code}":{"get":{"summary":"Api Company","description":"Full company dossier: ariregister + KOVs + tenders + sanctions overlap.","operationId":"api_company_api_company__reg_code__get","parameters":[{"name":"reg_code","in":"path","required":true,"schema":{"type":"string","title":"Reg Code"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/persons":{"get":{"summary":"Page Persons","operationId":"page_persons_persons_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/upis":{"get":{"summary":"Page Upis","operationId":"page_upis_upis_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/kov/{slug}/report":{"get":{"summary":"Page Kov Report","description":"Printable audit report for one KOV.","operationId":"page_kov_report_kov__slug__report_get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/tenders_all":{"get":{"summary":"Page Tenders All","operationId":"page_tenders_all_tenders_all_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/find":{"get":{"summary":"Page Find","operationId":"page_find_find_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/reconcile":{"get":{"summary":"Page Reconcile","operationId":"page_reconcile_reconcile_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/tax":{"get":{"summary":"Page Tax","operationId":"page_tax_tax_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/graph":{"get":{"summary":"Page Graph","operationId":"page_graph_graph_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/clusters":{"get":{"summary":"Page Clusters","operationId":"page_clusters_clusters_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/redflags":{"get":{"summary":"Page Redflags","operationId":"page_redflags_redflags_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/movements":{"get":{"summary":"Page Movements","operationId":"page_movements_movements_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/api/movements":{"get":{"summary":"Api Movements","description":"Recent board changes across Estonia — role starts (last N days).","operationId":"api_movements_api_movements_get","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Days"}},{"name":"ehak","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ehak"}},{"name":"role","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Role"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":500,"title":"Limit"}},{"name":"csv","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Csv"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/risk_rank":{"get":{"summary":"Page Risk Rank","operationId":"page_risk_rank_risk_rank_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/api/kpi":{"get":{"summary":"Api Kpi","description":"National KPIs — one snapshot with all top-line numbers.","operationId":"api_kpi_api_kpi_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api-docs":{"get":{"summary":"Page Api Docs","operationId":"page_api_docs_api_docs_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/stories":{"get":{"summary":"Page Stories","operationId":"page_stories_stories_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/spending":{"get":{"summary":"Page Spending","operationId":"page_spending_spending_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/api/spending":{"get":{"summary":"Api Spending","description":"Spending analytics by CPV category. If cpv2 given → detail with top suppliers.","operationId":"api_spending_api_spending_get","parameters":[{"name":"cpv2","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cpv2"}},{"name":"year_from","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Year From"}},{"name":"year_to","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Year To"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/watchlist":{"get":{"summary":"Page Watchlist","operationId":"page_watchlist_watchlist_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/tender/{tender_id}":{"get":{"summary":"Page Tender","operationId":"page_tender_tender__tender_id__get","parameters":[{"name":"tender_id","in":"path","required":true,"schema":{"type":"string","title":"Tender Id"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/tender/{tender_id}":{"get":{"summary":"Api Tender","description":"Full deep-dive on one tender.","operationId":"api_tender_api_tender__tender_id__get","parameters":[{"name":"tender_id","in":"path","required":true,"schema":{"type":"string","title":"Tender Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/gaps":{"get":{"summary":"Page Gaps","operationId":"page_gaps_gaps_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/api/gaps":{"get":{"summary":"Api Gaps","description":"Data coverage audit per KOV — reveals which KOVs have missing data.","operationId":"api_gaps_api_gaps_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/rss/movements":{"get":{"summary":"Rss Movements","description":"RSS feed of recent board changes.","operationId":"rss_movements_rss_movements_get","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Days"}},{"name":"role","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Role"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/embed/kpi":{"get":{"summary":"Embed Kpi","operationId":"embed_kpi_embed_kpi_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/public":{"get":{"summary":"Page Public","description":"Public-facing landing page (story-first).","operationId":"page_public_public_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/about":{"get":{"summary":"Page About","operationId":"page_about_about_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/methodology":{"get":{"summary":"Page Methodology","operationId":"page_methodology_methodology_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/privacy":{"get":{"summary":"Page Privacy","operationId":"page_privacy_privacy_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/story/{slug}":{"get":{"summary":"Page Story","operationId":"page_story_story__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/story/{slug}":{"get":{"summary":"Api Story","description":"Individual investigation permalink data.","operationId":"api_story_api_story__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/data":{"get":{"summary":"Page Data","operationId":"page_data_data_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/riigivaht":{"get":{"summary":"Riigivaht Index","operationId":"riigivaht_index_riigivaht_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/riigivaht/":{"get":{"summary":"Riigivaht Index","operationId":"riigivaht_index_riigivaht__get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/favicon.svg":{"get":{"summary":"Favicon","operationId":"favicon_favicon_svg_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/favicon.ico":{"get":{"summary":"Favicon","operationId":"favicon_favicon_ico_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/patterns":{"get":{"summary":"Api Patterns","description":"Return catalog of 145 corruption detection patterns.","operationId":"api_patterns_api_patterns_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"}},{"name":"detector_only","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Detector Only"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/kov_photo/{slug}":{"get":{"summary":"Api Kov Photo","description":"Return Wikipedia thumbnail URL for the KOV, or generic Estonian landscape.","operationId":"api_kov_photo_api_kov_photo__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/verify":{"get":{"summary":"Api Verify","description":"Data verification report — cross-check key claims against raw data.\nPublic integrity check.","operationId":"api_verify_api_verify_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/discovered_patterns":{"get":{"summary":"Api Discovered Patterns","description":"Auto-discovered patterns from riigivaht_learn.py.","operationId":"api_discovered_patterns_api_discovered_patterns_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/fts_search":{"get":{"summary":"Api Fts Search","description":"Full-text search across all indexed entities using FTS5.","operationId":"api_fts_search_api_fts_search_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","title":"Q"}},{"name":"entity_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Entity Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":20,"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"}}}}}}},"/api/fresh_news":{"get":{"summary":"Api Fresh News","description":"Fresh news from auto-fetch script (com.riigivaht.news). Includes title_ru.","operationId":"api_fresh_news_api_fresh_news_get","parameters":[{"name":"source","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"translated_only","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Translated Only"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/learning_status":{"get":{"summary":"Api Learning Status","description":"Latest learning stats + pattern trend.","operationId":"api_learning_status_api_learning_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/patterns/matrix":{"get":{"summary":"Api Patterns Matrix","description":"Matrix: 78 KOVs × implemented patterns → hit counts. For heatmap viz.","operationId":"api_patterns_matrix_api_patterns_matrix_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/kov/{slug}/patterns":{"get":{"summary":"Api Kov Patterns","description":"Run all implemented pattern detectors against a KOV's data.\nReturns pattern_id → hit_count + names + descriptions.","operationId":"api_kov_patterns_api_kov__slug__patterns_get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/patterns/{pattern_id}":{"get":{"summary":"Api Pattern","description":"Return single pattern by ID.","operationId":"api_pattern_api_patterns__pattern_id__get","parameters":[{"name":"pattern_id","in":"path","required":true,"schema":{"type":"string","title":"Pattern Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/riigivaht/{page}":{"get":{"summary":"Riigivaht Page","description":"Serve static riigivaht.ee files (HTML, CSS, JS).","operationId":"riigivaht_page_riigivaht__page__get","parameters":[{"name":"page","in":"path","required":true,"schema":{"type":"string","title":"Page"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/robots.txt":{"get":{"summary":"Robots","operationId":"robots_robots_txt_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/sitemap.xml":{"get":{"summary":"Sitemap","description":"Auto-generated sitemap.xml.","operationId":"sitemap_sitemap_xml_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/latest":{"get":{"summary":"Page Latest","operationId":"page_latest_latest_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/kov/{slug}/summary":{"get":{"summary":"Page Kov Summary","operationId":"page_kov_summary_kov__slug__summary_get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/kov/{slug}/summary":{"get":{"summary":"Api Kov Summary","description":"Auto-generated narrative summary per KOV.","operationId":"api_kov_summary_api_kov__slug__summary_get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/embed/violations":{"get":{"summary":"Embed Violations","operationId":"embed_violations_embed_violations_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/api/stories":{"get":{"summary":"Api Stories","description":"Pre-built investigations — the biggest surprising findings in one place.","operationId":"api_stories_api_stories_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/rss/redflags":{"get":{"summary":"Rss Redflags","description":"RSS feed of detected red flags (rapid, foreign, zero_employees).","operationId":"rss_redflags_rss_redflags_get","parameters":[{"name":"pattern","in":"query","required":false,"schema":{"type":"string","default":"all","title":"Pattern"}},{"name":"min_value","in":"query","required":false,"schema":{"type":"number","default":100000,"title":"Min Value"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/rss/tenders":{"get":{"summary":"Rss Tenders","description":"RSS feed of recent tender awards.","operationId":"rss_tenders_rss_tenders_get","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":7,"title":"Days"}},{"name":"min_value","in":"query","required":false,"schema":{"type":"number","default":100000,"title":"Min Value"}},{"name":"single_bidder","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Single Bidder"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/risk_rank":{"get":{"summary":"Api Risk Rank","description":"Composite risk score per KOV combining all signals.","operationId":"api_risk_rank_api_risk_rank_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/redflags":{"get":{"summary":"Api Redflags","description":"Detect classic corruption patterns:\n- rapid: company registered < 12mo before tender win\n- foreign: non-EE beneficiary won strategic tender (CPV energy/defence/IT)\n- zero_employees: 0 employees but won large tender","operationId":"api_redflags_api_redflags_get","parameters":[{"name":"pattern","in":"query","required":false,"schema":{"type":"string","default":"all","title":"Pattern"}},{"name":"min_value","in":"query","required":false,"schema":{"type":"number","default":100000,"title":"Min Value"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"csv","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Csv"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/family/{surname}":{"get":{"summary":"Page Family","operationId":"page_family_family__surname__get","parameters":[{"name":"surname","in":"path","required":true,"schema":{"type":"string","title":"Surname"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/family/{surname}":{"get":{"summary":"Api Family","description":"All persons with given surname + companies they share, tenders won.","operationId":"api_family_api_family__surname__get","parameters":[{"name":"surname","in":"path","required":true,"schema":{"type":"string","title":"Surname"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/clusters/address":{"get":{"summary":"Api Cluster Address","description":"Top addresses with the most companies — likely virtual office / shell nests.","operationId":"api_cluster_address_api_clusters_address_get","parameters":[{"name":"min_companies","in":"query","required":false,"schema":{"type":"integer","default":20,"title":"Min Companies"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/clusters/address/{address_hash}":{"get":{"summary":"Api Cluster Address Detail","description":"Companies at a specific address (address passed URL-encoded).","operationId":"api_cluster_address_detail_api_clusters_address__address_hash__get","parameters":[{"name":"address_hash","in":"path","required":true,"schema":{"type":"string","title":"Address Hash"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/clusters/family":{"get":{"summary":"Api Cluster Family","description":"Find family pairs — same surname persons sitting on same company boards.\nReveals family capture patterns.","operationId":"api_cluster_family_api_clusters_family_get","parameters":[{"name":"min_shared","in":"query","required":false,"schema":{"type":"integer","default":2,"title":"Min Shared"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/company/{reg_code}/chain":{"get":{"summary":"Api Company Chain","description":"Traverse shareholder chain — who ultimately owns this company?\nReturns tree structure.","operationId":"api_company_chain_api_company__reg_code__chain_get","parameters":[{"name":"reg_code","in":"path","required":true,"schema":{"type":"string","title":"Reg Code"}},{"name":"depth","in":"query","required":false,"schema":{"type":"integer","default":3,"title":"Depth"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/graph":{"get":{"summary":"Api Graph","description":"Force-directed graph data:\n- Center: a person or company. If not given → top-30 multi-KOV brokers.\n- Depth 1: connected companies. Depth 2: co-boarders.\nReturns { nodes: [], links: [] } for D3.","operationId":"api_graph_api_graph_get","parameters":[{"name":"center","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Center"}},{"name":"depth","in":"query","required":false,"schema":{"type":"integer","default":2,"title":"Depth"}},{"name":"max_nodes","in":"query","required":false,"schema":{"type":"integer","default":150,"title":"Max Nodes"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/dossier/{name}/coboard":{"get":{"summary":"Api Dossier Coboard","description":"Co-board network: people who share/shared board seats with X.","operationId":"api_dossier_coboard_api_dossier__name__coboard_get","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/dossier/{name}/timeline":{"get":{"summary":"Api Dossier Timeline","description":"Chronological events for one person: role starts/ends, tenders won, sanctions.","operationId":"api_dossier_timeline_api_dossier__name__timeline_get","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/tax":{"get":{"summary":"Api Tax","description":"Tax-risk flagged companies + high-earners with anomalies.\nsignal ∈ {ZERO_TAX_TENDER_WINNER, SHELL_COMPANY, HIGH_REVENUE_NO_LABOUR_TAX}","operationId":"api_tax_api_tax_get","parameters":[{"name":"signal","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signal"}},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Q"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":200,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}},{"name":"csv","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Csv"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/reconcile/{slug}":{"get":{"summary":"Api Reconcile","description":"Tender-invoice reconciliation for one KOV:\n- Group tenders by winner_reg (per KOV authority)\n- Group upis_invoices by supplier_code\n- Compare awarded vs paid per supplier","operationId":"api_reconcile_api_reconcile__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/find":{"get":{"summary":"Api Find","description":"Unified search across companies, persons, tenders, violations.","operationId":"api_find_api_find_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","title":"Q"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":10,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/tenders":{"get":{"summary":"Api Tenders","description":"National tenders view — all 66K tenders from tenders_full.db.","operationId":"api_tenders_api_tenders_get","parameters":[{"name":"city","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City"}},{"name":"winner","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Winner"}},{"name":"single_bidder","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Single Bidder"}},{"name":"year_from","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Year From"}},{"name":"year_to","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Year To"}},{"name":"min_value","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Min Value"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":200,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}},{"name":"order","in":"query","required":false,"schema":{"type":"string","default":"date","title":"Order"}},{"name":"csv","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Csv"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/kov/{slug}/report":{"get":{"summary":"Api Kov Report","description":"Aggregated KOV report data: persons, violations, sanctions, UPIS anomalies, news.","operationId":"api_kov_report_api_kov__slug__report_get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/upis":{"get":{"summary":"Api Upis","description":"National view of UPIS budget anomalies across 5 public cities.","operationId":"api_upis_api_upis_get","parameters":[{"name":"city","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City"}},{"name":"severity","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Severity"}},{"name":"anomaly_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Anomaly Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":200,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}},{"name":"csv","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Csv"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/person_search":{"get":{"summary":"Api Person Search","description":"Search persons by name across ariregister — returns companies they hold roles in.","operationId":"api_person_search_api_person_search_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","title":"Q"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/company_search":{"get":{"summary":"Api Company Search","description":"Search companies by name across ariregister.","operationId":"api_company_search_api_company_search_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","title":"Q"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/timeline":{"get":{"summary":"Api Timeline","description":"Recent activity across all KOVs: findings, violations, news.","operationId":"api_timeline_api_timeline_get","parameters":[{"name":"hours","in":"query","required":false,"schema":{"type":"integer","default":72,"title":"Hours"}},{"name":"kov","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Kov"}},{"name":"kind","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Kind"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":300,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/kov/{slug}/findings":{"get":{"summary":"Api Kov Findings","description":"200-agent analyzer findings for one KOV.","operationId":"api_kov_findings_api_kov__slug__findings_get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/findings/summary":{"get":{"summary":"Api Findings Summary","description":"National rollup of all analyzer findings.","operationId":"api_findings_summary_api_findings_summary_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/tax_risk":{"get":{"summary":"Api Tax Risk","description":"National view of tax-risk signals (zero-tax tender winners, shell companies, etc.)","operationId":"api_tax_risk_api_tax_risk_get","parameters":[{"name":"signal_type","in":"query","required":false,"schema":{"type":"string","default":"","title":"Signal Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/cross_kov/suppliers":{"get":{"summary":"Api Cross Kov Suppliers","description":"Suppliers winning tenders in 2+ KOVs.","operationId":"api_cross_kov_suppliers_api_cross_kov_suppliers_get","parameters":[{"name":"min_kov","in":"query","required":false,"schema":{"type":"integer","default":5,"title":"Min Kov"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":200,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/cross_kov/graph":{"get":{"summary":"Api Cross Kov Graph","description":"D3-ready graph: KOVs ↔ multi-KOV suppliers.\nReturns nodes (KOVs + suppliers) + edges.","operationId":"api_cross_kov_graph_api_cross_kov_graph_get","parameters":[{"name":"min_kov","in":"query","required":false,"schema":{"type":"integer","default":10,"title":"Min Kov"}},{"name":"limit_edges","in":"query","required":false,"schema":{"type":"integer","default":1500,"title":"Limit Edges"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/cross-kov":{"get":{"summary":"Page Cross Kov","description":"D3 force-directed visualization of cross-KOV suppliers.","operationId":"page_cross_kov_cross_kov_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/api/benchmark":{"get":{"summary":"Api Benchmark","description":"Cross-KOV benchmark: per-capita spending, single-bidder %, etc.","operationId":"api_benchmark_api_benchmark_get","parameters":[{"name":"sort","in":"query","required":false,"schema":{"type":"string","default":"per_capita_eur","title":"Sort"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":200,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/benchmark":{"get":{"summary":"Page Benchmark","description":"Cross-KOV benchmark dashboard.","operationId":"page_benchmark_benchmark_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/mykov":{"get":{"summary":"Page Mykov","description":"\"My KOV\" address lookup page.","operationId":"page_mykov_mykov_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/request":{"get":{"summary":"Page Request","description":"Citizen request tracker — form + AvTS auto-generator.","operationId":"page_request_request_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/api/request/submit":{"post":{"summary":"Api Request Submit","description":"Create an AvTS request, store + return tracking info.","operationId":"api_request_submit_api_request_submit_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/request/{rid}":{"get":{"summary":"Api Request Get","operationId":"api_request_get_api_request__rid__get","parameters":[{"name":"rid","in":"path","required":true,"schema":{"type":"string","title":"Rid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/requests":{"get":{"summary":"Api Requests List","operationId":"api_requests_list_api_requests_get","parameters":[{"name":"kov_slug","in":"query","required":false,"schema":{"type":"string","title":"Kov Slug"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/mykov/lookup":{"get":{"summary":"Api Mykov Lookup","description":"Find KOV by address keyword (street, city, EHAK).","operationId":"api_mykov_lookup_api_mykov_lookup_get","parameters":[{"name":"query","in":"query","required":true,"schema":{"type":"string","title":"Query"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/i18n":{"get":{"summary":"Api I18N","operationId":"api_i18n_api_i18n_get","parameters":[{"name":"lang","in":"query","required":false,"schema":{"type":"string","default":"ru","title":"Lang"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/audit":{"get":{"summary":"Api Audit","operationId":"api_audit_api_audit_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/rate":{"post":{"summary":"Api Rate","operationId":"api_rate_api_rate_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"get":{"summary":"Api Ratings","operationId":"api_ratings_api_rate_get","parameters":[{"name":"kov_slug","in":"query","required":false,"schema":{"type":"string","title":"Kov Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/eu_compare":{"get":{"summary":"Api Eu Compare","description":"Compare Estonia with Latvia, Lithuania, Finland, Sweden, EU avg.","operationId":"api_eu_compare_api_eu_compare_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/search":{"get":{"summary":"Api Search","description":"Full-text search across all unified.db entities (with LIKE fallback).","operationId":"api_search_api_search_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","title":"Q"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/search":{"get":{"summary":"Page Search","operationId":"page_search_search_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/admin":{"get":{"summary":"Page Admin","operationId":"page_admin_admin_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/budget":{"get":{"summary":"Page Budget","operationId":"page_budget_budget_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/api/budget/{slug}":{"get":{"summary":"Api Budget","description":"Per-KOV budget from local tender data + cross-KOV aggregations.","operationId":"api_budget_api_budget__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/tenders":{"get":{"summary":"Page Tenders","operationId":"page_tenders_tenders_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/api/tenders/risky":{"get":{"summary":"Api Tenders Risky","description":"High-risk tenders: single_bidder + large value.","operationId":"api_tenders_risky_api_tenders_risky_get","parameters":[{"name":"min_value","in":"query","required":false,"schema":{"type":"integer","default":100000,"title":"Min Value"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/schools":{"get":{"summary":"Page Schools","operationId":"page_schools_schools_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/api/schools":{"get":{"summary":"Api Schools","description":"Schools from EHIS data.","operationId":"api_schools_api_schools_get","parameters":[{"name":"kov_slug","in":"query","required":false,"schema":{"type":"string","title":"Kov Slug"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":200,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/votes":{"get":{"summary":"Page Votes","operationId":"page_votes_votes_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/api/votes":{"get":{"summary":"Api Votes","description":"Latest Riigikogu documents. Filters: doc_type, year, free-text q.","operationId":"api_votes_api_votes_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"doc_type","in":"query","required":false,"schema":{"type":"string","default":"","title":"Doc Type"}},{"name":"q","in":"query","required":false,"schema":{"type":"string","default":"","title":"Q"}},{"name":"year","in":"query","required":false,"schema":{"type":"string","default":"","title":"Year"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/riigikogu_stats":{"get":{"summary":"Api Riigikogu Stats","description":"Counts by doc type + year for Riigikogu.","operationId":"api_riigikogu_stats_api_riigikogu_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/petitions":{"get":{"summary":"Page Petitions","operationId":"page_petitions_petitions_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/api/petition/create":{"post":{"summary":"Api Petition Create","operationId":"api_petition_create_api_petition_create_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/petition/{pid}/sign":{"post":{"summary":"Api Petition Sign","operationId":"api_petition_sign_api_petition__pid__sign_post","parameters":[{"name":"pid","in":"path","required":true,"schema":{"type":"string","title":"Pid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/petitions":{"get":{"summary":"Api Petitions List","operationId":"api_petitions_list_api_petitions_get","parameters":[{"name":"kov_slug","in":"query","required":false,"schema":{"type":"string","title":"Kov Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/chat":{"get":{"summary":"Page Chat","operationId":"page_chat_chat_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/api/chat":{"post":{"summary":"Api Chat","description":"Simple Q&A using local data (no LLM needed for basic queries).","operationId":"api_chat_api_chat_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/eu":{"get":{"summary":"Page Eu","operationId":"page_eu_eu_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/predict":{"get":{"summary":"Page Predict","operationId":"page_predict_predict_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/api/predict/anomalies":{"get":{"summary":"Api Predict Anomalies","description":"Identify anomalies: KOV with unusually high single-bidder %, sudden value spike.","operationId":"api_predict_anomalies_api_predict_anomalies_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/carbon":{"get":{"summary":"Page Carbon","operationId":"page_carbon_carbon_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/housing":{"get":{"summary":"Page Housing","operationId":"page_housing_housing_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/api/housing/{slug}":{"get":{"summary":"Api Housing","description":"KOV housing fund: parcels + buildings statistics (works for both schemas).","operationId":"api_housing_api_housing__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/sse/events":{"get":{"summary":"Sse Events","description":"Server-sent events stream of system updates.","operationId":"sse_events_api_sse_events_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/education":{"get":{"summary":"Page Education","operationId":"page_education_education_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/compliance":{"get":{"summary":"Page Compliance","operationId":"page_compliance_compliance_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/api/webhook/register":{"post":{"summary":"Api Webhook Register","description":"Register webhook for event types (new_tender, request_overdue, etc).","operationId":"api_webhook_register_api_webhook_register_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api":{"get":{"summary":"Page Api","operationId":"page_api_api_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/api/national/aggregate":{"get":{"summary":"Api National Aggregate Cached","description":"30s TTL cache wrapper around the heavy aggregate.","operationId":"api_national_aggregate_cached_api_national_aggregate_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/heatmap":{"get":{"summary":"Page Heatmap","operationId":"page_heatmap_heatmap_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/findings":{"get":{"summary":"Page Findings","operationId":"page_findings_findings_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/citizen":{"get":{"summary":"Page Citizen","operationId":"page_citizen_citizen_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/compare":{"get":{"summary":"Page Compare","operationId":"page_compare_compare_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/report":{"get":{"summary":"Page Report","operationId":"page_report_report_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/brokers":{"get":{"summary":"Page Brokers","operationId":"page_brokers_brokers_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/dossier":{"get":{"summary":"Page Dossier","operationId":"page_dossier_dossier_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/violations":{"get":{"summary":"Page Violations","operationId":"page_violations_violations_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/api/violations":{"get":{"summary":"Api Violations National","description":"National violations feed — aggregates all KOV violations tables.","operationId":"api_violations_national_api_violations_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"}},{"name":"severity","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Severity"}},{"name":"kov","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Kov"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":500,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}},{"name":"csv","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Csv"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/whistleblower/submit":{"post":{"summary":"Api Whistle","description":"Anonymous whistleblower submission — no IP logged.","operationId":"api_whistle_api_whistleblower_submit_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/export/{slug}.csv":{"get":{"summary":"Api Export Csv","description":"Export KOV data as CSV for journalists/citizens.","operationId":"api_export_csv_api_export__slug__csv_get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/rss/{slug}":{"get":{"summary":"Api Rss","description":"RSS feed of new findings for one KOV.","operationId":"api_rss_api_rss__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/version":{"get":{"summary":"Api Version","operationId":"api_version_api_version_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/feedback":{"post":{"summary":"Api Feedback Post","description":"Accept feedback from visitors.","operationId":"api_feedback_post_api_feedback_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/feedback/recent":{"get":{"summary":"Api Feedback Recent","description":"Recent feedback (admin only) with filters.","operationId":"api_feedback_recent_api_feedback_recent_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"admin_key","in":"query","required":false,"schema":{"type":"string","default":"","title":"Admin Key"}},{"name":"category","in":"query","required":false,"schema":{"type":"string","default":"","title":"Category"}},{"name":"is_read","in":"query","required":false,"schema":{"type":"string","default":"","title":"Is Read"}},{"name":"archived","in":"query","required":false,"schema":{"type":"string","default":"0","title":"Archived"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/feedback/{fb_id}/update":{"post":{"summary":"Api Feedback Update","description":"Mark as read/archived/replied. Admin only.","operationId":"api_feedback_update_api_feedback__fb_id__update_post","parameters":[{"name":"fb_id","in":"path","required":true,"schema":{"type":"integer","title":"Fb Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/feedback/export.csv":{"get":{"summary":"Api Feedback Export","description":"Export all feedback as CSV. Admin only.","operationId":"api_feedback_export_api_feedback_export_csv_get","parameters":[{"name":"admin_key","in":"query","required":false,"schema":{"type":"string","default":"","title":"Admin Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/status":{"get":{"summary":"Api Admin Status","description":"Admin dashboard: all key stats across DBs.","operationId":"api_admin_status_api_admin_status_get","parameters":[{"name":"admin_key","in":"query","required":false,"schema":{"type":"string","default":"","title":"Admin Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/public_status":{"get":{"summary":"Api Public Status","description":"Public status page data — data freshness, source counts, agent health.","operationId":"api_public_status_api_public_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/weekly_digest":{"get":{"summary":"Api Weekly Digest","description":"Auto-composed weekly digest of top findings.","operationId":"api_weekly_digest_api_weekly_digest_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/riigivaht/status.html":{"get":{"summary":"Riigivaht Status","operationId":"riigivaht_status_riigivaht_status_html_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/riigivaht/votes.html":{"get":{"summary":"Riigivaht Votes","operationId":"riigivaht_votes_riigivaht_votes_html_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/riigivaht/digest.html":{"get":{"summary":"Riigivaht Digest","operationId":"riigivaht_digest_riigivaht_digest_html_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/riigivaht/court.html":{"get":{"summary":"Riigivaht Court","operationId":"riigivaht_court_riigivaht_court_html_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/riigivaht/dhs.html":{"get":{"summary":"Riigivaht Dhs","operationId":"riigivaht_dhs_riigivaht_dhs_html_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/riigivaht/narva/index.html":{"get":{"summary":"Riigivaht Narva","operationId":"riigivaht_narva_riigivaht_narva_index_html_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/riigivaht/narva":{"get":{"summary":"Riigivaht Narva","operationId":"riigivaht_narva_riigivaht_narva_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/riigivaht/narva/":{"get":{"summary":"Riigivaht Narva","operationId":"riigivaht_narva_riigivaht_narva__get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/api/dhs/stats":{"get":{"summary":"Api Dhs Stats","description":"Narva DHS docs stats.","operationId":"api_dhs_stats_api_dhs_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/dhs/search":{"get":{"summary":"Api Dhs Search","description":"Search Narva DHS documents.","operationId":"api_dhs_search_api_dhs_search_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string","default":"","title":"Q"}},{"name":"doc_type","in":"query","required":false,"schema":{"type":"string","default":"","title":"Doc Type"}},{"name":"year","in":"query","required":false,"schema":{"type":"string","default":"","title":"Year"}},{"name":"unit","in":"query","required":false,"schema":{"type":"string","default":"","title":"Unit"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/dhs/download/{pid}/{file_id}":{"get":{"summary":"Api Dhs Download","description":"Proxy download of DHS file (for public access).","operationId":"api_dhs_download_api_dhs_download__pid___file_id__get","parameters":[{"name":"pid","in":"path","required":true,"schema":{"type":"string","title":"Pid"}},{"name":"file_id","in":"path","required":true,"schema":{"type":"string","title":"File Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/court/stats":{"get":{"summary":"Api Court Stats","description":"Court decisions stats.","operationId":"api_court_stats_api_court_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/court/search":{"get":{"summary":"Api Court Search","description":"Search court decisions. FTS5 over case_nr, title, description, parties, full_text.","operationId":"api_court_search_api_court_search_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string","default":"","title":"Q"}},{"name":"case_type","in":"query","required":false,"schema":{"type":"string","default":"","title":"Case Type"}},{"name":"court","in":"query","required":false,"schema":{"type":"string","default":"","title":"Court"}},{"name":"party","in":"query","required":false,"schema":{"type":"string","default":"","title":"Party"}},{"name":"year","in":"query","required":false,"schema":{"type":"string","default":"","title":"Year"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/court/{case_nr}":{"get":{"summary":"Api Court Detail","description":"Detail for one case.","operationId":"api_court_detail_api_court__case_nr__get","parameters":[{"name":"case_nr","in":"path","required":true,"schema":{"type":"string","title":"Case Nr"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/court_analyze":{"get":{"summary":"Api Court Analyze","description":"AI legal analysis: given a query, find relevant cases and summarize.\nRequires ANTHROPIC_API_KEY. Falls back to pure search if not available.","operationId":"api_court_analyze_api_court_analyze_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","title":"Q"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/":{"get":{"summary":"Index","operationId":"index__get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}}},"components":{"schemas":{"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"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"}}}}