Developer
Menü

Fahrten

Der ganze Weg eines Zuges: jeder Halt mit geplanter und tatsächlicher Zeit, Gleis, Ausfällen, Hinweisen, Ausstattung und auf Wunsch dem Linienverlauf für Karten.

Objekte

Objekt Fahrt

FeldTypBeschreibung
idstringKennung der Fahrt (undurchsichtig, bleibt für diese Fahrt gleich)
trainobjectZug wie bei Abfahrt
originobjectStartbahnhof { id, name, location }
destinationobjectZielbahnhof
cancelledbooleanFährt die ganze Fahrt nicht?
position??object{ lat, lon, estimated }: berechnete Position des Zuges, wenn er gerade fährt
stopsHalt[]Alle Halte in Fahrtrichtung
messagesobject[]Hinweise zur Fahrt (Störungen, Bauarbeiten): { type, code, text }
attributesobject[]Ausstattung (WLAN, Fahrradmitnahme, Bordbistro …): { code, text }
polyline??objectLinienverlauf als GeoJSON LineString, nur mit polyline=true

Objekt Halt

FeldTypBeschreibung
stationobject{ id, name, location }
arrival?object{ scheduled, actual, delay }, null am Start
departure?object{ scheduled, actual, delay }, null am Ziel
platform?object{ scheduled, actual, changed }
cancelledbooleanHalt entfällt
additionalbooleanZusätzlicher Halt
remarksobject[]Hinweise nur für diesen Halt, z. B. „Hält nur zum Einsteigen“
{
  "station": {
    "id": "8098160",
    "name": "Berlin Hbf (Tiefgeschoß)",
    "location": {
      "lat": 52.52585,
      "lon": 13.368892
    }
  },
  "arrival": null,
  "departure": {
    "scheduled": "2026-10-15T17:36:00+02:00",
    "actual": "2026-10-15T18:28:00+02:00",
    "delay": 52
  },
  "platform": {
    "scheduled": "4",
    "actual": "4",
    "changed": false
  },
  "cancelled": false,
  "additional": false,
  "remarks": [
    {
      "type": "status",
      "code": "text.realtime.stop.exit.disabled",
      "text": "Hält nur zum Einsteigen"
    }
  ]
}

Züge suchen

GET/v1/trainsEimer standard

Findet die Fahrten eines Zuges über seinen Namen, z. B. ICE 1603, RE 1 oder S 7, die zum Zeitpunkt time unterwegs sind. Die id geht an Fahrt abrufen.

Info

Gesucht wird nur im Bahnverkehr. Ein Zug, der erst später losfährt, wird mit time zu seiner Fahrzeit gefunden.

Query-Parameter

FeldTypBeschreibung
namePflichtstringZugname wie auf der Anzeige
timeISO 8601Zeitpunkt (ISO 8601), zu dem der Zug fährt. Standard: jetzt

Antwort

Liste { id, train, origin, destination, departure }

[
  {
    "id": "b2ViYh8yfCNWTiMxI1NUIzE3OTIw…",
    "train": {
      "name": "ICE 1603",
      "category": "ICE",
      "number": "1603",
      "line": "ICE 1603",
      "product": "long_distance",
      "operator": {
        "code": "db-fernverkehr-ag",
        "name": "DB Fernverkehr AG"
      }
    },
    "origin": {
      "id": "8011102",
      "name": "Berlin Gesundbrunnen",
      "location": null
    },
    "destination": {
      "id": "8000261",
      "name": "München Hbf",
      "location": null
    },
    "departure": "2026-10-15T17:26:00+02:00"
  }
]

Beispiel

curl
curl "https://developer.bahnhoftafel.de/v1/trains?name=ICE%201603" \
  -H "Authorization: Bearer $BT_SCHLUESSEL"
JavaScript
const antwort = await fetch("https://developer.bahnhoftafel.de/v1/trains?name=ICE%201603", {
  method: "GET",
  headers: { Authorization: `Bearer ${process.env.BT_SCHLUESSEL}`, },
});
const daten = await antwort.json();
Python
import os, requests

antwort = requests.get(
    "https://developer.bahnhoftafel.de/v1/trains?name=ICE%201603",
    headers={"Authorization": f"Bearer {os.environ['BT_SCHLUESSEL']}"},
    timeout=30,
)
daten = antwort.json()

Fahrt abrufen

GET/v1/trips/{trip_id}Eimer standard

Verlauf einer Fahrt. Die trip_id kommt aus Züge suchen, aus Abfahrten mit source=oebb oder aus dem Radar.

Pfad-Parameter

FeldTypBeschreibung
trip_idPflichtstringKennung der Fahrt

Query-Parameter

