New API is in preview! Subject to change. Send feedback to contact@mtd.dev

Stops

Boarding Points

A boarding point is where a passenger may board or alight from the bus. A boarding point corresponds to a bus stop sign. All passenger journeys start and end at a boarding point.

Stop Group

A stop group is a collection of one or more boarding points in a logical or geographic grouping. For example, Illini Union (IU) is a collection of four boarding points.

Stop ID Format

The Stop ID for Transit Plaza (SW Platform) is PLAZA:3

PLAZA:3Stop GroupSeparatorBoarding Point

iStops

iStops are special University of Illinois campus bus stops where fare is not required to board.

API Definitions

Get a stop

Path Parameters

stopId

string

required

The id of stop, with or without a boarding point.

Query Parameters

No query parameters.

Response Object

type

integer

Stop type discriminator.
ValueDefinition
0Stop Group
1Boarding Point
id

string

Stable identifier for this stop.
name

string

Human-readable name for this stop.
stopCode

string | null

The 4-digit stop code displayed on bus stop signs. Used for MTD's SMS Service.
url

string | null

Link to the stop info page on MTD's website.
isAccessible

boolean | null

True if wheelchair boarding is possible. False if not. Null if unknown.
location

object

Geographic location of this stop.

latitude

float

Latitude coordinate.
longitude

float

Longitude coordinate.
isStation

boolean

True if this stop is a station or terminal rather than a typical street stop.
city

string | null

City where the stop is located. Either "Champaign", "Urbana", or "Savoy".
boardingPoints

Array of boardingPoints

Individual boarding locations within this stop group.

subName

string

Sub-name describing the boarding point location, e.g. "SE Corner". Usually contained in parentheses.
id

string

Stable identifier for this boarding point.
name

string

Full name of the boarding point.
stopCode

string | null

The 4-digit stop code displayed on bus stop signs. Used for MTD's SMS Service.
url

string | null

Link to the boarding point info page on MTD's website.
isAccessible

boolean | null

True if wheelchair boarding is possible. False if not. Null if unknown.
location

object

Geographic location of this boarding point.

latitude

float

Latitude coordinate.
longitude

float

Longitude coordinate.
GEThttps://api.mtd.dev/stops/{stopId}
curl -X GET "https://api.mtd.dev/stops/{stopId}" \
  -H "X-ApiKey: YOUR_API_KEY"
Sample Response Object
{
	"result": {
		"type": 0,
		"isStation": false,
		"city": "Champaign",
		"boardingPoints": [
			{
				"subName": "NW Corner",
				"id": "MJRPSPCT:4",
				"name": "Meijer Drive & Prospect (NW Corner)",
				"stopCode": "4618",
				"url": "https://mtd.org/maps-and-schedules/bus-stops/info/mjrpspct-4/",
				"isAccessible": true,
				"location": {
					"latitude": 40.14673667000001,
					"longitude": -88.25807167
				}
			}
		],
		"id": "MJRPSPCT",
		"name": "Meijer Drive & Prospect",
		"stopCode": "4618",
		"url": "https://mtd.org/maps-and-schedules/bus-stops/info/mjrpspct/",
		"isAccessible": true,
		"location": {
			"latitude": 40.146605835,
			"longitude": -88.2581525
		}
	},
	"error": null
}

Get a stop's departures

Path Parameters

stopId

string

required

The id of stop, with or without a boarding point.

Query Parameters

routes

string

optional

Semicolon-separated list of route ids to filter by.
time

integer

optional

The time window from now, in minutes, to fetch departures for. Default is 30 minutes.

Response Object

stopId

string

The id of the boarding point.
headsign

string | null

The destination headsign displayed for this departure.
trip

object | null

Trip details associated with this departure, when available.

tripId

string | null

The trip id associated with this departure.
direction

object | null

The direction of travel for this departure, when available.

id

integer | null

Direction id for this trip when known (typically 0 or 1).
name

string

