GET /api/v1/cities/{slug}/transit
Public-transit stops per city (DELFI and HVV GTFS)
Normalized public-transit stops for a city from the nationwide DELFI GTFS feed or the HVV feed in the canonical envelope. The data is prepared offline and kept as a per-city snapshot, so the request responds quickly without parsing the feed per request. Special cases: if both sources are disabled it returns 200 with source_status="disabled"; if no snapshot exists yet it returns 200 with source_status="not_ingested" and empty data, never a 5xx. Use q (name search) or near (proximity search) to find specific stops instead of fetching the full list.
Parameters
| Name | In | Required | Type | Description |
|---|---|---|---|---|
slug | path | yes | string | |
q | query | no | string | Case-insensitive substring filter on the stop name (stop_name), e.g. alsterdorf. |
near | query | no | string | "lat,lon"; returns only stops within the radius, sorted by distance ascending. Invalid values -> 400. |
radius_m | query | no | integer | Search radius for near in metres (default 1000). |
page | query | no | integer | Page number of the default pagination without q/near (default 50 entries, cap 200); meta.pagination reports total/returned/limit/offset/truncated. |
limit | query | no | integer | Entries per page of the default pagination without q/near (default 50, cap 200). |
Code samples
curl "https://infranode.dev/api/v1/cities/hamburg/transit"const res = await fetch("https://infranode.dev/api/v1/cities/hamburg/transit");
const data = await res.json();
console.log(data);import httpx
res = httpx.get("https://infranode.dev/api/v1/cities/hamburg/transit")
res.raise_for_status()
print(res.json())