{"openapi":"3.1.0","info":{"title":"silent.fish API","version":"0.1.0","description":"Public read API for the silent.fish atlas. Made by Adeos. Built for AI agents first, humans second. Same data backs the MCP server, A2A endpoint, and the web UI.","contact":{"name":"Adeos","url":"https://silent.fish"},"license":{"name":"Data CC0, prose CC-BY-SA","url":"https://silent.fish/sources"}},"servers":[{"url":"https://silent.fish/api","description":"Production"}],"paths":{"/sites":{"get":{"summary":"Search dive sites","parameters":[{"name":"query","in":"query","schema":{"type":"string"}},{"name":"depth_min_m","in":"query","schema":{"type":"number"}},{"name":"depth_max_m","in":"query","schema":{"type":"number"}},{"name":"certification_level","in":"query","schema":{"type":"string","enum":["Open Water","Advanced","Tec"]}},{"name":"month","in":"query","schema":{"type":"integer","minimum":1,"maximum":12}},{"name":"species","in":"query","schema":{"type":"string"}},{"name":"marine_protected","in":"query","schema":{"type":"boolean"}},{"name":"limit","in":"query","schema":{"type":"integer","default":50,"maximum":100}}],"responses":{"200":{"description":"Sites matching the filter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SiteList"}}}}}}},"/sites/{slug}":{"get":{"summary":"Get full site profile","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Full site detail","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Site"}}}},"404":{"description":"Site not found"}}}},"/sites/{slug}/seasonality":{"get":{"summary":"12-month seasonality strip for a site","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Seasonality strip"}}}},"/operators/chartered":{"get":{"summary":"List Adeos-chartered operators","parameters":[{"name":"region","in":"query","schema":{"type":"string"}},{"name":"species","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Chartered operators"}}}},"/trips/recommend":{"post":{"summary":"Recommend trips ranked by user constraints","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecommendInput"}}}},"responses":{"200":{"description":"Ranked trip recommendations"}}}},"/subscribe":{"post":{"summary":"Subscribe to the weekly dispatch","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string"}}}}}},"responses":{"202":{"description":"Confirmation link sent"}}}}},"components":{"schemas":{"Site":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"region":{"type":"string"},"country":{"type":"string"},"lat":{"type":"number"},"lng":{"type":"number"},"depth_min_m":{"type":"number"},"depth_max_m":{"type":"number"},"certification_level":{"type":"string"},"season_window":{"type":"object","properties":{"start":{"type":"integer"},"end":{"type":"integer"}}},"marine_protected":{"type":"boolean"},"protection_label":{"type":"string","nullable":true},"description":{"type":"string"},"voice_line":{"type":"string"},"marine_life_peak":{"type":"string"},"water_temp_c":{"type":"number"},"url":{"type":"string"}}},"SiteList":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Site"}},"meta":{"type":"object"}}},"RecommendInput":{"type":"object","properties":{"month":{"type":"integer","minimum":1,"maximum":12},"certification_level":{"type":"string","enum":["Open Water","Advanced","Tec"]},"species":{"type":"string"},"region":{"type":"string"},"budget_eur":{"type":"number"},"group_size":{"type":"string","enum":["solo","pair","small-group"]},"limit":{"type":"integer","default":5,"maximum":20}}}}}}