Daten verwenden
API v2 · JSON-Dateien · CC-BY 4.0Berechnet Diese Auswertung ist älter als vorgesehen.
Hier gibt es die Zahlen der Bahnhofsseiten als JSON-Dateien zum Weiterverarbeiten. Diese Programmierschnittstelle (API) liefert für jeden Messpunkt zwei feste Fenster: 7 und 30 Tage, jeweils bis einschließlich gestern. Sie enthält nur zusammengefasste Werte und wird mit der nächsten geplanten Auswertung neu erstellt. Eine gespeicherte Zeitschätzung ist kein Beleg dafür, dass der Zug tatsächlich abgefahren ist.
Welche Tage ein Fenster umfasst, steht in seinen Datumsfeldern. Berechnet wurden die Dateien am 08.11.2026, 04:00 Uhr. Das sind zwei verschiedene Angaben.
So ist das gemessen
- Zeitraum
- Die Fenster
7dund30dumfassen die 7 und 30 Kalendertage bis einschließlich gestern nach deutscher Ortszeit (Europe/Berlin). Ein Halt gehört zu dem Tag, an dem der Zug laut Fahrplan abfahren sollte.generated_atsteht in UTC. Kam ein Messpunkt später dazu, nenntfirst_planned_dayden ersten Tag mit Daten. - Grundlage
- Alle Zählfelder wie
n_plannedundn_estimatedzählen Halte, also je Zug an einem Messpunkt. Wiederholte Abrufe desselben Halts zählen nicht mehrfach; ein Zug, der an mehreren Messpunkten hält, steht in jeder dieser Dateien. - Abdeckung
observation_coverage_pctist der Anteil der geplanten Halte mit auswertbarer Zeitschätzung,departure_status_coverage_pctder Anteil mit bekanntem Abfahrtsstatus. Fehlende Werte bleiben unbekannt, ausgefallene und mehrdeutige Halte sind getrennt gezählt. Die Messpunkte sind eine festgelegte Auswahl von Bahnhöfen, keine Zufallsstichprobe (Auswahl der Messpunkte).- Definition
punctuality_pctist der Anteil der Halte mit weniger als 6 Minuten Abfahrtsverspätung im letzten gespeicherten Stand der Bahn, keine gemessene Abfahrt. Mehr unter Schätzung und letzter Stand.
| Pfad | Inhalt |
|---|---|
/api/punctuality/index.json |
alle Messpunkte mit EVA-Nummer und Name |
/api/punctuality/<eva>.json |
zusammengefasste Werte eines Messpunkts, Fenster 7d und 30d |
Beispiel-Antwort
/api/punctuality/8098549.json für Hamburg Hbf (S-Bahn), gekürzt auf ein Fenster:
{
"schema_version": 2,
"generated_at": "2026-11-08T03:00:32Z",
"license": "CC-BY-4.0",
"source": "https://railcast.de/",
"quality_thresholds": {
"min_estimates": 100,
"min_departure_status_coverage_pct": 50
},
"eva": "8098549",
"name": "Hamburg Hbf (S-Bahn)",
"first_planned_day": "2026-08-07",
"windows": {
"7d": {
"window": {
"days": 7,
"from": "2026-11-01",
"to": "2026-11-07"
},
"n": 7837,
"punctuality_pct": 83.31,
"median_delay_min": 2,
"p90_delay_min": 7,
"cancel_rate_pct": 89.31,
"cancel_rate_denominator": "n_departure_status_known",
"n_planned": 8302,
"n_estimated": 7837,
"n_departure_status_known": 159,
"n_cancelled_departure": 142,
"n_legacy_cancellation_unknown": 5,
"n_unobserved": 318,
"n_estimated_without_departure_status": 7821,
"observation_coverage_pct": 94.4,
"departure_status_coverage_pct": 1.92,
"legacy_or_cancel_rate_pct": 1.77,
"label_policy": "latest_source_estimate; not confirmed departure",
"quality_status": "low_status_coverage"
},
"30d": "…"
}
}Felder
| Feld | Bedeutung |
|---|---|
schema_version | Version des Dateiformats. Diese Ausgabe ist 2. |
generated_at | Zeitpunkt der Berechnung (ISO 8601, UTC) |
license / source | Lizenz und Quelle der zusammengefassten Daten |
quality_thresholds.min_estimates | Ab so vielen auswertbaren Abfahrts-Schätzungen gilt ein Fenster als belastbar für Pünktlichkeit, Median und 90. Perzentil. Aktuell 100. |
quality_thresholds.min_departure_status_coverage_pct | Ab diesem Anteil geplanter Halte mit bekanntem Abfahrtsstatus gilt cancel_rate_pct als Ausfallquote des Bahnhofs. Aktuell 50 %. Zusätzlich müssen mindestens min_estimates Halte einen bekannten Abfahrtsstatus haben. |
eva | EVA-Nummer des Messpunkts, die Kennnummer der Bahn |
name | Klarname laut Stammdaten |
first_planned_day | Erster Kalendertag (deutsche Ortszeit), für den dieser Messpunkt einen geplanten Halt gespeichert hat, oder null. Davor liegen keine Daten; ein Fenster ist erst ab diesem Tag gefüllt |
windows.<w> | Objekt für 7d oder 30d; <w> ist kein frei wählbarer Zeitraum |
windows.<w>.window | days ist die Fensterlänge; from und to sind die eingeschlossenen Kalendertage |
windows.<w>.n | Gleicher Wert wie n_estimated: Halte mit auswertbarer Abfahrts-Schätzung; keine bestätigte Durchführung |
windows.<w>.punctuality_pct | Anteil der auswertbaren Schätzungen unter 6 min Abfahrtsverspätung |
windows.<w>.median_delay_min / p90_delay_min | Median bzw. 90. Perzentil der auswertbaren Abfahrtsverspätung in Minuten: Die Hälfte bzw. neun von zehn Verspätungen lagen bei höchstens dem jeweiligen Wert |
windows.<w>.cancel_rate_pct | Ausdrücklich ausgefallene Abfahrten geteilt durch Halte mit bekanntem Abfahrtsstatus |
windows.<w>.cancel_rate_denominator | Name des Zählfelds, durch das für cancel_rate_pct geteilt wird (Nenner) |
windows.<w>.n_planned | Alle geplanten Halte im Fenster; Grundlage der Abdeckungsquoten |
windows.<w>.n_estimated | Halte mit gespeicherter Abfahrtszeit und auswertbarer Verspätungsangabe, ohne gemeldeten oder unklaren Abfahrtsausfall |
windows.<w>.n_departure_status_known | Halte mit gemeldetem Abfahrtsstatus p (geplant), a (zusätzlich) oder c (ausgefallen) |
windows.<w>.n_cancelled_departure | Halte mit ausdrücklich gespeichertem Abfahrtsstatus c |
windows.<w>.n_legacy_cancellation_unknown | Ältere Ausfallmeldung, bei der unklar ist, ob sie die Abfahrt betraf |
windows.<w>.n_unobserved | Geplante Halte ohne auswertbare Schätzung, ohne gemeldeten Abfahrtsausfall und ohne unklare ältere Ausfallmeldung |
windows.<w>.n_estimated_without_departure_status | Auswertbare Schätzungen ohne bekannten Abfahrtsstatus |
windows.<w>.observation_coverage_pct | n_estimated / n_planned, also der Anteil mit auswertbarer Schätzung |
windows.<w>.departure_status_coverage_pct | n_departure_status_known / n_planned, also der Anteil mit bekanntem Abfahrtsstatus |
windows.<w>.legacy_or_cancel_rate_pct | Anteil aller geplanten Halte mit einer Ausfallmarkierung im älteren, für Ankunft und Abfahrt gemeinsamen Feld; kein Beleg für einen Abfahrtsausfall |
windows.<w>.label_policy | Hinweis, dass die zuletzt gespeicherte Bahn-Schätzung verwendet wird; sie bestätigt keine tatsächliche Abfahrt |
windows.<w>.quality_status | ok, too_few_estimates oder low_status_coverage; siehe Absatz unter dieser Tabelle |
Belastbarkeit eines Fensters
quality_status fasst zwei getrennte Prüfungen zusammen und wird in
dieser Reihenfolge vergeben. too_few_estimates heißt: weniger als
100 auswertbare Abfahrts-Schätzungen. Bei so wenigen Fällen
beschreibt eine Prozentzahl eher diese Fälle als den Bahnhof, deshalb zeigt
die Website dort keine Pünktlichkeitsquote, keinen Median und kein 90. Perzentil.
low_status_coverage heißt: Es gibt genug Schätzungen, aber zu wenige
Halte mit bekanntem Abfahrtsstatus für eine Ausfallquote. Genug sind es, wenn mindestens
50 % der geplanten Halte einen Abfahrtsstatus haben und das
mindestens 100 Halte sind. Die Bahn meldet den Status vor allem bei
Abweichungen; eine kleine oder ausgewählte Teilmenge ergibt keine Ausfallquote des
Bahnhofs. Die Website zeigt in diesem Fall die Anzahl gemeldeter Ausfälle und den
Anteil mit bekanntem Abfahrtsstatus statt einer Quote.
Beide Prüfungen bleiben einzeln nachrechenbar, weil die Schwellen und alle
Zählwerte in der Antwort stehen. Ein Fenster kann an beiden Prüfungen scheitern;
quality_status nennt dann die erste. Die Kennzahlen selbst werden
nicht verändert oder entfernt: punctuality_pct und
cancel_rate_pct bleiben so berechnet wie bisher.
Felder ohne Datengrundlage sind null, nicht 0. Ein Messpunkt ohne
auswertbare Schätzung hat deshalb keine Pünktlichkeitsquote, keinen Median und kein
90. Perzentil.
Ohne bekannten Abfahrtsstatus gibt es keine Ausfallquote. Fehlende Halte werden
nicht als pünktlich oder „nicht ausgefallen“ aufgefüllt. Zeitschätzungen können
sich nachträglich ändern.
Messpunkte
| Name | EVA | Schätzungen 30 Tage |
|---|---|---|
| Aachen Hbf | 8000001 | 8.659 |
| Aachen-Rothe Erde | 8000406 | 6.125 |
| Aalen Hbf | 8000002 | 3.770 |
| Aschaffenburg Hbf | 8000010 | 4.893 |
| Augsburg Haunstetterstraße | 8000658 | 6.850 |
| Augsburg Hbf | 8000013 | 12.522 |
| Augsburg-Hochzoll | 8000661 | 6.913 |
| Bamberg | 8000025 | 7.101 |
| Berlin Gesundbrunnen | 8011102 | 4.537 |
| Berlin Gesundbrunnen(S) | 8089015 | 33.102 |
| Berlin Hbf | 8011160 | 0 |
| Berlin Hbf (S-Bahn Stadtbahn) | 8089021 | 22.329 |
| Berlin Hbf (S21) | 8089522 | 3.290 |
| Berlin Hbf (tief) | 8098160 | 13.341 |
| Berlin Ostbahnhof | 8010255 | 1.306 |
| Berlin Ostbahnhof (S) | 8089185 | 24.412 |
| Berlin Südkreuz | 8011113 | 13.587 |
| Berlin Südkreuz (S) | 8089073 | 27.981 |
| Berlin-Spandau | 8010404 | 7.451 |
| Berlin-Spandau (S) | 8089083 | 3.418 |
| Betzdorf(Sieg) | 8000034 | 3.623 |
| Bielefeld Hbf | 8000036 | 8.765 |
| Bochum Hbf | 8000041 | 10.268 |
| Bonn Hbf | 8000044 | 5.892 |
| Bonn-Bad Godesberg | 8001082 | 3.171 |
| Bonn-Mehlem | 8001085 | 1.717 |
| Braunschweig Hbf | 8000049 | 8.333 |
| Bremen Hbf | 8000050 | 11.707 |
| Brühl | 8001215 | 3.276 |
| Buchloe | 8000057 | 5.264 |
| Cottbus Hbf | 8010073 | 3.686 |
| Darmstadt Hbf | 8000068 | 7.246 |
| Dortmund Hbf | 8000080 | 17.117 |
| Dresden Hbf | 8010085 | 8.288 |
| Dresden-Neustadt | 8010089 | 14.205 |
| Duisburg Hbf | 8000086 | 10.637 |
| Düren | 8000084 | 6.209 |
| Düsseldorf Hbf | 8000085 | 23.604 |
| Eisenach Hbf | 8010097 | 3.280 |
| Elmshorn | 8000092 | 7.043 |
| Erfurt Hbf | 8010101 | 11.307 |
| Eschweiler Hbf | 8001886 | 2.295 |
| Essen Hbf | 8000098 | 13.713 |
| Flughafen BER | 8011201 | 6.632 |
| Flughafen BER (S-Bahn) | 8089201 | 3.525 |
| Frankfurt Hbf (tief) | 8098105 | 24.654 |
| Frankfurt(M) Flughafen Fernbahnhof | 8089361 | 131 |
| Frankfurt(M) Flughafen Fernbf | 8070003 | 5.932 |
| Frankfurt(M) Flughafen Regionalbf | 8070004 | 7.228 |
| Frankfurt(Main)Hbf | 8000105 | 17.296 |
| Frankfurt(Main)Süd | 8002041 | 17.034 |
| Frankfurt(Oder) | 8010113 | 3.130 |
| Freiburg(Brsg)Hbf | 8000107 | 9.287 |
| Friedberg(Hess) | 8000111 | 7.367 |
| Friedrichshafen Stadt | 8000112 | 4.777 |
| Fulda | 8000115 | 6.423 |
| Garmisch-Partenkirchen | 8002187 | 1.704 |
| Gelsenkirchen Hbf | 8000118 | 9.323 |
| Gießen | 8000124 | 6.352 |
| Göttingen | 8000128 | 6.589 |
| Hagen Hbf | 8000142 | 9.505 |
| Halle(Saale)Hbf | 8010159 | 11.538 |
| Hamburg Dammtor | 8002548 | 17.273 |
| Hamburg Hbf | 8002549 | 10.724 |
| Hamburg Hbf (S-Bahn) | 8098549 | 34.239 |
| Hamburg-Altona | 8002553 | 2.989 |
| Hamburg-Altona(S) | 8098553 | 23.390 |
| Hamburg-Harburg | 8000147 | 8.217 |
| Hamburg-Harburg(S) | 8098147 | 13.017 |
| Hamm(Westf)Hbf | 8000149 | 9.002 |
| Hanau Hbf | 8000150 | 10.681 |
| Hannover Hbf | 8000152 | 19.440 |
| Heidelberg Hbf | 8000156 | 10.383 |
| Homburg(Saar)Hbf | 8000176 | 4.706 |
| Horrem | 8000178 | 7.447 |
| Hürth-Kalscheuren | 8003160 | 3.600 |
| Ingolstadt Hbf | 8000183 | 5.996 |
| Jena-Göschwitz | 8010133 | 5.128 |
| Kaiserslautern Hbf | 8000189 | 5.149 |
| Kamen | 8003168 | 4.159 |
| Karlsruhe Hbf | 8000191 | 10.883 |
| Kassel-Wilhelmshöhe | 8003200 | 8.691 |
| Kiel Hbf | 8000199 | 5.477 |
| Köln Hbf | 8000207 | 31.548 |
| Köln Messe/Deutz | 8003368 | 24.079 |
| Köln Messe/Deutz Gl.11-12 | 8073368 | 1.642 |
| Köln-Mülheim | 8000209 | 9.648 |
| Langerwehe | 8003553 | 3.782 |
| Leichlingen | 8003616 | 2.188 |
| Leipzig Hbf | 8010205 | 8.242 |
| Leipzig Hbf (tief) | 8098205 | 10.597 |
| Leverkusen Mitte | 8006713 | 2.217 |
| Lindau-Reutin | 8003693 | 4.071 |
| Lutherstadt Wittenberg Hbf | 8010222 | 3.723 |
| Lübeck Hbf | 8000237 | 4.322 |
| Lüneburg | 8000238 | 4.430 |
| Magdeburg Hbf | 8010224 | 9.428 |
| Mainz Hbf | 8000240 | 10.083 |
| Mannheim Hbf | 8000244 | 15.397 |
| Mühlacker | 8000339 | 4.521 |
| Mühldorf(Oberbay) | 8000258 | 3.578 |
| München Hbf | 8000261 | 8.857 |
| München Hbf (tief) | 8098263 | 22.241 |
| München Hbf Gl.27-36 | 8098261 | 6.807 |
| München Hbf Gl.5-10 | 8098262 | 1.018 |
| Münster(Westf)Hbf | 8000263 | 9.835 |
| Neustadt(Weinstr)Hbf | 8000275 | 5.736 |
| Neustrelitz Hbf | 8010250 | 1.410 |
| Norddeich Mole | 8007768 | 577 |
| Nürnberg Hbf | 8000284 | 21.139 |
| Oberhausen Hbf | 8000286 | 7.551 |
| Offenburg | 8000290 | 6.386 |
| Opladen | 8000853 | 3.220 |
| Osnabrück Hbf | 8000294 | 7.116 |
| Potsdam Hbf | 8012666 | 6.711 |
| Potsdam Hbf (S) | 8089184 | 3.265 |
| Regensburg Hbf | 8000309 | 4.939 |
| Roisdorf | 8005152 | 2.261 |
| Rosenheim | 8000320 | 5.647 |
| Rostock Hbf | 8010304 | 7.186 |
| Saarbrücken Hbf | 8000323 | 6.820 |
| Schifferstadt | 8000326 | 5.205 |
| Schwelm | 8000033 | 5.010 |
| Schwerte(Ruhr) | 8000037 | 4.085 |
| Sechtem | 8005499 | 2.255 |
| Singen(Hohentwiel) | 8000073 | 5.900 |
| Solingen Hbf | 8000087 | 7.396 |
| Stolberg(Rheinl)Hbf | 8000348 | 6.085 |
| Stolberg(Rheinl)Hbf Gl.27 | 8098348 | 1.766 |
| Stolberg(Rheinl)Hbf Gl.44 | 8098349 | 918 |
| Stralsund Hbf | 8010338 | 2.728 |
| Stuttgart Hbf | 8000096 | 13.633 |
| Stuttgart Hbf (tief) | 8098096 | 21.705 |
| Stuttgart-Bad Cannstatt | 8005769 | 20.228 |
| Trier Hbf | 8000134 | 4.543 |
| Tübingen Hbf | 8000141 | 5.609 |
| Uelzen | 8000168 | 3.588 |
| Ulm Hbf | 8000170 | 11.798 |
| Weimar | 8010366 | 5.270 |
| Westerland(Sylt) | 8006369 | 870 |
| Wolfsburg Hbf | 8006552 | 1.141 |
| Wuppertal Hbf | 8000266 | 13.732 |
| Wuppertal-Oberbarmen | 8006719 | 9.471 |
| Wuppertal-Sonnborn | 8006618 | 4.804 |
| Wuppertal-Steinbeck | 8006619 | 6.512 |
| Wuppertal-Vohwinkel | 8006718 | 11.121 |
| Würzburg Hbf | 8000260 | 8.204 |
| Zwickau(Sachs)Hbf | 8010397 | 4.095 |
Stand 08.11.2026, 04:00 Uhr · 148 Messpunkte. Datenbasis sind eigene,
minütliche Abfragen beim Meldesystem IRIS der Deutschen Bahn. „Pünktlich“ heißt
Abfahrtsverspätung unter 6 Minuten. Nutzung frei unter CC-BY 4.0
mit Verweis auf railcast.de. Die Dateien sind vorab berechnet und werden ohne
Access-Control-Allow-Origin-Header ausgeliefert. Skripte auf anderen Websites
können sie deshalb nicht direkt im Browser laden; bitte über den eigenen Server abrufen.
Monatliche Auswertungen derselben Datenbasis als Text: railcast.de/report/.