viafrei 1.3.12 → 1.3.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/SOURCES.md CHANGED
@@ -14,7 +14,11 @@ can be breached without noticing. Those two are first, before the catalogue.
14
14
  The authoritative, always-current register is the resource
15
15
  **`viafrei://attribution`** on the server itself. Any MCP client can read it. If
16
16
  this page and that resource ever disagree, the resource is right and this page is
17
- stale: tell us and we will fix it.
17
+ stale: tell us and we will fix it. One row we re-measured on 2026-09-27 disagrees
18
+ the other way round — it is named in the catalogue below, at the BKG row, and the
19
+ fix belongs to the server rather than to this page. Whatever the surfaces say,
20
+ the answer you hold is the thing to read: `_meta.sources` and the attribution
21
+ lines on it are produced from the same result you are looking at.
18
22
 
19
23
  ---
20
24
 
@@ -44,55 +48,116 @@ What that means for you, in plain words:
44
48
 
45
49
  ### Public-transport realtime is share-alike
46
50
 
47
- Realtime public-transport data comes from **DELFI e.V.** under
48
- **CC BY-SA 4.0**. Share-alike means the obligation travels:
51
+ Realtime public-transport data comes from **DELFI e.V.** under a Creative
52
+ Commons **Attribution-ShareAlike** licence. **The version is an open question and
53
+ this page does not invent one** — see the section on this feed below for what the
54
+ catalogue and the access point actually state. Treat the share-alike as applying;
55
+ do not rely on a particular version for a derivative. Share-alike means the
56
+ obligation travels:
49
57
 
50
58
  - anything you derive from it — a table of delays, a punctuality figure, a
51
- screen that reuses the numbers — has to be offered under CC BY-SA 4.0 too;
52
- - you may not blend it into a work you publish under a different licence, which
53
- in practice means **do not merge a DELFI delay with data you hold under a
54
- non-compatible licence and ship the mixture**;
55
- - the attribution line stays with it.
59
+ screen that reuses the numbers — has to be offered under BY-SA too;
60
+ - **share-alike reaches adaptations, not aggregations.** If you *modify* the
61
+ data — recompute it, reshape it, **rearrange** it, build a delay table or a
62
+ punctuality series out of it — what you made is Adapted Material under
63
+ art. 1(a), which names material "translated, altered, **arranged**,
64
+ transformed, or otherwise modified", and you must license it under BY-SA
65
+ (art. 3(b)(1)) and pass the licence URI on (art. 3(b)(2)). An arrangement is
66
+ therefore inside the obligation, not outside it. If you merely **show** it
67
+ next to data from another source, that is an aggregation and no ShareAlike
68
+ obligation touches the other source.
69
+
70
+ The words quoted above come from the **4.0** text, because 4.0 is the
71
+ text we read. **Which version applies is the open question set out below**,
72
+ and this page does not guess what another version's definition says: the
73
+ vocabulary the catalogue draws on offers three terms — unversioned, 3.0 DE
74
+ and 4.0 — and the middle one is a German port whose definitions are in
75
+ German. "It holds whichever version applies" would have been a claim about
76
+ texts nobody here has opened, which is the same shape as the error corrected
77
+ above.
78
+
79
+ Creative Commons' own position: the condition "applies only for works
80
+ considered adaptations under copyright law, not simply in collections with
81
+ other works". An earlier version of this page said you may not blend it into a
82
+ work under a different licence. That was wrong in the direction that matters —
83
+ it told you a licence forbids something it permits, which art. 3(b)(3) is
84
+ itself about not doing to a recipient, and it would have condemned our own
85
+ service, since a weather answer can name `["dwd","osm"]` and a transit answer
86
+ is built on a place resolved from the gazetteer;
87
+ - the attribution line stays with it, either way.
56
88
 
57
89
  If that is not what you want for your product, ask for the same answer from a
58
90
  source that is not BY-SA, or keep the two apart.
59
91
 
