Get a route's full timetable (route card)

GET /v1/line
Base URL: https://capi.busmaps.com:8443

Return a route's full timetable: directions, ordered stops, inline geometry and the schedule as a trips x stops grid. Addressed by routeId + regionName from a /v1/stopsInRadius or /v1/nextDepartures response. countryIso is required on the busmaps.com host and must be omitted on wikiroutes.info. The embedded alerts[] block is a busmaps.com feature only - wikiroutes.info responses never include it.

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

FieldFormat / unitMeaning
routeInfo.localTime ISO 8601 with UTC offset Current time in the route's local timezone
directions[].stops[].countryIso ISO 3166-1 alpha-3 Stop country used with stopHash1 for follow-up requests; it can differ from the route country
directions[].stops[].stopLat, directions[].stops[].stopLon WGS 84 decimal degrees Stop coordinates
directions[].trips[] stop times HH:MM or HH:MM,HH:MM Departure only, or arrival then departure; values after midnight may exceed 24:00
processingTimeMs milliseconds Server processing time

Parameters

ParameterTypeRequiredDescriptionExample
routeId string Yes Route identifier without the country prefix, taken from the routeId field of a /v1/stopsInRadius or /v1/nextDepartures response 56535198-1440633859
regionName string Yes Region name that selects the backend, taken from the regionName field of the /v1/stopsInRadius or /v1/nextDepartures response that gave you the routeId germany
countryIso string On busmaps.com ISO 3166-1 alpha-3 country code from the same response, used to rebuild the prefixed upstream route id. Required on the busmaps.com host; must be omitted on wikiroutes.info DEU
date string No Service date in YYYY-MM-DD for which the schedule is returned; defaults to today in the route's local timezone 2026-06-09
lang string No Language code for translated stop/route names (IETF BCP 47 format) en

Schedule format

The schedule in /v1/line is a trips x stops grid. Each direction's trips is a list of {"<tripId>": [stopTime, ...]} objects - one trip per object, one stopTime per stop in that direction's stops[] (same order). A trip object may also contain wheelchairAccessible. A stopTime is a compact string:

Value Meaning
08:40 A single time is the departure (HH:MM); the vehicle does not wait, so no separate arrival is given.
07:00,07:04 Two times are arrival then departure - the vehicle waits at the stop (arrives 07:00, leaves 07:04).
07:00,07:04|01 A trailing |PD adds GTFS boarding rules: P=pickup, D=drop-off, 1=forbidden, 0=allowed. Here drop-off is forbidden, so this is a boarding-only stop.
  • The |PD suffix is present only when the operator restricts boarding or alighting; no suffix means both are allowed.
  • |10 = alighting only (no boarding); |11 = neither boarding nor alighting.
  • Seconds are dropped. Times after midnight stay in the 24h+ form the operator published (e.g. 25:10).

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.

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/line?routeId=56535198-1440633859&regionName=germany&countryIso=DEU"

Popular parameters

curl -H "capi-key: Bearer YOUR_API_KEY" \
     -H "capi-host: busmaps.com" \
     "https://capi.busmaps.com:8443/v1/line?routeId=56535198-1440633859&regionName=germany&countryIso=DEU&date=2026-06-09&lang=en"

Response Example

