Section 07 of 12
Journeys
GET /journeys returns up to six itineraries between two points. It costs 5 units per call and results are cached for 60 seconds for identical queries.
Parameters#
| Parameter | Value |
|---|---|
from, to | a stop or area id (idfm:area:71264), coordinates (48.8584,2.3470), or free text resolved through /places (first match) |
when | RFC 3339 or now (default); departure time, or arrival time when arrive_by=true |
arrive_by | true to plan backwards from when |
modes | comma list to restrict transit modes |
planner | auto (default), native, quavsit |
max_walk | metres of walking allowed at each end, default 1000, at most 2500 |
network | forces the network when both points are inside several coverages |
limit | 1–6, default 3 |
Free text that resolves to nothing answers 404 place_not_found with the offending side in details.
One network per journey#
Both ends must fall inside the coverage of the same network. Points that resolve to different networks, or to none, answer 400 transit_query_invalid with details.reason = "cross_network". Cross-network routing (for example a TER train then a city tram) is not available in this version; plan each leg separately.
Native planners and the Quavsit router#
Three networks expose an operator planner; the others are answered by Quavsit's own router built on the network's timetable:
| Network | planner=auto picks | Fallback when the native planner fails |
|---|---|---|
idfm | native (navitia via PRIM) | none: 503 transit_upstream_budget when the daily budget is exhausted |
sncf | native (navitia) | none |
tisseo | native (Tisséo planner, coordinates) | Quavsit router |
tbm, star, tam, rla, ilevia | Quavsit router | — |
planner=native on a network without one answers 404 capability_unsupported. planner=quavsit forces the router where the timetable is loaded (every GTFS network, Tisséo included). Journey.source names what answered: idfm, sncf, tisseo or quavsit.
The Quavsit router is a connection-scan over the current timetable with footpaths between stops up to 300 m apart (walking speed 4.5 km/h, 60 s change time) and the operator's own transfer table when it exists. Realtime trip updates for the window are applied before the scan, so delayed trips shift and cancelled trips are skipped; Journey.realtime is then true. Results favour earliest arrival, then fewer transfers, then latest departure. Fares are not computed by the router; native planners return fare when they know it.
Response shape#
A Journey carries departure_at, arrival_at, duration_seconds, transfers, walking_seconds, walking_meters, fare ({amount in cents, currency, text} or null), co2_grams when known, source, realtime and sections. Each Section is a walk, transit, wait or transfer leg with from_place, to_place, times, line (a compact LineRef), headsign, direction_id, stop_ids and, for transit legs, geometry as a GeoJSON LineString cut from the line shape between boarding and alighting stops. Walking legs are straight lines with distance_meters.
curl -sS "https://api.quavern.net/v1/journeys?from=48.8556,2.3592&to=idfm:area:71264&when=now&limit=2" \
-H "Authorization: Bearer qv_p_…"The full JSON example is in Endpoints.
Ordering and duplicates#
Journeys are ranked by the planner (native first under auto), then deduplicated on (departure_at, arrival_at, sequence of transit lines).