Developer guide
Australia's river gauges are spread across a different portal in every state, each with its own protocol, station numbering, timezone quirks, and update cadence. The gauges endpoints give you all of them through one API, with each gauge's latest level already compared against the Bureau of Meteorology flood classification for that site.
GET /api/v1/gauges returns stations with their latest reading and a derived floodClass: below_minor, minor, moderate, major, or unclassified for gauges without published thresholds. The floodClass filter uses at-or-above semantics, so floodClass=minor also returns gauges at moderate and major.
curl -H "Authorization: Bearer YOUR_API_KEY" \ "https://emergencyapi.com/api/v1/gauges?state=nsw&floodClass=minor"
Every station carries its thresholds with provenance, the local government area (the same ABS LGA codes the declarations API uses), and a readingStatus of live or stale. Stations sourced from the Bureau's Water Data Online (Western Australia) are a one to two day archive, not telemetry; their staleness horizon is 72 hours against 24 for telemetry states.
GET /api/v1/gauges/summary answers the operational question directly: how many gauges are at or above each classification, grouped by state or LGA, plus the station list. Stale readings are counted in their own bucket and never as a current flood signal.
curl -H "Authorization: Bearer YOUR_API_KEY" \ "https://emergencyapi.com/api/v1/gauges/summary?state=sa&groupBy=lga"
Gauge ids are stable and readable: {source}-{stationId}, for example hydstra-nsw-410001 (Murrumbidgee at Wagga Wagga). GET /api/v1/gauges/{id} returns the station plus its trailing six hours of raw readings on every plan.
GET /api/v1/gauges/{id}/readings is the paid history surface. Retention is tiered by granularity: raw readings for 30 days, hourly rollups for 90 days, daily rollups forever. Raw readings inside flood events (from when a gauge first crossed minor until it receded, plus a day either side) are kept permanently at full resolution. interval=auto picks the finest granularity available for your window, and above=minor returns only readings at or above that gauge's threshold.
curl -H "Authorization: Bearer YOUR_API_KEY" \ "https://emergencyapi.com/api/v1/gauges/hydstra-nsw-410001/readings?above=moderate&interval=auto&after=2026-04-14T00:00:00Z"
Lookback depth follows your plan, matching the incidents history ladder: Starter one year, Developer and Business five years, Pro and Enterprise unlimited. Free keys get current readings on /gauges and the six hour window on /gauges/{id}.
Pass ?variable=rainfall to list rain gauges instead of water-level gauges. The default is water_level, so existing calls are unchanged. Rainfall is reported in millimetres, and every rain gauge carries a variable of rainfall and a unit of mm, with no flood class, thresholds, or datum.
curl -H "Authorization: Bearer YOUR_API_KEY" \ "https://emergencyapi.com/api/v1/gauges?state=qld&variable=rainfall"
Rainfall is incremental: each reading is the millimetres that fell in that interval, so a period total is the sum of the readings, not the latest value. GET /api/v1/gauges/{id} on a rain gauge returns the trailing six hour total as totalMm. A flood class is a water-level concept and millimetres of rain are not a flood level, so rain gauges never carry one. The first source is Brisbane City Council's 52 rain gauges, published under CC BY 4.0.
Water-level readings are metres relative to each gauge's local datum, not sea level: 3.0 metres at one gauge and 3.0 metres at another are not the same water (rainfall readings are millimetres). Where the authority publishes a gauge zero or datum, it is on the station record. Flood classes derive from the published classification for that specific gauge, so comparisons across gauges should use floodClass, never raw values. Quality codes pass through in each state's own vocabulary. This is status reporting against published authority levels, not flood prediction, and not a substitute for official warnings. Background: understanding flood classifications.