BLUEBAN 813
water threat intelligence
system state
STANDBY

Integration surface

A water authority does not adopt a dashboard; it adopts something its existing SCADA, GIS or alerting stack can call. Every value this interface displays comes from these endpoints, so anything you can see here you can also pull into another system.

Base URL/api (proxied to :8813)
Authnone in the PoC
FormatsJSON · GeoJSON · PNG · CSV
Docs/docs (OpenAPI)
The PoC API is unauthenticated and read-only apart from asset registration. Production deployment requires authentication, rate limiting and audit logging before it is exposed outside a trusted network.

system

GET/api/health

Liveness probe.

GET/api/status

Which pipeline artefacts exist, plus the data policy. Lets a client degrade honestly instead of guessing.

GET/api/config

Project configuration: AOI, sensor cascade, algorithm parameters.

events

GET/api/events

Event index with state, severity, confidence and class.

GET/api/events/<event-id>

The full water-event object: geometry, classification, anomaly statistics, indices, quality, temporal assessment, forecast, exposure, samples.

GET/api/events/<event-id>/spectrum

Background, event and per-region mean spectra with dispersion, difference, z-scores and per-band SNR.

GET/api/events/<event-id>/forecast

Drift steps with particle positions, the wind series used, and the model's own limitations.

GET/api/events/<event-id>/samples

Field-sampling plan as GeoJSON. Add ?fmt=csv for a field-ready CSV.

GET/api/events/<event-id>/provenance

Complete traceability record including source checksums.

layers

GET/api/layers

Available map layers with AOI bounds and the native grid.

GET/api/layers/anomaly

Colour-mapped anomaly raster (PNG, transparent off-water).

GET/api/layers/events

Detected event polygons as GeoJSON, with class and confidence per region.

validation

GET/api/validation

Every experiment, including the ones that found no effect.

GET/api/hyperspectral-lift

The five-second answer to "did 813 add measurable value?", with confidence intervals.

GET/api/timeseries

Multi-year Sentinel-2 monitoring record per zone.

assets

GET/api/assets

Operator assets and the supported asset taxonomy.

POST/api/assets

Register an operator asset. Body: {name, type, lon, lat, sensitivity?, notes?}.

docs

GET/api/docs-list

Documentation exposed to the Evidence drawer.

Response

Run any endpoint on the left to see its live response. Nothing is mocked: this is the same data the interface renders.

Reproducing every number from scratch

# 1. dependencies
pip install -r requirements.txt

# 2. hyperspectral scene (0.9 GB, CC-BY-4.0, no authentication)
python scripts/fetch_tanager.py 20250601_104901_58_4001

# 3. multi-year Sentinel-2 baseline  (~13 min, 1692 reads)
python scripts/build_baseline.py --years 6 --max-cloud 15

# 4. Tanager <-> Sentinel-3 OLCI matchups
python scripts/build_matchup.py

# 5. experiments
python experiments/validate_simulator.py
python experiments/hyperspectral_ablation.py
BLUEBAN_REGIME=hard python experiments/detectability_ablation.py
BLUEBAN_REGIME=easy python experiments/detectability_ablation.py

# 6. the event object and every map layer
python scripts/build_demo_event.py

# 7. serve
uvicorn services.api.main:app --port 8813
cd apps/web && npm run dev