Direction display name.
shortName

string | null

Short direction code, when available.
blockId

string | null

The block identifier associated with this departure's trip.
recordedTime

string

The timestamp when this departure snapshot was recorded.
scheduledDeparture

string | null

The scheduled departure time from timetable data.
estimatedDeparture

string | null

The realtime-estimated departure time.
vehicleId

string | null

The vehicle id currently assigned to this departure, when available.
originStopId

string | null

The origin stop id for this trip.
destinationStopId

string | null

The destination stop id for this trip.
location

object | null

The current vehicle location for this departure, when available.

latitude

float

Latitude coordinate.
longitude

float

Longitude coordinate.
shapeId

string | null

The shape id used by this trip.
minutesTillDeparture

integer

The number of minutes until departure.
isRealTime

boolean

Whether this departure uses realtime data.
isHopper

boolean

Whether this departure is marked as a hopper trip.
destination

string | null

A destination label for this departure.
departsIn

string

A human-readable departure countdown.
isIStop

boolean

Whether the stop is an I-Stop location.
uniqueId

string

A unique identifier for this departure record.
route

object | null

Route details associated with this departure, when available.

id

string

Stable identifier for the route.
routeGroupId

string | null

Stable identifier for the route group.
gtfsRouteId

string

Stable GTFS route identifier.
longName

string | null

Long route name.
shortName

string | null

Short route name or number.
color

string | null

Hex route color code without #.
textColor

string | null

Hex text color code without #.
GEThttps://api.mtd.dev/stops/{stopId}/departures
curl -X GET "https://api.mtd.dev/stops/{stopId}/departures?routes=example&time=8" \
  -H "X-ApiKey: YOUR_API_KEY"
Sample Response Object
{
	"result": [
		{
			"stopId": "IT:1",
			"headsign": "6E ORANGE",
			"trip": {
				"tripId": "[@2.0.86175868@][1458585713139]/65__O4_RUBY_MF",
				"direction": {
					"id": 0,
					"name": "East",
					"shortName": "E"
				}
			},
			"blockId": "O4 RUBY MF",
			"recordedTime": "2026-04-08T18:17:23.923+00:00",
			"scheduledDeparture": "2026-04-08T18:10:00+00:00",
			"estimatedDeparture": "2026-04-08T18:19:28+00:00",
			"vehicleId": "1730",
			"originStopId": "RNDBRNRD:2",
			"destinationStopId": "BTSLRMN:2",
			"location": {
				"latitude": 40.11625,
				"longitude": -88.2437
			},
			"shapeId": "[@2.0.86175868@]7",
			"minutesTillDeparture": 2,
			"isRealTime": true,
			"isHopper": false,
			"destination": "BTSLRMN:2",
			"departsIn": "2 mins",
			"isIStop": false,
			"uniqueId": "v-1730_t-[@2.0.86175868@][1458585713139]/65__O4_RUBY_MF_b-O4 RUBY MF_sd-20260408-181000",
			"route": {
				"id": "45eb37e3-c484-469f-89c9-8eb9ec9a43ec",
				"routeGroupId": "3d9a07bd-9342-48fd-84ab-72b8ab16ec7b",
				"gtfsRouteId": "ORANGE",
				"longName": "Orange",
				"shortName": "6",
				"color": "f99f2a",
				"textColor": "000000"
			}
		},
		{
			"stopId": "IT:1",
			"headsign": "5E GREEN HOPPER",
			"trip": {
				"tripId": "[@7.0.41101146@][3][1237929928359]/6__GNX2_MF",
				"direction": {
					"id": 0,
					"name": "East",
					"shortName": "E"
				}
			},
			"blockId": "GNX2 MF",
			"recordedTime": "2026-04-08T18:17:23.923+00:00",
			"scheduledDeparture": "2026-04-08T18:23:00+00:00",
			"estimatedDeparture": "2026-04-08T18:24:08+00:00",
			"vehicleId": "2425",
			"originStopId": "PKLN:1",
			"destinationStopId": "WASHLRMN:7",
			"location": {
				"latitude": 40.112633,
				"longitude": -88.262167
			},
			"shapeId": "5E HOPPER 79",
			"minutesTillDeparture": 6,
			"isRealTime": true,
			"isHopper": true,
			"destination": "WASHLRMN:7",
			"departsIn": "6 mins",
			"isIStop": false,
			"uniqueId": "v-2425_t-[@7.0.41101146@][3][1237929928359]/6__GNX2_MF_b-GNX2 MF_sd-20260408-182300",
			"route": {
				"id": "294fb25d-538f-466d-b90e-a34317dceea1",
				"routeGroupId": "fdfeb28c-61d4-463e-a708-51a7f96928b7",
				"gtfsRouteId": "GREENHOPPER",
				"longName": "Green",
				"shortName": "5",
				"color": "008063",
				"textColor": "ffffff"
			}
		}
	],
	"error": null
}

