LA Metro API
Free Los Angeles Metro API with no key: bus and rail route details, terminals, directions, official colours and timetable PDF links. Tested example and live response.
Endpoint tested and returned HTTP 200 on 2026-08-21
What is the LA Metro API?
The LA Metro API is Los Angeles County Metropolitan Transportation Authority's free, key-free service. It returns route information for the bus and rail network including short and long names, terminals, direction descriptions, official line colours and links to timetable PDFs.
Los Angeles Metro runs one of the largest bus fleets in the United States alongside a growing rail network, and this API is the reference layer over it. The route overview is more descriptive than most agencies bother with: alongside identifiers you get the corridors a line follows in `arterials`, both terminals by name, and separate human-readable descriptions for each direction of travel.
The field naming is inconsistent in a way that will trip you up. `route_short_name` holds "10/48" — the public-facing designation, which can combine two interlined services — while `route_long_name` is the far less specific "Metro Local Line". Meanwhile `route_desc` carries an all-caps operational corridor description. For a passenger interface, `route_short_name` plus `terminal_1` and `terminal_2` reads better than either name field alone. Note that `route_id` appends an internal schedule revision suffix, so "10-13172" changes between timetable versions while `route_code` does not.
Quick facts
- Base URL
https://api.metro.net- Authentication
- No API key or account. Public agency data published by LA Metro.
- Rate limit
- No published quota. Route data changes only with timetable revisions, so cache it.
- Pricing
- Free.
- CORS
- Enabled — callable directly from browser JavaScript
- Official docs
- Read the docs
How to use the LA Metro 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 route details for an LA Metro line
GET https://api.metro.net/LACMTA/route_overview/10
curl 'https://api.metro.net/LACMTA/route_overview/10'const res = await fetch("https://api.metro.net/LACMTA/route_overview/10");
if (!res.ok) throw new Error(`Request failed: ${res.status}`);
const data = await res.json();
console.log(data);import requests
res = requests.get("https://api.metro.net/LACMTA/route_overview/10", timeout=20)
res.raise_for_status()
print(res.json())[
{
"route_id": "10-13172",
"route_code": "10",
"route_code_padded": 10,
"route_short_name": "10/48",
"route_long_name": "Metro Local Line",
"route_desc": "W HOLLYWOOD-DTWN LA -AVALON STA VIA MELROSE-AVALON",
"route_type": "bus",
"route_color": "E16710",
"route_text_color": null,
"route_url": null,
"agency_id": "LACMTA",
"line_id": 10,
"alt_id": "10/48",
"long_name": null,
"description": "Northbound to DTLA-Southbound to Avalon Station ",
"pdf_file_url": "https://cdn.beta.metro.net/wp-content/uploads/2022/12/10171216/010-048_TT_12-11-22.pdf",
"pdf_file_link": "https://www.metro.net/line-override/22-12-line-010-048/attachment/010-048_tt_12-11-22/",
"iconography_url": null,
"terminal_1": "West Hollywood",
"terminal_2": "Downtown LA",
"arterials": "Temple St, Melrose Av",
"description_0": "West Hollywood to Downtown LA",
"description_1": "Downtown LA to West Hollywood",
"display_order": 2.0,
"travel_direction_0": "Eastbound",
"travel_direction_1": "Westbound",
"is_active": true
}
]Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
agency | path | Required | Agency code. `LACMTA` is LA Metro bus and rail; `LACMTA_Rail` scopes to rail only. LACMTA |
route_overview | path | Optional | `/{agency}/route_overview/{route}` returns descriptive detail for one route. 10 |
(routes) | path | Optional | `/{agency}/routes/` lists routes for the agency. routes |
(stops) | path | Optional | Stop endpoints return stop locations for a route. |
Response fields
route_idstring- Internal identifier with a schedule revision suffix, such as "10-13172". It changes between timetable versions.
route_codestring- Stable public route number. Use this rather than `route_id` for anything persisted.
route_short_namestring- Public designation, which may combine interlined services — "10/48".
route_long_namestring- Service category such as "Metro Local Line", not a specific route description.
route_descstring- All-caps operational corridor description.
route_typestring- `bus` or `rail`.
route_color / route_text_colorstring- Official hex colours without a leading hash. `route_text_color` is frequently null.
terminal_1 / terminal_2string- The two endpoints of the line by name — the clearest way to describe a route to a passenger.
arterialsstring- Major streets the route follows, useful for search and for describing coverage.
description_0 / description_1string- Direction descriptions, paired with `travel_direction_0` and `travel_direction_1`.
pdf_file_urlstring- Direct link to the printable timetable PDF.
is_activeboolean- Whether the route is currently in service. Discontinued routes remain in the data.
What you can build with the LA Metro API
- Build an LA Metro route browser with official line colours
- Show route endpoints and corridors in a trip planner
- Link passengers to the printable timetable for a line
- Filter to active routes when building a menu
- Separate bus and rail using the agency scope
Common errors and how to fix them
404 on a route path
The agency segment is missing or wrong.
Fix: The path is `/{agency}/route_overview/{route}`, with `LACMTA` as the agency. There is no agency-less form.
Stored route ids stop matching
`route_id` carries a schedule revision suffix that changes with each timetable.
Fix: Persist `route_code` instead. It is the stable public number.
Colours render as default styling
Hex values omit the leading hash, and `route_text_color` is often null.
Fix: Prepend `#` and supply a fallback text colour. Black or white chosen by contrast against `route_color` works well.
A discontinued route still appears
Retired routes remain in the dataset.
Fix: Check `is_active` before showing a route to a passenger.
LA Metro API — frequently asked questions
Is the LA Metro API free?
Yes, free with no key or account. It is public agency data published by the Los Angeles County Metropolitan Transportation Authority.
Why does route_long_name say "Metro Local Line"?
Because it names the service category, not the route. LA Metro classifies lines as Local, Rapid, Express and so on, and the route-specific description lives in `route_desc`, `terminal_1` and `terminal_2` instead.
Which identifier should I store?
`route_code`. The `route_id` field appends an internal schedule revision suffix that changes whenever the timetable is republished, which silently breaks anything keyed on it.
Does it cover rail as well as buses?
Yes. Use `LACMTA` for the whole network or `LACMTA_Rail` to scope to rail, and the `route_type` field distinguishes bus from rail on each record.
Tools that pair with this API
JSON Formatter
Format, beautify and minify JSON online with 2-space, 4-space or tab indentation. Sort keys alphabetically and catch syntax errors instantly — free and private.
JSON to CSV Converter
Convert a JSON array of objects to CSV online. Automatic column headers from the union of all keys, delimiter choice and proper quoting — all in-browser.
URL Encoder
Percent-encode text for URLs instantly. Switch between encodeURIComponent and encodeURI modes, see live output and copy the result. Free URL encoder.
LA Metro 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.