---
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
  - `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
  - `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' | '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` - `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.

## 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

## Changes

- **2026-03-05** `9fcf5ec94e7e` — 1 breaking, 3 info
  - the response's body type changed from `array` to `object` for status `200`
  - added the new optional request property `withDistance`
  - added the optional property `street_durations` to the response with the `200` status
  - added the optional property `transit_durations` to the response with the `200` status
- **2026-02-25** `25ef6a0a4187` — 1 info
  - endpoint added
- **2026-02-21** `b7bf68a0d6f3` — 1 breaking
  - api path removed without deprecation

[Change history](https://skmtc.dev/motis-project/apis/motis-api/changes/api/experimental/one-to-many-intermodal/post.md)

---

[API](https://skmtc.dev/motis-project/apis/motis-api.md) · [All operations](https://skmtc.dev/motis-project/apis/motis-api/llms.txt) · [OpenAPI document](https://skmtc.dev/motis-project/apis/motis-api/revisions/a2ab90068a35?raw)