FeldTypBeschreibung
polylineboolLinienverlauf als GeoJSON mitliefern (deutlich größere Antwort)Standard: false

Antwort

Fahrt

Beispiel

curl
curl "https://developer.bahnhoftafel.de/v1/trips/b2ViYh8yfCNWTiMxI1NUIzE3OTIwNjk4OTgj…" \
  -H "Authorization: Bearer $BT_SCHLUESSEL"
JavaScript
const antwort = await fetch("https://developer.bahnhoftafel.de/v1/trips/b2ViYh8yfCNWTiMxI1NUIzE3OTIwNjk4OTgj…", {
  method: "GET",
  headers: { Authorization: `Bearer ${process.env.BT_SCHLUESSEL}`, },
});
const daten = await antwort.json();
Python
import os, requests

antwort = requests.get(
    "https://developer.bahnhoftafel.de/v1/trips/b2ViYh8yfCNWTiMxI1NUIzE3OTIwNjk4OTgj…",
    headers={"Authorization": f"Bearer {os.environ['BT_SCHLUESSEL']}"},
    timeout=30,
)
daten = antwort.json()

Fahrt als Kalendertermin

GET/v1/trips/{trip_id}/calendar.icsEimer standard

Ein Termin für den Kalender, vom Einstieg bis zum Ausstieg: Zug, Gleis, Halte unterwegs und auf Wunsch eine Erinnerung. Lässt sich in jeden Kalender übernehmen (Google, Apple, Outlook, Thunderbird).

Pfad-Parameter

FeldTypBeschreibung
trip_idPflichtstringKennung der Fahrt

Query-Parameter

FeldTypBeschreibung
fromstringEinsteigen an diesem Bahnhof (EVA-Nummer aus stops[].station.id), Standard: erster Halt
tostringAussteigen an diesem Halt, Standard: letzter Halt
reminderintegerErinnerung so viele Minuten vor der Abfahrt0 bis 240

Antwort

text/calendar, Datei fahrt.ics mit einem Termin. Beginn und Ende sind die Planzeiten; eine Verspätung zum Zeitpunkt des Abrufs steht in der Beschreibung.

Beispiel

curl
curl "https://developer.bahnhoftafel.de/v1/trips/b2ViYh8yfCNWTiMxI1NUIzE3OTIwNjk4OTgj…/calendar.ics" \
  -H "Authorization: Bearer $BT_SCHLUESSEL"
JavaScript
const antwort = await fetch("https://developer.bahnhoftafel.de/v1/trips/b2ViYh8yfCNWTiMxI1NUIzE3OTIwNjk4OTgj…/calendar.ics", {
  method: "GET",
  headers: { Authorization: `Bearer ${process.env.BT_SCHLUESSEL}`, },
});
const daten = await antwort.json();
Python
import os, requests

antwort = requests.get(
    "https://developer.bahnhoftafel.de/v1/trips/b2ViYh8yfCNWTiMxI1NUIzE3OTIwNjk4OTgj…/calendar.ics",
    headers={"Authorization": f"Bearer {os.environ['BT_SCHLUESSEL']}"},
    timeout=30,
)
daten = antwort.json()

Streckenverlauf als GPX

GET/v1/trips/{trip_id}/route.gpxEimer standard

Der Weg eines Zuges als GPX-Datei: der echte Verlauf über die Gleise als Track und jeder Halt als Wegpunkt mit Planzeit. Für Karten-Apps, Fahrtenbücher wie travelynx oder eigene Auswertungen.

Pfad-Parameter

FeldTypBeschreibung
trip_idPflichtstringKennung der Fahrt

Antwort

application/gpx+xml, Datei fahrt.gpx (GPX 1.1)

Beispiel

curl
curl "https://developer.bahnhoftafel.de/v1/trips/b2ViYh8yfCNWTiMxI1NUIzE3OTIwNjk4OTgj…/route.gpx" \
  -H "Authorization: Bearer $BT_SCHLUESSEL"
JavaScript
const antwort = await fetch("https://developer.bahnhoftafel.de/v1/trips/b2ViYh8yfCNWTiMxI1NUIzE3OTIwNjk4OTgj…/route.gpx", {
  method: "GET",
  headers: { Authorization: `Bearer ${process.env.BT_SCHLUESSEL}`, },
});
const daten = await antwort.json();
Python
import os, requests

antwort = requests.get(
    "https://developer.bahnhoftafel.de/v1/trips/b2ViYh8yfCNWTiMxI1NUIzE3OTIwNjk4OTgj…/route.gpx",
    headers={"Authorization": f"Bearer {os.environ['BT_SCHLUESSEL']}"},
    timeout=30,
)
daten = antwort.json()