---
title: "One to many routing
Computes the minimal duration from one place to many or vice versa.
The order in the response array corresponds to the order of coordinates of the \\`many\\` parameter in the request body."
method: POST
path: "/api/experimental/one-to-many-intermodal"
tags: ["routing"]
---

# One to many routing
Computes the minimal duration from one place to many or vice versa.
The order in the response array corresponds to the order of coordinates of the \`many\` parameter in the request body.

`POST /api/experimental/one-to-many-intermodal`

## Request body

- OneToManyIntermodalParams
  - `one` string, required — \`latitude,longitude[,level]\` tuple with - latitude and longitude in degrees - (optional) level: the OSM level (default: 0) OR stop id
  - `many` string[], required — array of: \`latitude,longitude[,level]\` tuple with - latitude and longitude in degrees - (optional) level: the OSM level (default: 0) OR stop id The number of accepted locations is limited by server config variable `onetomany_max_many`.
  - `time` string, date-time — Optional. Defaults to the current time. Departure time ($arriveBy=false) / arrival date ($arriveBy=true),
  - `maxTravelTime` integer — The maximum travel time in minutes. If not provided, the routing uses the value hardcoded in the server which is usually quite high. *Warning*: Use with care. Setting this too low can lead to optimal (e.g. the least transfers) journeys not being found. If this value is too low to reach the destination at all, it can lead to slow routing performance.
  - `maxMatchingDistance` number — maximum matching distance in meters to match geo coordinates to the street network Is limited by server config variable `max_max_matching_distance`, larger values are capped to this limit.
  - `arriveBy` boolean — Optional. Defaults to false, i.e. one to many search true = many to one false = one to many
  - `maxTransfers` integer — The maximum number of allowed transfers (i.e. interchanges between transit legs, pre- and postTransit do not count as transfers). `maxTransfers=0` searches for direct transit connections without any transfers. If you want to search only for non-transit connections (`FOOT`, `CAR`, etc.), send an empty `transitModes` parameter instead. If not provided, the routing uses the server-side default value which is hardcoded and very high to cover all use cases. *Warning*: Use with care. Setting this too low can lead to optimal (e.g. the fastest) journeys not being found. If this value is too low to reach the destination at all, it can lead to slow routing performance.
  - `minTransferTime` integer — Optional. Default is 0 minutes. Minimum transfer time for each transfer in minutes.
  - `additionalTransferTime` integer — Optional. Default is 0 minutes. Additional transfer time reserved for each transfer in minutes.
  - `transferTimeFactor` number — Optional. Default is 1.0 Factor to multiply minimum required transfer times with. Values smaller than 1.0 are not supported.
  - `useRoutedTransfers` boolean — Optional. Default is `false`. Whether to use transfers routed on OpenStreetMap data.
  - `pedestrianProfile` 'FOOT' | 'WHEELCHAIR' — Different accessibility profiles for pedestrians.
  - `pedestrianSpeed` number — Average speed for pedestrian routing in meters per second
  - `cyclingSpeed` number — Average speed for bike routing in meters per second
  - `vehicleHeight` number — Vehicle height for HGV routing in meters
  - `vehicleWidth` number — Vehicle width for HGV routing in meters
  - `vehicleLength` number — Vehicle length for HGV routing in meters
  - `vehicleWeight` number — Vehicle gross weight for HGV routing in tons
  - `vehicleHazmat` boolean — Whether the vehicle carries hazardous materials for HGV routing
  - `vehicleHazmatWater` boolean — Whether the vehicle carries hazardous materials dangerous to water for HGV routing
  - `vehicleAxleCount` integer — Axle count for HGV routing
  - `vehicleAxleLoad` number — Maximum axle load for HGV routing in tons
  - `vehicleTrailer` boolean — Whether the vehicle has a trailer for HGV routing
  - `vehicleTopSpeed` integer — Vehicle top speed for HGV routing in km/h
  - `vehicleLezAccess` boolean — Whether the vehicle is allowed to use low-emission zones for HGV routing
  - `elevationCosts` 'NONE' | 'LOW' | 'HIGH' — Different elevation cost profiles for street routing. Using a elevation cost profile will prefer routes with a smaller incline and smaller difference in elevation, even if the routed way is longer. - `NONE`: Ignore elevation data for routing. This is the default behavior - `LOW`: Add a low penalty for inclines. This will favor longer paths, if the elevation increase and incline are smaller. - `HIGH`: Add a high penalty for inclines. This will favor even longer paths, if the elevation increase and incline are smaller.
  - `transitModes` Mode[] — Optional. Default is `TRANSIT` which allows all transit modes (no restriction). Allowed modes for the transit part. If empty, no transit connections will be computed. For example, this can be used to allow only `SUBURBAN,SUBWAY,TRAM`.
  - `preTransitModes` Mode[] — Optional. Default is `WALK`. Does not apply to direct connections (see `directMode`). A list of modes that are allowed to be used for the first mile, i.e. from the coordinates to the first transit stop. Example: `WALK,BIKE_SHARING`.
  - `postTransitModes` Mode[] — Optional. Default is `WALK`. Does not apply to direct connections (see `directMode`). A list of modes that are allowed to be used for the last mile, i.e. from the last transit stop to the target coordinates. Example: `WALK,BIKE_SHARING`.
  - `directMode` 'WALK' | 'BIKE' | 'RENTAL' | 'CAR' | 'HGV' | 'CAR_PARKING' | 'CAR_DROPOFF' | 'ODM' | 'RIDE_SHARING' | 'FLEX' | 'DEBUG_BUS_ROUTE' | 'DEBUG_RAILWAY_ROUTE' | 'DEBUG_FERRY_ROUTE' | 'TRANSIT' | 'TRAM' | 'SUBWAY' | 'FERRY' | 'AIRPLANE' | 'BUS' | 'COACH' | 'RAIL' | 'HIGHSPEED_RAIL' | 'LONG_DISTANCE' | 'NIGHT_RAIL' | 'REGIONAL_FAST_RAIL' | 'REGIONAL_RAIL' | 'SUBURBAN' | 'FUNICULAR' | 'AERIAL_LIFT' | 'OTHER' | 'AREAL_LIFT' | 'METRO' | 'CABLE_CAR' — # Street modes - `WALK` - `BIKE` - `RENTAL` Experimental. Expect unannounced breaking changes (without version bumps) for all parameters and returned structs. - `CAR` - `HGV` Heavy goods vehicles (only supported for direct connections) - `CAR_PARKING` Experimental. Expect unannounced breaking changes (without version bumps) for all parameters and returned structs. - `CAR_DROPOFF` Experimental. Expect unannounced breaking changes (without version bumps) for all perameters and returned structs. - `ODM` on-demand taxis from the Prima+ÖV Project - `RIDE_SHARING` ride sharing from the Prima+ÖV Project - `FLEX` flexible transports # Transit modes - `TRANSIT`: translates to `TRAM,FERRY,AIRPLANE,BUS,COACH,RAIL,ODM,RIDE_SHARING,FUNICULAR,AERIAL_LIFT,OTHER` - `TRAM`: trams - `SUBWAY`: subway trains (Paris Metro, London Underground, but also NYC Subway, Hamburger Hochbahn, and other non-underground services) - `FERRY`: ferries - `AIRPLANE`: airline flights - `BUS`: short distance buses (does not include `COACH`) - `COACH`: long distance buses (does not include `BUS`) - `RAIL`: translates to `HIGHSPEED_RAIL,LONG_DISTANCE,NIGHT_RAIL,REGIONAL_RAIL,SUBURBAN,SUBWAY` - `HIGHSPEED_RAIL`: long distance high speed trains (e.g. TGV) - `LONG_DISTANCE`: long distance inter city trains - `NIGHT_RAIL`: long distance night trains - `REGIONAL_FAST_RAIL`: deprecated, `REGIONAL_RAIL` will be used - `REGIONAL_RAIL`: regional train - `SUBURBAN`: suburban trains (e.g. S-Bahn, RER, Elizabeth Line, ...) - `ODM`: demand responsive transport - `RIDE_SHARING`: ride sharing - `FUNICULAR`: Funicular. Any rail system designed for steep inclines. - `AERIAL_LIFT`: Aerial lift, suspended cable car (e.g., gondola lift, aerial tramway). Cable transport where cabins, cars, gondolas or open chairs are suspended by means of one or more cables. - `AREAL_LIFT`: deprecated - `METRO`: deprecated - `CABLE_CAR`: deprecated
  - `maxPreTransitTime` integer — Optional. Default is 15min which is `900`. Maximum time in seconds for the first street leg. Is limited by server config variable `street_routing_max_prepost_transit_seconds`.
  - `maxPostTransitTime` integer — Optional. Default is 15min which is `900`. Maximum time in seconds for the last street leg. Is limited by server config variable `street_routing_max_prepost_transit_seconds`.
  - `maxDirectTime` integer — Optional. Default is 30min which is `1800`. Maximum time in seconds for direct connections. If a value smaller than either `maxPreTransitTime` or `maxPostTransitTime` is used, their maximum is set instead. Is limited by server config variable `street_routing_max_direct_seconds`.
  - `withDistance` boolean — If true, the response includes the distance in meters for each path. This requires path reconstruction and may be slower than duration-only queries. `withDistance` is currently limited to street routing.
  - `requireBikeTransport` boolean — Optional. Default is `false`. If set to `true`, all used transit trips are required to allow bike carriage.
  - `requireCarTransport` boolean — Optional. Default is `false`. If set to `true`, all used transit trips are required to allow car carriage.
  - `noCompulsoryReservation` boolean — Optional. Default is `false`. If set to `true`, all used transit trips are required to be usable without compulsory reservation.

## Response `200`

A list of durations.
If no path was found, the object is empty.

- OneToManyIntermodalResponse — Object containing the optimal street and transit durations for One-to-Many routing
  - `street_durations` Duration[] — Fastest durations for street routing The order of the items corresponds to the order of the `many` locations If no street routed connection is found, the corresponding `Duration` will be empty
    - `duration` number — duration in seconds if a path was found, otherwise missing
    - `distance` number — distance in meters if a path was found and distance computation was requested, otherwise missing
  - `transit_durations` ParetoSet[] — Pareto optimal solutions The order of the items corresponds to the order of the `many` locations If no connection using transits is found, the corresponding `ParetoSet` will be empty
    - ParetoSetEntry[] — Pareto set of optimal transit solutions
      - `duration` number, required — duration in seconds for the the best solution using `transfer` transfers Notice that the resolution is currently in minutes, because of implementation details
      - `transfers` integer, required — The minimal number of transfers required to arrive within `duration` seconds transfers=0: Direct transit connecion without any transfers transfers=1: Transit connection with 1 transfer

## Other responses

- `400` — Bad Request
- `422` — Unprocessable Entity
- `500` — Internal Server Error

---

[API](https://skmtc.net/motis-project/apis/motis-api.md) · [All operations](https://skmtc.net/motis-project/apis/motis-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/motis-project/motis-api/versions/947bd5a43e8d/schema)
