BYTETOOLS

Environment Agency Flood Monitoring API

Free UK flood API with no key: live flood warnings and alerts from the Environment Agency, with severity, affected area and river names. Tested example included.

No API key requiredCORS enabledHTTPSFree tier

Endpoint tested and returned HTTP 200 on 2026-08-21

What is the Environment Agency Flood Monitoring API?

The Environment Agency's flood-monitoring API publishes live flood warnings and alerts for England with no API key. Each item gives the warning severity, the affected flood area with its rivers and counties, a plain-English message and the times it was raised or changed.

This is the same data behind the Environment Agency's public flood warning service, published as linked open data under the Open Government Licence. Because it is genuinely open — no key, no registration, no attribution gymnastics — it has become the standard source for third-party flood alerting in England, and the response format is deliberately self-describing.

The linked-data heritage shows in the shape. Every resource carries an `@id` URL you can dereference for more detail, so `floodArea.polygon` leads to the actual geographic boundary as GeoJSON and the `hasFormat` array in `meta` lists the same query as CSV, RDF and Turtle. The severity model is what matters operationally: `severityLevel` runs 1 for a severe flood warning down to 4 for a warning that has been removed, so an entry appearing in the feed does not by itself mean flooding is happening. It is worth noting that `meta.comment` still reads "Status: Beta service", which the agency has never removed despite years of production use.

Quick facts

Base URL
https://environment.data.gov.uk/flood-monitoring
Authentication
No API key and no registration. Published under the Open Government Licence v3.
Rate limit
No published limit. Warnings update every fifteen minutes at most.
Pricing
Free under the Open Government Licence.
CORS
Enabled — callable directly from browser JavaScript
Official docs
Read the docs

How to use the Environment Agency Flood Monitoring API

Every request below was executed against the live API on 2026-08-21, and the response shown is the real body it returned — not an illustration.

1. Fetch current flood warnings and alerts

GET https://environment.data.gov.uk/flood-monitoring/id/floods?_limit=2

curl
curl 'https://environment.data.gov.uk/flood-monitoring/id/floods?_limit=2'
JavaScript (fetch)
const res = await fetch("https://environment.data.gov.uk/flood-monitoring/id/floods?_limit=2");
if (!res.ok) throw new Error(`Request failed: ${res.status}`);
const data = await res.json();
console.log(data);
Python (requests)
import requests

res = requests.get("https://environment.data.gov.uk/flood-monitoring/id/floods?_limit=2", timeout=20)
res.raise_for_status()
print(res.json())
Response — HTTP 200 (truncated)
{
  "@context": "http://environment.data.gov.uk/flood-monitoring/meta/context.jsonld",
  "meta": {
    "publisher": "Environment Agency",
    "licence": "http://www.nationalarchives.gov.uk/doc/open-government-licence/version/3/",
    "documentation": "http://environment.data.gov.uk/flood-monitoring/doc/reference",
    "version": "0.9",
    "comment": "Status: Beta service",
    "hasFormat": [
      "http://environment.data.gov.uk/flood-monitoring/id/floods.csv?_limit=2",
      "http://environment.data.gov.uk/flood-monitoring/id/floods.rdf?_limit=2",
      "http://environment.data.gov.uk/flood-monitoring/id/floods.ttl?_limit=2",
      "http://environment.data.gov.uk/flood-monitoring/id/floods.html?_limit=2"
    ],
    "limit": 2
  },
  "items": [
    {
      "@id": "http://environment.data.gov.uk/flood-monitoring/id/floods/121WAF915",
      "description": "Lower River Wear",
      "eaAreaName": "North East",
      "eaRegionName": "No longer used",
      "floodArea": {
        "@id": "http://environment.data.gov.uk/flood-monitoring/id/floodAreas/121WAF915",
        "county": "County Durham, Sunderland",
        "notation": "121WAF915",
        "polygon": "http://environment.data.gov.uk/flood-monitoring/id/floodAreas/121WAF915/polygon",
        "riverOrSea": "River Wear, Moors Burn, Smallhope Burn"
      },
      "floodAreaID": "121WAF915",
      "isTidal": false,
      "message": "The flood forecast has changed significantly. As a result, there is no longer a risk of flooding in the area. \nWeather conditions are expected to improve and no further flooding is expected. Rainfa

Parameters

ParameterTypeRequiredDescription
_limitqueryOptionalMaximum items to return. The underscore prefix is part of the name. 2
min-severityqueryOptionalOnly return warnings at or above a severity level, where 1 is most severe. 2
countyqueryOptionalFilter to one county name. Somerset
lat / long / distqueryOptionalReturn warnings within `dist` kilometres of a point. 51.5
/id/stationspathOptionalSibling resource listing river and tide gauge stations and their readings.

Response fields

@contextstring
JSON-LD context URL describing the vocabulary. Safe to ignore unless you are consuming it as linked data.
meta.publisher / licence / documentationstring
Publisher, the OGL v3 licence URL and a link to the reference documentation.
meta.hasFormatarray
The same query expressed as CSV, RDF, Turtle and HTML — swap the URL to change format.
meta.version / commentstring
Service version and a status note that still says "Beta service".
itemsarray
Current warnings and alerts.
items[].@idstring
Dereferenceable URL for this warning, ending in its flood area notation.
items[].descriptionstring
Short name of the affected stretch, such as `Lower River Wear`.
items[].messagestring
Plain-English situation update written for the public. This is the text to display.
items[].eaAreaNamestring
Environment Agency operational area, for example `North East`. Note that `eaRegionName` reads "No longer used".
items[].floodAreaobject
The affected area, with `county`, `riverOrSea`, a `notation` code and a `polygon` URL returning the boundary geometry.
items[].floodAreaIDstring
Flood area code, matching `floodArea.notation`.
items[].isTidalboolean
Whether the risk is tidal rather than fluvial.

What you can build with the Environment Agency Flood Monitoring API

  • Send flood alerts for a specific county or postcode area
  • Plot active warnings on a map using the polygon URLs
  • Correlate warnings against river-level readings from the stations resource
  • Archive warning history to study how often areas are affected

Common errors and how to fix them

Empty items array

There are no active warnings anywhere in England.

Fix: This is common in dry periods and is the correct answer, not a failure. Render an all-clear state.

Warnings that are not warnings

`severityLevel` 4 means a warning has been removed.

Fix: Filter on severity before alerting anyone. Use `min-severity` to have the API do it for you.

Parameter ignored

The paging and filtering parameters are underscore-prefixed.

Fix: It is `_limit`, not `limit`. Unrecognised parameters are silently dropped rather than rejected.

No geometry in the response

Polygons are linked, not embedded.

Fix: Follow `floodArea.polygon` for the boundary. Keeping it out of the main response is what keeps the feed small.

Environment Agency Flood Monitoring API — frequently asked questions

Is the flood monitoring API free?

Yes, free with no key and no registration, published under the Open Government Licence v3. Attribution to the Environment Agency is the only condition.

Does it cover the whole UK?

England only. Scotland, Wales and Northern Ireland have their own agencies with separate services.

What do the severity levels mean?

1 is a severe flood warning meaning danger to life, 2 a flood warning, 3 a flood alert, and 4 marks a warning that has been removed. Always check the level before alerting.

How do I get the flooded area boundary?

Follow the `floodArea.polygon` URL on the item. The geometry is linked rather than embedded so the warnings feed itself stays small.

Tools that pair with this API

Environment Agency Flood Monitoring is an independent third-party service and is not affiliated with ByteTools or ByteVancer. Details on this page were verified on 2026-08-21; always check the official documentation before relying on this API in production, as terms and limits can change.