Transport for London
App · Travel & Places · 15 actions
Read London's transport network through TfL's Unified API, the same interface behind TfL's own apps: live line status with the reason for every delay, the arrivals board at any stop, station closures and lift outages, published timetables, the stops and running order of every line, the journey planner with fares and step-free options, road delays, Santander Cycles availability and the London air quality forecast. Lines, stations, modes and roads are dropdowns loaded from TfL, so a step picks a station by name rather than by code. Needs a free TfL API key. Disclaimer: this is an independent integration built on TfL's open data. It is not affiliated with, endorsed by, or sponsored by Transport for London; TfL and its marks are the property of Transport for London.
Actions
| Action | What it does |
|---|---|
| Check line status | Check whether named lines are running, and why they are not. |
| Check road delays | Check the main roads TfL manages for exceptional delays: the A roads, the North and South Circulars, the river crossings. |
| Check status across a whole mode | Check every line of a whole way of travelling at once: the entire Tube, the Overground, the DLR, the trams, the buses. |
| Find Santander Cycles nearby | Find the cycle hire docking stations near a point and how many bikes and empty spaces each one has right now, split between standard bikes and e-bikes. |
| Find stops near a place | Find the stops within walking distance of a point, nearest first, each with how many metres away it is. |
| Get a line's stops in order | The stops of a line in the order it calls at them, one way round, with each branch listed separately. |
| Get disruptions on a line | Read the disruptions TfL has posted against named lines, in full. |
| Get live arrivals at a stop | Read the live board at a stop: every train, tram or bus due, how many minutes away it is, where it is heading and which platform it comes into. |
| Get London air quality | Today's and tomorrow's air pollution forecast for London, as a band from Low to Very High, with the reading broken down by pollutant. |
| Get station closures and lift outages | Find out what is wrong with the stations themselves rather than the trains: closed stations, entrances shut, lifts and escalators out of service, step-free access interrupted. |
| Get stop details | Everything TfL holds about one stop: which lines call there, the fare zone, the address and phone number, how many lifts, escalators and gates it has, whether there is Wi-Fi or a toilet, and the full accessibility notes including whether step-free access is by lift. |
| Get the published timetable | Read the published departure times from one stop on one line, grouped the way TfL publishes them: weekdays, Friday, Saturday and Sunday each get their own list, with the first and last departure of each. |
| List the stops on a line | Every stop a line calls at, with its fare zone, position and the other lines that meet it. |
| Plan a journey | Plan a journey across London the way TfL's own planner does: several options, each with its legs, how long it takes, how many changes it needs and what it costs. |
| Search for a stop | Find a stop by name and get the code every other action takes. |
Check line status
Check whether named lines are running, and why they are not. Each line comes back with TfL's own wording (Good Service, Minor Delays, Part Suspended), the severity behind it, and the sentence explaining a delay. Branch on has_disruption rather than on the wording, and on all_good to alert only when something is actually wrong.
Inputs
- Lines
linestextRequired - Which lines to report on. The list holds every named rail line: the Tube, the DLR, the Elizabeth line, each London Overground line, the tram and the cable car. A bus route has a status too, so a route number such as 24 can be typed in instead of picked.
Outputs
all_goodtrue/falsecountnumberdisrupted_countnumberdisrupted_lineslistlineslistrequested_lineslist
Example output
{
"all_good": false,
"count": 2,
"disrupted_count": 1,
"disrupted_lines": [
"victoria"
],
"lines": [
{
"disruptions": [],
"has_disruption": false,
"id": "central",
"mode": "tube",
"name": "Central",
"reason": null,
"severity": 10,
"status": "Good Service",
"statuses": [
{
"reason": null,
"severity": 10,
"status": "Good Service",
"valid_from": null,
"valid_to": null
}
],
"valid_from": null,
"valid_to": null
},
{
"disruptions": [
{
"additional_info": null,
"affected_stop_count": 0,
"category": "RealTime",
"closure_type": "minorDelays",
"description": "Victoria Line: Minor delays due to an earlier signal failure at Highbury & Islington.",
"from": null,
"to": null,
"type": "lineInfo"
}
],
"has_disruption": true,
"id": "victoria",
"mode": "tube",
"name": "Victoria",
"reason": "Victoria Line: Minor delays due to an earlier signal failure at Highbury & Islington.",
"severity": 9,
"status": "Minor Delays",
"statuses": [
{
"reason": "Victoria Line: Minor delays due to an earlier signal failure at Highbury & Islington.",
"severity": 9,
"status": "Minor Delays",
"valid_from": "2026-09-02T21:39:05Z",
"valid_to": "2026-09-03T00:29:00Z"
}
],
"valid_from": "2026-09-02T21:39:05Z",
"valid_to": "2026-09-03T00:29:00Z"
}
],
"requested_lines": [
"victoria",
"central"
]
}Check road delays
Check the main roads TfL manages for exceptional delays: the A roads, the North and South Circulars, the river crossings. Leave the road list empty to sweep all of them in one request, and read roads_with_delays for the ones to avoid.
Inputs
- Roads
roadstext - Which roads to check. Leave this empty to check every road TfL reports on.
Outputs
all_cleartrue/falsecountnumberrequested_roadslistroadslistroads_with_delayslist
Example output
{
"all_clear": false,
"count": 2,
"requested_roads": [
"a2",
"a406"
],
"roads": [
{
"has_delays": false,
"id": "a2",
"measured_from": "2026-09-02T22:12:11Z",
"measured_to": "2026-09-02T23:59:59Z",
"name": "A2",
"status": "Good",
"status_description": "No Exceptional Delays"
},
{
"has_delays": true,
"id": "a406",
"measured_from": "2026-09-02T22:12:11Z",
"measured_to": "2026-09-02T23:59:59Z",
"name": "North Circular (A406)",
"status": "Serious",
"status_description": "Serious Delays"
}
],
"roads_with_delays": [
"North Circular (A406)"
]
}Check status across a whole mode
Check every line of a whole way of travelling at once: the entire Tube, the Overground, the DLR, the trams, the buses. One call answers 'is anything wrong on the network this morning?', and names the lines to worry about in disrupted_lines. This is also how to list the lines a mode runs, since each one comes back named.
Inputs
- Modes
modestextRequired - Which ways of travelling. Pick more than one to cover them in a single call.
Outputs
all_goodtrue/falsecountnumberdisrupted_countnumberdisrupted_lineslistlineslistrequested_modeslist
Example output
{
"all_good": false,
"count": 2,
"disrupted_count": 1,
"disrupted_lines": [
"victoria"
],
"lines": [
{
"disruptions": [],
"has_disruption": false,
"id": "central",
"mode": "tube",
"name": "Central",
"reason": null,
"severity": 10,
"status": "Good Service",
"statuses": [
{
"reason": null,
"severity": 10,
"status": "Good Service",
"valid_from": null,
"valid_to": null
}
],
"valid_from": null,
"valid_to": null
},
{
"disruptions": [
{
"additional_info": null,
"affected_stop_count": 0,
"category": "RealTime",
"closure_type": "minorDelays",
"description": "Victoria Line: Minor delays due to an earlier signal failure at Highbury & Islington.",
"from": null,
"to": null,
"type": "lineInfo"
}
],
"has_disruption": true,
"id": "victoria",
"mode": "tube",
"name": "Victoria",
"reason": "Victoria Line: Minor delays due to an earlier signal failure at Highbury & Islington.",
"severity": 9,
"status": "Minor Delays",
"statuses": [
{
"reason": "Victoria Line: Minor delays due to an earlier signal failure at Highbury & Islington.",
"severity": 9,
"status": "Minor Delays",
"valid_from": "2026-09-02T21:39:05Z",
"valid_to": "2026-09-03T00:29:00Z"
}
],
"valid_from": "2026-09-02T21:39:05Z",
"valid_to": "2026-09-03T00:29:00Z"
}
],
"requested_modes": [
"tube"
]
}Find Santander Cycles nearby
Find the cycle hire docking stations near a point and how many bikes and empty spaces each one has right now, split between standard bikes and e-bikes. Read has_bikes to answer 'can I get a bike here?' and has_space for 'can I leave one?'.
Inputs
- Latitude
latitudenumberRequired - The latitude to search around. Chain this from a stop found in an earlier step, or read it off a map.From 51.2 to 51.8.
- Longitude
longitudenumberRequired - The longitude to search around. Negative west of Greenwich, positive east of it.From -0.6 to 0.4.
- Search radius (metres)
radius_metresnumber - How far around that point to look, in metres. 500 is a few minutes' walk. TfL cannot serve a wider search than 2,000 metres.From 50 to 2000. Default:
500.
Outputs
bike_pointslistbikes_availablenumbercountnumberempty_docksnumberlatitudenumberlongitudenumberradius_metresnumber
Example output
{
"bike_points": [
{
"bikes_available": 6,
"distance_metres": 63,
"e_bikes": 2,
"empty_docks": 15,
"has_bikes": true,
"has_space": true,
"id": "BikePoints_116",
"installed_on": "2010-07-14",
"is_locked": false,
"is_temporary": false,
"lat": 51.514499,
"lon": -0.141423,
"name": "Little Argyll Street, West End",
"standard_bikes": 4,
"total_docks": 21
}
],
"bikes_available": 6,
"count": 1,
"empty_docks": 15,
"latitude": 51.515224,
"longitude": -0.141903,
"radius_metres": 400
}Find stops near a place
Find the stops within walking distance of a point, nearest first, each with how many metres away it is. Chain the coordinates from a stop, a customer address or anything else a workflow already knows the position of.
Inputs
- Latitude
latitudenumberRequired - The latitude to search around. Chain this from a stop found in an earlier step, or read it off a map.From 51.2 to 51.8.
- Longitude
longitudenumberRequired - The longitude to search around. Negative west of Greenwich, positive east of it.From -0.6 to 0.4.
- Kind of stop
stop_kindtext - Which kinds of stop to look for.One of:
stations(Stations (Tube, DLR, Overground, Elizabeth line, tram, rail)),bus_stops(Bus and coach stops),all(Everything). Default:stations. - Search radius (metres)
radius_metresnumber - How far around that point to look, in metres. 500 is a few minutes' walk. TfL cannot serve a wider search than 2,000 metres.From 50 to 2000. Default:
500.
Outputs
countnumberlatitudenumberlongitudenumberradius_metresnumberstop_kindtextstopslist
Example output
{
"count": 1,
"latitude": 51.515224,
"longitude": -0.141903,
"radius_metres": 500,
"stop_kind": "stations",
"stops": [
{
"distance_metres": 67,
"id": "940GZZLUOXC",
"in_service": true,
"lat": 51.515224,
"line_ids": [
"bakerloo",
"central",
"victoria"
],
"lines": [
"Bakerloo",
"Central",
"Victoria"
],
"lon": -0.141903,
"modes": [
"tube"
],
"name": "Oxford Circus Underground Station",
"stop_type": "NaptanMetroStation",
"zone": "1"
}
]
}Get a line's stops in order
The stops of a line in the order it calls at them, one way round, with each branch listed separately. Where 'List the stops on a line' answers which stops, this answers in what order, which is what tells you whether a station comes before or after another one.
Inputs
- Line
linetextRequired - Which line. The list holds every named rail line; a bus route number such as 24 can be typed in instead.
- Direction
directiontextRequired - Which way round the line runs. TfL keeps a separate timetable and stop order for each direction, so there is no combined answer.One of:
inbound(Inbound (towards central London)),outbound(Outbound (away from central London)).
Outputs
brancheslistdirectiontextis_outbound_onlytrue/falselinetextline_idtextmodetextroutesliststation_countnumberstationslist
Example output
{
"branches": [
{
"branch_id": 1,
"service_type": "Regular",
"stop_count": 2,
"stops": [
{
"distance_metres": null,
"id": "940GZZLUVIC",
"in_service": true,
"lat": 51.496359,
"line_ids": [
"circle",
"district",
"victoria"
],
"lines": [
"Circle",
"District",
"Victoria"
],
"lon": -0.143865,
"modes": [
"tube"
],
"name": "Victoria Underground Station",
"stop_type": "NaptanMetroStation",
"zone": "1"
},
{
"distance_metres": null,
"id": "940GZZLUOXC",
"in_service": true,
"lat": 51.515224,
"line_ids": [
"bakerloo",
"central",
"victoria"
],
"lines": [
"Bakerloo",
"Central",
"Victoria"
],
"lon": -0.141903,
"modes": [
"tube"
],
"name": "Oxford Circus Underground Station",
"stop_type": "NaptanMetroStation",
"zone": "1"
}
]
}
],
"direction": "outbound",
"is_outbound_only": false,
"line": "Victoria",
"line_id": "victoria",
"mode": "tube",
"routes": [
{
"name": "Brixton \u2194 Walthamstow Central",
"stop_ids": [
"940GZZLUVIC",
"940GZZLUOXC"
]
}
],
"station_count": 2,
"stations": [
{
"distance_metres": null,
"id": "940GZZLUOXC",
"in_service": true,
"lat": 51.515224,
"line_ids": [
"bakerloo",
"central",
"victoria"
],
"lines": [
"Bakerloo",
"Central",
"Victoria"
],
"lon": -0.141903,
"modes": [
"tube"
],
"name": "Oxford Circus Underground Station",
"stop_type": "NaptanMetroStation",
"zone": "1"
},
{
"distance_metres": null,
"id": "940GZZLUVIC",
"in_service": true,
"lat": 51.496359,
"line_ids": [
"circle",
"district",
"victoria"
],
"lines": [
"Circle",
"District",
"Victoria"
],
"lon": -0.143865,
"modes": [
"tube"
],
"name": "Victoria Underground Station",
"stop_type": "NaptanMetroStation",
"zone": "1"
}
]
}Get disruptions on a line
Read the disruptions TfL has posted against named lines, in full. Where 'Check line status' gives one headline per line, this gives every notice behind it, including planned engineering work with the dates it runs between. An empty list means normal service.
Inputs
- Lines
linestextRequired - Which lines to report on. The list holds every named rail line: the Tube, the DLR, the Elizabeth line, each London Overground line, the tram and the cable car. A bus route has a status too, so a route number such as 24 can be typed in instead of picked.
Outputs
countnumberdisruptionslisthas_disruptionstrue/falserequested_lineslist
Example output
{
"count": 1,
"disruptions": [
{
"additional_info": null,
"affected_stop_count": 0,
"category": "RealTime",
"closure_type": "minorDelays",
"description": "Victoria Line: Minor delays due to an earlier signal failure at Highbury & Islington.",
"from": null,
"to": null,
"type": "lineInfo"
}
],
"has_disruptions": true,
"requested_lines": [
"victoria"
]
}Get live arrivals at a stop
Read the live board at a stop: every train, tram or bus due, how many minutes away it is, where it is heading and which platform it comes into. Sorted soonest first, so the first row is the next one out and next_arrival_minutes answers 'how long have I got?'. Filter by line at a busy interchange to see only the one you take.
Inputs
- Stop
stoptextRequired - Which stop. The list holds every station on TfL's rail network. Any other stop (a bus stop, a pier, a platform) can be given by its NaPTAN code instead, which is what 'Search for a stop' returns.
- Only this line
linetext - Show only this line's arrivals. Leave empty for every line calling at the stop.
Outputs
arrivalslistcountnumberline_filtertextnext_arrival_minutesnumberstationtextstop_idtext
Example output
{
"arrivals": [
{
"current_location": "At Oxford Circus",
"destination": "Brixton Underground Station",
"direction": "inbound",
"expected_arrival": "2026-09-02T22:12:13Z",
"line": "Victoria",
"line_id": "victoria",
"minutes_away": 0,
"mode": "tube",
"platform": "Southbound - Platform 5",
"seconds_away": 38,
"towards": "Brixton",
"vehicle_id": "011"
},
{
"current_location": "Between Green Park and Oxford Circus",
"destination": "Walthamstow Central Underground Station",
"direction": "outbound",
"expected_arrival": "2026-09-02T22:19:43Z",
"line": "Victoria",
"line_id": "victoria",
"minutes_away": 8,
"mode": "tube",
"platform": "Northbound - Platform 6",
"seconds_away": 488,
"towards": "Walthamstow Central",
"vehicle_id": "204"
}
],
"count": 2,
"line_filter": "victoria",
"next_arrival_minutes": 0,
"station": "Oxford Circus Underground Station",
"stop_id": "940GZZLUOXC"
}Get London air quality
Today's and tomorrow's air pollution forecast for London, as a band from Low to Very High, with the reading broken down by pollutant. The one thing here that is about the air rather than the trains, and the one worth checking before telling somebody to cycle.
Inputs
None.
Outputs
bandtextcountnumberdisclaimertextforecastslistpublished_attextsource_urltextsummarytext
Example output
{
"band": "Low",
"count": 1,
"disclaimer": "This forecast is intended to provide information on expected pollution levels in areas of significant public exposure.",
"forecasts": [
{
"band": "Low",
"from": "2026-09-02T00:00:00Z",
"nitrogen_dioxide_band": "Low",
"ozone_band": "Low",
"pm10_band": "Low",
"pm25_band": "Low",
"published_at": "2026-09-02T08:19:39Z",
"sulphur_dioxide_band": "Low",
"summary": "Low air pollution forecast valid from Wednesday 2 September to end of Wednesday 2 September GMT",
"text": "Low air pollution is forecast across London today. Fresher westerly winds will keep pollution levels down.",
"to": "2026-09-02T23:59:00Z",
"type": "Current"
}
],
"published_at": "2026-09-02T08:19:39Z",
"source_url": "http://londonair.org.uk/forecast",
"summary": "Low air pollution forecast valid from Wednesday 2 September to end of Wednesday 2 September GMT"
}Get station closures and lift outages
Find out what is wrong with the stations themselves rather than the trains: closed stations, entrances shut, lifts and escalators out of service, step-free access interrupted. This is what decides whether a journey is possible today for anyone who cannot use stairs.
Inputs
- Modes
modestextRequired - Which ways of travelling. Pick more than one to cover them in a single call.
Outputs
affected_stationslistcountnumberdisruptionslisthas_disruptionstrue/falserequested_modeslist
Example output
{
"affected_stations": [
"Barons Court Underground Station"
],
"count": 1,
"disruptions": [
{
"affected_lines": [
"District",
"Piccadilly"
],
"appearance": "PlannedWork",
"closure_type": "partClosure",
"description": "BARONS COURT STATION: From Monday 6 July until November, westbound trains will not call at Barons Court. Please use eastbound District or Piccadilly line trains and change at West Kensington or Earls Court.",
"from": "2026-07-06T03:30:00Z",
"mode": "tube",
"station": "Barons Court Underground Station",
"station_id": "940GZZLUBSC",
"stop_id": "940GZZLUBSC",
"to": "2026-11-30T01:29:00Z",
"type": "Part Closure"
}
],
"has_disruptions": true,
"requested_modes": [
"tube"
]
}Get stop details
Everything TfL holds about one stop: which lines call there, the fare zone, the address and phone number, how many lifts, escalators and gates it has, whether there is Wi-Fi or a toilet, and the full accessibility notes including whether step-free access is by lift.
Inputs
- Stop
stoptextRequired - Which stop. The list holds every station on TfL's rail network. Any other stop (a bus stop, a pier, a platform) can be given by its NaPTAN code instead, which is what 'Search for a stop' returns.
Outputs
stopobject
Example output
{
"stop": {
"accessibility": {
"AccessViaLift": "No",
"BlueBadgeCarParkSpaces": "0",
"LimitedCapacityLift": "No",
"TaxiRankOutsideStation": "No",
"Toilet": "No"
},
"address": "Oxford Circus Station, Oxford St, London, W1B 3AG",
"distance_metres": null,
"facilities": {
"Escalators": "14",
"Gates": "30",
"Lifts": "0",
"Ticket Halls": "2",
"Toilets": "no",
"WiFi": "yes"
},
"has_toilets": false,
"has_wifi": true,
"hub_id": "940GZZLUOXC",
"id": "940GZZLUOXC",
"in_service": true,
"lat": 51.515224,
"line_ids": [
"bakerloo",
"central",
"victoria"
],
"lines": [
"Bakerloo",
"Central",
"Victoria"
],
"lon": -0.141903,
"modes": [
"tube"
],
"name": "Oxford Circus Underground Station",
"phone": "0845 330 9880",
"platform_count": 16,
"stop_type": "NaptanMetroStation",
"zone": "1"
}
}Get the published timetable
Read the published departure times from one stop on one line, grouped the way TfL publishes them: weekdays, Friday, Saturday and Sunday each get their own list, with the first and last departure of each. This is the scheduled service, not live running, so it answers 'when does the last train go?' rather than 'where is my train now?'.
Inputs
- Line
linetextRequired - Which line. The list holds every named rail line; a bus route number such as 24 can be typed in instead.
- Departing from
stoptextRequired - Which stop to read departures from. The list holds the stops on the line chosen above.
- Direction
directiontextRequired - Which way round the line runs. TfL keeps a separate timetable and stop order for each direction, so there is no combined answer.One of:
inbound(Inbound (towards central London)),outbound(Outbound (away from central London)).
Outputs
calls_atlistdirectiontextfrom_stop_idtextlinetextline_idtextschedule_countnumberscheduleslist
Example output
{
"calls_at": [
"Green Park Underground Station",
"Oxford Circus Underground Station"
],
"direction": "outbound",
"from_stop_id": "940GZZLUVIC",
"line": "Victoria",
"line_id": "victoria",
"schedule_count": 1,
"schedules": [
{
"departure_count": 3,
"departures": [
{
"next_day": false,
"raw_hour": 5,
"time": "05:34"
},
{
"next_day": false,
"raw_hour": 5,
"time": "05:41"
},
{
"next_day": true,
"raw_hour": 24,
"time": "00:35"
}
],
"first_departure": "05:34",
"last_departure": "00:35",
"last_departure_next_day": true,
"name": "Monday - Thursday"
}
]
}List the stops on a line
Every stop a line calls at, with its fare zone, position and the other lines that meet it. This is where a workflow finds the interchanges between two lines, or checks whether a line reaches a station at all.
Inputs
- Line
linetextRequired - Which line. The list holds every named rail line; a bus route number such as 24 can be typed in instead.
Outputs
countnumberline_idtextstopslist
Example output
{
"count": 2,
"line_id": "victoria",
"stops": [
{
"distance_metres": null,
"id": "940GZZLUOXC",
"in_service": true,
"lat": 51.515224,
"line_ids": [
"bakerloo",
"central",
"victoria"
],
"lines": [
"Bakerloo",
"Central",
"Victoria"
],
"lon": -0.141903,
"modes": [
"tube"
],
"name": "Oxford Circus Underground Station",
"stop_type": "NaptanMetroStation",
"zone": "1"
},
{
"distance_metres": null,
"id": "940GZZLUVIC",
"in_service": true,
"lat": 51.496359,
"line_ids": [
"circle",
"district",
"victoria"
],
"lines": [
"Circle",
"District",
"Victoria"
],
"lon": -0.143865,
"modes": [
"tube"
],
"name": "Victoria Underground Station",
"stop_type": "NaptanMetroStation",
"zone": "1"
}
]
}Plan a journey
Plan a journey across London the way TfL's own planner does: several options, each with its legs, how long it takes, how many changes it needs and what it costs. Leave the time empty to plan from now, or give one and say whether it is when to leave or when to arrive. Ask for step-free routes, the fewest changes, or particular modes only.
Inputs
- From
origintextRequired - Where the journey starts. Pick a station, or type a full postcode such as SW1A 1AA. A partly written place name is refused with the places it could have meant, so a postcode or a station is the reliable way in.
- To
destinationtextRequired - Where the journey ends. Pick a station, or type a full postcode.
- When
whendate and time - The time to plan around. Leave empty to plan from now. Given in your own time zone and converted to London's clock for you, summer time included.
- That time is
time_istext - Whether the time above is when to set off or when to be there. Ignored when no time is given.One of:
Departing(Leave at that time),Arriving(Arrive by that time). Default:Departing. - Via
viatext - A place the journey must pass through. Same form as the two above.
- Only these modes
modestext - Restrict the journey to these ways of travelling. Leave empty to let TfL use whatever is fastest.
- What matters most
prioritytext - What to optimise the journey for.One of:
LeastTime(Get there fastest),LeastInterchange(Fewest changes),LeastWalking(Least walking). - Accessibility
accessibilitytext - What the journey has to avoid. Step-free options route around stations with stairs only.One of:
NoRequirements(No requirements),StepFreeToVehicle(Step-free all the way onto the train),StepFreeToPlatform(Step-free to the platform),NoSolidStairs(Avoid stairs),NoEscalators(Avoid escalators),NoElevators(Avoid lifts). - Walking speed
walking_speedtext - How fast to assume the walking parts are done, which changes which connections are reachable.One of:
Slow,Average,Fast.
Outputs
countnumberdestinationtextfastest_duration_minutesnumberjourneyslistlines_usedlistorigintext
Example output
{
"count": 1,
"destination": "940GZZLUVIC",
"fastest_duration_minutes": 4,
"journeys": [
{
"arrives_at": "2026-09-04T07:57:00Z",
"changes": 0,
"departs_at": "2026-09-04T07:53:00Z",
"duration_minutes": 4,
"fare_pence": 310,
"fare_pounds": 3.1,
"is_disrupted": false,
"legs": [
{
"arrives_at": "2026-09-04T07:57:00Z",
"departs_at": "2026-09-04T07:53:00Z",
"detail": "Victoria line towards Brixton",
"distance_metres": 15,
"duration_minutes": 4,
"from": "Oxford Circus Underground Station",
"from_id": "940GZZLUOXC",
"is_disrupted": false,
"line": "Victoria",
"mode": "tube",
"summary": "Victoria line to Victoria",
"to": "Victoria Underground Station",
"to_id": "940GZZLUVIC",
"towards": [
"Brixton Underground Station"
]
}
],
"summary": "Victoria line to Victoria"
}
],
"lines_used": [
"Victoria"
],
"origin": "940GZZLUOXC"
}Search for a stop
Find a stop by name and get the code every other action takes. This is how a workflow turns 'Oxford Circus' typed by a person, or read out of an email, into something TfL can answer about. Where a name covers a whole interchange, the stations inside it are listed instead, so every code that comes back works in the arrivals board and the journey planner. Narrow by mode when a name belongs to more than one place, as King's Cross does. TfL returns at most 50 matches.
Inputs
- Stop name
querytextRequired - The name to search for. Part of a name is enough.
- Only these modes
modestext - Narrow the search to stops served by these modes. Leave empty to search everything.
Outputs
countnumberquerytextstopslist
Example output
{
"count": 1,
"query": "Oxford Circus",
"stops": [
{
"distance_metres": null,
"id": "940GZZLUOXC",
"in_service": true,
"lat": 51.515224,
"line_ids": [
"bakerloo",
"central",
"victoria"
],
"lines": [
"Bakerloo",
"Central",
"Victoria"
],
"lon": -0.141903,
"modes": [
"tube"
],
"name": "Oxford Circus Underground Station",
"stop_type": "NaptanMetroStation",
"zone": "1"
}
]
}