API
Upstream documentation:
Searching stops
Request documentation
{
"destination": {
"type": "Module",
"target": "/guesser"
},
"content_type": "StationGuesserRequest",
"content": {
"input": "$query", # query
"gues_count": "$count" # how many results to return
}
}
Request example
curl 'https://routing.spline.de/api/' \
-H 'content-type: application/json' \
--data-raw '{"destination":{"type":"Module","target":"/guesser"},"content_type":"StationGuesserRequest","content":{"input":"tower hill","guess_count":6}}'
Response documentation
{
"content": {
"guesses": [
{
"id": "$stopID", # stop ID
"name": "$stopName", # stop name
"pos": {
"lat": $latitude, # stop latitude
"lng": $longitude # stop longitude
}
},
# …
]
},
"content_type": "StationGuesserResponse",
"destination": {
"target": "",
"type": "Module"
},
"id": 1
}
Response example
{
"content": {
"guesses": [
{
"id": "gb-great-britain_50-1-430G05308",
"name": "Tower Hill",
"pos": {
"lat": 52.534782,
"lng": -1.918755
}
},
{
"id": "gb-northern-ireland_51-49-700000008267",
"name": "Tower Hill",
"pos": {
"lat": 54.352318,
"lng": -6.645357
}
},
{
"id": "gb-great-britain_50-1-227G00091138",
"name": "Tower Hill",
"pos": {
"lat": 53.48921,
"lng": -0.856088
}
},
{
"id": "gb-great-britain_50-1-400G4407356A",
"name": "Tower Hill",
"pos": {
"lat": 51.217354,
"lng": -0.448421
}
},
{
"id": "gb-great-britain_50-1-390G70148",
"name": "Tower Hill",
"pos": {
"lat": 52.44609,
"lng": 1.568928
}
},
{
"id": "gb-great-britain_50-1-2400A030890A",
"name": "Tower Hill",
"pos": {
"lat": 51.29039,
"lng": 0.377833
}
}
]
},
"content_type": "StationGuesserResponse",
"destination": {
"target": "",
"type": "Module"
},
"id": 1
}
Stops nearby
Request documentation
{
"destination": {
"type": "Module",
"target": "/lookup/geo_station"
}
"content_type": "LookupGeoStationRequest",
"content": {
"max_radius": $radius, # radius from centre in metres
"pos": {
"lat": $latitude, # latitude of the centre
"lng": $longitude # longitude of the centre
}
}
}
Request example
curl 'https://routing.spline.de/api/' \
-H 'content-type: application/json' \
--data-raw '{"destination":{"type":"Module","target":"/lookup/geo_station"},"content_type":"LookupGeoStationRequest","content":{"max_radius":1000,"pos":{"lat":52.412, "lng":16.894}}}'
Response documentation
{
"content": {
"stations": [
{
"id": "$stopID", # stop ID
"name": "$stopName", # stop name
"pos": {
"lat": $latitude, # stop latitude
"lng": $longitude # stop longitude
}
},
# …
]
},
"content_type": "LookupGeoStationResponse",
"destination": {
"target": "",
"type": "Module"
},
"id": 1
}
Response example
{
"content": {
"stations": [
{
"id": "pl-Poznań_62",
"name": "Polna",
"pos": {
"lat": 52.41424,
"lng": 16.896698
}
},
{
"id": "pl-Poznań_63",
"name": "Polna",
"pos": {
"lat": 52.414215,
"lng": 16.897202
}
},
{
"id": "pl-Poznań_755",
"name": "Polna Szpital",
"pos": {
"lat": 52.409008,
"lng": 16.893578
}
},
{
"id": "pl-Poznań_1452",
"name": "Żeromskiego",
"pos": {
"lat": 52.414555,
"lng": 16.890738
}
},
{
"id": "pl-Poznań_756",
"name": "Polna Szpital",
"pos": {
"lat": 52.409225,
"lng": 16.890743
}
},
{
"id": "pl-Poznań_67",
"name": "Bukowska",
"pos": {
"lat": 52.410053,
"lng": 16.888826
}
},
{
"id": "pl-Poznań_66",
"name": "Bukowska",
"pos": {
"lat": 52.41,
"lng": 16.888638
}
},
{
"id": "pl-Poznań_60",
"name": "Żeromskiego",
"pos": {
"lat": 52.415543,
"lng": 16.890825
}
},
{
"id": "pl-Poznań_1450",
"name": "Żeromskiego",
"pos": {
"lat": 52.416077,
"lng": 16.89216
}
},
{
"id": "pl-Poznań_61",
"name": "Żeromskiego",
"pos": {
"lat": 52.41574,
"lng": 16.890362
}
},
{
"id": "pl-Poznań_758",
"name": "Bukowska",
"pos": {
"lat": 52.409256,
"lng": 16.888174
}
},
{
"id": "pl-Poznań_752",
"name": "Szylinga",
"pos": {
"lat": 52.408333,
"lng": 16.89875
}
},
{
"id": "pl-Poznań_1451",
"name": "Żeromskiego",
"pos": {
"lat": 52.416557,
"lng": 16.891827
}
},
{
"id": "pl-Poznań_759",
"name": "Grodziska",
"pos": {
"lat": 52.410072,
"lng": 16.88585
}
},
{
"id": "pl-Poznań_751",
"name": "Szylinga",
"pos": {
"lat": 52.407883,
"lng": 16.900095
}
},
{
"id": "pl-Poznań_754",
"name": "Kraszewskiego",
"pos": {
"lat": 52.408916,
"lng": 16.901783
}
},
{
"id": "pl-Poznań_760",
"name": "Grodziska",
"pos": {
"lat": 52.410122,
"lng": 16.884207
}
},
{
"id": "pl-Poznań_1463",
"name": "Kościelna",
"pos": {
"lat": 52.413483,
"lng": 16.904005
}
},
{
"id": "pl-Poznań_65",
"name": "Rynek Jeżycki",
"pos": {
"lat": 52.412537,
"lng": 16.90477
}
},
{
"id": "pl-Poznań_4272",
"name": "Kraszewskiego",
"pos": {
"lat": 52.40773,
"lng": 16.902296
}
},
{
"id": "pl-Poznań_1464",
"name": "Kościelna",
"pos": {
"lat": 52.41357,
"lng": 16.904663
}
},
{
"id": "pl-Poznań_64",
"name": "Rynek Jeżycki",
"pos": {
"lat": 52.412224,
"lng": 16.905642
}
},
{
"id": "pl-Poznań_748",
"name": "Matejki",
"pos": {
"lat": 52.40627,
"lng": 16.900963
}
},
{
"id": "pl-Poznań_622",
"name": "Ogrody",
"pos": {
"lat": 52.416683,
"lng": 16.885157
}
},
{
"id": "pl-Poznań_83",
"name": "Matejki",
"pos": {
"lat": 52.40579,
"lng": 16.900932
}
},
{
"id": "pl-Poznań_750",
"name": "Matejki",
"pos": {
"lat": 52.405228,
"lng": 16.899405
}
},
{
"id": "pl-Poznań_4032",
"name": "Niestachowska",
"pos": {
"lat": 52.41986,
"lng": 16.894829
}
},
{
"id": "pl-Poznań_749",
"name": "Matejki",
"pos": {
"lat": 52.40486,
"lng": 16.899946
}
},
{
"id": "pl-Poznań_4033",
"name": "Niestachowska",
"pos": {
"lat": 52.420006,
"lng": 16.894829
}
},
{
"id": "pl-Poznań_59",
"name": "Ogrody",
"pos": {
"lat": 52.416363,
"lng": 16.882902
}
},
{
"id": "pl-Poznań_769",
"name": "Opalenicka",
"pos": {
"lat": 52.404903,
"lng": 16.88735
}
},
{
"id": "pl-Poznań_770",
"name": "Opalenicka",
"pos": {
"lat": 52.40478,
"lng": 16.887516
}
},
{
"id": "pl-Poznań_1465",
"name": "Jeżycka",
"pos": {
"lat": 52.416206,
"lng": 16.90584
}
},
{
"id": "pl-Poznań_4030",
"name": "Św. Wawrzyńca",
"pos": {
"lat": 52.418835,
"lng": 16.901928
}
},
{
"id": "pl-Poznań_627",
"name": "Szpitalna",
"pos": {
"lat": 52.410828,
"lng": 16.880344
}
},
{
"id": "pl-Poznań_4031",
"name": "Św. Wawrzyńca",
"pos": {
"lat": 52.41869,
"lng": 16.90268
}
},
{
"id": "pl-Poznań_72",
"name": "Wojskowa",
"pos": {
"lat": 52.40341,
"lng": 16.892479
}
},
{
"id": "pl-Poznań_58",
"name": "Ogrody",
"pos": {
"lat": 52.417053,
"lng": 16.882463
}
},
{
"id": "pl-Poznań_621",
"name": "Ogrody",
"pos": {
"lat": 52.416927,
"lng": 16.882246
}
},
{
"id": "pl-Poznań_4079",
"name": "Ogrody",
"pos": {
"lat": 52.416294,
"lng": 16.881414
}
},
{
"id": "pl-Poznań_620",
"name": "Ogrody",
"pos": {
"lat": 52.41691,
"lng": 16.88181
}
}
]
},
"content_type": "LookupGeoStationResponse",
"destination": {
"target": "",
"type": "Module"
},
"id": 1
}
Departures for single stop
Request documentation
{
"destination": {
"type": "Module",
"target": "/railviz/get_station"
},
"content_type": "RailVizStationRequest",
"content": {
"station_id": "$stopID", # stop ID
"time" $timestamp, # UNIX timestamp
"event_count": $count, # how many departures to return
"direction": "$direction", # LATER or BOTH or EARLIER; meaning unknown, possibly in relation to the time paramer
"by_schedule_time": $byScheduleTime # boolean; meaning unknown
}
}
Request example
curl 'https://routing.spline.de/api/' \
-H 'content-type: application/json' \
--data-raw '{"destination":{"type":"Module","target":"/railviz/get_station"},"content_type":"RailVizStationRequest","content":{"station_id":"pl-Poznań_62","time": 1726744921, "event_count": 1, "direction": "LATER", "by_schedule_time": true}}'
Response documentation
{
"content": {
"events": [
{
"event": {
"reason": "$reason", # enum describing time source (https://motis-project.de/docs/api/connection.html#reason)
"schedule_time": $scheduleTime, # schedule UNIX timestamp of the event
"schedule_track": "$scheduleTrack", # rail track of the event in schedule
"time": $time, # effective UNIX timestamp of the event
"track": "$track", # effective rail track of the event
"valid": $valid # boolean flag; false for departures from final terminus and arrivals to initial terminus
},
"trips": [
{
"id": { # https://motis-project.de/docs/api/buildingblocks.html#trip-id
"id": "$tripID", # trips ID
"line_id": "$lineID", # line ID
"station_id": "$stopID", # stop ID
"target_station_id": "$finalTerminusID", # final terminus stop ID
"target_time": $targetTime, # UNIX timestamp of the arrival at the destination
"time": $firstTime, # first departure time
"train_nr": $trainNumber # unique train number at the first departure
},
"transport": {
"clasz": $lineType, # line type (https://motis-project.de/docs/api/connection.html#clasz-type-integer)
"direction": "$lineHeadsign", # direction of the vehicle
"line_id": "$lineID", # line ID
"name": "$lineName", # line name
"provider": "$operatorName", # operator name
"provider_url": "$operatorWebsite", # operator website
"range": { # range of stops indices to which the information applies
"from": 0,
"to": 0
},
"route_color": "$lineColour" # line colour
}
}
],
"type": "$eventType" # ARR or DEP; there are always two events for one requested
}
],
"station": {
"id": "$stationID", # station ID (different from stop ID)
"name": "$stopName", # station name
"pos": {
"lat": $latitude, # stop latitude
"lng": $longitude # stop longitude
}
}
},
"content_type": "RailVizStationResponse",
"destination": {
"target": "",
"type": "Module"
},
"id": 1
}
Response example
{
"content": {
"events": [
{
"event": {
"reason": "SCHEDULE",
"schedule_time": 1726744920,
"schedule_track": "",
"time": 1726744920,
"track": "",
"valid": true
},
"trips": [
{
"id": {
"id": "pl-Poznań_1_5486280^N+",
"line_id": "2",
"station_id": "pl-Poznań_193",
"target_station_id": "pl-Poznań_58",
"target_time": 1726745160,
"time": 1726743060,
"train_nr": 0
},
"transport": {
"clasz": 9,
"direction": "Ogrody",
"line_id": "2",
"name": "Tram 2",
"provider": "Miejskie Przedsiębiorstwo Komunikacyjne Sp. z o.o. w Poznaniu",
"provider_url": "http://www.mpk.poznan.pl",
"range": {
"from": 0,
"to": 0
},
"route_color": "72c4e7"
}
}
],
"type": "DEP"
},
{
"event": {
"reason": "SCHEDULE",
"schedule_time": 1726744920,
"schedule_track": "",
"time": 1726744920,
"track": "",
"valid": true
},
"trips": [
{
"id": {
"id": "pl-Poznań_1_5486280^N+",
"line_id": "2",
"station_id": "pl-Poznań_193",
"target_station_id": "pl-Poznań_58",
"target_time": 1726745160,
"time": 1726743060,
"train_nr": 0
},
"transport": {
"clasz": 9,
"direction": "Ogrody",
"line_id": "2",
"name": "Tram 2",
"provider": "Miejskie Przedsiębiorstwo Komunikacyjne Sp. z o.o. w Poznaniu",
"provider_url": "http://www.mpk.poznan.pl",
"range": {
"from": 0,
"to": 0
},
"route_color": "72c4e7"
}
}
],
"type": "ARR"
}
],
"station": {
"id": "62",
"name": "Polna",
"pos": {
"lat": 52.41424,
"lng": 16.896698
}
}
},
"content_type": "RailVizStationResponse",
"destination": {
"target": "",
"type": "Module"
},
"id": 1
}
Get vehicles on map
Request documentation
{
"destination": {
"type": "Module",
"target": "/railviz/get_trains"
},
"content_type": "RailVizTrainsRequest",
"content": {
"zoom_bounds": $zoomBounds # integer; meaning unknown
"zoom_geo": $zoomGeo # integer; meaning unknown
"corner1": { # which corner is which, and does it matter?
"lat": $latitude, # corner latitude
"lng": $longitude # corner longitude
}
"corner2": {
"lat": $latitude, # corner latitude
"lng": $longitude # corner longitude
}
"max_trains": $maxTrains # integer; probably max number of results
"last_trains": $lastTrain # integer; meaning unknown
"start_time": $startTime # integer; meaning unknown
"end_time": $endTime # integer; meaning unknown
}
}
Response doesn’t include vehicle positions. They must probably be interpolated from last and next stops