Get a stop's route groups

Path Parameters

stopId

string

required

The id of stop, with or without a boarding point.

Query Parameters

No query parameters.

Response Object

id

string

Stable identifier for this route group.
sortNumber

integer

Number used to sort route groups in logical order. Lower numbers should appear first in a list.
routeGroupName

string

The route name. Examples: "Silver Limited", "Gold", "Blue".
color

string

Hex color code used to represent this route group. # sign is omitted.
textColor

string

Hex text color code for use on top of the route color. # sign is omitted.
routes

Array of routes

The routes within this route group.

id

string

Stable identifier for this route.
number

string | null

Route name number. Example: "50".
firstTrip

string

The time of the first trip of the day for this route.
lastTrip

string

The time of the last trip of the day for this route.
lastTripAfterMidnight

boolean

True if the last trip of the day is after midnight.
dayType

object

The days and times of day this route is active.

dayPart

string

The part of day. Examples: "Weekday", "Saturday", "Gameday".
timePart

string

The time of day. Examples: "Day", "Night", "Late Night".
daysOfWeek

string

A zero-indexed comma-separated list of ints representing the days of the week this dayType is active. Examples: "1,2,3,4,5" for weekdays only, "0,6" for weekends only.
ValueDefinition
0Sunday
1Monday
2Tuesday
3Wednesday
4Thursday
5Friday
6Saturday
sortOrder

integer

Number used to sort day types in logical order. Lower numbers should appear first in a list.
gtfsRoutes

string[]

GTFS route IDs associated with this route.
routeGroupId

string

The ID of the route group this route belongs to.
GEThttps://api.mtd.dev/stops/{stopId}/route-groups
curl -X GET "https://api.mtd.dev/stops/{stopId}/route-groups" \
  -H "X-ApiKey: YOUR_API_KEY"
Sample Response Object
{
	"result": [
		{
			"id": "9773e862-95fa-4697-9e94-edb6d59bdd75",
			"sortNumber": 1,
			"routeGroupName": "Yellow",
			"color": "fcee1f",
			"textColor": "000000",
			"routes": [
				{
					"id": "ac3fc3d0-37af-468f-8b24-d061de7bea93",
					"number": "1",
					"firstTrip": "06:10:00",
					"lastTrip": "19:19:00",
					"lastTripAfterMidnight": false,
					"dayType": {
						"dayPart": "Weekday",
						"timePart": "Day",
						"daysOfWeek": "1,2,3,4,5",
						"sortOrder": 100
					},
					"gtfsRoutes": ["YELLOW", "YELLOW ALT", "YELLOWHOPPER"]
				}
			]
		}
	],
	"error": null
}

Get a stop's schedule

Path Parameters

stopId

string

required

The id of stop, with or without a boarding point.

Query Parameters

routeId

string

optional

Semicolon-separated list of route ids to filter by.
date

string

optional

Date in the format YYYY-MM-DD to filter by.

Response Object

