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
| Feld | Typ | Beschreibung |
|---|---|---|
id | string | parkapi:…, nextbike:… oder osm:… |
kind | string | park_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 | ?string | Name |
operator | ?string | Betreiber bzw. Verleihsystem |
location | object | { lat, lon } |
distance_m | integer | Luftlinie zum gefragten Ort |
capacity | ?integer | Stellplätze bzw. Fahrradständer |
available | ?integer | Frei in Echtzeit: freie Parkplätze bzw. ausleihbare Räder; null, wenn die Quelle nichts meldet |
available_updated_at | ?string | Stand der Echtzeit (Parkplätze) |
status | ?string | open oder closed (Parkplätze mit Echtzeit) |
opening_hours | ?string | Öffnungszeiten im OSM-Format, z. B. 24/7 |
fee | ?object | { required, description } |
park_and_ride | string[] | Für welches Verkehrsmittel P+R gedacht ist: train, tram, bus … |
free_docks | ?integer | Leihräder: freie Ständer |
offers | string[] | Mobilitätsstationen: was es dort gibt |
nearest | ?object | E-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 | ?string | Seite des Betreibers |
source | object | { 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
/v1/mobilityEimer standardAlles 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.
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
| Feld | Typ | Beschreibung |
|---|---|---|
latPflicht | number | Breite47 bis 56 |
lonPflicht | number | Länge5 bis 16 |
radius | integer | Umkreis in MeternStandard: 50050 bis 3000 |
kinds | string[] | 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 |
limit | integer | Hö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 "https://developer.bahnhoftafel.de/v1/mobility?lat=52.5219&lon=13.4132" \
-H "Authorization: Bearer $BT_SCHLUESSEL"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();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
/v1/stations/{station_id}/mobilityEimer standardPark 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
| Feld | Typ | Beschreibung |
|---|---|---|
station_idPflicht | string | EVA-Nummer |
Query-Parameter
| Feld | Typ | Beschreibung |
|---|---|---|
radius | integer | Umkreis in MeternStandard: 60050 bis 3000 |
kinds | string[] | 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 |
limit | integer | Höchstens so vieleStandard: 501 bis 200 |
Antwort
Objekt { station, items }; items: Liste von Mobilitätsangebot, nach Entfernung sortiert
Beispiel
curl "https://developer.bahnhoftafel.de/v1/stations/8011160/mobility" \
-H "Authorization: Bearer $BT_SCHLUESSEL"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();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
/v1/transit/stops/{stop_id}/mobilityEimer standardWie am Bahnhof, aber für jede Haltestelle aus Verkehrsbetriebe, auch für Bus und Straßenbahn.
Pfad-Parameter
| Feld | Typ | Beschreibung |
|---|---|---|
stop_idPflicht | string | Kennung der Haltestelle |
Query-Parameter
| Feld | Typ | Beschreibung |
|---|---|---|
radius | integer | Umkreis in MeternStandard: 40050 bis 3000 |
kinds | string[] | 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 |
limit | integer | Höchstens so vieleStandard: 501 bis 200 |
Antwort
Objekt { stop, items }; items: Liste von Mobilitätsangebot, nach Entfernung sortiert
Beispiel
curl "https://developer.bahnhoftafel.de/v1/transit/stops/stop_id/mobility" \
-H "Authorization: Bearer $BT_SCHLUESSEL"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();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
/v1/mobility/vehiclesEimer standardEinzelne E-Scooter, E-Roller, Räder und Autos, die frei herumstehen, mit Reichweite, Akkustand und Link in die App des Anbieters.
Kennungen der Fahrzeuge wechseln bei vielen Anbietern nach jeder Fahrt (Datenschutz in GBFS). Daten der Anbieter, laufend aktualisiert.
Query-Parameter
| Feld | Typ | Beschreibung |
|---|---|---|
latPflicht | number | Breite47 bis 56 |
lonPflicht | number | Länge5 bis 16 |
radius | integer | Umkreis in MeternStandard: 30050 bis 1000 |
kinds | string[] | 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 |
limit | integer | Hö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 "https://developer.bahnhoftafel.de/v1/mobility/vehicles?lat=52.5219&lon=13.4132" \
-H "Authorization: Bearer $BT_SCHLUESSEL"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();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
/v1/mobility/map.pngEimer bildEine 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.
Eigener Eimer bild: 10 Bilder pro Minute. Gezeichnet auf unserem Server aus OpenStreetMap-Daten, ohne fremde Kartendienste.
Query-Parameter
| Feld | Typ | Beschreibung |
|---|---|---|
latPflicht | number | Breite47 bis 56 |
lonPflicht | number | Länge5 bis 16 |
radius | integer | Umkreis in Metern; danach richtet sich der KartenausschnittStandard: 400100 bis 1000 |
layout | string | Aufbau des Bildesportrait Hochformat: Karte oben, darunter Legende und Tabellen (Standard), landscape Querformat: Karte links, rechts Legende und Tabellen |
title | string | Ü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 "https://developer.bahnhoftafel.de/v1/mobility/map.png?lat=52.5219&lon=13.4132" \
-H "Authorization: Bearer $BT_SCHLUESSEL" --output umgebung.pngconst 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());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
/v1/stations/{station_id}/mobility.pngEimer bildWie Umgebung als Bild, mit dem Bahnhof in der Mitte und seinem Namen als Überschrift.
Pfad-Parameter
| Feld | Typ | Beschreibung |
|---|---|---|
station_idPflicht | string | EVA-Nummer |
Query-Parameter
| Feld | Typ | Beschreibung |
|---|---|---|
radius | integer | Umkreis in MeternStandard: 400100 bis 1000 |
layout | string | Aufbau 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 "https://developer.bahnhoftafel.de/v1/stations/8011160/mobility.png" \
-H "Authorization: Bearer $BT_SCHLUESSEL" --output umgebung.pngconst 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());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
/v1/mobility/providersEimer standardAlle Sharing-Systeme, die die API kennt: E-Scooter, E-Roller, Räder, Lastenräder und Carsharing, mit Ort und Arten.
Query-Parameter
| Feld | Typ | Beschreibung |
|---|---|---|
kind | string | Nur 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 "https://developer.bahnhoftafel.de/v1/mobility/providers" \
-H "Authorization: Bearer $BT_SCHLUESSEL"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();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
/v1/mobility/parking/{parking_id}Eimer standardEin 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
| Feld | Typ | Beschreibung |
|---|---|---|
parking_idPflicht | string | aus id, z. B. parkapi:41786 |
Antwort
Mobilitätsangebot mit restrictions: [{ type, capacity }], max_height_cm, covered, lighting
Beispiel
curl "https://developer.bahnhoftafel.de/v1/mobility/parking/parking_id" \
-H "Authorization: Bearer $BT_SCHLUESSEL"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();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()