myTTC API
Free Toronto TTC departures API with no key: upcoming streetcar, bus and subway times for any station or stop, grouped by route with branch names. Tested example included.
Endpoint tested and returned HTTP 200 on 2026-08-21
What is the myTTC API?
myTTC is a free, key-free API returning upcoming departures for Toronto Transit Commission stops and stations. Appending `.json` to any station page URL returns its stops, the routes serving each one, and the next departures with both a display time and a Unix timestamp.
The design is charmingly direct: every page on the site has a JSON twin, so `myttc.ca/finch_station` becomes `myttc.ca/finch_station.json` and you have an API. Stop identifiers are readable slugs rather than opaque numbers, which makes URLs guessable and debugging much easier than with a conventional transit feed.
Where it earns its keep is branch handling. Toronto routes split constantly — the 36 Finch West runs as 36A, 36B and 36D to different destinations — and this API exposes that in the `shape` field of every departure, so a passenger sees which branch is actually coming rather than three identical rows labelled "36". Departure times are given twice, once as a compact display string like "8:03a" and once as `departure_timestamp` in Unix seconds; use the latter for anything computed.
Quick facts
- Base URL
https://myttc.ca- Authentication
- No API key or account. Community-run service, not affiliated with the Toronto Transit Commission.
- Rate limit
- No published quota. It is a volunteer-run site, so poll gently — once a minute per stop is plenty.
- Pricing
- Free.
- CORS
- Not enabled — call it from your server
- Official docs
- Read the docs
How to use the myTTC API
Every request below was executed against the live API on 2026-08-21, and the response shown is the real body it returned — not an illustration.
1. Fetch upcoming departures for a Toronto station
GET https://myttc.ca/finch_station.json
curl 'https://myttc.ca/finch_station.json'const res = await fetch("https://myttc.ca/finch_station.json");
if (!res.ok) throw new Error(`Request failed: ${res.status}`);
const data = await res.json();
console.log(data);import requests
res = requests.get("https://myttc.ca/finch_station.json", timeout=20)
res.raise_for_status()
print(res.json()){
"name": "Finch Station",
"uri": "finch_station",
"stops": [
{
"agency": "Toronto Transit Commission",
"uri": "finch_station_bishop_entrance",
"name": "Finch Station Bishop Entrance",
"routes": []
},
{
"agency": "Toronto Transit Commission",
"uri": "finch_station_bus_bay",
"name": "Finch Station Bus Bay",
"routes": [
{
"route_group_id": "32",
"uri": "36_finch_west",
"name": "36 Finch West",
"stop_times": [
{
"service_id": 1,
"departure_time": "8:03a",
"departure_timestamp": 1787299389,
"shape": "36A Finch West To Kipling"
},
{
"service_id": 1,
"departure_time": "8:03a",
"departure_timestamp": 1787299389,
"shape": "36B Finch West To Humberwood"
},
{
"service_id": 1,
"departure_time": "8:09a",
"departure_timestamp": 1787299749,
"shape": "36D Finch West To Weston Road And Milvan"
},
{
"service_id": 1,
"departure_time": "8:11a",
"departure_timestamp": 1787299869,
"shape": "36A Finch West To Kipling"
},
{
"service_id": 1,
"departure_time": "8:11a",
"departure_timestamp": 1787299869,
"shape": "36B Finch West To Humberwood"
},
{
"service_id": 1,Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
(station slug) | path | Required | `/{station_slug}.json` returns the station with its stops and departures. finch_station |
(stop slug) | path | Optional | A specific stop within a station, also with `.json` appended. finch_station_bus_bay |
(route) | path | Optional | Route pages such as `/36_finch_west.json` return the route's stops. 36_finch_west |
Response fields
name / uristring- Station name and its slug, which is the identifier used in URLs.
stopsarray- Individual stops within the station — bus bays, entrances, platforms.
stops[].agencystring- Operating agency, normally "Toronto Transit Commission".
stops[].routesarray- Routes serving this stop. Empty for entrances with no service of their own.
routes[].namestring- Route name including its number, for example "36 Finch West".
routes[].route_group_idstring- Groups branches of the same route together.
stop_times[].departure_timestring- Display form such as "8:03a". For presentation only.
stop_times[].departure_timestampinteger- Unix seconds for the same departure. Use this for any calculation.
stop_times[].shapestring- The specific branch and destination, such as "36A Finch West To Kipling" — the field that distinguishes branches.
stop_times[].service_idinteger- Service calendar identifier, distinguishing weekday from weekend patterns.
What you can build with the myTTC API
- Show the next departures at a Toronto station
- Distinguish route branches so passengers board the right vehicle
- Drive a personal or office departure display
- Alert when the next vehicle to a specific destination is due
- Explore TTC stop and route structure with human-readable slugs
Common errors and how to fix them
404 on a station slug
The slug is wrong.
Fix: Slugs are lowercase with underscores — `finch_station`, not `Finch Station`. Browse the site to confirm one before hard-coding it.
Departures for a branch you cannot use
Toronto routes split into lettered branches serving different destinations.
Fix: Read the `shape` field and filter on it. Showing "36" three times without the branch is actively misleading.
Times parse into the wrong day
`departure_time` is a compact display string with no date.
Fix: Use `departure_timestamp`, which is unambiguous Unix seconds. Reserve the display string for rendering.
Empty routes array on a stop
Some stops are entrances or exits with no service of their own.
Fix: Skip stops whose `routes` array is empty rather than rendering a blank row.
myTTC API — frequently asked questions
Is the myTTC API free?
Yes, free with no key or account. It is a community-run service rather than an official TTC product, so keep polling light.
How do I find a station identifier?
Slugs are the URL segments on myttc.ca itself, lowercase with underscores. Any page becomes JSON by appending `.json`, which makes identifiers easy to discover by browsing.
What does the shape field tell me?
Which branch of a route a departure belongs to, with its destination — "36A Finch West To Kipling". Toronto routes branch heavily, so this is what stops a passenger boarding a vehicle going somewhere else.
Is this an official TTC API?
No. It is an independent community project. The TTC's own real-time data flows through NextBus and GTFS feeds, which are also open but structured very differently.
Tools that pair with this API
Unix Timestamp Converter
Unix epoch time converter with live current epoch, seconds, milliseconds and microseconds support, and a reference table of common epoch values.
Timestamp Converter
Convert timestamps to human-readable dates and dates back to timestamps. Auto-detects seconds vs milliseconds, shows local, UTC and ISO 8601 formats.
Time Zone Converter
Convert any date and time between world time zones. See UTC offsets, daylight saving handled automatically, and compare multiple zones at once.
myTTC is an independent third-party service and is not affiliated with ByteTools or ByteVancer. Details on this page were verified on 2026-08-21; always check the official documentation before relying on this API in production, as terms and limits can change.