stopId

string

The stop ID this stop time belongs to.
tripId

string

The trip ID this stop time belongs to.
routeId

string | null

The route ID this stop time belongs to.
gtfsRouteId

string | null

The GTFS route ID this stop time belongs to.
direction

object | null

The direction of travel for this trip.

id

integer | null

Direction id (0 or 1).
name

string

Direction display name.
shortName

string | null

Short direction code.
stopSequence

integer | string

The sequential order of this stop within the trip, 0-indexed.
arrivalTime

string

The scheduled arrival time at the stop. Do not display this publicly! Instead, use departureTime.
arrivalPastMidnight

boolean

True if this arrival is past midnight on a trip that began before midnight.
departureTime

string

The scheduled departure time from the stop. This is the time shown in public-facing passenger information.
departurePastMidnight

boolean

True if this departure is past midnight on a trip that began before midnight.
stopHeadsign

string | null

Stop-specific headsign override, if applicable.
GEThttps://api.mtd.dev/stops/{stopId}/schedule
curl -X GET "https://api.mtd.dev/stops/{stopId}/schedule?routeId=example&date=example" \
  -H "X-ApiKey: YOUR_API_KEY"
Sample Response Object
{
	"result": [
		{
			"stopId": "IT:5",
			"tripId": "[@124.0.92247832@][1484327725398]/20__Y5_SA",
			"routeId": "26e0cf42-28e7-40f8-af71-4ff786d6d183",
			"gtfsRouteId": "YELLOW EVENING SATURDAY",
			"direction": {
				"id": 1,
				"name": "South",
				"shortName": "S"
			},
			"stopSequence": 28,
			"arrivalTime": "2026-02-27T00:00:00",
			"arrivalPastMidnight": true,
			"departureTime": "2026-02-27T00:00:00",
			"departurePastMidnight": true,
			"stopHeadsign": "First & Gregory"
		},
		{
			"stopId": "IT:1",
			"tripId": "[@124.0.92344750@][1484579800344]/84__GN2_UISA",
			"routeId": "accac4ed-dba6-4714-b5c7-964f53fa2a84",
			"gtfsRouteId": "GREEN LATE NIGHT SATURDAY",
			"direction": {
				"id": 0,
				"name": "East",
				"shortName": "E"
			},
			"stopSequence": 1,
			"arrivalTime": "2026-02-27T00:00:00",
			"arrivalPastMidnight": true,
			"departureTime": "2026-02-27T00:00:00",
			"departurePastMidnight": true,
			"stopHeadsign": "Lincoln Square"
		}
	],
	"error": null
}

Get a stop's trips

Path Parameters

stopId

string

required

The id of stop, with or without a boarding point.

Query Parameters

No query parameters.

Response Object

id

string

Stable identifier for this trip.
blockId

string

Stable identifier for the block this trip is part of.
shapeId

string

Stable identifier for this trip's shape.
headsign

string

The headsign displayed on the vehicle for this trip.
direction

object | null

The direction of travel for this trip.

id

integer | null

Direction id (0 or 1).
name

string

Direction display name.
shortName

string | null

Short direction code.
route

object | null

Route details associated with this trip.

id

string

Stable identifier for the route.
routeGroupId

string | null

Stable identifier for the route group the route belongs to.
gtfsRouteId

string

Stable GTFS route identifier.
longName

string | null

Long route name.
shortName

string | null

Short route name or number.
color

string | null

Hex route color code without #.
textColor

string | null

Hex text color code without #.
GEThttps://api.mtd.dev/stops/{stopId}/trips
curl -X GET "https://api.mtd.dev/stops/{stopId}/trips" \
  -H "X-ApiKey: YOUR_API_KEY"