{
    "routeInfo": {
        "inService": true,
        "routeShortName": "276",
        "routeLongName": "Newham Hospital - Canning Town - Stratford - Hackney Central - Stoke Newington",
        "urlRouteShortName": "276",
        "urlRouteLongName": null,
        "routeColor": null,
        "routeTextColor": null,
        "routeTimezone": "Europe/London",
        "localTime": "2026-06-29T09:42:14+01:00",
        "routeTypeName": "Bus",
        "routeTypeGroup": "bus",
        "routeHash2": "2010459080-1049687682",
        "countryUrl": "uk",
        "agencyInfo": {
            "agencyName": "Stagecoach London",
            "agencyHash": "1011210831-1585141307",
            "urlAgencyName": "Stagecoach-London",
            "countryUrl": "uk"
        }
    },
    "directions": [
        {
            "dirHash": "655d89b7e9afe995",
            "dirName": "Gateway Surgical Centre - Stoke Newington Common",
            "inService": true,
            "polyline": "usmyHowF_HxP}@lUs@|NeHxB{FlHhGzL~H`RfEvKlGrPdHpUtE|M}BnKeKvOmI`UePgAoEO}LFsOaEwRcN_MnFgLhHsPdp@lUTlHpKzKfOtTr]zJb_@[nNqWtX_FjOkJ`H_JzDwIaI`BkIiV~AyDuAsJ^{HbNcDtCkJDcF`H?vNvBtOnDpXyCzQcApE~JxHvE~VxDd_@pC|EkOnGyCdI_E|P{DvQyHhKiK|I_Kr@mFtHgCp\\_OaByJiA_CkJvDwS",
            "stops": [
                {
                    "stopHash1": "10874989072900777668",
                    "countryIso": "GBR",
                    "countryUrl": "uk",
                    "stopName": "Gateway Surgical Centre",
                    "urlStopName": "Gateway-Surgical-Centre",
                    "stopLat": 51.520746,
                    "stopLon": 0.039758
                },
                {
                    "stopHash1": "192763634534834566",
                    "countryIso": "GBR",
                    "countryUrl": "uk",
                    "stopName": "Newham Uni Hosp Main Reception",
                    "urlStopName": "Newham-Uni-Hosp-Main-Reception",
                    "stopLat": 51.52219,
                    "stopLon": 0.036911
                }
            ],
            "trips": [
                {
                    "1-a99dd6d5d21b72ae5d0f": [
                        "00:05|01",
                        "00:06",
                        "00:06",
                        "00:07",
                        "00:08",
                        "00:09",
                        "00:09",
                        "00:10",
                        "00:10",
                        "00:10",
                        "00:11",
                        "00:12",
                        "00:12",
                        "00:13",
                        "00:14",
                        "00:15",
                        "00:15",
                        "00:16",
                        "00:16",
                        "00:17",
                        "00:18",
                        "00:19",
                        "00:23",
                        "00:25",
                        "00:26",
                        "00:26",
                        "00:27",
                        "00:29",
                        "00:29",
                        "00:31",
                        "00:32",
                        "00:33",
                        "00:33",
                        "00:34",
                        "00:34",
                        "00:35",
                        "00:36",
                        "00:36",
                        "00:37",
                        "00:38",
                        "00:38",
                        "00:39",
                        "00:40",
                        "00:40",
                        "00:41",
                        "00:42",
                        "00:43",
                        "00:44",
                        "00:45",
                        "00:46",
                        "00:47",
                        "00:49",
                        "00:49",
                        "00:50",
                        "00:51",
                        "00:51",
                        "00:52",
                        "00:52",
                        "00:53",
                        "00:54",
                        "00:54",
                        "00:55",
                        "00:56|10",
                        "00:57|10"
                    ]
                },
                {
                    "1-42132ca90417fe5746e9": [
                        "00:25|01",
                        "00:26",
                        "00:26",
                        "00:27",
                        "00:28",
                        "00:29",
                        "00:29",
                        "00:30",
                        "00:30",
                        "00:30",
                        "00:31",
                        "00:32",
                        "00:32",
                        "00:33",
                        "00:34",
                        "00:35",
                        "00:35",
                        "00:36",
                        "00:36",
                        "00:37",
                        "00:38",
                        "00:39",
                        "00:43",
                        "00:45",
                        "00:46",
                        "00:46",
                        "00:47",
                        "00:49",
                        "00:49",
                        "00:51",
                        "00:52",
                        "00:53",
                        "00:53",
                        "00:54",
                        "00:54",
                        "00:55",
                        "00:56",
                        "00:56",
                        "00:57",
                        "00:58",
                        "00:58",
                        "00:59",
                        "01:00",
                        "01:00",
                        "01:01",
                        "01:02",
                        "01:03",
                        "01:04",
                        "01:05",
                        "01:06",
                        "01:07",
                        "01:09",
                        "01:09",
                        "01:10",
                        "01:11",
                        "01:11",
                        "01:12",
                        "01:12",
                        "01:13",
                        "01:14",
                        "01:14",
                        "01:15",
                        "01:16|10",
                        "01:17|10"
                    ]
                }
            ]
        },
        {
            "dirHash": "64a26734ad02666",
            "dirName": "Stoke Newington Common - Gateway Surgical Centre",
            "inService": true,
            "polyline": "knuyHnvLxEk@hSiKjO_B`KwI|HoLjCoOxLca@lDwOkAgXuG{I{DQgBwN`Ew[aG_d@iCmLl@sHbIuJlGgCvEVpDeLrQyDhE|IzM{D~B~IlJpE|JoFjPgXtLoNfEsWqMob@aTa\\_MaQsUgJZk[pPmSfJkH~NmCbLrLpVxEpEEbJZvVsGbD_TtJiFpGpDuDyLqKoZyFqPmGcP{FoQiKiS`AeJ|N}E?eJv@qZfHqN",
            "stops": [
                {
                    "stopHash1": "11784856888593601975",
                    "countryIso": "GBR",
                    "countryUrl": "uk",
                    "stopName": "Stoke Newington Common",
                    "urlStopName": "Stoke-Newington-Common",
                    "stopLat": 51.560863,
                    "stopLon": -0.070316
                },
                {
                    "stopHash1": "10424647349058251271",
                    "countryIso": "GBR",
                    "countryUrl": "uk",
                    "stopName": "Rectory Road / Brooke Road",
                    "urlStopName": "Rectory-Road-Brooke-Road",
                    "stopLat": 51.559772,
                    "stopLon": -0.070103
                }
            ],
            "trips": [
                {
                    "1-fd6ec894629d391745a5": [
                        "00:05",
                        "00:05",
                        "00:06",
                        "00:07",
                        "00:07",
                        "00:07",
                        "00:08",
                        "00:10",
                        "00:11",
                        "00:12",
                        "00:13",
                        "00:13",
                        "00:14",
                        "00:15",
                        "00:16",
                        "00:17",
                        "00:17",
                        "00:18",
                        "00:19",
                        "00:20",
                        "00:20",
                        "00:21",
                        "00:21",
                        "00:22",
                        "00:22",
                        "00:23",
                        "00:24",
                        "00:25",
                        "00:25",
                        "00:27",
                        "00:28",
                        "00:29",
                        "00:30",
                        "00:33",
                        "00:33",
                        "00:34",
                        "00:35",
                        "00:35",
                        "00:36",
                        "00:39",
                        "00:39",
                        "00:39",
                        "00:40",
                        "00:41",
                        "00:41",
                        "00:42",
                        "00:43",
                        "00:43",
                        "00:44",
                        "00:44",
                        "00:45",
                        "00:46",
                        "00:46",
                        "00:47",
                        "00:47",
                        "00:49",
                        "00:50"
                    ]
                },
                {
                    "1-b1e9f4aaa1946e218c64": [
                        "00:25",
                        "00:25",
                        "00:26",
                        "00:27",
                        "00:27",
                        "00:27",
                        "00:28",
                        "00:30",
                        "00:31",
                        "00:32",
                        "00:33",
                        "00:33",
                        "00:34",
                        "00:35",
                        "00:36",
                        "00:37",
                        "00:37",
                        "00:38",
                        "00:39",
                        "00:40",
                        "00:40",
                        "00:41",
                        "00:41",
                        "00:42",
                        "00:42",
                        "00:43",
                        "00:44",
                        "00:45",
                        "00:45",
                        "00:47",
                        "00:48",
                        "00:49",
                        "00:50",
                        "00:53",
                        "00:53",
                        "00:54",
                        "00:55",
                        "00:55",
                        "00:56",
                        "00:59",
                        "00:59",
                        "00:59",
                        "01:00",
                        "01:01",
                        "01:01",
                        "01:02",
                        "01:03",
                        "01:03",
                        "01:04",
                        "01:04",
                        "01:05",
                        "01:06",
                        "01:06",
                        "01:07",
                        "01:07",
                        "01:09",
                        "01:10"
                    ]
                }
            ]
        }
    ],
    "alerts": [
        {
            "id": "cf2512bb24b6",
            "origin": "API",
            "cause": "TECHNICAL_PROBLEM",
            "effect": "DETOUR",
            "header": "ORDNANCE ROAD",
            "description": "Until 23:00 Thursday 31 December 2026, route 276 towards Newham Hospital is on diversion via Manor Road and Barking Road due to signal works at Ordnance Road. Buses are not serving the stops 'Star Lane Station/Star Primary School,' 'Exning Road' and 'Malmesbury Terrace.'",
            "url": "https://tfl.gov.uk/bus/status/",
            "validFrom": "",
            "validUntil": "",
            "operator": "1011210831-1585141307",
            "countryIso": "GBR",
            "countryUrl": "uk",
            "informedEntity": [
                {
                    "routeId": "2010459080-1049687682",
                    "countryIso": "GBR",
                    "countryUrl": "uk"
                }
            ]
        },
        {
            "id": "ae891ff48487",
            "origin": "API",
            "cause": "CONSTRUCTION",
            "effect": "OTHER",
            "header": "GLEN ROAD, E13",
            "description": "Route 276 is not serving stop 'Gateway Surgical Centre (HS)' due to emergency works.",
            "url": "https://tfl.gov.uk/bus/status/",
            "validFrom": "",
            "validUntil": "",
            "operator": "1011210831-1585141307",
            "countryIso": "GBR",
            "countryUrl": "uk",
            "informedEntity": [
                {
                    "routeId": "2010459080-1049687682",
                    "countryIso": "GBR",
                    "countryUrl": "uk"
                }
            ]
        }
    ],
    "regionName": "uk_ireland",
    "processingTimeMs": 388.06
}

