RailCast
← Start

Daten verwenden

API v2 · JSON-Dateien · CC-BY 4.0

Berechnet

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 7d und 30d umfassen 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_at steht in UTC. Kam ein Messpunkt später dazu, nennt first_planned_day den ersten Tag mit Daten.
Grundlage
Alle Zählfelder wie n_planned und n_estimated zä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_pct ist der Anteil der geplanten Halte mit auswertbarer Zeitschätzung, departure_status_coverage_pct der 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_pct ist 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.
Endpunkte
PfadInhalt
/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

FeldBedeutung
schema_versionVersion des Dateiformats. Diese Ausgabe ist 2.
generated_atZeitpunkt der Berechnung (ISO 8601, UTC)
license / sourceLizenz und Quelle der zusammengefassten Daten
quality_thresholds.min_estimatesAb 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_pctAb 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.
evaEVA-Nummer des Messpunkts, die Kennnummer der Bahn
nameKlarname laut Stammdaten
first_planned_dayErster 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>.windowdays ist die Fensterlänge; from und to sind die eingeschlossenen Kalendertage
windows.<w>.nGleicher Wert wie n_estimated: Halte mit auswertbarer Abfahrts-Schätzung; keine bestätigte Durchführung
windows.<w>.punctuality_pctAnteil der auswertbaren Schätzungen unter 6 min Abfahrtsverspätung
windows.<w>.median_delay_min / p90_delay_minMedian 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_pctAusdrücklich ausgefallene Abfahrten geteilt durch Halte mit bekanntem Abfahrtsstatus
windows.<w>.cancel_rate_denominatorName des Zählfelds, durch das für cancel_rate_pct geteilt wird (Nenner)
windows.<w>.n_plannedAlle geplanten Halte im Fenster; Grundlage der Abdeckungsquoten
windows.<w>.n_estimatedHalte mit gespeicherter Abfahrtszeit und auswertbarer Verspätungsangabe, ohne gemeldeten oder unklaren Abfahrtsausfall
windows.<w>.n_departure_status_knownHalte mit gemeldetem Abfahrtsstatus p (geplant), a (zusätzlich) oder c (ausgefallen)
windows.<w>.n_cancelled_departureHalte 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_unobservedGeplante Halte ohne auswertbare Schätzung, ohne gemeldeten Abfahrtsausfall und ohne unklare ältere Ausfallmeldung
windows.<w>.n_estimated_without_departure_statusAuswertbare Schätzungen ohne bekannten Abfahrtsstatus
windows.<w>.observation_coverage_pctn_estimated / n_planned, also der Anteil mit auswertbarer Schätzung
windows.<w>.departure_status_coverage_pctn_departure_status_known / n_planned, also der Anteil mit bekanntem Abfahrtsstatus
windows.<w>.legacy_or_cancel_rate_pctAnteil aller geplanten Halte mit einer Ausfallmarkierung im älteren, für Ankunft und Abfahrt gemeinsamen Feld; kein Beleg für einen Abfahrtsausfall
windows.<w>.label_policyHinweis, dass die zuletzt gespeicherte Bahn-Schätzung verwendet wird; sie bestätigt keine tatsächliche Abfahrt
windows.<w>.quality_statusok, 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

