Developer
Menü

Parken und Mobilität

Wie man zum Bahnhof hin- und von ihm weiterkommt: Park and Ride mit freien Plätzen in Echtzeit, Bahnhofsparkplätze der DB, Parkhäuser, Fahrradparken und Bike and Ride, Leihräder mit freien Rädern, Carsharing und Mobilitätsstationen.

Objekte

Objekt Mobilitätsangebot

FeldTypBeschreibung
idstringparkapi:…, nextbike:… oder osm:…
kindstringpark_and_ride, car_park, parking, bike_and_ride, bike_parking, bike_sharing, bike_rental, car_sharing, mobility_hub, scooter, moped, shared_bike, cargo_bike
name?stringName
operator?stringBetreiber bzw. Verleihsystem
locationobject{ lat, lon }
distance_mintegerLuftlinie zum gefragten Ort
capacity?integerStellplätze bzw. Fahrradständer
available?integerFrei in Echtzeit: freie Parkplätze bzw. ausleihbare Räder; null, wenn die Quelle nichts meldet
available_updated_at?stringStand der Echtzeit (Parkplätze)
status?stringopen oder closed (Parkplätze mit Echtzeit)
opening_hours?stringÖffnungszeiten im OSM-Format, z. B. 24/7
fee?object{ required, description }
park_and_ridestring[]Für welches Verkehrsmittel P+R gedacht ist: train, tram, bus …
free_docks?integerLeihräder: freie Ständer
offersstring[]Mobilitätsstationen: was es dort gibt
nearest?objectE-Scooter, E-Roller, Räder ohne Station: { distance_m, range_m, battery, app_url } des nächsten Fahrzeugs; available zählt alle des Anbieters im Umkreis
url?stringSeite des Betreibers
sourceobject{ name, license, via }: woher der Eintrag kommt und unter welcher Lizenz
{
  "id": "parkapi:46226",
  "kind": "park_and_ride",
  "name": "Parkplatz Aalen Hauptbahnhof Rückseite",
  "operator": "Contipark Parkgaragengesellschaft mbH",
  "location": {
    "lat": 48.839307,
    "lon": 10.097189
  },
  "distance_m": 140,
  "address": "Hirschbachstraße, 73431 Aalen",
  "capacity": 55,
  "available": null,
  "available_updated_at": null,
  "status": null,
  "opening_hours": "24/7",
  "fee": null,
  "park_and_ride": [
    "train"
  ],
  "url": "https://www.dbbahnpark.de/standorte/karte?id=100001",
  "source": {
    "name": "Deutsche Bahn Parkplätze",
    "license": null,
    "via": "MobiData BW ParkAPI"
  }
}

Mobilität in der Nähe

GET/v1/mobilityEimer standard

Alles rund um einen Punkt: Parkplätze, Park and Ride, Fahrradparken, Leihräder, Carsharing und Mobilitätsstationen. Auf der Karte ansehen: im Portal unter Mobilität.

Info

Freie Parkplätze in Echtzeit melden vor allem Parkhäuser und P+R-Anlagen in Baden-Württemberg und an der Rhein-Neckar; die Bahnhofsparkplätze der DB gibt es deutschlandweit, aber ohne Echtzeit. Leihräder: nextbike in rund 160 Städten. E-Scooter, E-Roller und Carsharing: alle offenen GBFS-Systeme in Deutschland (Dott, Lime, Bolt, Voi, Bird, Zeus, Hopp, Donkey Republic, Stadtmobil …).

Query-Parameter

FeldTypBeschreibung
latPflichtnumberBreite47 bis 56
lonPflichtnumberLänge5 bis 16
radiusintegerUmkreis in MeternStandard: 50050 bis 3000
kindsstring[]Nur diese Arten, Komma-getrenntpark_and_ride Park and Ride, car_park Parkhaus, Tiefgarage, parking Parkplatz, bike_and_ride Bike and Ride, bike_parking Fahrradparken, bike_sharing Leihräder (nextbike, mit freien Rädern), bike_rental Radverleih (OpenStreetMap), car_sharing Carsharing, mobility_hub Mobilitätsstation, scooter E-Scooter (Dott, Lime, Bolt, Voi, Bird, Zeus …), moped E-Roller, shared_bike Leihrad ohne Station, cargo_bike Lastenrad
limitintegerHöchstens so vieleStandard: 501 bis 200

Antwort

Liste von Mobilitätsangebot, nach Entfernung sortiert