60
- ### And one that applies only if you get an address back
61
-
62
- Address lookups, **where a deployment has imported the data**, are answered from
63
- **OpenStreetMap** under the **ODbL 1.0**. The public service has not imported it
64
- and answers no house numbers today, so this binds nobody using that service
65
- right now — it is stated because the moment it does, it binds everybody.
92
+ ### And one that applies if you get an OpenStreetMap-derived result back
93
+
94
+ Some answers are built from **OpenStreetMap**, under the **ODbL 1.0**. Address
95
+ and point-of-interest lookups always are; so is any other answer whose place our
96
+ own gazetteer could not resolve, because place resolution falls through to the
97
+ OSM tables. The public service gives such answers, measured on 2026-09-27, so
98
+ **this binds you** as soon as one of those tables answered you — not at some
99
+ later date, today. An earlier version of this page said the opposite, on the
100
+ strength of a measurement taken before the extract was loaded; if you read that
101
+ version, re-read this section.
102
+
103
+ You can tell which answers are affected without guessing, and the test is the
104
+ answer rather than the question: the result carries
105
+ `OSM-Standortdaten: © OpenStreetMap-Mitwirkende, ODbL 1.0` and names `osm` in
106
+ `_meta.sources`. What decides it is **which table answered**, not which tool you
107
+ called and not what your input looked like. A place the server resolved from its
108
+ own gazetteer does not carry the line, and neither does a station or a motorway;
109
+ a place it resolved from OpenStreetMap does — and place resolution falls through
110
+ the gazetteer to the OSM tables, so **any** tool that takes a `place` can come
111
+ back with an OSM-derived answer. Measured on 2026-09-27: a weather warning asked
112
+ for `Zeiss-Großplanetarium` named `["dwd","osm"]` and carried the ODbL line. So
113
+ "did I ask for an address?" is the wrong question, and so is "is this a
114
+ geocoding tool?" — **read `_meta.sources` and the attribution line on the answer
115
+ you actually got.**
66
116
 
67
117
  ODbL's share-alike is on the *database*, not on the sentence: if you build your
68
- own database out of address results and use it publicly, you owe your recipients
69
- the same offer we make. **Our side of that offer stands** — ODbL § 4.6 — and the
70
- server states it in `viafrei://attribution`: ask, and you get our address extract
71
- and our alterations to it under ODbL 1.0. An issue on this repository reaches
72
- us, and the server's own register names the contact route as well.
118
+ own database out of address or point-of-interest results and use it publicly, you
119
+ owe your recipients the same offer we make. **Our side of that offer stands** —
120
+ ODbL § 4.6 — and the server states it in `viafrei://attribution`: ask, and you get
121
+ **both** our extracts — addresses and points of interest, one file each — and our
122
+ alterations to them, under ODbL 1.0 with a single licence notice covering the two.
123
+ Both, because a recipient who derived from POI results is entitled to the POI
124
+ database and this sentence named only the addresses until 2026-09-27. An issue on
125
+ this repository reaches us, and the server's own register names the contact route
126
+ as well.
73
127
 
74
128
  ---
75
129
 
76
130
  ## The catalogue
77
131
 
78
- **Status is not a promise, it is a measurement.** Every "live" below was checked
79
- by calling the public endpoint on **2026-09-21** and reading which source the
80
- answer named. A source can be licensed, cleared and loaded and still not answer
132
+ **Status is not a promise, it is a measurement.** Every "live" below **except the
133
+ one labelled `not re-measured`** was checked by calling the public endpoint on
134
+ **2026-09-27** and reading which source the answer named. A source can be licensed, cleared and loaded and still not answer
81
135
  a question today; where that is so, this page says it.
82
136
 
137
+ The measurement was taken by calling **fifteen of the server's sixteen read-only
138
+ tools — every one except `find_cheapest_fuel`** — once each, and reading
139
+ `_meta.sources` out of the result: not by reading the code, and not by asking
140
+ whether a feed was running. Thirteen sources were named by at least one answer.
141
+ The tool not called is the one whose row is deliberately not re-measured, and
142
+ the count above says so rather than absorbing it: a status this page cannot stand behind is
143
+ worse than an honest gap.
144
+
83
145
  - **live** — an answer came back naming it when this page was checked;
84
146
  - **in the service** — licensed and loaded, and the spot check produced no
85
147
  answer that named it, so it is reported as unconfirmed rather than as live;
86
- - **not on the public service today** — cleared and built, and it does not
87
- answer right now. Do not design around it yet;
88
148
  - **read** — the licence is read and cleared, and nothing uses it yet.
89
149
 
150
+ There used to be a fourth value, **not on the public service today**, and no row
151
+ carries it any more: the three rows that did now answer. It is removed from this
152
+ legend rather than left standing, because a legend entry nothing uses reads as a
153
+ status somebody could still be relying on.
154
+
90
155
  | Source | Publisher | Covers | Publisher's rhythm | Licence | Status |
91
156
  |---|---|---|---|---|---|
92
157
  | Motorway traffic | Die Autobahn GmbH des Bundes | Roadworks, warnings, closures, webcams, lorry parking, charging points on the Bundesautobahnen | continuous | open, no licence text published — see below | live |
93
158
  | Roadworks (DATEX II) | Bundesanstalt für Straßen- und Verkehrswesen (BASt), via the national access point | Arbeitsstellen on the Bundesautobahnen | a few times a day | CC BY 4.0 | live |
94
159
  | Lorry parking, static | Lkw-Parken BAB Deutschland / BMV, via the national access point | Nationwide lorry parking sites on the Bundesautobahnen | a few releases a year | GeoNutzV | live |
