Documentação API
API pública do Azaguas.
Endpoints REST + JSON para integrar dados de risco hídrico em ferramentas externas. Sem autenticação para os endpoints públicos. Cache 60s via ISR. Rate-limit informal: máximo razoável ~60 req/min · 1000 req/h.
Endpoints públicos · sem auth
- GET
/api/forecastSnapshot completo: 22 concelhos com risk actual + 72h forecast horário + tempestades activas + sismos recentes.
curl https://azaguas.cv/api/forecast
Estrutura de resposta
{ generatedAt: "2026-05-01T00:00:00.000Z", concelhos: [{ slug: "praia", name: "Praia", ilha: "Santiago", centroidLat: 14.917, centroidLon: -23.508, populacao: 159000, currentRisk: { level: "green", confidence: 0.85, ... } | null, samples: [{ validFrom, precipMm, windKmh, gustKmh, tempC }, ...], marineSamples: [{ validFrom, waveHeightM, ... }, ...] }, ...], activeStorms: [...], recentSeismic: [...] } - GET
/api/decisorExport CSV dos 22 concelhos com nível, métricas 24h, confiança e timestamps. Para Proteção Civil e ferramentas externas (Excel, R, Python).
curl https://azaguas.cv/api/decisor -o azaguas.csv
Estrutura de resposta
CSV: slug,nome,ilha,populacao,nivel,nivel_anterior,vento_max_24h_kmh,chuva_24h_mm,confianca,calculado_em
- GET
/api/concelhos/[slug]Detalhe de um concelho específico: risk actual, forecast 72h, histórico 7d.
curl https://azaguas.cv/api/concelhos/praia
- GET
/api/healthHealth check para uptime monitoring (Better Uptime, Pingdom). Verifica BD com round-trip mínimo.
curl https://azaguas.cv/api/health
Estrutura de resposta
{ status: "ok" | "error", db: "ok" | "down", latencyMs, ts }
Embed · iframe
- iframe
/embed/concelho/[slug]Widget HTML 320×180 com nome do concelho + risco actual + métricas 24h. Designed para incorporar em sites de câmaras municipais ou jornais. Suporta ?lang=pt|kea.
<iframe src="https://azaguas.cv/embed/concelho/praia" width="320" height="180" frameborder="0"></iframe>
Cron jobs · Bearer token
Todos os endpoints /api/cron/* exigem Authorization: Bearer $CRON_SECRET. Em produção são disparados por QStash schedules (Upstash) ou via curl manual.
- POST
/api/cron/forecastPull Open-Meteo Forecast 72h × 22 concelhos + recalcula risk_scores. - POST
/api/cron/nowcastPull Open-Meteo Nowcast (precip 15-min) × 22 concelhos. - POST
/api/cron/marinePull Open-Meteo Marine wave forecast 72h × 22 concelhos. - POST
/api/cron/nhcPull NOAA NHC tempestades tropicais activas Atlântico. - POST
/api/cron/seismicPull USGS sismos ≥M2.5 num bbox de ~400 km de Cabo Verde. - POST
/api/cron/climatologyPull NASA POWER climatologia mensal 1991-2020 normals (semanal). - POST
/api/cron/firesPull NASA FIRMS focos de incêndio VIIRS NRT (estação seca). Requer NASA_FIRMS_KEY.
Termos de uso
- Atribuição: Em produtos derivados, indica fonte como
Azaguas · azaguas.cv
e link para a página de concelho relevante. - Não substitui INMG/SNPCB: Em situações de emergência real, a referência operacional é sempre o INMG (avisos meteorológicos) e SNPCB (Proteção Civil · 132).
- Open data: Dados ingeridos de Open-Meteo, NOAA, NASA, USGS — ver fontes. Reuso permitido nos termos das licenças originais.
- Sem SLA formal: Serviço cívico com best-effort. Para integrações críticas, implementa retries e fallback para INMG.