Plan transit routes between origin and destination
Calculate optimal public transport routes with real-time data integration
Using this data in a voice model?
The Voice Model-Ready endpoint preserves answer-critical transit facts while reducing response tokens and map-only data.
View the Voice Model-Ready endpoint →Response fields and units
| Field | Format / unit | Meaning |
|---|---|---|
routes[].duration, routes[].walkingDuration | seconds | Total journey time and total walking time |
routes[].walkingDistance | meters | Total walking distance |
routes[].sections[].travelSummary.duration | seconds | Duration of this journey section |
routes[].sections[].travelSummary.length | meters | Length of this journey section |
routes[].walkingCalories | kilocalories (kcal) | Estimated energy used while walking |
routes[].co2EmissionKg, routes[].co2SavedComparedToCarKg | kilograms (kg) | Estimated CO2 emissions and savings |
imperial | boolean | Optional flag, present as true for US/UK; numeric distance fields remain in meters |
processingTimeMs | milliseconds | Server processing time |
Parameters
| Parameter | Type | Required | Description | Example |
|---|---|---|---|---|
origin | string | Yes | Origin coordinates in 'lat,lon' format | 51.537511,-0.152208 |
destination | string | Yes | Destination coordinates in 'lat,lon' format | 51.531921,-0.082569 |
arrivalTime | string | No | ISO 8601 arrival time. Z for UTC, an offset like +01:00 (encode + as %2B), or no zone for origin-local time. See Time format below. Send arrivalTime or departureTime, not both. departureTime wins if both are present. | 2025-09-18T09:30:00Z |
departureTime | string | No | ISO 8601 departure time. Z for UTC, an offset like +01:00 (encode + as %2B), or no zone for origin-local time. See Time format below. Send departureTime or arrivalTime, not both. departureTime wins if both are present. | 2025-09-18T09:00:00Z |
transfers | integer | No | Maximum number of transfers (range 0-6) | 2 |
geometry | string | No | Geometry return format | polyline |
transport | string | No | Return routes using only specified transport types, comma-separated | bus,subway,train,tram |
barrierMode | integer | No | Wheelchair routing filter: 0 no filter, 1 require explicitly accessible stops and trips, 2 require explicitly accessible stops only, 3 require explicitly accessible trips only. Unknown accessibility fails each requirement selected by the mode | 1 |
maxRoutes | integer | No | Search effort (range 1-6). Higher values explore more alternatives. The actual number of routes returned is determined by available connections and is unrelated to this number | 3 |
lang | string | No | Language code for translated stop/route names (IETF BCP 47 format) | en |
Time format
Time parameters use ISO 8601. The zone designator at the end of the value determines its interpretation.
| Form | Example | Meaning |
|---|---|---|
| No zone | 2025-09-18T10:00:00 | Local time at the queried location: the origin for /v1/routes or the stop or location for /v1/nextDepartures. The caller does not need the location's UTC offset. |
| UTC | 2025-09-18T14:00:00Z | A fixed instant. The Z suffix marks UTC. |
| Explicit offset | 2025-09-18T10:00:00-04:00 | A fixed instant. Encode + as %2B in the query string. |
- The UTC and offset forms denote the same instant regardless of caller location; only the no-zone form is location-relative. 09:00:00Z and 10:00:00+01:00 are equivalent.
- If omitted, the current time is used.
- Seconds are rounded up to the next minute.
- When present, localDate and localTime report the request time in the resolved region. nextDepartures v1 times use ISO 8601 and may include a UTC offset or omit a zone designator.
Real-time vs scheduled times
Times come in two flavours: the schedule (always present) and the real-time/live value (available only when the operator feeds live data). When a real-time value is available it is the actual expected time - use it instead of the scheduled one. The field names differ per endpoint:
| Endpoint | Scheduled field | Real-time field (live only) |
|---|---|---|
/v1/nextDepartures | scheduledDepartureTime (ISO 8601) | realtimeDepartureTime (ISO 8601; live only) |
/v1/routes | section departure.time / arrival.time (full ISO 8601) | section departure.rtDeparture / arrival.rtArrival (full ISO 8601); same on intermediateStops[] |
- When no live data exists, object responses omit their real-time field. Fall back to the scheduled value.
- nextDepartures times use ISO 8601 and may include a UTC offset or omit a zone designator.
- Delay = real-time minus scheduled (positive = running late). A live/delay badge is the typical UI.
- Service disruptions come as a top-level alerts[] array (header, description, cause, effect, validFrom/validUntil, and the affected route/stop via informedEntity / sectionIds).
Wheelchair accessibility
wheelchairBoarding: wheelchairBoarding describes a stop.
wheelchairAccessible: wheelchairAccessible describes a trip.
| Value | Meaning |
|---|---|
field absent | Unknown (GTFS value 0). |
1 | Accessible. |
2 | Not accessible. |
Accessibility filtering is strict. In response data, an absent wheelchairBoarding or wheelchairAccessible field means unknown; it does not establish accessibility or inaccessibility. With barrierMode 1-3, unknown values fail each accessibility requirement selected by the mode, so only an explicit value of 1 passes. Use these modes when confirmed accessibility is required, because many networks do not publish this data.
Try It Out
Required parameters only
curl -H "capi-key: Bearer YOUR_API_KEY" \
-H "capi-host: busmaps.com" \
"https://capi.busmaps.com:8443/v1/routes?origin=51.537511,-0.152208&destination=51.531921,-0.082569" Popular parameters
curl -H "capi-key: Bearer YOUR_API_KEY" \
-H "capi-host: busmaps.com" \
"https://capi.busmaps.com:8443/v1/routes?origin=51.537511,-0.152208&destination=51.531921,-0.082569&arrivalTime=2025-09-18T09:30:00Z&transfers=2&geometry=polyline&transport=bus,subway,train,tram&barrierMode=1&maxRoutes=3&lang=en"Response Example
{
"routes": [
{
"id": "C0",
"duration": 1320,
"transfers": 0,
"sections": [
{
"id": "C0-S0",
"type": "pedestrian",
"travelSummary": {
"duration": 480,
"length": 474
},
"departure": {
"time": "2026-06-05T11:23:00+01:00",
"place": {
"name": "",
"type": "place",
"location": {
"lat": 51.5074,
"lng": -0.1278
},
"id": ""
}
},
"arrival": {
"time": "2026-06-05T11:31:00+01:00",
"place": {
"name": "Embankment Underground Station",
"urlStopName": "Embankment-Underground-Station",
"type": "station",
"location": {
"lat": 51.507059,
"lng": -0.122291
},
"id": "2944051126489606616",
"countryIso": "GBR",
"countryUrl": "uk"
}
},
"polyline": "m`kyHx}WGoAGIBEBC@ABA?_@FQJk@HQ@MD]V_CNoAHq@@I@KDe@f@gFJ]Fm@B@B@@QBKD@BQc@MMEwAcADIRg@Ha@",
"transport": {
"mode": "pedestrian"
}
},
{
"id": "C0-S1",
"type": "transit",
"travelSummary": {
"duration": 300,
"length": 2117
},
"departure": {
"time": "2026-06-05T11:31:00+01:00",
"platformCode": "2",
"rtDeparture": "2026-06-05T11:31:00+01:00",
"place": {
"name": "Embankment Underground Station",
"urlStopName": "Embankment-Underground-Station",
"type": "station",
"location": {
"lat": 51.507059,
"lng": -0.122291
},
"id": "2944051126489606616",
"countryIso": "GBR",
"countryUrl": "uk"
}
},
"arrival": {
"time": "2026-06-05T11:36:00+01:00",
"platformCode": "3",
"rtArrival": "2026-06-05T11:36:00+01:00",
"place": {
"name": "Mansion House Underground Station",
"urlStopName": "Mansion-House-Underground-Station",
"type": "station",
"location": {
"lat": 51.511705,
"lng": -0.094776
},
"id": "16815287826471945869",
"countryIso": "GBR",
"countryUrl": "uk"
}
},
"polyline": "c~jyHj{VoE}AkFoKmCaGmDsV??k@oJQ_QGsKAcPoAwKuAaEr@yg@MmCAq@",
"transport": {
"mode": "subway",
"id": "1148712030-2808230924",
"countryIso": "GBR",
"countryUrl": "uk",
"headsign": "Tower Hill Underground Station",
"shortName": "District",
"urlRouteShortName": "District",
"longName": "Ealing Broadway/Richmond/Wimbledon - Earl's Court - Upminster/Edgware Road",
"color": "#007A33",
"textColor": "#FFFFFF",
"name": "District"
},
"intermediateStops": [
{
"departure": {
"time": "2026-06-05T11:33:00+01:00",
"place": {
"name": "Temple Underground Station",
"urlStopName": "Temple-Underground-Station",
"type": "station",
"location": {
"lat": 51.510859,
"lng": -0.114756
},
"id": "2453052915675249070",
"countryIso": "GBR",
"countryUrl": "uk"
}
}
},
{
"departure": {
"time": "2026-06-05T11:34:00+01:00",
"place": {
"name": "Blackfriars Underground Station",
"urlStopName": "Blackfriars-Underground-Station",
"type": "station",
"location": {
"lat": 51.511618,
"lng": -0.103239
},
"id": "6286148251023766201",
"countryIso": "GBR",
"countryUrl": "uk"
}
}
}
],
"agency": {
"id": "2264224218-1585141307",
"countryIso": "GBR",
"countryUrl": "uk",
"name": "London Underground (TfL)",
"urlAgencyName": "London-Underground-TfL",
"website": "https://www.traveline.info",
"phone": "03432221234"
}
},
{
"id": "C0-S2",
"type": "pedestrian",
"travelSummary": {
"duration": 540,
"length": 549
},
"departure": {
"time": "2026-06-05T11:36:00+01:00",
"place": {
"name": "Mansion House Underground Station",
"urlStopName": "Mansion-House-Underground-Station",
"type": "station",
"location": {
"lat": 51.511705,
"lng": -0.094776
},
"id": "16815287826471945869",
"countryIso": "GBR",
"countryUrl": "uk"
}
},
"arrival": {
"time": "2026-06-05T11:45:00+01:00",
"place": {
"name": "",
"type": "place",
"location": {
"lat": 51.5155,
"lng": -0.0922
},
"id": ""
}
},
"polyline": "c{kyH`oQo@KA?A@W\\AIAGAMMaAKy@Ga@AQ?GE?AKISCSASE@A?CSA@E@IBCYOgACSAECGGGMMaAMIAcBSGAED@OK?O?G?MAUCg@GGAIAKAw@I[EC?GAA?EASAIAAAa@EMC?^AD",
"transport": {
"mode": "pedestrian"
}
}
],
"walkingDistance": 1023,
"walkingDuration": 1020,
"walkingCalories": 62.7,
"co2EmissionKg": 0.08,
"co2SavedComparedToCarKg": 0.4
},
{
"id": "C1",
"duration": 1260,
"transfers": 0,
"sections": [
{
"id": "C1-S0",
"type": "pedestrian",
"travelSummary": {
"duration": 480,
"length": 474
},
"departure": {
"time": "2026-06-05T11:26:00+01:00",
"place": {
"name": "",
"type": "place",
"location": {
"lat": 51.5074,
"lng": -0.1278
},
"id": ""
}
},
"arrival": {
"time": "2026-06-05T11:34:00+01:00",
"place": {
"name": "Embankment Underground Station",
"urlStopName": "Embankment-Underground-Station",
"type": "station",
"location": {
"lat": 51.507059,
"lng": -0.122291
},
"id": "2944051126489606616",
"countryIso": "GBR",
"countryUrl": "uk"
}
},
"polyline": "m`kyHx}WGoAGIBEBC@ABA?_@FQJk@HQ@MD]V_CNoAHq@@I@KDe@f@gFJ]Fm@B@B@@QBKD@BQc@MMEwAcADIRg@Ha@",
"transport": {
"mode": "pedestrian"
}
},
{
"id": "C1-S1",
"type": "transit",
"travelSummary": {
"duration": 240,
"length": 2117
},
"departure": {
"time": "2026-06-05T11:34:00+01:00",
"platformCode": "2",
"rtDeparture": "2026-06-05T11:34:00+01:00",
"place": {
"name": "Embankment Underground Station",
"urlStopName": "Embankment-Underground-Station",
"type": "station",
"location": {
"lat": 51.507059,
"lng": -0.122291
},
"id": "2944051126489606616",
"countryIso": "GBR",
"countryUrl": "uk"
}
},
"arrival": {
"time": "2026-06-05T11:38:00+01:00",
"platformCode": "3",
"rtArrival": "2026-06-05T11:38:00+01:00",
"place": {
"name": "Mansion House Underground Station",
"urlStopName": "Mansion-House-Underground-Station",
"type": "station",
"location": {
"lat": 51.511705,
"lng": -0.094776
},
"id": "16815287826471945869",
"countryIso": "GBR",
"countryUrl": "uk"
}
},
"polyline": "c~jyHj{VoE}AkFoKmCaGmDsV??k@oJQ_QGsKAcPoAwKuAaEr@yg@MmCAq@",
"transport": {
"mode": "subway",
"id": "1148712030-2808230924",
"countryIso": "GBR",
"countryUrl": "uk",
"headsign": "Upminster Underground Station",
"shortName": "District",
"urlRouteShortName": "District",
"longName": "Ealing Broadway/Richmond/Wimbledon - Earl's Court - Upminster/Edgware Road",
"color": "#007A33",
"textColor": "#FFFFFF",
"name": "District"
},
"intermediateStops": [
{
"departure": {
"time": "2026-06-05T11:35:00+01:00",
"place": {
"name": "Temple Underground Station",
"urlStopName": "Temple-Underground-Station",
"type": "station",
"location": {
"lat": 51.510859,
"lng": -0.114756
},
"id": "2453052915675249070",
"countryIso": "GBR",
"countryUrl": "uk"
}
}
},
{
"departure": {
"time": "2026-06-05T11:37:00+01:00",
"place": {
"name": "Blackfriars Underground Station",
"urlStopName": "Blackfriars-Underground-Station",
"type": "station",
"location": {
"lat": 51.511618,
"lng": -0.103239
},
"id": "6286148251023766201",
"countryIso": "GBR",
"countryUrl": "uk"
}
}
}
],
"agency": {
"id": "2264224218-1585141307",
"countryIso": "GBR",
"countryUrl": "uk",
"name": "London Underground (TfL)",
"urlAgencyName": "London-Underground-TfL",
"website": "https://www.traveline.info",
"phone": "03432221234"
}
},
{
"id": "C1-S2",
"type": "pedestrian",
"travelSummary": {
"duration": 540,
"length": 549
},
"departure": {
"time": "2026-06-05T11:38:00+01:00",
"place": {
"name": "Mansion House Underground Station",
"urlStopName": "Mansion-House-Underground-Station",
"type": "station",
"location": {
"lat": 51.511705,
"lng": -0.094776
},
"id": "16815287826471945869",
"countryIso": "GBR",
"countryUrl": "uk"
}
},
"arrival": {
"time": "2026-06-05T11:47:00+01:00",
"place": {
"name": "",
"type": "place",
"location": {
"lat": 51.5155,
"lng": -0.0922
},
"id": ""
}
},
"polyline": "c{kyH`oQo@KA?A@W\\AIAGAMMaAKy@Ga@AQ?GE?AKISCSASE@A?CSA@E@IBCYOgACSAECGGGMMaAMIAcBSGAED@OK?O?G?MAUCg@GGAIAKAw@I[EC?GAA?EASAIAAAa@EMC?^AD",
"transport": {
"mode": "pedestrian"
}
}
],
"walkingDistance": 1023,
"walkingDuration": 1020,
"walkingCalories": 62.7,
"co2EmissionKg": 0.08,
"co2SavedComparedToCarKg": 0.4
}
],
"alerts": [
{
"id": "dd1e4d9bb7ef",
"origin": "API",
"cause": "TECHNICAL_PROBLEM",
"effect": "NO_SERVICE",
"header": "Bakerloo Line",
"description": "No service between Queen's Park and Harrow & Wealdstone while we fix a signal failure at Willesden Junction. Tickets are being accepted on London Buses, the Lioness line and London Northwestern Railway. GOOD SERVICE on the rest of the line.",
"url": "https://tfl.gov.uk/tube-dlr-overground/status/",
"validFrom": "",
"validUntil": "",
"operator": "2264224218-1585141307",
"countryIso": "GBR",
"countryUrl": "uk",
"sectionIds": "C2-S1",
"informedEntity": [
{
"routeId": "2521614975-583762869"
}
]
}
],
"regionName": "uk_ireland",
"imperial": true,
"processingTimeMs": 341.47
}Response Schema
View JSON Schema
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Routes Response",
"type": "object",
"properties": {
"imperial": {
"type": "boolean",
"description": "Optional flag, present as true for US/UK; numeric distance fields remain in meters"
},
"regionName": {
"type": "string",
"description": "Transit data region that served the request"
},
"alerts": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Stable alert identifier (hash of header and description)"
},
"origin": {
"type": "string",
"description": "Source/origin of the alert"
},
"cause": {
"type": "string",
"description": "GTFS-RT alert cause"
},
"effect": {
"type": "string",
"description": "GTFS-RT alert effect"
},
"header": {
"type": "string",
"description": "Short alert headline"
},
"description": {
"type": "string",
"description": "Full alert text"
},
"url": {
"type": "string",
"description": "Link with more information"
},
"validFrom": {
"type": "string",
"description": "Alert start time (ISO 8601)"
},
"validUntil": {
"type": "string",
"description": "Alert end time (ISO 8601)"
},
"operator": {
"type": "string",
"description": "Operator identifier of the alert"
},
"countryIso": {
"type": "string",
"description": "ISO 3166-1 alpha-3 country code (e.g. 'GBR')"
},
"countryUrl": {
"type": "string",
"description": "Country URL slug (e.g. 'uk')"
},
"sectionIds": {
"type": "string",
"description": "Route section ids the alert applies to"
},
"informedEntity": {
"type": "array",
"items": {
"type": "object",
"properties": {
"routeId": {
"type": "string",
"description": "Internal route identifier"
}
},
"required": [
"routeId"
]
},
"description": "Entities (route/stop) the alert applies to"
}
},
"required": [
"id",
"origin",
"cause",
"effect",
"header",
"description",
"url",
"operator",
"countryIso",
"countryUrl",
"sectionIds",
"informedEntity"
]
},
"description": "Service alerts/disruptions affecting the result"
},
"routes": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Route identifier (e.g., 'C0', 'C1')"
},
"duration": {
"type": "integer",
"description": "Total journey time in seconds"
},
"co2EmissionKg": {
"type": "number",
"description": "CO2 emissions in kg for this route"
},
"walkingDistance": {
"type": "integer",
"description": "Total walking distance in meters"
},
"co2SavedComparedToCarKg": {
"type": "number",
"description": "CO2 saved compared to driving in kg"
},
"walkingDuration": {
"type": "integer",
"description": "Total walking time in seconds"
},
"walkingCalories": {
"type": "number",
"description": "Estimated energy used while walking, in kilocalories (kcal)"
},
"sections": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Journey section identifier"
},
"type": {
"type": "string",
"description": "Type discriminator for the object"
},
"arrival": {
"type": "object",
"properties": {
"rtArrival": {
"type": "string",
"description": "Real-time arrival info"
},
"time": {
"type": "string",
"description": "Timestamp in ISO 8601 (region-local with offset)"
},
"platformCode": {
"type": "string",
"description": "Platform or stand code"
},
"place": {
"type": "object",
"properties": {
"countryIso": {
"type": "string",
"description": "ISO 3166-1 alpha-3 country code (e.g. 'GBR')"
},
"id": {
"type": "string",
"description": "Place or stop identifier"
},
"type": {
"type": "string",
"description": "Type discriminator for the object"
},
"urlStopName": {
"type": [
"null",
"string"
],
"description": "URL-safe slug of the stop name"
},
"countryUrl": {
"type": "string",
"description": "Country URL slug (e.g. 'uk')"
},
"location": {
"type": "object",
"properties": {
"lng": {
"type": "number",
"description": "Longitude in decimal degrees"
},
"lat": {
"type": "number",
"description": "Latitude in decimal degrees"
}
},
"required": [
"lng",
"lat"
],
"description": "Point location. Coordinate arrays use [longitude, latitude] in decimal degrees; objects expose named latitude/longitude fields"
},
"name": {
"type": "string",
"description": "Display name"
},
"description": {
"type": "string",
"description": "Additional place or stop description"
},
"stopCode": {
"type": "string",
"description": "Public stop code shown to passengers"
},
"wheelchairBoarding": {
"type": "integer",
"description": "Wheelchair accessibility of the stop",
"enum": [
1,
2
]
}
},
"required": [
"type",
"location"
],
"description": "Endpoint place of the section (origin/destination of a leg)"
}
},
"required": [
"place",
"time"
],
"description": "Arrival end of the section"
},
"agency": {
"type": "object",
"properties": {
"countryIso": {
"type": "string",
"description": "ISO 3166-1 alpha-3 country code (e.g. 'GBR')"
},
"id": {
"type": "string",
"description": "Operating agency identifier"
},
"urlAgencyName": {
"type": [
"null",
"string"
],
"description": "URL-safe slug of the agency name"
},
"phone": {
"type": [
"null",
"string"
],
"description": "Contact phone"
},
"countryUrl": {
"type": "string",
"description": "Country URL slug (e.g. 'uk')"
},
"website": {
"type": "string",
"description": "Website URL"
},
"name": {
"type": "string",
"description": "Display name"
}
},
"required": [
"countryIso",
"id",
"urlAgencyName",
"phone",
"countryUrl",
"website",
"name"
],
"description": "Operating agency of the leg"
},
"travelSummary": {
"type": "object",
"properties": {
"duration": {
"type": "integer",
"description": "Duration of this journey section in seconds"
},
"length": {
"type": "integer",
"description": "Length in meters"
}
},
"required": [
"duration",
"length"
],
"description": "Distance and duration summary of the section"
},
"transport": {
"type": "object",
"properties": {
"mode": {
"type": "string",
"description": "Travel mode of the section (pedestrian, transit, ...)"
},
"countryIso": {
"type": "string",
"description": "ISO 3166-1 alpha-3 country code (e.g. 'GBR')"
},
"id": {
"type": "string",
"description": "Transit line identifier"
},
"textColor": {
"type": "string",
"description": "Text color as a hex string"
},
"urlRouteShortName": {
"type": [
"null",
"string"
],
"description": "URL-safe slug of the route short name"
},
"headsign": {
"type": "string",
"description": "Destination shown on the vehicle"
},
"countryUrl": {
"type": "string",
"description": "Country URL slug (e.g. 'uk')"
},
"shortName": {
"type": "string",
"description": "Short name"
},
"name": {
"type": "string",
"description": "Display name"
},
"color": {
"type": "string",
"description": "Color as a hex string"
},
"longName": {
"type": "string",
"description": "Long name"
},
"routeDesc": {
"type": "string",
"description": "Additional route description"
},
"wheelchairAccessible": {
"type": "integer",
"description": "Wheelchair accessibility of the trip",
"enum": [
1,
2
]
},
"urlRouteLongName": {
"type": [
"string",
"null"
],
"description": "URL-safe slug of the route long name"
}
},
"required": [
"mode"
],
"description": "Transport details of the section (mode, route, agency)"
},
"departure": {
"type": "object",
"properties": {
"rtDeparture": {
"type": "string",
"description": "Real-time departure info"
},
"time": {
"type": "string",
"description": "Timestamp in ISO 8601 (region-local with offset)"
},
"platformCode": {
"type": "string",
"description": "Platform or stand code"
},
"place": {
"type": "object",
"properties": {
"countryIso": {
"type": "string",
"description": "ISO 3166-1 alpha-3 country code (e.g. 'GBR')"
},
"id": {
"type": "string",
"description": "Place or stop identifier"
},
"type": {
"type": "string",
"description": "Type discriminator for the object"
},
"urlStopName": {
"type": [
"null",
"string"
],
"description": "URL-safe slug of the stop name"
},
"countryUrl": {
"type": "string",
"description": "Country URL slug (e.g. 'uk')"
},
"location": {
"type": "object",
"properties": {
"lng": {
"type": "number",
"description": "Longitude in decimal degrees"
},
"lat": {
"type": "number",
"description": "Latitude in decimal degrees"
}
},
"required": [
"lng",
"lat"
],
"description": "Point location. Coordinate arrays use [longitude, latitude] in decimal degrees; objects expose named latitude/longitude fields"
},
"name": {
"type": "string",
"description": "Display name"
},
"description": {
"type": "string",
"description": "Additional place or stop description"
},
"stopCode": {
"type": "string",
"description": "Public stop code shown to passengers"
},
"wheelchairBoarding": {
"type": "integer",
"description": "Wheelchair accessibility of the stop",
"enum": [
1,
2
]
}
},
"required": [
"type",
"location"
],
"description": "Endpoint place of the section (origin/destination of a leg)"
}
},
"required": [
"place",
"time"
],
"description": "Departure end of the section"
},
"intermediateStops": {
"type": "array",
"items": {
"type": "object",
"properties": {
"departure": {
"type": "object",
"properties": {
"place": {
"type": "object",
"properties": {
"countryIso": {
"type": "string",
"description": "ISO 3166-1 alpha-3 country code (e.g. 'GBR')"
},
"id": {
"type": "string",
"description": "Place or stop identifier"
},
"type": {
"type": "string",
"description": "Type discriminator for the object"
},
"urlStopName": {
"type": [
"null",
"string"
],
"description": "URL-safe slug of the stop name"
},
"countryUrl": {
"type": "string",
"description": "Country URL slug (e.g. 'uk')"
},
"location": {
"type": "object",
"properties": {
"lng": {
"type": "number",
"description": "Longitude in decimal degrees"
},
"lat": {
"type": "number",
"description": "Latitude in decimal degrees"
}
},
"required": [
"lng",
"lat"
],
"description": "Point location. Coordinate arrays use [longitude, latitude] in decimal degrees; objects expose named latitude/longitude fields"
},
"name": {
"type": "string",
"description": "Display name"
},
"description": {
"type": "string",
"description": "Additional place or stop description"
},
"wheelchairBoarding": {
"type": "integer",
"description": "Wheelchair accessibility of the stop",
"enum": [
1,
2
]
}
},
"required": [
"countryIso",
"id",
"type",
"name",
"countryUrl",
"location",
"urlStopName"
],
"description": "Endpoint place of the section (origin/destination of a leg)"
},
"time": {
"type": "string",
"description": "Timestamp in ISO 8601 (region-local with offset)"
}
},
"required": [
"place",
"time"
],
"description": "Departure end of the section"
}
},
"required": [
"departure"
]
},
"description": "Stops passed through between boarding and alighting"
},
"polyline": {
"type": "string",
"description": "Encoded geometry of the section"
}
},
"required": [
"id",
"type",
"arrival",
"travelSummary",
"transport",
"departure",
"polyline"
]
},
"description": "Route segments/legs"
},
"transfers": {
"type": "integer",
"description": "Number of transfers required"
}
},
"required": [
"id",
"duration",
"co2EmissionKg",
"walkingDistance",
"co2SavedComparedToCarKg",
"walkingDuration",
"walkingCalories",
"sections",
"transfers"
]
},
"description": "Array of calculated routes"
},
"notices": {
"type": "array",
"items": {
"type": "object",
"properties": {
"title": {
"type": "string",
"description": "Human-readable title of the notice/alert"
},
"code": {
"type": "string",
"description": "Status code for the response"
}
},
"required": [
"title",
"code"
]
},
"description": "Informational notices (e.g. noRouteFound, noCoverage)"
},
"processingTimeMs": {
"type": "number",
"description": "Processing time in milliseconds"
}
},
"required": [
"regionName",
"processingTimeMs",
"routes"
]
}Response Codes
200
Routes calculated successfully (or noCoverage notice if region not supported)400
Invalid parameters or coordinates500
Internal server error