Transport for London, England
Transport for London, England — free-tier JSON endpoint
Transport for London, England offers a free API tier. We verified JSON on a sample GET (Transportation). Check provider docs for key requirements and limits.
We probe a documented GET and expect 2xx JSON — full uptime and health score. Open provider docs ↗
On our probe schedule. Uptime charts appear after the first check lands.
GET https://api.tfl.gov.uk/swagger/docs/v1
{
"swagger": "2.0",
"info": {
"version": "v1",
"title": "Transport for London Unified API"
},
"host": "api.tfl.gov.uk",
"schemes": [
"https"
],
"paths": {
"/AccidentStats/{year}": {
"get": {
"tags": [
"AccidentStats"
],
"summary": "Gets all accident details for accidents occuring in the specified year",
"operationId": "AccidentStats_Get",
"consumes": [],
"produces": [
"application/json",
"text/json"
],
"parameters": [
{
"name": "year",
"in": "path",
"description": "The year for which to filter the accidents on.",
"required": true,
"type": "integer",
"format": "int32"
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"type": "array",
"items": {
"$ref": "#/definitions/Tfl.Api.Presentation.Entities.AccidentStats.AccidentDetail"
}
}
}
},
"deprecated": false
}
},
"/AirQuality": {
"get": {
"tags": [
"AirQuality"
],
"summary": "Gets air quality data feed",
"operationId": "AirQuality_Get",
"consumes": [],
"produces": [
"application/json",
"text/json"
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/System.Object"
}
}
},
"deprecated": false
}
},
"/BikePoint": {
"get": {
"tags": [
"BikePoint"
],
"summary": "Gets all bike point locations. The Place object has an addtionalProperties array which contains the nbBikes, nbDocks and nbSpaces\r\n numbers which give the status of the BikePoint. A mismatch in these numbers i.e. nbDocks - (nbBikes + nbSpaces) != 0 indicates broken docks.",
"operationId": "BikePoint_GetAll",
"consumes": [],
"produces": [
"application/json",
"text/json"
],
"responses": {
"200": {
"description": "OK",
"schema": {
"type": "array",
"items": {
"$ref": "#/definitions/Tfl.Api.Presentation.Entities.Place"
}
}
}
},
"deprecated": false
}
},
"/BikePoint/{id}": {
"get": {
"tags": [
"BikePoint"
],
"summary": "Gets the bike point with the given id.",
"operationId": "BikePoint_Get",
"consumes": [],
"produces": [
"application/json",
"text/json"
],
"parameters": [
{
"name": "id",
"in": "path",
"description": "A bike point id (a list of ids can be obtained from the above BikePoint call)",
"required": true,
"type": "string"
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/Tfl.Api.Presentation.Entities.Place"
}
}
},
"deprecated": false
}
},
"/BikePoint/Search": {
"get": {
"tags": [
"BikePoint"
],
"summary": "Search for bike stations by their name, a bike point's name often contains information about the name of the street\r\n or nearby landmarks, for example. Note that the search result does not contain the PlaceProperties i.e. the status\r\n or occupancy of the BikePoint, to get that information you should retrieve the BikePoint by its id on /BikePoint/id.",
"operationId": "BikePoint_Search",
"consumes": [],
"produces": [
"application/json",
"text/json"
],
"parameters": [
{
"name": "query",
"in": "query",
"description": "The search term e.g. \"St. James\"",
"required": true,
"type": "string"
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"type": "array",
"items": {
"$ref": "#/definitions/Tfl.Api.Presentation.Entities.Place"
}
}
}
},
"deprecated": false
}
},
"/Cabwise/search": {
"get": {
"tags": [
"Cabwise"
],
"summary": "Gets taxis and minicabs contact information",
"operationId": "Cabwise_Get",
"consumes": [],
"produces": [
"application/json",
"text/json"
],
"parameters": [
{
"name": "lat",
"in": "query",
"description": "Latitude",
"required": true,
"type": "number",
"format": "double"
},
{
"name": "lon",
"in": "query",
"description": "Longitude",
"required": true,
"type": "number",
"format": "double"
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/System.Object"
}
}
},
"deprecated": false
}
},
"/Journey/Meta/Modes": {
"get": {
"tags": [
"Journey"
],
"summary": "Gets a list of all of the available journey planner modes",
"operationId": "Journey_Meta",
"consumes": [],
"produces": [
"application/json",
"text/json"
],
"responses": {
"200": {
"description": "OK",
"schema": {
"type": "array",
"items": {
"$ref": "#/definitions/Tfl.Api.Presentation.Entities.Mode"
}
}
}
},
"deprecated": false
}
},
"/Journey/JourneyResults/{from}/to/{to}": {
"get": {
"tags": [
"Journey"
],
"summary": "Perform a Journey Planner search from the parameters specified in simple types",
"operationId": "Journey_JourneyResults",
"consumes": [],
"produces": [
"application/json",
"text/json"
],
"parameters": [
{
"name": "from",
"in": "path",
"description": "Origin of the journey. Can be WGS84 coordinates expressed as \"lat,long\", a UK postcode, a Naptan (StopPoint) id, an ICS StopId, or a free-text string (will cause disambiguation unless it exactly matches a point of interest name).",
"required": true,
"type": "string"
},
{
"name": "to",
"in": "path",
"description": "Destination of the journey. Can be WGS84 coordinates expressed as \"lat,long\", a UK postcode, a Naptan (StopPoint) id, an ICS StopId, or a free-text string (will cause disambiguation unless it exactly matches a point of interest name).",
"required": true,
"type": "string"
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/Tfl.Api.Presentation.Entities.JourneyPlanner.ItineraryResult"
}
}
},
"deprecated": false
}
}
},
"definitions": {
"Tfl.Api.Presentation.Entities.AccidentStats.AccidentDetail": {
"type": "object",
"properties": {
"id": {
"format": "int32",
"type": "integer"
},
"lat": {
"format": "double",
"type": "number"
},
"lon": {
"format": "double",
"type": "number"
},
"location": {
"type": "string"
},
"date": {
"format": "date-time",
"type": "string"
},
"severity": {
"type": "string"
},
"borough": {
"type": "string"
},
"casualties": {
"type": "array",
"items": {
"$ref": "#/definitions/Tfl.Api.Presentation.Entities.AccidentStats.Casualty"
}
}
}
},
"Tfl.Api.Presentation.Entities.AccidentStats.Casualty": {
"type": "object",
"properties": {
"age": {
"format": "int32",
"type": "integer"
},
"class": {
"type": "string"
},
"severity": {
"type": "string"
},
"mode": {
"type": "string"
},
"ageBand": {
"type": "string"
}
}
},
"Tfl.Api.Presentation.Entities.AccidentStats.Vehicle": {
"type": "object",
"properties": {
"type": {
"type": "string"
}
}
},
"Tfl.Api.Presentation.Entities.AccidentStats.AccidentStatsOrderedSummary": {
"type": "object",
"properties": {
"year": {
"format": "int32",
"type": "integer"
},
"borough": {
"type": "string"
},
"accidents": {
"format": "int32",
"type": "integer"
}
}
},
"System.Object": {
"type": "object",
"properties": {}
},
"Tfl.Api.Presentation.Entities.Place": {
"type": "object",
"properties": {
"id": {
"description": "A unique identifier.",
"type": "string"
},
"url": {
"description": "The unique location of this resource.",
"type": "string"
},
"commonName": {
"description": "A human readable name.",
"type": "string"
},
"distance": {
"format": "double",
"description": "The distance of the place from its search point, if this is the result\r\n of a geographical search, otherwise zero.",
"type": "number"
},
"placeType": {
"description": "The type of Place. See /Place/Meta/placeTypes for possible values.",
"type": "string"
},
"additionalProperties": {
"description": "A bag of additional key/value pairs with extra information about this place.",
"type": "array",
"items": {
"$ref": "#/definitions/Tfl.Api.Presentation.Entities.AdditionalProperties"
}
},
"children": {
"type": "array",
"items": {
"$ref": "#/definitions/Tfl.Api.Presentation.Entities.Place"
}
},
"childrenUrls": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"Tfl.Api.Presentation.Entities.AdditionalProperties": {
"type": "object",
"properties": {
"category": {
"type": "string"
},
"key": {
"type": "string"
},
"sourceSystemKey": {
"type": "string"
},
"value": {
"type": "string"
},
"modified": {
"format": "date-time",
"type": "string"
}
}
},
"Tfl.Api.Presentation.Entities.CycleSuperhighway": {
"description": "",
"type": "object",
"properties": {
"id": {
"description": "The Id",
"type": "string"
},
"label": {
"description": "The long label to show on maps when zoomed in",
"type": "string"
},
"labelShort": {
"description": "The short label to show on maps",
"type": "string"
},
"geography": {
"$ref": "#/definitions/System.Data.Spatial.DbGeography",
"description": "A LineString or MultiLineString that forms the route of the highway"
},
"segmented": {
"description": "True if the route is split into segments",
"type": "boolean"
},
"modified": {
"format": "date-time",
"description": "When the data was last updated",
"type": "string"
},
"status": {
"description": "Cycle route status i.e Proposed, Existing etc",
"enum": [
"Unknown",
"All"
],
"type": "string"
},
"routeType": {
"description": "Type of cycle route e.g CycleSuperhighways, Quietways, MiniHollands etc",
"enum": [
"Unknown",
"All"
],
"type": "string"
}
}
}
},
"securityDefinitions": {
"apiKey": {
"type": "apiKey",
"description": "API Key Authentication",
"name": "app_key",
"in": "query"
},
"appId": {
"type": "apiKey",
"description": "Application ID",
"name": "app_id",
"in": "query"
}
}
}curl "https://api.tfl.gov.uk/swagger/docs/v1"const res = await fetch("https://api.tfl.gov.uk/swagger/docs/v1");
const data = await res.json();
console.log(data);import requests
res = requests.get("https://api.tfl.gov.uk/swagger/docs/v1")
print(res.json())/swagger/docs/v1PROBEDTransport for London, England — free-tier JSON endpoint
/swaggerSwagger — documented GET route.
/swagger/1Swagger details by ID (example: 1).
/swagger?limit=10Swagger — documented GET route.
/swagger/search?q=testSearch by query parameters.
/Content/DTOs.zipDTOs Zip — documented GET route.
We probe a documented GET and expect 2xx JSON — full uptime and health score. Export includes every documented route below.
Not tracked yet. Shape-change history starts once this API joins our probe schedule.
Transport for London, England: common questions
Is Transport for London, England free to use?
Yes — Transport for London, England is a free transport API. Free tier: Free tier — API key may be required for production. Whether the free tier allows commercial use is unclear — check the provider docs.
Does Transport for London, England need an API key?
Yes — Transport for London, England needs a free API key, which you pass on each request. Rate limits: Unpublished.
Can I call Transport for London, England from the browser?
Yes — Transport for London, England returns CORS headers over HTTPS, so front-end code can fetch it directly with no backend proxy. Use the fetch snippet on this page, or hit "Run live" to try it now.
Is Transport for London, England up right now?
Transport for London, England is catalogued but not yet on our probe schedule, so we don't publish a live status for it. Check the provider's own status page or docs for its current state.