Response Schema

View JSON Schema
{
    "$schema": "http://json-schema.org/draft-07/schema#",
    "title": "Line Response",
    "type": "object",
    "properties": {
        "regionName": {
            "type": "string",
            "description": "Transit data region that served the request"
        },
        "routeInfo": {
            "type": "object",
            "properties": {
                "urlRouteShortName": {
                    "type": "string",
                    "description": "URL-safe slug of the route short name"
                },
                "routeTextColor": {
                    "type": [
                        "null",
                        "string"
                    ],
                    "description": "Route text color as a hex string"
                },
                "routeLongName": {
                    "type": [
                        "null",
                        "string"
                    ],
                    "description": "Full route name/description"
                },
                "urlRouteLongName": {
                    "type": [
                        "string",
                        "null"
                    ],
                    "description": "URL-safe slug of the route long name"
                },
                "routeTypeGroup": {
                    "type": "string",
                    "description": "Transport group (bus, subway, train, tram, ...)"
                },
                "routeTypeName": {
                    "type": "string",
                    "description": "Upstream transport category label"
                },
                "agencyInfo": {
                    "type": "object",
                    "properties": {
                        "agencyHash": {
                            "type": "string",
                            "description": "Internal agency identifier"
                        },
                        "urlAgencyName": {
                            "type": "string",
                            "description": "URL-safe slug of the agency name"
                        },
                        "agencyName": {
                            "type": "string",
                            "description": "Agency name"
                        },
                        "countryUrl": {
                            "type": "string",
                            "description": "Country URL slug (e.g. 'uk')"
                        }
                    },
                    "required": [
                        "agencyHash",
                        "agencyName",
                        "urlAgencyName",
                        "countryUrl"
                    ],
                    "description": "Operating agency of the route"
                },
                "routeColor": {
                    "type": [
                        "null",
                        "string"
                    ],
                    "description": "Route color as a hex string"
                },
                "inService": {
                    "type": "boolean",
                    "description": "Whether the route (or direction) currently operates"
                },
                "countryUrl": {
                    "type": "string",
                    "description": "Country URL slug (e.g. 'uk')"
                },
                "localTime": {
                    "type": "string",
                    "description": "Current wall clock in the route timezone (ISO 8601 with offset)"
                },
                "routeShortName": {
                    "type": "string",
                    "description": "Short route name shown to passengers (e.g. '18', 'Bakerloo')"
                },
                "routeHash2": {
                    "type": "string",
                    "description": "Route identifier (pass as routeId to re-query)"
                },
                "routeTimezone": {
                    "type": "string",
                    "description": "IANA timezone of the route (e.g. 'Europe/Berlin')"
                }
            },
            "required": [
                "urlRouteShortName",
                "routeTypeGroup",
                "routeHash2",
                "routeTypeName",
                "agencyInfo",
                "inService",
                "countryUrl",
                "routeTimezone",
                "routeShortName",
                "localTime"
            ],
            "description": "Route header: names, colors, type, timezone and agency"
        },
        "alerts": {
            "type": "array",
            "items": {
                "type": "object",
                "properties": {
                    "validUntil": {
                        "type": "string",
                        "description": "Alert end time (ISO 8601)"
                    },
                    "countryIso": {
                        "type": "string",
                        "description": "ISO 3166-1 alpha-3 country code (e.g. 'GBR')"
                    },
                    "effect": {
                        "type": "string",
                        "description": "GTFS-RT alert effect"
                    },
                    "origin": {
                        "type": "string",
                        "description": "Source/origin of the alert"
                    },
                    "countryUrl": {
                        "type": "string",
                        "description": "Country URL slug (e.g. 'uk')"
                    },
                    "header": {
                        "type": "string",
                        "description": "Short alert headline"
                    },
                    "informedEntity": {
                        "type": "array",
                        "items": {
                            "type": "object",
                            "properties": {
                                "routeId": {
                                    "type": "string",
                                    "description": "Internal route identifier"
                                },
                                "countryUrl": {
                                    "type": "string",
                                    "description": "Country URL slug (e.g. 'uk')"
                                },
                                "countryIso": {
                                    "type": "string",
                                    "description": "ISO 3166-1 alpha-3 country code (e.g. 'GBR')"
                                },
                                "stopId": {
                                    "type": "string",
                                    "description": "Internal stop identifier (use with /nextDepartures stopId mode)"
                                }
                            },
                            "required": [
                                "routeId",
                                "countryUrl",
                                "countryIso"
                            ]
                        },
                        "description": "Entities (route/stop) the alert applies to"
                    },
                    "validFrom": {
                        "type": "string",
                        "description": "Alert start time (ISO 8601)"
                    },
                    "cause": {
                        "type": "string",
                        "description": "GTFS-RT alert cause"
                    },
                    "url": {
                        "type": "string",
                        "description": "Link with more information"
                    },
                    "description": {
                        "type": "string",
                        "description": "Full alert text"
                    },
                    "operator": {
                        "type": "string",
                        "description": "Operator identifier of the alert"
                    },
                    "id": {
                        "type": "string",
                        "description": "Identifier"
                    }
                },
                "required": [
                    "informedEntity",
                    "countryIso",
                    "cause",
                    "url",
                    "effect",
                    "origin",
                    "countryUrl",
                    "description",
                    "header",
                    "operator",
                    "id"
                ]
            },
            "description": "Service alerts/disruptions affecting the result"
        },
        "processingTimeMs": {
            "type": "number",
            "description": "Server processing time in milliseconds"
        },
        "directions": {
            "type": "array",
            "items": {
                "type": "object",
                "properties": {
                    "dirHash": {
                        "type": "string",
                        "description": "Direction identifier"
                    },
                    "dirName": {
                        "type": "string",
                        "description": "Direction headsign (e.g. 'A - B')"
                    },
                    "polyline": {
                        "type": "string",
                        "description": "Google-encoded geometry of the direction"
                    },
                    "trips": {
                        "type": "array",
                        "items": {
                            "type": "object",
                            "description": "Single trip keyed by its tripId; the value is the list of stop times for that trip (one per stop, same order as stops[]). The object may also contain wheelchairAccessible.",
                            "properties": {
                                "wheelchairAccessible": {
                                    "type": "integer",
                                    "description": "Wheelchair accessibility of the trip",
                                    "enum": [
                                        1,
                                        2
                                    ]
                                }
                            },
                            "additionalProperties": {
                                "type": "array",
                                "items": {
                                    "type": "string"
                                }
                            }
                        },
                        "description": "Schedule as a list of {\"<tripId>\": [stopTime, ...], \"wheelchairAccessible\": 1} objects, one stopTime per stop (same order as stops[]). wheelchairAccessible is optional. A single time 'HH:MM' is the departure; two times 'HH:MM,HH:MM' are arrival then departure (the vehicle waits at the stop). An optional '|PD' suffix flags GTFS boarding rules - P=pickup, D=drop-off, 1=forbidden, 0=allowed (e.g. '07:00,07:04|01' = arrives 07:00, departs 07:04, drop-off forbidden so boarding only). No suffix means both are allowed."
                    },
                    "inService": {
                        "type": "boolean",
                        "description": "Whether the route (or direction) currently operates"
                    },
                    "stops": {
                        "type": "array",
                        "items": {
                            "type": "object",
                            "properties": {
                                "stopHash1": {
                                    "type": "string",
                                    "description": "Stop identifier"
                                },
                                "countryIso": {
                                    "type": "string",
                                    "description": "Stop country used with stopHash1 for follow-up requests"
                                },
                                "stopName": {
                                    "type": "string",
                                    "description": "Human-readable stop name"
                                },
                                "stopLat": {
                                    "type": "number",
                                    "description": "Stop latitude in decimal degrees"
                                },
                                "countryUrl": {
                                    "type": "string",
                                    "description": "Country URL slug (e.g. 'uk')"
                                },
                                "stopLon": {
                                    "type": "number",
                                    "description": "Stop longitude in decimal degrees"
                                },
                                "wheelchairBoarding": {
                                    "type": "integer",
                                    "description": "Wheelchair accessibility of the stop",
                                    "enum": [
                                        1,
                                        2
                                    ]
                                },
                                "urlStopName": {
                                    "type": "string",
                                    "description": "URL-safe slug of the stop name"
                                }
                            },
                            "required": [
                                "stopHash1",
                                "stopName",
                                "stopLat",
                                "countryUrl",
                                "stopLon",
                                "urlStopName"
                            ]
                        },
                        "description": "Ordered stops of the direction (same order as each trip's times)"
                    }
                },
                "required": [
                    "dirHash",
                    "stops",
                    "dirName",
                    "polyline",
                    "inService",
                    "trips"
                ]
            },
            "description": "Directions of the route, each with its stops, geometry and schedule"
        }
    },
    "required": [
        "regionName",
        "routeInfo",
        "directions",
        "processingTimeMs"
    ]
}

Response Codes

200 Route card with directions, stops and schedule
400 Invalid or missing parameters / unknown regionName
404 Route not found
500 Internal server error