95
- | Fuel prices (MTS-K) | Tankerkönig / Markttransparenzstelle für Kraftstoffe | Prices and station details for German filling stations | continuous, in the publisher's own cycle | CC BY 4.0 **plus the MTS-K purpose limit** | live, **limited coverage** |
160
+ | Fuel prices (MTS-K) | Tankerkönig / Markttransparenzstelle für Kraftstoffe | Prices and station details for German filling stations | continuous, in the publisher's own cycle | CC BY 4.0 **plus the MTS-K purpose limit** | live, **limited coverage**, **not re-measured** — see below |
96
161
  | Timetables | Deutsche Bahn AG (DB API Marketplace) | Planned and changed rail departures per station | continuous | CC BY 4.0 | live |
97
162
  | StaDa — Station Data | Deutsche Bahn AG (DB API Marketplace) | Station master data: name, number, address, coordinates, facilities | static master data | CC BY 4.0 | live |
98
163
  | Official weather warnings | Deutscher Wetterdienst (DWD) | Amtliche Wetterwarnungen per municipality | as issued | CC BY 4.0, with a source note fixed by law | live |
@@ -101,36 +166,71 @@ a question today; where that is so, this page says it.
101
166
  | Charging point master data | EnBW AG, via the national access point | AFIR charge-point master data for EnBW mobility+ | static releases | CC BY 4.0 | in the service |
102
167
  | Charging point availability | Tesla Germany GmbH and Volkswagen Group Charging GmbH, via the national access point | AFIR dynamic status for their own networks | live status | **CC0 1.0** | in the service |
103
168
  | German road rules | ViaFrei, compiled from official sources | Environmental zones, tolls, equipment duties, charging rules | reviewed at least twice a year | our own text | live |
104
- | Public-transport realtime (GTFS-RT Trip Updates) | DELFI e.V., via the national access point (Mobilithek) | Germany-wide departure and arrival forecasts | real time | **CC BY-SA 4.0** | **not dependable today** — see below |
105
- | FaSta — Facility Status | Deutsche Bahn AG (DB API Marketplace) | Live state of lifts and escalators at stations | live status | CC BY 4.0 | **not on the public service today** |
106
- | Geocoding (addresses) | OpenStreetMap contributors | Street and house-number points in Germany | refreshed from the OSM extract | **ODbL 1.0** | **not on the public service today** |
169
+ | Public-transport realtime (GTFS-RT Trip Updates) | DELFI e.V., via the national access point (Mobilithek) | Germany-wide departure and arrival forecasts | real time | **CC BY-SA (version unstated)** | live |
170
+ | FaSta — Facility Status | Deutsche Bahn AG (DB API Marketplace) | Live state of lifts and escalators at stations | live status | CC BY 4.0 | live |
171
+ | Geocoding (addresses and points of interest) | OpenStreetMap contributors | Street and house-number points and mapped points of interest in Germany | refreshed from the OSM extract | **ODbL 1.0** | live |
107
172
  | Timetable data (static GTFS) | DELFI e.V. | Germany-wide scheduled public transport | weekly release | CC BY 4.0 | read |
108
173
  | Stop directory (zHV) | DELFI e.V. | Every public-transport stop in Germany with its identifier and coordinates | weekly release | CC BY 4.0 | read |
109
- | Administrative units and place names | Bundesamt für Kartographie und Geodäsie (BKG), product GN250 | Länder, Regierungsbezirke, Kreise, Gemeinden with their official keys and names | yearly release | **dl-de/by-2-0** | read |
110
- | Police traffic events | Landesbetrieb Straßenbau NRW (VIZ.NRW), via the national access point | Police traffic reports, Germany-wide | continuous | **Datenlizenz Deutschland – Zero – 2.0** | read |
174
+ | Disruption reports (Störungsmeldungen) | DELFI e.V., via the national access point (Mobilithek) | Germany-wide public-transport disruption messages | real time | **CC BY-SA 4.0** | read |
175
+ | Station car parks (DB BahnPark) | Deutsche Bahn AG (DB API Marketplace) | Car parks at railway stations, with their operator and access details | continuous | **dl-de/by-2-0** | read |
176
+ | Administrative units and place names | Bundesamt für Kartographie und Geodäsie (BKG), product GN250 | Länder, Regierungsbezirke, Kreise, Gemeinden with their official keys and names | yearly release | **dl-de/by-2-0** | live |
177
+ | Police traffic events | Landesbetrieb Straßenbau NRW (VIZ.NRW), via the national access point | Police traffic reports, Germany-wide | continuous | **Datenlizenz Deutschland – Zero – 2.0** | in the service — see below |
111
178
 
112
- Four of those rows need saying out loud rather than in a cell. All four are
113
- places where it would have been easier to write "live" and leave it.
179
+ Two of those rows need saying out loud rather than in a cell, because a cell
180
+ cannot carry a reason — fuel takes two bullets, because the coverage limit and
181
+ the decision not to re-measure are different facts.
114
182
 
115
183
  - **Fuel coverage is not nationwide.** We watch a limited set of stations, on
