Flood-Net station API

Flood-Net's station register, readable by programs as well as people. Point an AI assistant or a script at it and it can look up any station in the Bureau of Meteorology's Queensland flood-warning telemetry network — where it is, how it reports, its flood levels and Service Level Specification entry, its health and recent readings, the radio licences at its site — with no sign-in and no key.

REST APIhttps://floodwarning.net/api/v1
MCP serverhttps://floodwarning.net/api/mcp (Streamable HTTP)
OpenAPI documenthttps://floodwarning.net/api/v1/openapi.json
Sign-in or keyNone — it is read-only and serves only public data
Rate limits60 requests / 60 s per client · 20 requests / 10 s per client (burst) · 240 requests / 60 s per address
Station idsLowercase slugs such as abergowrie_br_al; a Bureau station number also works
Full referencedocs/agent-api.md — every parameter, example answers, and setup for each agent

What is available

Stations
Every field station, repeater and base station in the register: name, Bureau and AWRC numbers, position and height (surveyed or modelled, and which), basin, stream, local government area, maintenance hub, radio networks, ALERT and ALERT2 addresses, satellite telemetry, sensors, frequencies, the repeaters whose pass ranges cover it, and whether it is only proposed. Search by name, number or ALERT address, filter by catchment, basin, council area, hub, network, role or kind, or find the stations near a point.
A station dossier
Everything about one station in a single answer, each section labelled with where it came from and whether it is recorded: identity, location, networks and radio, telemetry and health, the Service Level Specification entries, the Bureau's listings, flood classes and crossings, gauge zero, AEP levels, inspection numbers and the stations nearby, with a plain-words summary on top. It is shaped for drafting assessment reports.
Flood levels
The Bureau's flood classes by edition, the SLS classes, road crossings, the gauge zero in force and its datum, flood effects, modelled AEP levels, and one ladder of all of them in metres AHD where the datum allows it.
Service Level Specifications
The station's entries in the Bureau's SLS documents for Queensland and for New South Wales and the ACT: gauge type, data type, priority, owner, schedules, flood classes and prediction — one entry per document, so a border station shows both.
Readings
Telemetry ingested into Flood-Net — raw for the last 90 days, hourly and daily rollups indefinitely — for one station, or the newest reading on every channel of every reporting station in one call.
Station health
The stations that have gone silent now, worst first, with when each was last heard and what to check, and the groups that went quiet together (around one place, or behind one repeater) — from the server's own health run every fifteen minutes.
Radio licences
What the ACMA's Register of Radiocommunications Licences has at a station's site, or at a point where one might go: the licences Flood-Net records for the station, each looked up; the licences within a radius, with their licensee, frequencies, power and distance, and whether each is on the station's frequency; and the repeaters that relay a field station, with theirs. From a weekly extract of the register for the network's area.
Catchments and networks
The 77 Queensland drainage basins and their stations; the radio networks, the Bureau's maintenance hubs and the Radio Mobile system presets.
Maps
Station searches, nearby stations, the latest readings and the silent stations all answer as GeoJSON with format=geojson, ready to drop onto a map.

What you can do with it

Some things people and their assistants use it for:

The endpoints

All GET, all JSON, CORS open. Each MCP tool is a thin adapter over one REST endpoint — same data, same limits. The example links open the live answer.

REST endpointMCP toolWhat it answers
GET /api/v1/ — The index: version, endpoints, limits and links. Example
GET /api/v1/openapi.json — The whole API as an OpenAPI 3.1 document. Example
GET /api/v1/stations search_stations Search and filter stations: q (name, Bureau or AWRC number, ALERT address), catchment, basin, lga, hub, network, role, type, manual, format, limit, offset. Example
GET /api/v1/stations?near=lat,lon stations_near Stations within radius_km of a point (up to 250 km), nearest first, with distance and bearing. Example
GET /api/v1/stations/{id} get_station One station's full register record, its SLS rows and health. Example
GET /api/v1/stations/{id}/dossier get_station_dossier Everything about one station, each section labelled with its source. Example
GET /api/v1/stations/{id}/readings get_readings Ingested telemetry: resolution (raw, hourly, daily), from, to, channel, limit, offset. Example
GET /api/v1/readings/latest get_latest_readings Every reporting station's newest reading on each channel, by network, basin, type or bbox. Example
GET /api/v1/health/silent get_silent_stations The stations silent now and the groups that went quiet together; filter as above, or by severity. Example
GET /api/v1/stations/{id}/health get_station_health What Station Health says about one station over days (3, 7 or 14): its findings with what to do, its check schedule day by day, its battery's night lows and trend. Example
GET /api/v1/health/findings get_health_findings The same for a page of stations, worst first: by owner, ids, network, basin, type or bbox, with min_severity and days. Example
GET /api/v1/stations/{id}/flood-levels get_flood_levels Flood and SLS classes, crossings, gauge zero, flood effects, AEP levels and one AHD ladder. Example
GET /api/v1/stations/{id}/service-level get_service_level The station's Service Level Specification entries. Example
GET /api/v1/stations/{id}/acma get_acma_licences The radio licences at a station's site: the ACMA licences Flood-Net records for it, looked up in the ACMA's register, and the register's licences within radius_m (500 m by default, up to 5 km) — licensee, frequencies, power, distance, and whether each is on the station's frequency (freq_mhz adds one; all lists every licence); for a field station, the repeaters that relay it. Example
GET /api/v1/acma acma_licences_near The same register around a point, near=lat,lon — a site not built yet, or a move. Example
GET /api/v1/catchments list_catchments The 77 Queensland drainage basins. Example
GET /api/v1/catchments/{id} get_catchment One basin and a page of its stations. Example
GET /api/v1/networks list_networks Radio networks, maintenance hubs and Radio Mobile systems — the ids network= and hub= take. Example
GET /api/v1/changelog — Every change to the API someone using it would notice, newest first — the list the emails below are sent from. Example