[
  {
    "id": "parkapi:46226",
    "kind": "park_and_ride",
    "name": "Parkplatz Aalen Hauptbahnhof Rückseite",
    "operator": "Contipark Parkgaragengesellschaft mbH",
    "location": {
      "lat": 48.839307,
      "lon": 10.097189
    },
    "distance_m": 140,
    "address": "Hirschbachstraße, 73431 Aalen",
    "capacity": 55,
    "available": null,
    "available_updated_at": null,
    "status": null,
    "opening_hours": "24/7",
    "fee": null,
    "park_and_ride": [
      "train"
    ],
    "url": "https://www.dbbahnpark.de/standorte/karte?id=100001",
    "source": {
      "name": "Deutsche Bahn Parkplätze",
      "license": null,
      "via": "MobiData BW ParkAPI"
    }
  },
  {
    "id": "nextbike:72228",
    "kind": "bike_sharing",
    "name": "EDEKA Schmitt (S Halensee)",
    "operator": "nextbike Berlin",
    "location": {
      "lat": 52.496986,
      "lon": 13.29121
    },
    "distance_m": 210,
    "capacity": 8,
    "available": 1,
    "free_docks": 7,
    "station_number": 1670,
    "source": {
      "name": "nextbike",
      "license": null,
      "via": "nextbike live"
    }
  }
]

Beispiel

curl
curl "https://developer.bahnhoftafel.de/v1/mobility?lat=52.5219&lon=13.4132" \
  -H "Authorization: Bearer $BT_SCHLUESSEL"
