REST + GraphQL API
api.silent.fish
The same data layer that powers the atlas, the MCP server, the A2A endpoint, and the editorial site. Built for machine consumers from day one. No auth needed for read. JSON-LD on every response.
OpenAPI 3.1 spec →Read endpoints
GET
/api/sitesSearch dive sites. Filter by query, depth, level, month, species, reserve.
GET
/api/sites/{slug}Full site profile for a single site.
GET
/api/sites/{slug}/seasonality12-month seasonality strip with water temps and observations.
GET
/api/operators/charteredAdeos-chartered operator directory.
POST
/api/trips/recommendRanked trip recommendations given user constraints.
POST
/api/subscribeSubscribe to the weekly dispatch.
GET
/api/openapi.jsonOpenAPI 3.1 spec for this API.
Examples
cURL
curl https://silent.fish/api/sites?month=8&species=manta&certification_level=Advanced
curl https://silent.fish/api/sites/hanifaru-bay
curl -X POST https://silent.fish/api/trips/recommend \
-H "Content-Type: application/json" \
-d '{
"month": 8,
"certification_level": "Advanced",
"species": "manta",
"budget_eur": 5000,
"limit": 3
}'TypeScript
const res = await fetch("https://silent.fish/api/sites?month=8&species=manta");
const { data, meta } = await res.json();
for (const site of data) {
console.log(site.name, site.voice_line);
}Python
import requests
r = requests.get("https://silent.fish/api/sites", params={"month": 8, "species": "manta"})
for site in r.json()["data"]:
print(site["name"], "-", site["voice_line"])Pricing
Free
$0
- 1,000 requests / day
- All read endpoints
- JSON-LD responses
- No authentication needed
Pro
$29/mo
- 100,000 requests / day
- All endpoints
- Webhook subscriptions on operator updates
- API key auth
Media + Agency
$199/mo
- Unlimited requests
- Commercial use license
- Annual State of Silence report data export
- Priority support from Adeos