← Agent Data Hub · Search endpoints · /llms.txt

Measured Air Quality in Germany (PM10, PM2.5, NO2, Ozone) — Official Umweltbundesamt Stations, Daily since 2016

Official measured air pollution at German monitoring stations (Umweltbundesamt with the state networks): PM10 and PM2.5 daily means, NO2 daily maximum hourly mean, ozone daily maximum 8-hour mean, for any place (nearest station measuring that pollutant) or station code, any day since 2016, with the EU limit. Current-year values are not yet finally audited.

Call it (no API key)

GET https://api.agentdatahub.de/api/v1/call/de-air-quality-uba?place=Stuttgart&component=NO2&from=2025-01-01&to=2025-01-31&compact=1

Full metadata: without compact=1 · Markdown: format=llm · Only some fields: add &fields=a,b.c · MCP: tool call_api with {"apiId":"de-air-quality-uba"}

Parameters

placeGerman place name (nearest station measuring the pollutant), or use station
stationStation code, e.g. DESN025 (Leipzig-Mitte)
componentPM10 (default), PM2.5, NO2 or O3
dateDay YYYY-MM-DD (default: yesterday), or from/to
fromFirst day YYYY-MM-DD (since 2016-01-01)
toLast day YYYY-MM-DD (max 62 days after from)

Example response (live, compact)

{
  "apiId": "de-air-quality-uba",
  "data_freshness": "live",
  "data": {
    "station": {
      "code": "DEBW099",
      "name": "Stuttgart Arnulf-Klett-Platz",
      "city": "Stuttgart",
      "setting": "urban area",
      "type": "traffic",
      "lat": 48.7831,
      "lon": 9.1807,
      "distance_km": 0.3
    },
    "place": "Stuttgart, Baden-Württemberg",
    "component": "NO2",
    "measure": "daily maximum of the one-hour means",
    "unit": "µg/m³",
    "limit": "EU one-hour limit 200 µg/m³ (max. 18 hours per year)",
    "days": [
      {
        "date": "2025-01-01",
        "value": 53,
        "above_limit": false
      },
      {
        "date": "2025-01-02",
        "value": 37,
        "above_limit": false
      },
      {
        "date": "2025-01-03",
        "value": 46,
        "above_limit": false
      },
      {
        "date": "2025-01-04",
        "value": 53,
        "above_limit": false
      },
      {
        "date": "2025-01-05",
        "value": 48,
        "above_limit": false
      },
      {
        "date": "2025-01-06",
        "value": 49,
        "above_limit": false
      },
      {
        "date": "2025-01-07",
        "value": 46,
        "above_limit": false
      },
      {
        "date": "2025-01-08",
        "value": 60,
        "above_limit": false
      },
      {
        "date": "2025-01-09",
        "value": 76,
        "above_limit": false
      },
      {
        "date": "2025-01-10",
        "value": 72,
        "above_limit": false
      },
      {
        "date": "2025-01-11",
        "value": 53,
        "above_limit": false
      },
      {
        "date": "2025-01-12",
        "value": 40,
        "above_limit": false
      },
      {
        "date": "2025-01-13",
        "value": 61,
        "above_limit": false
      },
      {
        "date": "2025-01-14",
        "value": 71,
        "above_limit": false
      },
      {
        "date": "2025-01-15",
        "value": 55,
        "above_limit": false
      },
      {
        "date": "2025-01-16",
        "value": 45,
        "above_limit": false
      },
      {
        "date": "2025-01-17",
        "value": 46,
        "above_limit": false
      },
      {
        "date": "2025-01-18",
        "value": 43,
        "above_limit": false
      },
      {
        "date": "2025-01-19",
        "value": 46,
        "above_limit": false
      },
      {
        "date": "2025-01-20",
        "value": 42,
        "above_limit": false
      },
      {
        "date": "2025-01-21",
        "value": 57,
        "above_limit": false
      },
      {
        "date": "2025-01-22",
        "value": 58,
        "above_limit": false
      },
      {
        "date": "2025-01-23",
        "value": 65,
        "above_limit": false
      },
      {
        "date": "2025-01-24",
        "value": 77,
        "above_limit": false
      },
      {
        "date": "2025-01-25",
        "value": 78,
        "above_limit": false
      },
      {
        "date": "2025-01-26",
        "value": 70,
        "above_limit": false
      },
      {
        "date": "2025-01-27",
        "value": 45,
        "above_limit": false
      },
      {
        "date": "2025-01-28",
        "value": 48,
        "above_limit": false
      },
      {
        "date": "2025-01-29",
        "value": 71,
        "above_limit": false
      },
      {
        "date": "2025-01-30",
        "value": 61,
        "above_limit": false
      },
      {
        "date": "2025-01-31",
        "value": 70,
        "above_limit": false
      }
    ],
    "note": "Station type matters: \"traffic\" stations sit at busy roads, \"background\" stations show the general level. Days without a valid measurement are left out.",
    "attribution": "Umweltbundesamt mit Daten der Messnetze der Länder und des Bundes (dl-de/by-2-0)"
  },
  "source": "Umweltbundesamt, Air Data API v4",
  "license": "Datenlizenz Deutschland – Namensnennung – Version 2.0"
}

Source & license

SourceUmweltbundesamt, Air Data API v4
LicenseDatenlizenz Deutschland – Namensnennung – Version 2.0
Source URLhttps://www.umweltbundesamt.de/daten/luft/luftdaten
Termshttps://www.govdata.de/dl-de/by-2-0
CategoryGeodata, Weather & Environment › Germany: Official Air Quality (UBA)