InfraNode unifies open data for dozens of German cities into a single versioned REST API, covering weather, air quality, EV charging, public-transit departures, demographics, and dozens of other civic datasets. Every endpoint is keyless and rate-limited per IP rather than gated behind a subscription ("Die API ist offen und braucht keinen API-Key"), with an OpenAPI spec and Postman collection published for quick integration. The project is open source (Apache-2.0) and runs on a server in Germany with no ads.
AuthenticationNone requiredCall it straight away — no key, no signup.
HTTPSSupportedTraffic is encrypted in transit.
CORSEnabledCallable directly from browser JavaScript.
PricingFreeNo paid tier — free for the documented use case.
FormatsJSONResponses can be requested as JSON.
GreatAPIs Score
Score94out of 100
Authentication25/25No authentication required
Pricing20/20Free to use
Docs20/20Machine-readable spec file bundled
Formats9/15Single response format
Freshness20/20Verified within 6 months
Embed this badge
<a href="https://greatapis.com/api/infranode/"><img src="https://greatapis.com/badge/infranode.svg" alt="Scored 94 on greatapis.com"></a>
Auth quickstart
No key needed — call it now.
Stored keyNo key stored
Your key is stored only in this browser (localStorage) and sent directly to the API — never to greatapis.
Endpoints
Servers
https://infranode.devhttp://localhost
meta3
Meta- und Diagnose-Routen (Health, Ping, Source-Status, Spec)
GET/api/v1/healthLiveness und Readiness der App prüfen
Responses
Status
Description
Schema
200
App läuft
Health
GET/api/v1/openapi.yamlDiese OpenAPI-Spec als YAML
Responses
Status
Description
Schema
200
Die Spec als YAML
—
GET/api/v1/sourcesStatus aller Upstream-Quellen
Parameters
Name
In
Required
Type
If-None-Match
header
no
string
page
query
no
integer
limit
query
no
integer
offset
query
no
integer
sort
query
no
string
order
query
no
string
Responses
Status
Description
Schema
200
Liste der Quellen-Status
—
304
—
—
cities85
Stadt-Register und normalisierte Stadt-Stammdaten
GET/api/v1/citiesAlle bekannten Städte auflisten
Responses
Status
Description
Schema
200
Stadt-Liste
—
GET/api/v1/cities/{slug}Eine Stadt aus dem Register holen
Parameters
Name
In
Required
Type
slug
path
yes
string
Responses
Status
Description
Schema
200
Stadt-Eintrag
—
404
Unbekannte Stadt
ErrorEnvelope
GET/api/v1/cities/{slug}/accidentsStraßenverkehrsunfälle je Stadt (Unfallatlas, Tier A)
Parameters
Name
In
Required
Type
slug
path
yes
string
Responses
Status
Description
Schema
200
Unfall-Envelope (CanonicalRecord mit AccidentPayload oder null)
—
404
Unbekannte Stadt
ErrorEnvelope
GET/api/v1/cities/{slug}/airLuftqualität je Stadt (UBA, Legacy-Pfad)
Parameters
Name
In
Required
Type
slug
path
yes
string
Responses
Status
Description
Schema
200
Luftqualitäts-Envelope (CanonicalRecord oder null)
—
404
Unbekannte Stadt
ErrorEnvelope
503
Quelle vorübergehend nicht erreichbar (kein Cache)
ErrorEnvelope
GET/api/v1/cities/{slug}/air-ubaLuftqualität je Stadt (UBA, Tier A)
Parameters
Name
In
Required
Type
slug
path
yes
string
Responses
Status
Description
Schema
200
Luftqualitäts-Envelope (CanonicalRecord oder null)
—
404
Unbekannte Stadt
ErrorEnvelope
503
Quelle vorübergehend nicht erreichbar (kein Cache)
ErrorEnvelope
GET/api/v1/cities/{slug}/baseStadt-Stammdaten aus Wikidata
Parameters
Name
In
Required
Type
slug
path
yes
string
Responses
Status
Description
Schema
200
Stammdaten-Envelope. data ist der CanonicalRecord oder null, wenn die Quelle deaktiviert ist (meta.source_status="disabled").
—
404
Unbekannte Stadt
ErrorEnvelope
503
Quelle vorübergehend nicht erreichbar (kein Cache)
ErrorEnvelope
GET/api/v1/cities/{slug}/bathing-waterBadegewässerqualität im Umkreis einer Stadt (EEA, Tier A)
Parameters
Name
In
Required
Type
slug
path
yes
string
Responses
Status
Description
Schema
200
Badegewässer-Envelope (CanonicalRecord oder null)
—
404
Unbekannte Stadt
ErrorEnvelope
503
Quelle vorübergehend nicht erreichbar (kein Cache)
ErrorEnvelope
GET/api/v1/cities/{slug}/bike-countsRadzählstellen je Stadt (kommunale Open Data, Tier A)
Parameters
Name
In
Required
Type
slug
path
yes
string
Responses
Status
Description
Schema
200
Bike-Counts-Envelope (CanonicalRecord mit CountStationPayload) oder null.
—
404
Unbekannte Stadt
Error
GET/api/v1/cities/{slug}/bike-parkingRadabstellanlagen je Stadt (Tier A, keylos)
Parameters
Name
In
Required
Type
slug
path
yes
string
Responses
Status
Description
Schema
200
Bike-Parking-Envelope (CanonicalRecord mit BikeParkingPayload) oder null.
—
404
Unbekannte Stadt
Error
GET/api/v1/cities/{slug}/business-registrationsGewerbean-/-abmeldungen je Kreis (Regionalstatistik, Tier A)
Parameters
Name
In
Required
Type
slug
path
yes
string
Responses
Status
Description
Schema
200
Gewerbeanzeigen-Envelope (CanonicalRecord mit BusinessRegistrationsPayload) oder null.
—
404
Unbekannte Stadt
ErrorEnvelope
GET/api/v1/cities/{slug}/carePflegekennzahlen als Zeitreihe (Wegweiser, Tier A)
Parameters
Name
In
Required
Type
slug
path
yes
string
from
query
no
integer
to
query
no
integer
Responses
Status
Description
Schema
200
Zeitreihen-Envelope (CanonicalRecord mit IndicatorSeriesPayload) oder null.
—
400
Ungueltige Jahresangabe in from oder to
ErrorEnvelope
404
Unbekannte Stadt
ErrorEnvelope
GET/api/v1/cities/{slug}/chargingE-Ladesäulen-Standorte je Stadt (BNetzA, Tier A)
Parameters
Name
In
Required
Type
slug
path
yes
string
Responses
Status
Description
Schema
200
Ladesäulen-Envelope (CanonicalRecord oder null)
—
404
Unbekannte Stadt
ErrorEnvelope
GET/api/v1/cities/{slug}/charging-statusLive-Ladesäulen-Belegung je Stadt (eRound, CC0/Tier A)
Parameters
Name
In
Required
Type
slug
path
yes
string
Responses
Status
Description
Schema
200
Ladebelegungs-Envelope (CanonicalRecord oder null)
—
404
Unbekannte Stadt
ErrorEnvelope
GET/api/v1/cities/{slug}/childcareKinderbetreuung als Zeitreihe (Wegweiser, Tier A)
Parameters
Name
In
Required
Type
slug
path
yes
string
from
query
no
integer
to
query
no
integer
Responses
Status
Description
Schema
200
Zeitreihen-Envelope (CanonicalRecord mit IndicatorSeriesPayload) oder null.
—
400
Ungueltige Jahresangabe in from oder to
ErrorEnvelope
404
Unbekannte Stadt
ErrorEnvelope
GET/api/v1/cities/{slug}/civil-protection-warningsAmtliche BBK-NINA-Bevölkerungsschutz-Warnungen je Stadt (Tier A)
Parameters
Name
In
Required
Type
slug
path
yes
string
Responses
Status
Description
Schema
200
Warnungen-Envelope (CanonicalRecord mit CivilProtectionWarningPayload: ars, coverage_granularity, count, warnings) oder null bei source_status disabled. source_status ok/disabled.
—
404
Unbekannte Stadt
ErrorEnvelope
503
Upstream (BBK NINA) nicht erreichbar, kein Cache
ErrorEnvelope
GET/api/v1/cities/{slug}/constructionBaugenehmigungen je Stadt (GENESIS, Tier A)
Parameters
Name
In
Required
Type
slug
path
yes
string
Responses
Status
Description
Schema
200
Regionalstatistik-Envelope (CanonicalRecord oder null)
—
404
Unbekannte Stadt
ErrorEnvelope
GET/api/v1/cities/{slug}/council-papersKommunale Ratsinformationen je Stadt (OParl, Tier A)
Parameters
Name
In
Required
Type
slug
path
yes
string
q
query
no
string
paper_type
query
no
string
since
query
no
string
limit
query
no
integer
offset
query
no
integer
Responses
Status
Description
Schema
200
Ratsinformations-Envelope (aggregierte papers-Liste + count, oder null bei no_data/disabled)
Live-Umweltzone-Envelope (CanonicalRecord oder null)
—
404
Unbekannte Stadt
ErrorEnvelope
503
Quelle vorübergehend nicht erreichbar (kein Cache)
ErrorEnvelope
GET/api/v1/live/magdeburg/parkingLive-Parkbelegung Magdeburg (Landeshauptstadt Magdeburg, Mobilithek DATEX II V2)
Responses
Status
Description
Schema
200
Live-Parkbelegung-Envelope (CanonicalRecord oder null)
—
404
Unbekannte Stadt
ErrorEnvelope
503
Quelle vorübergehend nicht erreichbar (kein Cache)
ErrorEnvelope
GET/api/v1/live/nuernberg/departuresLive-ÖPNV-Abfahrten Nürnberg je Halt (VGN/VAG, keylos, Tier A)
Parameters
Name
In
Required
Type
stop_id
query
no
string
Responses
Status
Description
Schema
200
Live-Abfahrten-Envelope (CanonicalRecord oder null)
—
400
Ungültige oder fehlende stop_id
ErrorEnvelope
503
Quelle vorübergehend nicht erreichbar (kein Cache)
ErrorEnvelope
GET/api/v1/live/wuppertal/parkingLive-Parkbelegung Wuppertal (Stadt Wuppertal, Mobilithek DATEX II V2)
Responses
Status
Description
Schema
200
Live-Parkbelegung-Envelope (CanonicalRecord oder null)
—
404
Unbekannte Stadt
ErrorEnvelope
503
Quelle vorübergehend nicht erreichbar (kein Cache)
ErrorEnvelope
GET/api/v1/live/{city}/baustellen[DEPRECATED] Live-Baustellen je Stadt (Nachfolger: /live/{city}/roadworks)
Parameters
Name
In
Required
Type
city
path
yes
string
Responses
Status
Description
Schema
200
Live-Baustellen-Envelope (CanonicalRecord oder null)
—
404
Unbekannte Stadt
ErrorEnvelope
503
Quelle vorübergehend nicht erreichbar (kein Cache)
ErrorEnvelope
GET/api/v1/live/{city}/ereignisse[DEPRECATED] Live-Verkehrsereignisse je Stadt (Nachfolger: /live/{city}/incidents)
Parameters
Name
In
Required
Type
city
path
yes
string
Responses
Status
Description
Schema
200
Live-Ereignisse-Envelope (CanonicalRecord oder null)
—
404
Unbekannte Stadt
ErrorEnvelope
503
Quelle vorübergehend nicht erreichbar (kein Cache)
ErrorEnvelope
GET/api/v1/live/{city}/incidentsLive-Verkehrsereignisse je Stadt (Mobilithek DATEX-II)
Parameters
Name
In
Required
Type
city
path
yes
string
Responses
Status
Description
Schema
200
Live-Ereignisse-Envelope (CanonicalRecord oder null)
—
404
Unbekannte Stadt
ErrorEnvelope
503
Quelle vorübergehend nicht erreichbar (kein Cache)
ErrorEnvelope
GET/api/v1/live/{city}/roadworksLive-Baustellen je Stadt (Mobilithek DATEX-II)
Parameters
Name
In
Required
Type
city
path
yes
string
Responses
Status
Description
Schema
200
Live-Baustellen-Envelope (CanonicalRecord oder null)
—
404
Unbekannte Stadt
ErrorEnvelope
503
Quelle vorübergehend nicht erreichbar (kein Cache)
ErrorEnvelope
GET/api/v1/live/{city}/traffic-flowLive-Verkehrslage je Stadt (Mobilithek DATEX-II)
Parameters
Name
In
Required
Type
city
path
yes
string
Responses
Status
Description
Schema
200
Live-Verkehrslage-Envelope (CanonicalRecord oder null)
—
404
Unbekannte Stadt
ErrorEnvelope
503
Quelle vorübergehend nicht erreichbar (kein Cache)
ErrorEnvelope
GET/api/v1/live/{city}/transit/departuresLive-ÖPNV-Abfahrten je Halt mit Verspätung (GTFS-RT, Tier B)
Parameters
Name
In
Required
Type
city
path
yes
string
stop_id
query
yes
string
Responses
Status
Description
Schema
200
Live-Abfahrten-Envelope (CanonicalRecord oder null)
—
400
Ungültige oder fehlende stop_id
ErrorEnvelope
404
Unbekannte Stadt
ErrorEnvelope
GET/api/v1/live/{city}/transit/routes/{route_id}/statusLive-ÖPNV-Verspätungslage einer Linie (GTFS-RT, Tier B)
Parameters
Name
In
Required
Type
city
path
yes
string
route_id
path
yes
string
Responses
Status
Description
Schema
200
Live-Linienstatus-Envelope (CanonicalRecord oder null)
—
400
Ungültige route_id
ErrorEnvelope
404
Unbekannte Stadt
ErrorEnvelope
GET/api/v1/live/{city}/transit/trips/{trip_id}Live-ÖPNV-Fahrt-Detail inkl. geschätzter Position (GTFS-RT, Tier B)
Parameters
Name
In
Required
Type
city
path
yes
string
trip_id
path
yes
string
Responses
Status
Description
Schema
200
Live-Fahrt-Envelope (CanonicalRecord oder null)
—
400
Ungültige trip_id
ErrorEnvelope
404
Unbekannte Stadt
ErrorEnvelope
GET/api/v1/live/{slug}/airLive-Alias für Luftqualität (Umweltbundesamt)
Parameters
Name
In
Required
Type
slug
path
yes
string
Responses
Status
Description
Schema
200
Luft-Envelope (CanonicalRecord oder null)
—
404
Unbekannte Stadt
ErrorEnvelope
503
Quelle vorübergehend nicht erreichbar (kein Cache)
ErrorEnvelope
GET/api/v1/live/{slug}/air-ubaLive-Alias für Luftqualität UBA
Parameters
Name
In
Required
Type
slug
path
yes
string
Responses
Status
Description
Schema
200
Luft-Envelope (CanonicalRecord oder null)
—
404
Unbekannte Stadt
ErrorEnvelope
503
Quelle vorübergehend nicht erreichbar (kein Cache)
ErrorEnvelope
GET/api/v1/live/{slug}/departuresLive-ÖPNV-Abfahrten der VRR-Kernstädte + VVS Stuttgart je Station (Mentz-EFA, Tier C)
Parameters
Name
In
Required
Type
slug
path
yes
string
station
query
no
string
Responses
Status
Description
Schema
200
Live-Abfahrten-Envelope (CanonicalRecord oder null)
—
404
Unbekannte (Nicht-EFA-)Stadt
ErrorEnvelope
503
Quelle vorübergehend nicht erreichbar (kein Cache)
ErrorEnvelope
GET/api/v1/live/{slug}/floodLive-Alias für Hochwasser-Warnstufen LHP
Parameters
Name
In
Required
Type
slug
path
yes
string
Responses
Status
Description
Schema
200
Hochwasser-Envelope (CanonicalRecord oder null)
—
404
Unbekannte Stadt
ErrorEnvelope
503
Quelle vorübergehend nicht erreichbar (kein Cache)
ErrorEnvelope
GET/api/v1/live/{slug}/trafficLive-Alias für Verkehr und Baustellen Autobahn
Parameters
Name
In
Required
Type
slug
path
yes
string
Responses
Status
Description
Schema
200
Verkehrs-Envelope (CanonicalRecord oder null)
—
404
Unbekannte Stadt
ErrorEnvelope
503
Quelle vorübergehend nicht erreichbar (kein Cache)
ErrorEnvelope
GET/api/v1/live/{slug}/water-levelLive-Alias für Pegelstand PEGELONLINE
Parameters
Name
In
Required
Type
slug
path
yes
string
Responses
Status
Description
Schema
200
Pegelstand-Envelope (CanonicalRecord oder null)
—
404
Unbekannte Stadt
ErrorEnvelope
503
Quelle vorübergehend nicht erreichbar (kein Cache)
ErrorEnvelope
GET/api/v1/live/{slug}/webcamsLive-Alias für Autobahn-Webcams
Parameters
Name
In
Required
Type
slug
path
yes
string
Responses
Status
Description
Schema
200
Webcam-Envelope (CanonicalRecord oder null)
—
404
Unbekannte Stadt
ErrorEnvelope
503
Quelle vorübergehend nicht erreichbar (kein Cache)
ErrorEnvelope
stations2
Per-Bahnhof-Live-Boards unter /api/v1/stations/{eva}. Abfahrten/Ankünfte JEDES DB-Bahnhofs über seine EVA-Nummer (aus dem Katalog /cities/{slug}/stations), alle Gattungen inkl. Nahverkehr, mit Echtzeit- Verspätung und Störungen/Meldungen. Quelle: DB Timetables (CC BY 4.0).
GET/api/v1/stations/{eva}/arrivalsLive-Ankünfte eines beliebigen Bahnhofs per EVA, alle Gattungen (DB Timetables, Tier A)
Parameters
Name
In
Required
Type
eva
path
yes
string
Responses
Status
Description
Schema
200
Ankunfts-Envelope (CanonicalRecord mit StationArrivalsPayload) oder null.
—
422
Ungueltige EVA-Nummer
ErrorEnvelope
GET/api/v1/stations/{eva}/departuresLive-Abfahrten eines beliebigen Bahnhofs per EVA, alle Gattungen (DB Timetables, Tier A)
Parameters
Name
In
Required
Type
eva
path
yes
string
Responses
Status
Description
Schema
200
Abfahrts-Envelope (CanonicalRecord mit StationDeparturesPayload) oder null.
—
422
Ungueltige EVA-Nummer
ErrorEnvelope
Try it
Developer reference
Base URLhttps://infranode.dev
Rate limit
300 requests/minute (burst) and 6,000 requests/hour (sustained) per IP; the MCP endpoint is separately limited to 480 requests/minute per IP
Key endpoints
GET/api/v1/cities
GET/api/v1/cities/{slug}/weather
GET/api/v1/cities/{slug}/air
GET/api/v1/cities/{slug}/charging
Availability
Uptime100%
Median latency284.5 ms
Last checkUp · 200 · Sep 2026
4 checks since Aug 2026. A person runs this check by hand, not an automated monitor.