Sample Response Object
{
	"result": [
		{
			"id": "[@6.0.66478040@][42][1750109522515]/0__R1_SA",
			"blockId": "R1 SA",
			"shapeId": "[@6.0.66478040@]18",
			"headsign": "Illini Union",
			"direction": {
				"id": 1,
				"name": "Urbana",
				"shortName": "U"
			},
			"route": {
				"id": "93db236e-0d00-42d7-be2a-ca0ecaedf813",
				"gtfsRouteId": "RED SATURDAY",
				"longName": "Red",
				"shortName": "20",
				"color": "e7131a",
				"textColor": "ffffff"
			}
		},
		{
			"id": "[@6.0.66478040@][42][1749224458239]/30__R1_SA",
			"blockId": "R1 SA",
			"shapeId": "[@6.0.66478040@]17",
			"headsign": "Urbana Meijer",
			"direction": {
				"id": 1,
				"name": "Urbana",
				"shortName": "U"
			},
			"route": {
				"id": "93db236e-0d00-42d7-be2a-ca0ecaedf813",
				"gtfsRouteId": "RED SATURDAY",
				"longName": "Red",
				"shortName": "20",
				"color": "e7131a",
				"textColor": "ffffff"
			}
		}
	],
	"error": null
}

Get all stops

Path Parameters

No path parameters.

Query Parameters

excludeBoardingPoints

boolean

optional

If true, excludes boarding points from response, and only returns stop groups.

Response Object

type

integer

Stop type discriminator.
ValueDefinition
0Stop Group
1Boarding Point
id

string

Stable identifier for this stop.
name

string

Human-readable name for this stop.
stopCode

string | null

The 4-digit stop code displayed on bus stop signs. Used for MTD's SMS Service.
url

string | null

Link to the stop info page on MTD's website.
isAccessible

boolean | null

True if wheelchair boarding is possible. False if not. Null if unknown.
location

object

Geographic location of this stop.

latitude

float

Latitude coordinate.
longitude

float

Longitude coordinate.
isStation

boolean

True if this stop is a station or terminal rather than a typical street stop.
city

string | null

City where the stop is located. Either "Champaign", "Urbana", or "Savoy".
boardingPoints

Array of boardingPoints

Individual boarding locations within this stop group.

subName

string

Sub-name describing the boarding point location, e.g. "SE Corner". Usually contained in parentheses.
id

string

Stable identifier for this boarding point.
name

string

Full name of the boarding point.
stopCode

string | null

The 4-digit stop code displayed on bus stop signs. Used for MTD's SMS Service.
url

string | null

Link to the boarding point info page on MTD's website.
isAccessible

boolean | null

True if wheelchair boarding is possible. False if not. Null if unknown.
location

object

Geographic location of this boarding point.

latitude

float

Latitude coordinate.
longitude

float

Longitude coordinate.
GEThttps://api.mtd.dev/stops
curl -X GET "https://api.mtd.dev/stops?excludeBoardingPoints=false" \
  -H "X-ApiKey: YOUR_API_KEY"
Sample Response Object
{
	"result": [
		{
			"type": 0,
			"isStation": false,
			"city": "Urbana",
			"boardingPoints": [
				{
					"subName": "NE Corner",
					"id": "150DALE:1",
					"name": "U.S. 150 & Dale (NE Corner)",
					"stopCode": "0114",
					"url": "https://mtd.org/maps-and-schedules/bus-stops/info/150dale-1/",
					"isAccessible": true,
					"location": {
						"latitude": 40.11451167,
						"longitude": -88.18067333
					}
				},
				{
					"subName": "South Side",
					"id": "150DALE:3",
					"name": "U.S. 150 & Dale (South Side)",
					"stopCode": "0114",
					"url": "https://mtd.org/maps-and-schedules/bus-stops/info/150dale-3/",
					"isAccessible": true,
					"location": {
						"latitude": 40.11450333,
						"longitude": -88.18084833
					}
				}
			],
			"id": "150DALE",
			"name": "U.S. 150 & Dale",
			"stopCode": "0114",
			"url": "https://mtd.org/maps-and-schedules/bus-stops/info/150dale/",
			"isAccessible": true,
			"location": {
				"latitude": 40.1145075,
				"longitude": -88.18076083
			}
		},
		{
			"type": 0,
			"isStation": false,
			"city": "Urbana",
			"boardingPoints": [
				{
					"subName": "NE Far Side",
					"id": "150DOD:5",
					"name": "U.S. 150 & Dodson (NE Far Side)",
					"stopCode": "3695",
					"url": "https://mtd.org/maps-and-schedules/bus-stops/info/150dod-5/",
					"isAccessible": true,
					"location": {
						"latitude": 40.11415833,
						"longitude": -88.173105
					}
				}
			],
			"id": "150DOD",
			"name": "U.S. 150 & Dodson Dr.",
			"stopCode": "3695",
			"url": "https://mtd.org/maps-and-schedules/bus-stops/info/150dod/",
			"isAccessible": true,
			"location": {
				"latitude": 40.11415833,
				"longitude": -88.173105
			}
		}
	],
	"error": null
}