116
184
  the terms the publisher sets, and we ask for a station's details only when
117
185
  somebody actually asks a question. Outside that set you may get nothing back.
118
186
  That is a consequence of the MTS-K rules, not a gap we are hiding.
119
- - **Public-transport realtime is not dependable yet.** The licence is cleared
120
- and the feed is in the service, but the tool that exposes it was answering
121
- with an internal error when this page was checked on 2026-09-21. Do not build
122
- on it until this row says otherwise.
123
- - **Lift and escalator status does not answer today, and the reason is one step
124
- earlier than the feed.** The licence is read and the tool exists; what is
125
- missing is the station directory that turns a name like "Köln Hbf" into the
126
- station number this feed is keyed by. Without it the lookup cannot even be
127
- attempted, so the tool refuses — naming the missing directory and stating that
128
- this is not an all-clear — instead of returning an empty list that would read
129
- as "nothing is broken".
130
- - **Address lookup is not available on the public service.** Address data is
131
- imported per deployment and the public one has none, so the service answers
132
- places, stations and motorways but not house numbers. Where it *is* imported,
133
- the ODbL obligations below apply in full.
187
+ - **Fuel is the one row not re-measured on 2026-09-27, and that was deliberate.**
188
+ MTS-K sets a minimum interval per station and its terms make needless querying
189
+ a real risk to the access itself, so this page does not spend a request on
190
+ proving a status it already knew. The cell is carried forward from the previous
191
+ check and labelled `not re-measured` rather than dressed up as today's
192
+ measurement. Everything else in the table was called.
193
+ - **Police traffic events are stored, and on 2026-09-27 no answer named them.**
194
+ It is polled and its rows are kept. The status is a statement about the
195
+ answers, not about the code: `check_road_status` was called on the A40, A3,
196
+ A1, A57 and A46 — VIZ.NRW's own Land — and named only the motorway interface
197
+ and the BASt roadworks feed. So by the rule at the top of this section the
198
+ row reads `in the service` and not `live`. What it does **not** say is that no
199
+ tool can reach the feed: whether a source is named is decided by a live
200
+ catalogue row rather than by code, so this row could begin carrying its
201
+ attribution line with no release at all. Do not design around it yet — and
202
+ read `_meta.sources`, not this page, on the day you do.
203
+
204
+ **What changed on 2026-09-27, stated plainly because this page said the
205
+ opposite until today.** Address lookup, lift and escalator status, and
206
+ public-transport realtime were all listed as not answering. All three now
207
+ answer, and each was confirmed by a call whose result named the source: OSM for
208
+ addresses and points of interest, FaSta for lifts and escalators, DELFI for
209
+ realtime. The BKG administrative gazetteer was listed as merely `read` and is
210
+ in fact named by answers from five different tools. If you read an earlier
211
+ version of this page and concluded something was unavailable, re-check it here.
212
+
213
+ **And one row where this page is newer than the register.** BKG is `live` here, on
214
+ five measured answers, while `viafrei://attribution` carries it as planned —
215
+ "licence read, data not ingested yet". The answers decide it, and one part of an
216
+ answer decides it: `bkg_gvisys` appeared in `_meta.sources`, and only a row that
217
+ answered can put an id there. The attribution line came with it, which is
218
+ corroboration and not proof — that line is rendered from whichever ids a result
219
+ carries and knows nothing about whether the data is loaded. The flag is a server-side change and the server is
220
+ where it will be fixed.
221
+
222
+ **Do not read that as "one" being measured across the table.** It is the only
223
+ disagreement among the rows this page re-measured on 2026-09-27, which is not the
224
+ same statement. The nearest other candidate is the DELFI stop directory (zHV),
225
+ flagged the same way on the same day: we asked for a stop by name and the station
226
+ directory answered instead (`db_stada`, with BKG and GeoNames), which is consistent
227
+ with the flag and a long way from proof — stops and stations live in the same table
228
+ and the resolver ranks them, so a station hit can hide a stop row completely.
229
+ Asking a question is not reading the server's table, and this is reported as the
230
+ weaker thing it is. **What settles any of
231
+ these for you is the answer in your hand**: read `_meta.sources` and the
232
+ attribution lines on the result, never a status cell on a page that was printed
233
+ before you asked.
134
234
 
135
235
  ## The sources in detail
136
236
 
@@ -173,32 +273,85 @@ absence of a licence permits. If you intend to republish it, ask them.
173
273
 
174
274
  Publisher: <https://www.autobahn.de>
175
275
 
176
- ### DELFI e.V. — public-transport realtime · CC BY-SA 4.0
276
+ ### DELFI e.V. — public-transport realtime · CC BY-SA (version unstated)
177
277
 
178
278
  Germany-wide GTFS-RT Trip Updates — the live forecast behind a departure board
179
279
  — published by DELFI e.V. through the national access point (Mobilithek), and
