InfraNode.dev

Quickstart

InfraNode serves normalised open data for German cities behind a single REST API. Every endpoint is publicly readable; your first call needs no key. Three steps and you are in.

Step 1, base URL

All endpoints live under the versioned base URL. Paths follow the pattern /api/v1/cities/{slug}/{resource}.

https://infranode.dev/api/v1

Step 2, first call

Fetch the weather for Hamburg. No header, no setup, one GET is enough.

curl "https://infranode.dev/api/v1/cities/hamburg/weather"

Step 3, read the response

Every response follows the same canonical envelope. At the top level you always read the same two blocks, no matter which resource you query:

Field Content
data The actual payload, typed per endpoint (here the weather values).
data[].attribution Not a separate top-level block: each data record carries an embedded attribution field with text, license_url and modified, that is licence and origin of the respective data.
meta Context about the request: city slug, timestamp, queried source, the source_status (ok, no_data or disabled) plus correlation_id and cache_status.

If a source returns nothing for a city, the status code stays 200 and source_status is set to no_data. That cleanly separates "no data" from a real error.

Rate limits and API keys

Anonymous calls are limited per IP. A valid key in the X-API-Key header raises the limit to the higher keyed tier. You create a key yourself via POST /api/v1/keys; the plaintext token is returned only once. A key only expires if it goes unused for 30 days; every use automatically extends it back to 30 days. On overrun the API answers with status 429.

Next steps

The left navigation lists every operation, with parameters, code samples in curl, JavaScript and Python, and a live console for the callable endpoints. The reference content is in German, the code samples are universal.