NameEVASchätzungen 30 Tage
Aachen Hbf80000018.659
Aachen-Rothe Erde80004066.125
Aalen Hbf80000023.770
Aschaffenburg Hbf80000104.893
Augsburg Haunstetterstraße80006586.850
Augsburg Hbf800001312.522
Augsburg-Hochzoll80006616.913
Bamberg80000257.101
Berlin Gesundbrunnen80111024.537
Berlin Gesundbrunnen(S)808901533.102
Berlin Hbf80111600
Berlin Hbf (S-Bahn Stadtbahn)808902122.329
Berlin Hbf (S21)80895223.290
Berlin Hbf (tief)809816013.341
Berlin Ostbahnhof80102551.306
Berlin Ostbahnhof (S)808918524.412
Berlin Südkreuz801111313.587
Berlin Südkreuz (S)808907327.981
Berlin-Spandau80104047.451
Berlin-Spandau (S)80890833.418
Betzdorf(Sieg)80000343.623
Bielefeld Hbf80000368.765
Bochum Hbf800004110.268
Bonn Hbf80000445.892
Bonn-Bad Godesberg80010823.171
Bonn-Mehlem80010851.717
Braunschweig Hbf80000498.333
Bremen Hbf800005011.707
Brühl80012153.276
Buchloe80000575.264
Cottbus Hbf80100733.686
Darmstadt Hbf80000687.246
Dortmund Hbf800008017.117
Dresden Hbf80100858.288
Dresden-Neustadt801008914.205
Duisburg Hbf800008610.637
Düren80000846.209
Düsseldorf Hbf800008523.604
Eisenach Hbf80100973.280
Elmshorn80000927.043
Erfurt Hbf801010111.307
Eschweiler Hbf80018862.295
Essen Hbf800009813.713
Flughafen BER80112016.632
Flughafen BER (S-Bahn)80892013.525
Frankfurt Hbf (tief)809810524.654
Frankfurt(M) Flughafen Fernbahnhof8089361131
Frankfurt(M) Flughafen Fernbf80700035.932
Frankfurt(M) Flughafen Regionalbf80700047.228
Frankfurt(Main)Hbf800010517.296
Frankfurt(Main)Süd800204117.034
Frankfurt(Oder)80101133.130
Freiburg(Brsg)Hbf80001079.287
Friedberg(Hess)80001117.367
Friedrichshafen Stadt80001124.777
Fulda80001156.423
Garmisch-Partenkirchen80021871.704
Gelsenkirchen Hbf80001189.323
Gießen80001246.352
Göttingen80001286.589
Hagen Hbf80001429.505
Halle(Saale)Hbf801015911.538
Hamburg Dammtor800254817.273
Hamburg Hbf800254910.724
Hamburg Hbf (S-Bahn)809854934.239
Hamburg-Altona80025532.989
Hamburg-Altona(S)809855323.390
Hamburg-Harburg80001478.217
Hamburg-Harburg(S)809814713.017
Hamm(Westf)Hbf80001499.002
Hanau Hbf800015010.681
Hannover Hbf800015219.440
Heidelberg Hbf800015610.383
Homburg(Saar)Hbf80001764.706
Horrem80001787.447
Hürth-Kalscheuren80031603.600
Ingolstadt Hbf80001835.996
Jena-Göschwitz80101335.128
Kaiserslautern Hbf80001895.149
Kamen80031684.159
Karlsruhe Hbf800019110.883
Kassel-Wilhelmshöhe80032008.691
Kiel Hbf80001995.477
Köln Hbf800020731.548
Köln Messe/Deutz800336824.079
Köln Messe/Deutz Gl.11-1280733681.642
Köln-Mülheim80002099.648
Langerwehe80035533.782
Leichlingen80036162.188
Leipzig Hbf80102058.242
Leipzig Hbf (tief)809820510.597
Leverkusen Mitte80067132.217
Lindau-Reutin80036934.071
Lutherstadt Wittenberg Hbf80102223.723
Lübeck Hbf80002374.322
Lüneburg80002384.430
Magdeburg Hbf80102249.428
Mainz Hbf800024010.083
Mannheim Hbf800024415.397
Mühlacker80003394.521
Mühldorf(Oberbay)80002583.578
München Hbf80002618.857
München Hbf (tief)809826322.241
München Hbf Gl.27-3680982616.807
München Hbf Gl.5-1080982621.018
Münster(Westf)Hbf80002639.835
Neustadt(Weinstr)Hbf80002755.736
Neustrelitz Hbf80102501.410
Norddeich Mole8007768577
Nürnberg Hbf800028421.139
Oberhausen Hbf80002867.551
Offenburg80002906.386
Opladen80008533.220
Osnabrück Hbf80002947.116
Potsdam Hbf80126666.711
Potsdam Hbf (S)80891843.265
Regensburg Hbf80003094.939
Roisdorf80051522.261
Rosenheim80003205.647
Rostock Hbf80103047.186
Saarbrücken Hbf80003236.820
Schifferstadt80003265.205
Schwelm80000335.010
Schwerte(Ruhr)80000374.085
Sechtem80054992.255
Singen(Hohentwiel)80000735.900
Solingen Hbf80000877.396
Stolberg(Rheinl)Hbf80003486.085
Stolberg(Rheinl)Hbf Gl.2780983481.766
Stolberg(Rheinl)Hbf Gl.448098349918
Stralsund Hbf80103382.728
Stuttgart Hbf800009613.633
Stuttgart Hbf (tief)809809621.705
Stuttgart-Bad Cannstatt800576920.228
Trier Hbf80001344.543
Tübingen Hbf80001415.609
Uelzen80001683.588
Ulm Hbf800017011.798
Weimar80103665.270
Westerland(Sylt)8006369870
Wolfsburg Hbf80065521.141
Wuppertal Hbf800026613.732
Wuppertal-Oberbarmen80067199.471
Wuppertal-Sonnborn80066184.804
Wuppertal-Steinbeck80066196.512
Wuppertal-Vohwinkel800671811.121
Würzburg Hbf80002608.204
Zwickau(Sachs)Hbf80103974.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/.