BYTETOOLS

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.

No API key requiredCORS enabledHTTPSFree tier

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
curl 'https://api.metro.net/LACMTA/route_overview/10'
JavaScript (fetch)
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);
Python (requests)
import requests

res = requests.get("https://api.metro.net/LACMTA/route_overview/10", timeout=20)
res.raise_for_status()
print(res.json())
Response — HTTP 200
[
  {
    "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

ParameterTypeRequiredDescription
agencypathRequiredAgency code. `LACMTA` is LA Metro bus and rail; `LACMTA_Rail` scopes to rail only. LACMTA
route_overviewpathOptional`/{agency}/route_overview/{route}` returns descriptive detail for one route. 10
(routes)pathOptional`/{agency}/routes/` lists routes for the agency. routes
(stops)pathOptionalStop 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

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.