Quick-Start
InfraNode liefert normalisierte offene Daten deutscher Großstädte hinter einer einheitlichen REST-API. Alle Endpunkte sind öffentlich lesbar; der erste Aufruf braucht keinen Schlüssel. In drei Schritten bist du drin.
Schritt 1, Basis-URL
Alle Endpunkte liegen unter der versionierten Basis-URL. Pfade folgen dem
Muster /api/v1/cities/{slug}/{ressource}.
https://infranode.dev/api/v1
Den exakten Slug musst du nicht kennen: der Stadtname wird tolerant aufgelöst,
also mit oder ohne Umlaute, in beliebiger Groß/Kleinschreibung und auch als
gängiger englischer Name oder Kurzform (München,
munich, munchen führen alle zu muenchen).
Ein unbekannter Name liefert einen 404 mit einem „Meintest du …?"-Hinweis auf
den nächstliegenden Slug.
Schritt 2, erster Aufruf
Hole das Wetter für Hamburg. Kein Header, kein Setup, ein GET genügt.
curl "https://infranode.dev/api/v1/cities/hamburg/weather"const res = await fetch("https://infranode.dev/api/v1/cities/hamburg/weather");
const data = await res.json();
console.log(data);import httpx
res = httpx.get("https://infranode.dev/api/v1/cities/hamburg/weather")
res.raise_for_status()
print(res.json()) Schritt 3, die Antwort lesen
Jede Antwort folgt demselben kanonischen Envelope. Auf Top-Level liest du immer dieselben zwei Blöcke, egal welche Ressource du abfragst:
| Feld | Inhalt |
|---|---|
data | Die eigentliche Nutzlast, je Endpunkt typisiert (hier die Wetterwerte). |
data[].attribution |
Kein eigener Top-Level-Block: Jeder data-Record trägt ein eingebettetes
attribution-Feld mit text,
license_url und modified, also Lizenz und
Herkunft der jeweiligen Daten.
|
meta |
Kontext zum Abruf: Stadt-Slug, Zeitstempel, abgefragte Quelle, der
source_status (ok, no_data oder
disabled) sowie correlation_id und
cache_status.
|
Liefert eine Quelle für eine Stadt nichts, bleibt der Status-Code
200 und source_status steht auf
no_data. So unterscheidest du "keine Daten" sauber von einem
echten Fehler.
Rate-Limits
Die API ist offen und braucht keinen API-Key. Aufrufe sind pro IP begrenzt
(Schutz vor Missbrauch): bis zu 300 Anfragen pro Minute
(kurze Spitzen) und 6000 pro Stunde (nachhaltig). Jede
Antwort trägt die Standard-Header RateLimit-Limit,
RateLimit-Remaining und RateLimit-Reset. Wird ein
Limit überschritten, antwortet die API mit Status 429 und
einem Retry-After-Header. Der MCP-Endpunkt
(mcp.infranode.dev) ist separat auf 480 Anfragen pro Minute und
IP begrenzt.
Nächste Schritte
In der linken Navigation findest du jede Operation einzeln, mit Parametern, Code-Beispielen in curl, JavaScript und Python sowie einer Live-Konsole für die aufrufbaren Endpunkte.