InfraNode.dev
MCP InfraNode gibt es auch als MCP-Server für KI-Assistenten wie Claude und ChatGPT.

Paginierung und Limits

Die meisten InfraNode-Endpunkte liefern kompakte Datensätze. Einige wenige liefern große Listen: alle Ladesäulen, alle Energieanlagen oder alle ÖPNV-Haltestellen einer Großstadt sind schnell mehrere Megabyte. Solche Listen sind paginierbar, damit KI-Agenten (MCP) und GPT Actions nicht an ihren Größenlimits scheitern, Bulk-Nutzer der REST-API aber weiterhin alles in einem Aufruf bekommen.

Der Kernpunkt: Paginierung ist optional und betrifft nur große, statische Listen, niemals Live-Daten. Der Standard hängt zudem vom Aufrufkanal ab. Beides ist über meta.pagination in jeder Antwort transparent.

Was ist paginierbar, was nicht

Paginiert werden ausschließlich die großen, sich langsam ändernden Standort-/Bestandslisten. Live-Daten bleiben immer vollständig, weil sie klein und tagesaktuell sind und ein Ausschnitt dort keinen Sinn ergäbe.

Kategorie Beispiele Paginierbar
Große statische Listen energy, charging (Standorte), transit (Haltestellen), events sowie OSM-Listen wie education, playgrounds, post-boxes Ja, optional
Live- und Kompaktdaten weather, air, traffic, transit/departures, charging-status, water-level, flood, power-load Nein, immer vollständig

Für die Haltestellensuche gibt es zusätzlich ?q= (Name) und ?near=lat,lon (Umkreis) auf transit, damit man gezielt wenige Treffer statt der ganzen Stadt bekommt.

Kanal-abhängiger Standard

Ohne expliziten limit-Parameter hängt die Standard-Seitengröße davon ab, über welchen Kanal der Aufruf kommt. So bleibt die REST-API für bestehende Bulk-Nutzer unverändert, während die zwei Kanäle mit harten Größengrenzen automatisch geschont werden.

Kanal Standard Warum
Direktes REST (/api/v1) voll (kein Limit) Data-Puller bekommen alles in einem Aufruf, kein Bruch.
GPT Actions gebunden (50) Erkannt an den OpenAI-Headern, serverseitig erzwungen, damit die Antwort unter dem Action-Größenlimit bleibt.
MCP-Server gebunden (50) Der MCP-Client setzt das Limit selbst, der Agent-Kontext bleibt schlank.

Wichtig zu wissen: Dieselbe URL kann über zwei Kanäle unterschiedlich viele Einträge liefern. Das ist Absicht und in jeder Antwort an meta.pagination ablesbar (siehe unten), sodass nie unklar bleibt, ob ein Ausschnitt oder der volle Bestand vorliegt.

Damit ein gemeinsamer Zwischenspeicher diese kanal-abhängige Antwort nicht verwechselt, werden GPT-Actions-Antworten nicht am Edge zwischengespeichert: Die API sendet für GPT-Requests Cache-Control: no-store und Cloudflare nimmt diesen Traffic zusätzlich per Regel vom Edge-Cache aus. Sonst würde derselbe geteilte Cache unter einer URL die falsche Variante an den jeweils anderen Kanal ausspielen: REST bekäme die gebundene 50er-Antwort, GPT die vollständige, unter Umständen mehrere Megabyte große Antwort.

Parameter

Parameter Bedeutung
limit Anzahl Einträge pro Seite. Ganzzahl ab 1, hart gedeckelt auf 200 (MAX_LIMIT). Ein größerer Wert liefert eine 200er-Seite statt eines Fehlers.
offset Startposition für das Blättern (Default 0). Ein Offset jenseits des Bestands liefert eine leere Seite mit Status 200, keinen Fehler.
limit=all oder ?all=1 Kanalunabhängiger Voll-Schalter: erzwingt die komplette Liste, auch über GPT Actions und MCP. Der self-documenting Weg, bewusst alles zu holen.

meta.pagination

Jede paginierbare Antwort trägt einen pagination-Block im meta-Objekt. Er macht den Ausschnitt ehrlich sichtbar, es gibt keine stille Kürzung.

Feld Inhalt
total Gesamtzahl der Einträge im vollen Bestand.
returned Zahl der in dieser Antwort enthaltenen Einträge.
limit / offset Die tatsächlich angewandte Seitengröße und Startposition.
truncated true, wenn ein Ausschnitt vorliegt (es gibt mehr als returned), sonst false. Bei Vollausgabe gilt returned == total und truncated: false.

Vollständige Geometrie bei Verkehr

Der traffic-Endpunkt (Live) wird nicht paginiert, sondern schlank gehalten: die rohen Polylinien-Geometrien der Baustellen sind standardmäßig ausgeblendet, weil sie die Antwort vervielfachen und für die meisten Aufrufe irrelevant sind. Kartenanwendungen holen sie explizit dazu:

https://infranode.dev/api/v1/cities/koeln/traffic?include=geometry

Alternativ wirkt ?full=1 identisch. Ohne diesen Parameter bleibt der amtliche Inhalt (Titel, Beschreibung, Ort, Betroffenheit) vollständig erhalten, nur die Polylinie fehlt.

Beispiele

Erste 20 Ladesäulen-Standorte, ab dem 40. Eintrag:

https://infranode.dev/api/v1/cities/berlin/charging?limit=20&offset=40

Alle Energieanlagen in einem Aufruf, egal über welchen Kanal:

https://infranode.dev/api/v1/cities/berlin/energy?limit=all

Haltestelle per Name finden (liefert wenige Treffer mit stop_id):

https://infranode.dev/api/v1/cities/hamburg/transit?q=Alsterdorf