Aggregate-API
v2 · statisch · CC-BY 4.0Berechnet Diese Auswertung ist älter als vorgesehen.
Diese API liefert für jede Mess-Stelle 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.
Datenzeitraum: die Datumsfelder in jedem Fenster. Berechnungszeitpunkt: 2026-09-24T02:30:42Z. Die beiden Angaben beantworten unterschiedliche Fragen.
| Pfad | Inhalt |
|---|---|
/api/punctuality/index.json |
alle Mess-Stellen mit EVA-Nummer und Name |
/api/punctuality/<eva>.json |
Aggregate einer Mess-Stelle, 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-09-24T02:30:42Z",
"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)",
"windows": {
"7d": {
"window": {
"days": 7,
"from": "2026-09-17",
"to": "2026-09-23"
},
"n": 8176,
"punctuality_pct": 93.19,
"median_delay_min": 1,
"p90_delay_min": 4,
"cancel_rate_pct": 92.97,
"cancel_rate_denominator": "n_departure_status_known",
"n_planned": 8372,
"n_estimated": 8176,
"n_departure_status_known": 128,
"n_cancelled_departure": 119,
"n_legacy_cancellation_unknown": 3,
"n_unobserved": 74,
"n_estimated_without_departure_status": 8169,
"observation_coverage_pct": 97.66,
"departure_status_coverage_pct": 1.53,
"legacy_or_cancel_rate_pct": 1.49,
"label_policy": "latest_source_estimate; not confirmed departure",
"quality_status": "low_status_coverage"
},
"30d": "…"
}
}Felder
| Feld | Bedeutung |
|---|---|
schema_version | Version des JSON-Vertrags. 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 tragfähig für Pünktlichkeit, Median und P90. Aktuell 100. |
quality_thresholds.min_departure_status_coverage_pct | Ab dieser Statusabdeckung gilt cancel_rate_pct als Quote des Bahnhofs. Aktuell 50 %. Zusätzlich müssen mindestens min_estimates Halte einen bekannten Abfahrtsstatus haben. |
eva | EVA-Nummer der Mess-Stelle |
name | Klarname laut Stammdaten |
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 | Alias von 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 | 50. bzw. 90. Perzentil der auswertbaren Abfahrtsverspätung in Minuten |
windows.<w>.cancel_rate_pct | Ausdrücklich ausgefallene Abfahrten geteilt durch Halte mit bekanntem Abfahrtsstatus |
windows.<w>.cancel_rate_denominator | Bezeichnung des Nenners für cancel_rate_pct |
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 Status p, a oder c für die Abfahrt |
windows.<w>.n_cancelled_departure | Halte mit ausdrücklich gespeichertem Abfahrtsstatus c |
windows.<w>.n_legacy_cancellation_unknown | Altes Ausfallflag ohne sichere Zuordnung zur Abfahrt |
windows.<w>.n_unobserved | Geplante Halte ohne auswertbare Schätzung, ohne bestätigten Abfahrtsausfall und ohne eindeutigem Ausgang |
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 |
windows.<w>.legacy_or_cancel_rate_pct | Historische kombinierte Ausfallflags geteilt durch alle geplanten Halte; kein Beleg für einen Abfahrtsausfall |
windows.<w>.label_policy | Hinweis, dass die letzte Quell-Schätzung verwendet wird und keine physische Abfahrt bestätigt |
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 kleinen Fallzahlen
beschreibt eine Prozentzahl eher die Stichprobe als den Bahnhof, deshalb zeigt
die Website dort keine Pünktlichkeitsquote, keinen Median und kein P90.
low_status_coverage heißt: die Fallzahl der Schätzungen reicht, aber
der Nenner der Ausfallquote trägt nicht. Er trägt, 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 die
Abdeckung 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. Eine Mess-Stelle ohne
auswertbare Schätzung hat deshalb keine Pünktlichkeits-, Median- oder P90-Zahl.
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.
Mess-Stellen
| Name | EVA | Schätzungen 30d |
|---|---|---|
| Aachen Hbf | 8000001 | 8.570 |
| Aachen-Rothe Erde | 8000406 | 6.158 |
| Augsburg Hbf | 8000013 | 12.111 |
| Berlin Hbf | 8011160 | 1 |
| Berlin Hbf (S-Bahn Stadtbahn) | 8089021 | 22.750 |
| Berlin Hbf (S21) | 8089522 | 3.142 |
| Berlin Hbf (tief) | 8098160 | 13.746 |
| Berlin Ostbahnhof | 8010255 | 1.482 |
| Berlin Ostbahnhof (S) | 8089185 | 24.342 |
| Berlin Südkreuz | 8011113 | 13.601 |
| Berlin Südkreuz (S) | 8089073 | 27.185 |
| Bochum Hbf | 8000041 | 9.661 |
| Bonn Hbf | 8000044 | 5.934 |
| Bonn-Bad Godesberg | 8001082 | 3.294 |
| Bonn-Mehlem | 8001085 | 1.793 |
| Bremen Hbf | 8000050 | 11.160 |
| Brühl | 8001215 | 3.335 |
| Dortmund Hbf | 8000080 | 17.417 |
| Dresden Hbf | 8010085 | 8.643 |
| Duisburg Hbf | 8000086 | 14.825 |
| Düren | 8000084 | 6.305 |
| Düsseldorf Hbf | 8000085 | 23.579 |
| Erfurt Hbf | 8010101 | 9.798 |
| Eschweiler Hbf | 8001886 | 2.292 |
| Essen Hbf | 8000098 | 16.328 |
| Frankfurt Hbf (tief) | 8098105 | 24.755 |
| Frankfurt(Main)Hbf | 8000105 | 18.075 |
| Freiburg(Brsg)Hbf | 8000107 | 8.708 |
| Garmisch-Partenkirchen | 8002187 | 1.207 |
| Gießen | 8000124 | 6.291 |
| Göttingen | 8000128 | 7.115 |
| Hagen Hbf | 8000142 | 9.124 |
| Hamburg Hbf | 8002549 | 11.490 |
| Hamburg Hbf (S-Bahn) | 8098549 | 34.797 |
| Hamm(Westf)Hbf | 8000149 | 9.099 |
| Hannover Hbf | 8000152 | 19.709 |
| Heidelberg Hbf | 8000156 | 10.355 |
| Horrem | 8000178 | 7.730 |
| Hürth-Kalscheuren | 8003160 | 3.691 |
| Ingolstadt Hbf | 8000183 | 6.205 |
| Kamen | 8003168 | 4.120 |
| Karlsruhe Hbf | 8000191 | 10.250 |
| Kassel-Wilhelmshöhe | 8003200 | 9.858 |
| Kiel Hbf | 8000199 | 5.289 |
| Köln Hbf | 8000207 | 31.969 |
| Köln Messe/Deutz | 8003368 | 24.645 |
| Köln Messe/Deutz Gl.11-12 | 8073368 | 1.177 |
| Köln-Mülheim | 8000209 | 9.217 |
| Langerwehe | 8003553 | 3.799 |
| Leichlingen | 8003616 | 1.224 |
| Leipzig Hbf | 8010205 | 8.725 |
| Leipzig Hbf (tief) | 8098205 | 11.171 |
| Leverkusen Mitte | 8006713 | 1.446 |
| Lübeck Hbf | 8000237 | 4.958 |
| Magdeburg Hbf | 8010224 | 7.643 |
| Mainz Hbf | 8000240 | 9.474 |
| Mannheim Hbf | 8000244 | 16.297 |
| München Hbf | 8000261 | 8.445 |
| München Hbf (tief) | 8098263 | 25.428 |
| München Hbf Gl.27-36 | 8098261 | 6.546 |
| München Hbf Gl.5-10 | 8098262 | 1.167 |
| Münster(Westf)Hbf | 8000263 | 10.265 |
| Norddeich Mole | 8007768 | 631 |
| Nürnberg Hbf | 8000284 | 20.376 |
| Oberhausen Hbf | 8000286 | 10.306 |
| Opladen | 8000853 | 2.296 |
| Osnabrück Hbf | 8000294 | 7.472 |
| Regensburg Hbf | 8000309 | 5.002 |
| Roisdorf | 8005152 | 2.328 |
| Rostock Hbf | 8010304 | 7.585 |
| Saarbrücken Hbf | 8000323 | 6.730 |
| Schifferstadt | 8000326 | 5.170 |
| Schwelm | 8000033 | 4.380 |
| Schwerte(Ruhr) | 8000037 | 4.645 |
| Sechtem | 8005499 | 2.331 |
| Solingen Hbf | 8000087 | 7.215 |
| Stolberg(Rheinl)Hbf | 8000348 | 6.052 |
| Stolberg(Rheinl)Hbf Gl.27 | 8098348 | 1.724 |
| Stolberg(Rheinl)Hbf Gl.44 | 8098349 | 735 |
| Stuttgart Hbf | 8000096 | 16.195 |
| Stuttgart Hbf (tief) | 8098096 | 8.422 |
| Trier Hbf | 8000134 | 3.802 |
| Ulm Hbf | 8000170 | 10.790 |
| Westerland(Sylt) | 8006369 | 901 |
| Wuppertal Hbf | 8000266 | 10.655 |
| Wuppertal-Oberbarmen | 8006719 | 8.001 |
| Wuppertal-Sonnborn | 8006618 | 3.306 |
| Wuppertal-Steinbeck | 8006619 | 4.692 |
| Wuppertal-Vohwinkel | 8006718 | 8.573 |
| Würzburg Hbf | 8000260 | 8.321 |
Stand 2026-09-24T02:30:42Z · 90 Mess-Stellen. Datenbasis ist die eigene
Messung aus dem IRIS-TTS-Backend der DB, minütlich abgefragt. „Pünktlich“ heißt
Abfahrtsverspätung unter 6 Minuten. Nutzung frei unter CC-BY 4.0
mit Verweis auf railcast.de. Die Dateien liegen statisch im Webroot und schicken
keinen Access-Control-Allow-Origin-Header. Für den Abruf aus einer
fremden Web-Seite heraus bitte serverseitig proxen.
Monatliche Auswertungen derselben Datenbasis in Prosa: railcast.de/report/.