180
- listed on GovData with the licence **CC-BY-SA 4.0** (checked 2026-09-21).
280
+ listed on GovData under a Creative Commons **Attribution-ShareAlike** licence.
281
+
282
+ **The version is an open question, and this page will not invent one.** The
283
+ GovData catalogue record for this feed carries the *unversioned* licence URI
284
+ `http://dcat-ap.de/def/licenses/cc-by-sa` on its only resource (read 2026-09-27).
285
+ The dataset-level licence field is empty, which is **not** evidence of anything —
286
+ in DCAT-AP.de the licence lives on the distribution, and every record sampled from
287
+ this catalogue has it empty at dataset level, the versioned siblings included. The
288
+ resource field is the one that speaks. Per the dcat-ap.de vocabulary that is
289
+ a distinct term from `…/cc-by-sa/4.0`. It is not a habit of the publisher's
290
+ either: DELFI's sibling records in the same catalogue *are* versioned — the
291
+ GTFS-RT Service Alerts feed carries `cc-by-sa/4.0` and the static timetable
292
+ `cc-by/4.0` — so DELFI states a version when it means one, and on this feed it
293
+ did not. An earlier version of this page said GovData listed the feed as
294
+ CC-BY-SA 4.0; that reading could not be reproduced and the claim is withdrawn.
295
+
296
+ Why it is not pedantry: art. 3(b)(1) sets the Adapter's Licence to "the same
297
+ License Elements, this version or later, or a BY-SA Compatible License", so the
298
+ version decides what a recipient may put on a derivative — and 3.0 unported has
299
+ no express sui-generis-database-rights clause where 4.0 art. 4 does, which is
300
+ exactly the derived-delay-table case. **Treat it as CC BY-SA and assume the
301
+ share-alike applies; do not rely on a specific version for a derivative.**
302
+
303
+ The authoritative field says the same thing. The national access point's own
304
+ metadata for this feed, read 2026-09-27, carries:
305
+
306
+ ```
307
+ standardLicense : http://dcat-ap.de/def/licenses/cc-by-sa
308
+ customLicenseAsResource : null
309
+ sourceNote : null
310
+ ```
311
+
312
+ So GovData's harvest is faithful and there is no versioned statement anywhere in
313
+ the chain. The attribution string the server emits today still names 4.0; that is
314
+ a defect at the source, tracked there, and it will be corrected in the server
315
+ rather than by rewording this page — what this page documents is what the server
316
+ actually sends.
181
317
 
182
318
  ```
183
319
  Echtzeitdaten: DELFI e.V. via Mobilithek, CC BY-SA 4.0
184
320
  ```
185
321
 
