Serves all LAYERS.md layers via precip-readers. Hybrid layers fall back to R2 for ingested data.
| Band | Sources (fallback order) |
|---|---|
precip | HRDPA 0700/0100 → URMA+MRMS blend → MRMS Pass2/1/Radar → HRDPS → HRRR → NAM |
temperature | URMA → RTMA → RTMA-RU → HRRR AK/CONUS obs → HRDPS → HRRR forecast |
wind_speed, wind_direction, wind_speed_gust | URMA → RTMA → HRRR |
cloud_cover, pressure, dew_point | URMA → RTMA → HRRR |
specific_humidity, relative_humidity | URMA → RTMA |
precip_type | HRRR CONUS/AK obs → forecast → HRDPS → NAM |
slr | HRRR CONUS/AK obs → HRDPS → HRRR forecast |
DSWRF | HRRR CONUS/AK obs |
rqi | MRMS RadarAccumQualityIndex |
precip_rate | MRMS PrecipRate (2-min) |
sfcheadsubrt | NWM analysis → short-range → medium-range |
zwattablrt | NWM analysis |
SOILSAT_TOP | NWM analysis → medium-range |
RSM_0, RSM_1 | NWM SOIL_M + POLARIS theta_s/theta_r |
MUD_0 | NWM SOIL_M + POLARIS clay |
temp_0-10cm, vsm_0-10cm, etc. | SPoRT LIS |
| Band | Sources |
|---|---|
snow_depth | SNODAS + CaLDAS |
vsm_0-10cm | SPoRT + CaLDAS |
precip | HRDPA 24H + MRMS 24H Pass2 |
rsm_0-10cm | SPoRT |
GET /api/v3/{layer_id}?longitude=-98&latitude=39&start=...&end=...
→ GeoJSON FeatureCollection with a `hours`/`days` time array.
layer_id: e.g. "temperature-hourly", "hourly/APCP",
"snow-depth-snodas-daily", "precip-rate/2min/precip".
GET /api/v3/hourly?band=temperature&longitude=-98&latitude=39
→ legacy alias; equivalent to /api/v3/temperature-hourly.
GET /api/v3/map/{layer_id}/ImageServer/tile/{z}/{y}/{x}
?renderingRule={...}&time={startMs,endMs}&mosaicRule={...}
→ 256×256 RGBA PNG. renderingRule must be a Colormap with an
explicit `colorMap` stop list (what `makeRenderingRule` emits
in packages/shared/layers/raster.ts).
GET /tzarr/{target}/{z}/{band}/.zarray
GET /tzarr/{target}/{z}/{band}/{tc}.{ty}.{tx}
GET /health