Connecting an AI assistant

The MCP server lets an assistant call the tools above itself. It needs no authentication. Give it a name for your client — the X-FloodNet-Client header, or ?client=your-name on the URL where headers cannot be set — so your share of the rate limit is your own rather than everyone's on your network.

Claude Code

claude mcp add --transport http floodnet https://floodwarning.net/api/mcp \
  --header "X-FloodNet-Client: your-name"

Claude Desktop and claude.ai

Settings → Connectors → Add custom connector, name it Flood-Net, URL https://floodwarning.net/api/mcp?client=your-name.

Cursor, VS Code (Copilot), Gemini CLI and Codex

Add a Streamable HTTP server with the URL https://floodwarning.net/api/mcp and the header above — for example, in Cursor's .cursor/mcp.json:

{
  "mcpServers": {
    "floodnet": {
      "url": "https://floodwarning.net/api/mcp",
      "headers": { "X-FloodNet-Client": "your-name" }
    }
  }
}

Each tool's file and key differ slightly (VS Code's top-level key is servers; Gemini CLI's is httpUrl); the full reference has each one.

ChatGPT and other function-calling agents

For a custom GPT: Configure → Create new action → Import from URL → https://floodwarning.net/api/v1/openapi.json, authentication None. The same document serves Gemini function calling and the OpenAPI toolkits of LangChain, LlamaIndex and the like.

From a script

Any HTTP client will do:

curl -s -H 'X-FloodNet-Client: your-name' \
  'https://floodwarning.net/api/v1/stations?q=abergowrie' | jq '.stations[].id'

curl -s -H 'X-FloodNet-Client: your-name' \
  'https://floodwarning.net/api/v1/stations/abergowrie_br_al/flood-levels' | jq '.ladder_m_ahd'

Lists come a page at a time (25 rows by default, at most 100) with a next link while there are more. Successful answers are cached for 60 seconds and carry an ETag. Errors are always { "error": "…", "detail": "…" }, and detail says what to change; an unknown parameter is refused with the list of the ones that are accepted, rather than silently ignored.

Limits and fair use

The app reads the same database, so the API is throttled to keep one runaway agent from slowing it down for everyone:

Past a limit the answer is 429 with a Retry-After header; wait that long and carry on. Other caps: 100 rows per page, a 250 km search radius, 5,000 readings per call, and reading windows of 7 days raw, 31 days hourly and 731 days daily.

Cache what you fetch, ask about the stations you need rather than walking the whole network, and name your client.

Changes, and an email when it changes

Every change to the API that someone using it would notice — a new route or field, a limit, a tool — is listed, newest first, at GET /api/v1/changelog and in the full reference. Leave your address here to be emailed each one.

The latest changes

You are sent a link to confirm the address first. Nothing else is sent until you press it, and every email has a link to stop them. If Flood-Net's email is not switched on yet, your sign-up is kept and the link is sent as soon as it is.

What is kept, and how to have it removed: the privacy policy. It sends from noreply@floodwarning.net and is used for nothing else.

What it does not do

Flood-Net is not a flood warning service, and it does not issue warnings, forecasts or public alerts. Nothing the API returns should be read as an official statement about flooding, river conditions or public safety. For official Australian flood warnings and river height data, go to the Bureau of Meteorology.

Reading the data correctly

The full reference goes through each of these, with example answers for every endpoint.