JavaScript
const antwort = await fetch("https://developer.bahnhoftafel.de/v1/mobility?lat=52.5219&lon=13.4132", {
  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/mobility?lat=52.5219&lon=13.4132",
    headers={"Authorization": f"Bearer {os.environ['BT_SCHLUESSEL']}"},
    timeout=30,
)
daten = antwort.json()

Mobilität am Bahnhof

GET/v1/stations/{station_id}/mobilityEimer standard

Park and Ride, Fahrradparken, Leihräder und Carsharing an einem Bahnhof. Mit kinds=park_and_ride die P+R-Plätze, mit freien Plätzen, wo die Anlage sie meldet.

Pfad-Parameter

FeldTypBeschreibung
station_idPflichtstringEVA-Nummer

Query-Parameter

FeldTypBeschreibung
radiusintegerUmkreis in MeternStandard: 60050 bis 3000
kindsstring[]Nur diese Arten, Komma-getrenntpark_and_ride Park and Ride, car_park Parkhaus, Tiefgarage, parking Parkplatz, bike_and_ride Bike and Ride, bike_parking Fahrradparken, bike_sharing Leihräder (nextbike, mit freien Rädern), bike_rental Radverleih (OpenStreetMap), car_sharing Carsharing, mobility_hub Mobilitätsstation, scooter E-Scooter (Dott, Lime, Bolt, Voi, Bird, Zeus …), moped E-Roller, shared_bike Leihrad ohne Station, cargo_bike Lastenrad
limitintegerHöchstens so vieleStandard: 501 bis 200

Antwort

Objekt { station, items }; items: Liste von Mobilitätsangebot, nach Entfernung sortiert

Beispiel

curl
curl "https://developer.bahnhoftafel.de/v1/stations/8011160/mobility" \
  -H "Authorization: Bearer $BT_SCHLUESSEL"
JavaScript
const antwort = await fetch("https://developer.bahnhoftafel.de/v1/stations/8011160/mobility", {
  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/stations/8011160/mobility",
    headers={"Authorization": f"Bearer {os.environ['BT_SCHLUESSEL']}"},
    timeout=30,
)
daten = antwort.json()

Mobilität an einer Haltestelle

GET/v1/transit/stops/{stop_id}/mobilityEimer standard

Wie am Bahnhof, aber für jede Haltestelle aus Verkehrsbetriebe, auch für Bus und Straßenbahn.

Pfad-Parameter

FeldTypBeschreibung
stop_idPflichtstringKennung der Haltestelle

Query-Parameter

FeldTypBeschreibung
radiusintegerUmkreis in MeternStandard: 40050 bis 3000
kindsstring[]Nur diese Arten, Komma-getrenntpark_and_ride Park and Ride, car_park Parkhaus, Tiefgarage, parking Parkplatz, bike_and_ride Bike and Ride, bike_parking Fahrradparken, bike_sharing Leihräder (nextbike, mit freien Rädern), bike_rental Radverleih (OpenStreetMap), car_sharing Carsharing, mobility_hub Mobilitätsstation, scooter E-Scooter (Dott, Lime, Bolt, Voi, Bird, Zeus …), moped E-Roller, shared_bike Leihrad ohne Station, cargo_bike Lastenrad
limitintegerHöchstens so vieleStandard: 501 bis 200

Antwort

Objekt { stop, items }; items: Liste von Mobilitätsangebot, nach Entfernung sortiert

Beispiel

curl
curl "https://developer.bahnhoftafel.de/v1/transit/stops/stop_id/mobility" \
  -H "Authorization: Bearer $BT_SCHLUESSEL"
JavaScript
const antwort = await fetch("https://developer.bahnhoftafel.de/v1/transit/stops/stop_id/mobility", {
  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/transit/stops/stop_id/mobility",
    headers={"Authorization": f"Bearer {os.environ['BT_SCHLUESSEL']}"},
    timeout=30,
)
daten = antwort.json()

Fahrzeuge in der Nähe

GET/v1/mobility/vehiclesEimer standard

Einzelne E-Scooter, E-Roller, Räder und Autos, die frei herumstehen, mit Reichweite, Akkustand und Link in die App des Anbieters.

Info

Kennungen der Fahrzeuge wechseln bei vielen Anbietern nach jeder Fahrt (Datenschutz in GBFS). Daten der Anbieter, laufend aktualisiert.

Query-Parameter

FeldTypBeschreibung
latPflichtnumberBreite47 bis 56
lonPflichtnumberLänge5 bis 16
radiusintegerUmkreis in MeternStandard: 30050 bis 1000
kindsstring[]Nur diese Artencar_sharing Carsharing, scooter E-Scooter (Dott, Lime, Bolt, Voi, Bird, Zeus …), moped E-Roller, shared_bike Leihrad ohne Station, cargo_bike Lastenrad
limitintegerHöchstens so vieleStandard: 501 bis 200

Antwort

Liste von { id, kind, provider, location, distance_m, range_m, battery, battery_source, app_url, source }, nach Entfernung. battery von 0 bis 1; battery_source: reported (vom Anbieter) oder range (geschätzt aus Reichweite und größter Reichweite des Fahrzeugtyps)

[
  {
    "id": "gbfs:dott-berlin:0e8793f6",
    "kind": "scooter",
    "provider": "Dott",
    "location": {
      "lat": 52.537499,
      "lon": 13.408548
    },
    "distance_m": 64,
    "range_m": 14429,
    "battery": 0.52,
    "battery_source": "reported",
    "app_url": "https://go.ridedott.com/vehicles/0e8793f6-e812-4f84-bfdd-c5fc63bbc508?platform=android",
    "source": {
      "name": "Dott",
      "license": null,
      "via": "GBFS"
    }
  }
]

Beispiel

curl
curl "https://developer.bahnhoftafel.de/v1/mobility/vehicles?lat=52.5219&lon=13.4132" \
  -H "Authorization: Bearer $BT_SCHLUESSEL"
JavaScript
const antwort = await fetch("https://developer.bahnhoftafel.de/v1/mobility/vehicles?lat=52.5219&lon=13.4132", {
  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/mobility/vehicles?lat=52.5219&lon=13.4132",
    headers={"Authorization": f"Bearer {os.environ['BT_SCHLUESSEL']}"},
    timeout=30,
)
daten = antwort.json()

Umgebung als Bild

GET/v1/mobility/map.pngEimer bild

Eine Karte rund um einen Punkt wie in einer App: E-Scooter, E-Roller und Räder mit Akkustand, Parkplätze und Parkhäuser als Verkehrszeichen, Leihradstationen und Carsharing mit freien Plätzen. Darunter eine Legende und zwei kleine Tabellen mit den nächsten Fahrzeugen und Anlagen. Dasselbe Bild schickt der Discord-Bot bei /umgebung.

Info

Eigener Eimer bild: 10 Bilder pro Minute. Gezeichnet auf unserem Server aus OpenStreetMap-Daten, ohne fremde Kartendienste.

Query-Parameter

FeldTypBeschreibung
latPflichtnumberBreite47 bis 56
lonPflichtnumberLänge5 bis 16
radiusintegerUmkreis in Metern; danach richtet sich der KartenausschnittStandard: 400100 bis 1000
layoutstringAufbau des Bildesportrait Hochformat: Karte oben, darunter Legende und Tabellen (Standard), landscape Querformat: Karte links, rechts Legende und Tabellen
titlestringÜberschrift, z. B. eine Adresse (Standard: In der Nähe)

Antwort

PNG. Hochformat 1200 Pixel breit, Höhe je nach Inhalt (etwa 1500 bis 2300); Querformat 2000 × etwa 1400 Pixel. Die Tabellen zeigen Entfernung, Akku und Reichweite (wie weit das Fahrzeug noch fahren kann). Header X-Vehicles und X-Facilities: wie viele freie Fahrzeuge und Anlagen im Umkreis sind. Akku: grün ab 50 %, orange ab 20 %, darunter rot

Beispiel

curl
curl "https://developer.bahnhoftafel.de/v1/mobility/map.png?lat=52.5219&lon=13.4132" \
  -H "Authorization: Bearer $BT_SCHLUESSEL" --output umgebung.png
JavaScript
const antwort = await fetch("https://developer.bahnhoftafel.de/v1/mobility/map.png?lat=52.5219&lon=13.4132", {
  method: "GET",
  headers: { Authorization: `Bearer ${process.env.BT_SCHLUESSEL}`, },
});
const png = Buffer.from(await antwort.arrayBuffer());
Python
import os, requests

antwort = requests.get(
    "https://developer.bahnhoftafel.de/v1/mobility/map.png?lat=52.5219&lon=13.4132",
    headers={"Authorization": f"Bearer {os.environ['BT_SCHLUESSEL']}"},
    timeout=30,
)
open("${datei}", "wb").write(antwort.content)

Umgebung eines Bahnhofs als Bild

GET/v1/stations/{station_id}/mobility.pngEimer bild

Wie Umgebung als Bild, mit dem Bahnhof in der Mitte und seinem Namen als Überschrift.

Pfad-Parameter

FeldTypBeschreibung
station_idPflichtstringEVA-Nummer

Query-Parameter

FeldTypBeschreibung
radiusintegerUmkreis in MeternStandard: 400100 bis 1000
layoutstringAufbau des Bildesportrait Hochformat: Karte oben, darunter Legende und Tabellen (Standard), landscape Querformat: Karte links, rechts Legende und Tabellen

Antwort

PNG wie bei Umgebung als Bild

Beispiel

curl
curl "https://developer.bahnhoftafel.de/v1/stations/8011160/mobility.png" \
  -H "Authorization: Bearer $BT_SCHLUESSEL" --output umgebung.png
JavaScript
const antwort = await fetch("https://developer.bahnhoftafel.de/v1/stations/8011160/mobility.png", {
  method: "GET",
  headers: { Authorization: `Bearer ${process.env.BT_SCHLUESSEL}`, },
});
const png = Buffer.from(await antwort.arrayBuffer());
Python
import os, requests

antwort = requests.get(
    "https://developer.bahnhoftafel.de/v1/stations/8011160/mobility.png",
    headers={"Authorization": f"Bearer {os.environ['BT_SCHLUESSEL']}"},
    timeout=30,
)
open("${datei}", "wb").write(antwort.content)

Sharing-Anbieter

GET/v1/mobility/providersEimer standard

Alle Sharing-Systeme, die die API kennt: E-Scooter, E-Roller, Räder, Lastenräder und Carsharing, mit Ort und Arten.

Query-Parameter

FeldTypBeschreibung
kindstringNur Systeme mit dieser Artcar_sharing Carsharing, scooter E-Scooter (Dott, Lime, Bolt, Voi, Bird, Zeus …), moped E-Roller, shared_bike Leihrad ohne Station, cargo_bike Lastenrad

Antwort

Liste von { id, name, operator, city, kinds, area, license, url }; area ist [süd, west, nord, ost]

Beispiel

curl
curl "https://developer.bahnhoftafel.de/v1/mobility/providers" \
  -H "Authorization: Bearer $BT_SCHLUESSEL"
JavaScript
const antwort = await fetch("https://developer.bahnhoftafel.de/v1/mobility/providers", {
  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/mobility/providers",
    headers={"Authorization": f"Bearer {os.environ['BT_SCHLUESSEL']}"},
    timeout=30,
)
daten = antwort.json()

Parkplatz abrufen

GET/v1/mobility/parking/{parking_id}Eimer standard

Ein Parkplatz mit allem, was die Quelle weiß: Stellplätze für Frauen, Menschen mit Behinderung und zum Laden, Einfahrtshöhe, Gebühren, freie Plätze.

Pfad-Parameter

FeldTypBeschreibung
parking_idPflichtstringaus id, z. B. parkapi:41786

Antwort

Mobilitätsangebot mit restrictions: [{ type, capacity }], max_height_cm, covered, lighting

Beispiel

curl
curl "https://developer.bahnhoftafel.de/v1/mobility/parking/parking_id" \
  -H "Authorization: Bearer $BT_SCHLUESSEL"
JavaScript
const antwort = await fetch("https://developer.bahnhoftafel.de/v1/mobility/parking/parking_id", {
  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/mobility/parking/parking_id",
    headers={"Authorization": f"Bearer {os.environ['BT_SCHLUESSEL']}"},
    timeout=30,
)
daten = antwort.json()