186
322
  Share-alike. See [the obligation above](#public-transport-realtime-is-share-alike):
187
- what you derive from this stays CC BY-SA 4.0, and it may not be blended into a
188
- result you publish under another licence.
323
+ what you *derive* from this stays BY-SA — an adaptation, including a
324
+ rearrangement — while merely showing it beside another source's data is an
325
+ aggregation and constrains that other source not at all. The licence **version**
326
+ is the open question set out below; treat the share-alike as applying regardless.
327
+
328
+ **It answers.** Asked for Hamburg on 2026-09-27, `check_transit_disruption`
329
+ returned a region-wide punctuality answer naming this feed. Until 2026-09-21 the
330
+ same call produced an internal error and this page said so; that is fixed, and
331
+ the paragraph is left here rather than deleted so a reader who saw the old one
332
+ knows which of the two is current.
333
+
334
+ What it answers is a **region**, not a line: see the scope note in the
335
+ README — no tool here answers "is the S1 on time".
336
+
337
+ Licence family: Creative Commons Attribution-ShareAlike — the catalogue and the
338
+ access point both state the term without a version, so no version URL is given
339
+ here on purpose. The 4.0 text, for reference only:
340
+ <https://creativecommons.org/licenses/by-sa/4.0/> ·
341
+ publisher: <https://www.opendata-oepnv.de>
189
342
 
190
- **It is not dependable yet.** Asked twice on 2026-09-21, the tool that exposes
191
- this feed answered with an internal error. The licence work is done and the data
192
- is there; the answer is not, so plan for it rather than on it.
343
+ **Three** more DELFI datasets are cleared and not yet in use, and they do not
344
+ share one licence:
193
345
 
194
- Licence: <https://creativecommons.org/licenses/by-sa/4.0/> ·
195
- publisher: <https://www.opendata-oepnv.de>
346
+ - the Germany-wide static timetable — `Fahrplandaten: DELFI e.V., CC BY 4.0, bearbeitet` — **CC BY 4.0**;
347
+ - the central stop directory — `Haltestellendaten: DELFI e.V. (zentrales Haltestellenverzeichnis), CC BY 4.0, bearbeitet` — **CC BY 4.0**;
348
+ - the disruption reports — `Störungsmeldungen: DELFI e.V. via Mobilithek, CC BY-SA 4.0` — **CC BY-SA 4.0, share-alike**.
196
349
 
197
- Two more DELFI datasets are cleared and not yet in use: the Germany-wide static
198
- timetable (`Fahrplandaten: DELFI e.V., CC BY 4.0, bearbeitet`) and the central
199
- stop directory
200
- (`Haltestellendaten: DELFI e.V. (zentrales Haltestellenverzeichnis), CC BY 4.0, bearbeitet`).
201
- Both are **CC BY 4.0**, not BY-SA — the share-alike is on the realtime feed.
350
+ This page said "two, both CC BY 4.0 — the share-alike is on the realtime feed"
351
+ until 2026-09-27, and both halves were wrong: there are three, and the
352
+ share-alike is on **two** DELFI feeds, the trip updates we serve today and the
353
+ disruption reports we do not serve yet. If you are planning for the day the
354
+ disruption feed appears, plan for share-alike, not for CC BY.
202
355
 
203
356
  ### Tankerkönig / MTS-K — fuel prices · CC BY 4.0 **plus a purpose limit**
204
357
 
@@ -226,9 +379,10 @@ The historical price archive published beside the API is licensed
226
379
  **CC BY-NC-SA** — non-commercial. It is not a source for any answer this
227
380
  service gives, and it never will be while that licence stands.
228
381
 
229
- ### Deutsche Bahn AG — timetables, stations, facilities · CC BY 4.0
382
+ ### Deutsche Bahn AG — timetables, stations, facilities, station car parks
230
383
 
231
- Three products on the DB API Marketplace, each read at its own product page.
384
+ **Four** products on the DB API Marketplace, each read at its own product page,
385
+ and they do **not** share one licence. The three we serve are CC BY 4.0:
232
386
 
233
387
  ```
234
388
  Fahrplandaten: Deutsche Bahn AG, DB API Marketplace, CC BY 4.0, bearbeitet
@@ -236,6 +390,20 @@ Bahnhofsdaten: Deutsche Bahn AG, DB API Marketplace, CC BY 4.0, bearbeitet
236
390
  Aufzüge und Fahrtreppen: Deutsche Bahn AG, DB API Marketplace, CC BY 4.0, bearbeitet
237
391
  ```
238
392
 
393
+ The fourth is read and not yet held — station car parks, under **Datenlizenz
394
+ Deutschland – Namensnennung – Version 2.0**, which is a different licence with a
395
+ different attribution line:
396
+
397
+ ```
398
+ Parking Information Daten der DB BahnPark – API über den DB API Marketplace
399
+ ```
400
+
401
+ It is in the table because this page is the register and a row is how we say a
402
+ licence has been read. It is `read`, so no answer carries that line today; the
403
+ line is here so that nobody has to go and find it on the day one does. Do not
404
+ assume the CC BY 4.0 line above covers it — one publisher, four products, two
405
+ licences.
406
+
239
407
  The product pages say it in one sentence: *"Dieser Datensatz wird bereitgestellt
240
408
  unter der Lizenz Creative Commons Attribution 4.0 International (CC BY 4.0)."*
241
409
  DB adds one carve-out, and it is narrower than it looks: once the data has been
@@ -243,10 +411,16 @@ contributed to OpenStreetMap, a mention of Deutsche Bahn AG in the contributor
243
411
  list is enough. That is a relaxation **for OSM**, not permission to drop the
244
412
  line from your own results.
245
413
 
246
- Facility status — the live state of lifts and escalators — **does not answer on
247
- the public service today**, and not because of this feed: the station directory
248
- that resolves a station name to the number the feed is keyed by is not loaded
249
- there, so the lookup stops before it starts. Do not build on it yet.
414
+ Facility status — the live state of lifts and escalators — **answers on the
415
+ public service**: asked for Köln Messe/Deutz on 2026-09-27 it returned ten
416
+ facilities with their states, naming this feed and the station directory that
417
+ resolves the name to the number the feed is keyed by. Until the directory was
418
+ loaded the lookup stopped before it started, and this page said not to build on
419
+ it; that is no longer the case.
420
+
421
+ The station directory is still what the lookup depends on, so a station missing
422
+ from it produces "I cannot resolve that station" rather than an empty facility
423
+ list — the distinction matters if you are deciding whether to retry.
250
424
 
251
425
  Publisher: <https://developers.deutschebahn.com>
252
426
 
@@ -262,9 +436,19 @@ festgelegten Leistungen des DWD dürfen unter den Bedingungen der Lizenz Creativ
262
436
  Commons BY 4.0 (CC BY 4.0) unter Beigabe eines Quellenvermerks weiterverwendet
263
437
  werden."*
264
438
 
265
- The wording of that source note is **prescribed by law** (§ 7 DWD-Gesetz), which
266
- is why it is three words and why they may not be reworded, translated or
267
- abbreviated. It also has to sit immediately next to the DWD information it
439
+ § 7 DWD-Gesetz — headed *Quellenschutz* — makes the source note a legal **duty**:
440
+ distribution of DWD data, products and special services, warnings in particular,
441
+ "ist nur unter Angabe der Quelle zulässig". Its second sentence adds that fuller
442
+ protection under the Urheberrechtsgesetz "bleibt davon unberührt", so attribution
443
+ is the statute's minimum and not necessarily the whole of what is owed. It
444
+ prescribes no wording at all — an earlier version of this
445
+ page said the statute fixed the three words, which it does not. The **wording**
446
+ is set by the DWD itself, in *Vorgaben für die Gestaltung des
447
+ DWD-Quellenvermerks*: either the text form `Quelle: Deutscher Wetterdienst` or
448
+ the DWD logo, placed "unmittelbar an der verwendeten DWD-Information".
449
+ Reproduce the text form as it stands — it is the publisher's prescribed form and
450
+ shortening it defeats its purpose — but the constraint is the DWD's guidance, not
451
+ the statute's characters. It also has to sit immediately next to the DWD information it
268
452
  belongs to.
269
453
 
270
454
  There is a second line, and the difference matters:
@@ -308,26 +492,82 @@ nothing else.
308
492
 
309
493
  Master data — where the posts are, which plug, how many kW — answers today.
310
494
  **Live availability does not exist for most of Germany**, because only some
311
- operators publish it; a result says how many nearby sites had no status rather
312
- than quietly leaving them out or calling them free.
495
+ operators publish it. A result marks every such site `keine Statusdaten` and
496
+ closes with a sentence saying that this means unknown and not free — measured on
497
+ 2026-09-27, asking for Leipzig. It does not count them for you, and this page
498
+ said it did until today; what it does is refuse to leave them out or to call them
499
+ free, which is the part that matters when you act on the answer.
313
500
 
314
- ### OpenStreetMap — geocoding · ODbL 1.0
501
+ ### OpenStreetMap — addresses and points of interest · ODbL 1.0
315
502
 
316
503
  ```
317
- Geokodierung: © OpenStreetMap-Mitwirkende, ODbL 1.0
504
+ OSM-Standortdaten: © OpenStreetMap-Mitwirkende, ODbL 1.0
318
505
  ```
319
506
 
320
- Carried on every answer whose input was an address, and on no other answer: a
321
- result about a station or a place is not OSM-derived and does not pretend to be.
322
-
323
- Address data is imported **per deployment**, and the public service has none —
324
- asked for a house number on 2026-09-21 it answers that it can find places,
507
+ **Reproduce that line, not a shorter one.** This page printed
508
+ `Geokodierung: …` until 2026-09-27 and no answer has carried that prefix since the
509
+ release in which `find_poi` and `find_address` began returning an OSM row **as**
510
+ the answer — a name, a brand, a door — rather than only a coordinate resolved from
511
+ one. `Geokodierung` describes the narrower thing and would have been a false
512
+ statement about what the data was used for. If you copied the old string, change it.
513
+
514
+ **Which answers carry it**, in the platform's own words — verbatim, with the
515
+ qualifier emphasised here because it is the part two earlier versions of this
516
+ page dropped: *"Only results whose
517
+ input resolved through one of these two OSM tables carry this line. A result about
518
+ a place **from our own gazetteer**, a station or a motorway is not built from
519
+ OpenStreetMap and carries neither the ODbL attribution nor the obligation."*
520
+
521
+ Read the qualifier. The predicate is **which table answered**, and it is not a
522
+ list of tools. Place resolution falls through the gazetteer to the OSM tables, so
523
+ a tool that takes a `place` — a weather warning, a road status, a charging
524
+ station, a car park, `find_nearby` — returns an OSM-derived answer whenever the
525
+ gazetteer did not know the name. Measured on 2026-09-27: a weather warning for
526
+ `Zeiss-Großplanetarium` named `["dwd","osm"]` and carried this line; one for
527
+ `Allianz Arena` named `["osm"]` alone.
528
+
529
+ Two wrong versions of this sentence have now been caught, and both erred the same
530
+ way, towards telling a reader an obligation did not apply. **One of them shipped.**
531
+ 1.3.12 said the line was carried "on every answer whose input was an address, and
532
+ on no other answer" — false for `find_poi`, and published. The second never
533
+ shipped: it was written while fixing the first and caught in review. It said "an
534
+ answer about a place, a station or a motorway does not", which drops the four
535
+ words that make it true and is false for every place the gazetteer could not
536
+ resolve. Two rounds of correcting one sentence is the reason the paragraph above
537
+ now states a predicate instead of listing tools or input shapes.
538
+
539
+ The positive test is the one to rely on: **read `_meta.sources` and the attribution
540
+ line on the answer you actually got.** Do not infer either from the shape of your
541
+ question.
542
+
543
+ Address data is imported **per deployment**, and the public service has it:
544
+ asked for a house number on 2026-09-27 it answered with the address and this
545
+ line. **So the line and the obligation apply to what you get from the public
546
+ service today.** How complete that import is was measured the same day from the
547
+ service's own per-Land verdict — which reads both tables, names any missing Land and exits
548
+ non-zero on one — rather than extrapolated from a single lookup: **all sixteen
549
+ Länder are imported, and every row is scoped to the Land it came from.** Two
550
+ address lookups in the two Länder least likely to have been staged —
551
+ Mecklenburg-Vorpommern and Saarland, asked in Rostock and Saarbrücken — both
552
+ answered through the public endpoint with `osm` in `_meta.sources`, over OSM data
553
+ dated 2026-09-22. No row count is written here on
554
+ purpose: it would be true the day it was typed and stale at the next import, and
555
+ reporting it is the verdict's job rather than this page's. One caveat, because it
556
+ nearly misled this very measurement — **a single address that does not resolve
557
+ says nothing about its Land**: a market-square house number in Erfurt came back
558
+ unfound from a Land that is fully imported, because that address is not in
559
+ OpenStreetMap under the spelling it was asked for. (The postcode is left out on
560
+ purpose - the leak sweep refuses a bare five-digit number in this repository, and
561
+ an allow-list entry added to carry an example would be a caption pointing at a
562
+ value.) Until the extract was loaded they did not, and this page said
563
+ so — the correction is the substantive one in this release.
564
+
565
+ A deployment that has not imported the extract answers that it can find places,
325
566
  stations and motorways but not house numbers, which is the right answer rather
326
- than a guessed coordinate. So nothing you get from the public service today
327
- carries this line or this obligation. Where an operator has imported the
328
- extract, both apply in full.
567
+ than a guessed coordinate. There, neither this line nor the obligation arises,
568
+ because no OSM-derived answer is produced.
329
569
 
330
- Our ODbL § 4.6 offer is [above](#and-one-that-applies-only-if-you-get-an-address-back).
570
+ Our ODbL § 4.6 offer is [above](#and-one-that-applies-if-you-get-an-openstreetmap-derived-result-back).
331
571
 
332
572
  Licence: <https://opendatacommons.org/licenses/odbl/1-0/> ·
333
573
  copyright: <https://www.openstreetmap.org/copyright>
@@ -440,10 +680,15 @@ Leaving a dataset out is as much a part of "we use all legal ways" as using one:
440
680
  - The dates in this page are the dates the relevant page was read, not the dates
441
681
  it was written.
442
682
  - **The statuses are measured, not declared.** Each one was checked on
443
- 2026-09-21 by asking the public endpoint a question and reading which source
444
- the answer named. That is why four rows say a source does not answer today
445
- where the register says the licence is cleared: cleared is not live, and a
446
- page that blurred the two would be the one thing this page exists not to be.
683
+ 2026-09-27 by asking the public endpoint a question and reading which source
684
+ the answer named — except the fuel row, which says `not re-measured` for the
685
+ reason given above. That is why **three** rows say a source is loaded but not
686
+ confirmed by an answer where the register says the licence is cleared — EnBW
687
+ static, the Tesla/VW availability feeds, and the police traffic events, which
688
+ moved into that state in this release: cleared is not live, and a page that
689
+ blurred the two would be the one thing this page exists not to be. The number is
690
+ written here because it is small enough to count; if it stops matching the table,
691
+ the table is right.
447
692
  - Where a source's terms are unknown or unreadable, this page says so instead of
448
693
  rounding it up to "open data" — the motorway interface above is named on every
449
694
  answer for exactly that reason, and the datasets in the section before this
package/dist/config.d.ts CHANGED
@@ -13,6 +13,16 @@ export declare const DEFAULT_MCP_URL: string;
13
13
  export declare const URL_ENV_VAR = "VIAFREI_MCP_URL";
14
14
  /** Environment variable that overrides the request timeout, in milliseconds. */
15
15
  export declare const TIMEOUT_ENV_VAR = "VIAFREI_MCP_TIMEOUT_MS";
16
+ /**
17
+ * Environment variable that adds HTTP headers, for an API key an MCP client
18
+ * cannot pass as a flag. Several headers are separated by a NEWLINE, because a
19
+ * newline can never appear in a header name or value, so no value is
20
+ * unrepresentable: a comma, a semicolon and a space all occur inside real header
21
+ * values, and any of those as the separator would make something unsendable.
22
+ */
23
+ export declare const HEADER_ENV_VAR = "VIAFREI_MCP_HEADER";
24
+ /** The separator between headers in HEADER_ENV_VAR. See HEADER_ENV_VAR. */
25
+ export declare const HEADER_ENV_SEPARATOR = "\n";
16
26
  /** How long a single HTTP request may take before it is given up on. */
17
27
  export declare const DEFAULT_TIMEOUT_MS = 30000;
18
28
  /**