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 API | https://floodwarning.net/api/v1 |
|---|---|
| MCP server | https://floodwarning.net/api/mcp (Streamable HTTP) |
| OpenAPI document | https://floodwarning.net/api/v1/openapi.json |
| Sign-in or key | None — it is read-only and serves only public data |
| Rate limits | 60 requests / 60 s per client · 20 requests / 10 s per client (burst) · 240 requests / 60 s per address |
| Station ids | Lowercase slugs such as abergowrie_br_al; a Bureau station number also works |
| Full reference | docs/agent-api.md — every parameter, example answers, and setup for each agent |
- What is available
- What you can do with it
- The endpoints
- Connecting an AI assistant
- From a script
- Limits and fair use
- Changes, and an email when it changes
- What it does not do
- Reading the data correctly
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:
- Draft an assessment report for a station — ask for its dossier and an assistant has the facts and their sources in one call.
- Answer questions about the network in plain words: “Which river gauges are within 20 km of Ingham?”, “What are the flood classes at Abergowrie Bridge, and is the gauge zero in AHD?”, “Which stations in the Burdekin are listed as Manual in the SLS?”
- See what is happening now — every reporting gauge's latest reading, or what has gone quiet and which repeater the silent stations share.
- Plan a trip — the stations near a point or on a hub, nearest first, with distance and bearing.
- Scope a site's licensing — whether a station already has an ACMA licence that can be reused, whose it is, or what is licensed on the hill where a new one would go.
- Make a map — any station list as GeoJSON for QGIS, a web map or a notebook.
- Build on it — a script, a spreadsheet, a dashboard or a custom GPT; the OpenAPI document describes every operation.
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 endpoint | MCP tool | What 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:
- 60 requests / 60 s per client (your address plus your client name);
- 20 requests / 10 s per client, as a burst;
- 240 requests / 60 s per address, whatever names it uses.
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
- 31 October 2026
This list of changes, and an email when the API changes - 31 October 2026
The ACMA licences at a station's site, or at a point
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
- It is read-only. There is no way to change anything through it — every request upstream is a read with the public key, the same as a visitor to the app who has not signed in.
- It serves public data only. Not inspection remarks or who inspected a site (only the numbers a visit recorded), site access codes, field photos, raw ingest payloads, or anything about users and editors.
- It is not a bulk export. It answers a station, or a page of stations, at a time. Taking the whole network away as a file is the app's Export tab, for signed-in users.
- It is not a warning service. See the note below.
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
- Gauge heights are not AHD. Flood classes, crossings and flood effects are metres on the station's gauge; AEP levels are modelled metres AHD. They are joined only through a gauge zero surveyed in AHD, and the API says so rather than convert when there is none.
- AEP levels are indicative — modelled, not observed, with the source sheet's confidence score.
- Readings are Flood-Net's own ingest. Most stations report through the Bureau's systems instead, so a station missing from the readings or the silent list says nothing about whether it works.
- The ACMA licences are an extract. They come from a weekly copy of the ACMA's register, cut to the network's area; the answer says the copy's date. Check a licence on the ACMA's own register before relying on it.
- “Not recorded” is not zero, and “unavailable” means a read failed — ask again.
-
Coordinates:
lat,loneverywhere (includingnear=lat,lon), except GeoJSON andbbox, which put longitude first.
The full reference goes through each of these, with example answers for every endpoint.