Search for a stop

Path Parameters

No path parameters.

Query Parameters

query

string

required

The search query.

Response Object

stopId

string

The stop ID.
name

string

The full text name of the stop, without the sub-name.
subName

string | null

The sub-name of the stop, if applicable. Usually displayed within parentheses.
highlightedName

string

The name with the matched query portion surrounded in square brackets.
type

integer

Stop type discriminator.
ValueDefinition
0Stop Group
1Boarding Point
location

object

The geographic location of the stop.

latitude

float

Latitude coordinate.
longitude

float

Longitude coordinate.
city

string | null

The city where the stop is located.
isIStop

boolean

Whether this is an I-Stop location.
stopCode

string | null

The stop code identifier.
accessible

boolean

Whether the stop is accessible.
GEThttps://api.mtd.dev/stops/search
curl -X GET "https://api.mtd.dev/stops/search?query=union" \
  -H "X-ApiKey: YOUR_API_KEY"
Sample Response Object
{
	"result": [
		{
			"stopId": "IU",
			"name": "Illini Union",
			"subName": null,
			"highlightedName": "Illini [Union]",
			"type": 1,
			"location": {
				"latitude": 40.110380917499995,
				"longitude": -88.2274086675
			},
			"city": "Urbana",
			"isIStop": true,
			"stopCode": "2405",
			"accessible": true
		},
		{
			"stopId": "IU:9",
			"name": "Illini Union",
			"subName": "Island Shelter",
			"highlightedName": "Illini [Union] (Island Shelter)",
			"type": 2,
			"location": {
				"latitude": 40.110456,
				"longitude": -88.227023
			},
			"city": "Urbana",
			"isIStop": true,
			"stopCode": "2405",
			"accessible": true
		},
		{
			"stopId": "IU:1",
			"name": "Illini Union",
			"subName": "South Side Shelter",
			"highlightedName": "Illini [Union] (South Side Shelter)",
			"type": 2,
			"location": {
				"latitude": 40.110364,
				"longitude": -88.226834
			},
			"city": "Urbana",
			"isIStop": true,
			"stopCode": "2405",
			"accessible": true
		},
		{
			"stopId": "IU:2",
			"name": "Illini Union",
			"subName": "North Side Shelter",
			"highlightedName": "Illini [Union] (North Side Shelter)",
			"type": 2,
			"location": {
				"latitude": 40.11044667,
				"longitude": -88.22740167
			},
			"city": "Urbana",
			"isIStop": true,
			"stopCode": "2405",
			"accessible": true
		},
		{
			"stopId": "BDWYUNI",
			"name": "Broadway & University",
			"subName": null,
			"highlightedName": "Broadway & University",
			"type": 1,
			"location": {
				"latitude": 40.11619139,
				"longitude": -88.20756805666666
			},
			"city": "Urbana",
			"isIStop": false,
			"stopCode": "3110",
			"accessible": true
		}
	],
	"error": null
}
* * *