Every API here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for apis
7 MCP tools reach this
find_apisBrowse and filter every API in the catalog.
get_api_artifactsOne API's artifacts, grouped by type.
get_openapiThe primary OpenAPI for this API.
find_similar_apisAPIs that look like this one.
apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
resolveTurn a domain, URL or GitHub org into the provider it belongs to.
find_cohortsEvery scored population of providers in the catalog.
All 92 tools →
Call it yourself
curl for this page
This API
curl "https://apis.io/api/v1/apis/transport-for-london-england:transport-for-london-england-road-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we
store it to create your key and to recognise you if you sign in with another
provider. See our Privacy Policy and
Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
version: v1
title: Transport for London Unified Road API
servers:
- url: https://api.tfl.gov.uk
tags:
- name: Road
paths:
/Road:
get:
tags:
- Road
summary: Gets all roads managed by TfL
operationId: Road_Get
responses:
'200':
description: OK
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Tfl.Api.Presentation.Entities.RoadCorridor'
text/json:
schema:
type: array
items:
$ref: '#/components/schemas/Tfl.Api.Presentation.Entities.RoadCorridor'
application/xml:
schema:
type: array
items:
$ref: '#/components/schemas/Tfl.Api.Presentation.Entities.RoadCorridor'
text/xml:
schema:
type: array
items:
$ref: '#/components/schemas/Tfl.Api.Presentation.Entities.RoadCorridor'
deprecated: false
/Road/{ids}:
get:
tags:
- Road
summary: Gets the road with the specified id (e.g. A1)
operationId: Road_Get
parameters:
- name: ids
in: path
description: Comma-separated list of road identifiers e.g. "A406, A2" (a full list of supported road identifiers can be found at the /Road/ endpoint)
required: true
schema:
type: array
items:
type: string
responses:
'200':
description: OK
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Tfl.Api.Presentation.Entities.RoadCorridor'
text/json:
schema:
type: array
items:
$ref: '#/components/schemas/Tfl.Api.Presentation.Entities.RoadCorridor'
application/xml:
schema:
type: array
items:
$ref: '#/components/schemas/Tfl.Api.Presentation.Entities.RoadCorridor'
text/xml:
schema:
type: array
items:
$ref: '#/components/schemas/Tfl.Api.Presentation.Entities.RoadCorridor'
deprecated: false
/Road/{ids}/Status:
get:
tags:
- Road
summary: Gets the specified roads with the status aggregated over the date range specified, or now until the end of today if no dates are passed.
operationId: Road_Status
parameters:
- name: ids
in: path
description: Comma-separated list of road identifiers e.g. "A406, A2" or use "all" to ignore id filter (a full list of supported road identifiers can be found at the /Road/ endpoint)
required: true
schema:
type: array
items:
type: string
- name: dateRangeNullable.startDate
in: query
required: false
schema:
type: string
format: date-time
- name: dateRangeNullable.endDate
in: query
required: false
schema:
type: string
format: date-time
responses:
'200':
description: OK
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Tfl.Api.Presentation.Entities.RoadCorridor'
text/json:
schema:
type: array
items:
$ref: '#/components/schemas/Tfl.Api.Presentation.Entities.RoadCorridor'
application/xml:
schema:
type: array
items:
$ref: '#/components/schemas/Tfl.Api.Presentation.Entities.RoadCorridor'
text/xml:
schema:
type: array
items:
$ref: '#/components/schemas/Tfl.Api.Presentation.Entities.RoadCorridor'
deprecated: false
/Road/{ids}/Disruption:
get:
tags:
- Road
summary: Get active disruptions, filtered by road ids
operationId: Road_Disruption
parameters:
- name: ids
in: path
description: Comma-separated list of road identifiers e.g. "A406, A2" use all for all to ignore id filter (a full list of supported road identifiers can be found at the /Road/ endpoint)
required: true
schema:
type: array
items:
type: string
- name: stripContent
in: query
description: Optional, defaults to false. When true, removes every property/node except for id, point, severity, severityDescription, startDate, endDate, corridor details, location, comments and streets
required: false
schema:
type: boolean
- name: severities
in: query
description: an optional list of Severity names to filter on (a valid list of severities can be obtained from the /Road/Meta/severities endpoint)
required: false
style: form
explode: true
schema:
type: array
items:
type: string
- name: categories
in: query
description: an optional list of category names to filter on (a valid list of categories can be obtained from the /Road/Meta/categories endpoint)
required: false
style: form
explode: true
schema:
type: array
items:
type: string
- name: closures
in: query
description: Optional, defaults to true. When true, always includes disruptions that have road closures, regardless of the severity filter. When false, the severity filter works as normal.
required: false
schema:
type: boolean
responses:
'200':
description: OK
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Tfl.Api.Presentation.Entities.RoadDisruption'
text/json:
schema:
type: array
items:
$ref: '#/components/schemas/Tfl.Api.Presentation.Entities.RoadDisruption'
application/xml:
schema:
type: array
items:
$ref: '#/components/schemas/Tfl.Api.Presentation.Entities.RoadDisruption'
text/xml:
schema:
type: array
items:
$ref: '#/components/schemas/Tfl.Api.Presentation.Entities.RoadDisruption'
application/geo+json:
schema:
type: array
items:
$ref: '#/components/schemas/Tfl.Api.Presentation.Entities.RoadDisruption'
deprecated: false
/Road/all/Street/Disruption:
get:
tags:
- Road
summary: Gets a list of disrupted streets. If no date filters are provided, current disruptions are returned.
operationId: Road_DisruptedStreets
parameters:
- name: startDate
in: query
description: Optional, the start time to filter on.
required: true
schema:
type: string
format: date-time
- name: endDate
in: query
description: Optional, The end time to filter on.
required: true
schema:
type: string
format: date-time
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/System.Object'
text/json:
schema:
$ref: '#/components/schemas/System.Object'
application/xml:
schema:
$ref: '#/components/schemas/System.Object'
text/xml:
schema:
$ref: '#/components/schemas/System.Object'
deprecated: false
/Road/all/Disruption/{disruptionIds}:
get:
tags:
- Road
summary: Gets a list of active disruptions filtered by disruption Ids.
operationId: Road_DisruptionById
parameters:
- name: disruptionIds
in: path
description: Comma-separated list of disruption identifiers to filter by.
required: true
schema:
type: array
items:
type: string
- name: stripContent
in: query
description: Optional, defaults to false. When true, removes every property/node except for id, point, severity, severityDescription, startDate, endDate, corridor details, location and comments.
required: false
schema:
type: boolean
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/Tfl.Api.Presentation.Entities.RoadDisruption'
text/json:
schema:
$ref: '#/components/schemas/Tfl.Api.Presentation.Entities.RoadDisruption'
application/xml:
schema:
$ref: '#/components/schemas/Tfl.Api.Presentation.Entities.RoadDisruption'
text/xml:
schema:
$ref: '#/components/schemas/Tfl.Api.Presentation.Entities.RoadDisruption'
application/geo+json:
schema:
$ref: '#/components/schemas/Tfl.Api.Presentation.Entities.RoadDisruption'
deprecated: false
/Road/Meta/Categories:
get:
tags:
- Road
summary: Gets a list of valid RoadDisruption categories
operationId: Road_MetaCategories
responses:
'200':
description: OK
content:
application/json:
schema:
type: array
items:
type: string
text/json:
schema:
type: array
items:
type: string
application/xml:
schema:
type: array
items:
type: string
text/xml:
schema:
type: array
items:
type: string
deprecated: false
/Road/Meta/Severities:
get:
tags:
- Road
summary: Gets a list of valid RoadDisruption severity codes
operationId: Road_MetaSeverities
responses:
'200':
description: OK
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Tfl.Api.Presentation.Entities.StatusSeverity'
text/json:
schema:
type: array
items:
$ref: '#/components/schemas/Tfl.Api.Presentation.Entities.StatusSeverity'
application/xml:
schema:
type: array
items:
$ref: '#/components/schemas/Tfl.Api.Presentation.Entities.StatusSeverity'
text/xml:
schema:
type: array
items:
$ref: '#/components/schemas/Tfl.Api.Presentation.Entities.StatusSeverity'
deprecated: false
components:
schemas:
Tfl.Api.Presentation.Entities.Street:
type: object
properties:
name:
description: Street name
type: string
closure:
description: "Type of road closure. Some example values:\n Open = road is open, not blocked, not closed, not restricted. It maybe that the disruption has been moved out of the carriageway.\n Partial Closure = road is partially blocked, closed or restricted. \n Full Closure = road is fully blocked or closed."
type: string
directions:
description: "The direction of the disruption on the street. Some example values:\n All Directions\n All Approaches\n Clockwise\n Anti-Clockwise\n Northbound\n Eastbound\n Southbound\n Westbound\n Both Directions"
type: string
segments:
description: Geographic description of the sections of this street that are affected.
type: array
items:
$ref: '#/components/schemas/Tfl.Api.Presentation.Entities.StreetSegment'
sourceSystemId:
format: int64
description: The ID from the source system of the disruption that this street belongs to.
type: integer
sourceSystemKey:
description: The key of the source system of the disruption that this street belongs to.
type: string
System.Object:
type: object
properties: {}
Tfl.Api.Presentation.Entities.RoadProject:
type: object
properties:
projectId:
type: string
schemeName:
type: string
projectName:
type: string
projectDescription:
type: string
projectPageUrl:
type: string
consultationPageUrl:
type: string
consultationStartDate:
format: date-time
type: string
consultationEndDate:
format: date-time
type: string
constructionStartDate:
format: date-time
type: string
constructionEndDate:
format: date-time
type: string
boroughsBenefited:
type: array
items:
type: string
cycleSuperhighwayId:
type: string
phase:
enum:
- Unscoped
- Concept
- ConsultationEnded
- Consultation
- Construction
- Complete
type: string
contactName:
type: string
contactEmail:
type: string
externalPageUrl:
type: string
projectSummaryPageUrl:
type: string
Tfl.Api.Presentation.Entities.RoadCorridor:
type: object
properties:
id:
description: The Id of the Corridor e.g. "A406"
type: string
displayName:
description: "The display name of the Corridor e.g. \"North Circular (A406)\". This\n may be identical to the Id."
type: string
group:
description: The group name of the Corridor e.g. "Central London". Most corridors are not grouped, in which case this field can be null.
type: string
statusSeverity:
description: Standard multi-mode status severity code
type: string
statusSeverityDescription:
description: Description of the status severity as applied to RoadCorridors
type: string
bounds:
description: "The Bounds of the Corridor, given by the south-east followed by the north-west co-ordinate\n pair in geoJSON format e.g. \"[[-1.241531,51.242151],[1.641223,53.765721]]\""
type: string
envelope:
description: "The Envelope of the Corridor, given by the corner co-ordinates of a rectangular (four-point) polygon\n in geoJSON format e.g. \"[[-1.241531,51.242151],[-1.241531,53.765721],[1.641223,53.765721],[1.641223,51.242151]]\""
type: string
statusAggregationStartDate:
format: date-time
description: The start of the period over which status has been aggregated, or null if this is the current corridor status.
type: string
statusAggregationEndDate:
format: date-time
description: The end of the period over which status has been aggregated, or null if this is the current corridor status.
type: string
url:
description: URL to retrieve this Corridor.
type: string
System.Data.Spatial.DbGeography:
type: object
properties:
geography:
$ref: '#/components/schemas/System.Data.Spatial.DbGeographyWellKnownValue'
System.Data.Spatial.DbGeographyWellKnownValue:
type: object
properties:
coordinateSystemId:
format: int32
type: integer
wellKnownText:
type: string
wellKnownBinary:
format: byte
type: string
Tfl.Api.Presentation.Entities.RoadDisruptionImpactArea:
type: object
properties:
id:
format: int32
type: integer
roadDisruptionId:
type: string
polygon:
$ref: '#/components/schemas/System.Data.Spatial.DbGeography'
startDate:
format: date-time
type: string
endDate:
format: date-time
type: string
startTime:
type: string
endTime:
type: string
Tfl.Api.Presentation.Entities.StatusSeverity:
type: object
properties:
modeName:
type: string
severityLevel:
format: int32
type: integer
description:
type: string
Tfl.Api.Presentation.Entities.StreetSegment:
type: object
properties:
toid:
description: A 16 digit unique integer identifying a OS ITN (Ordnance Survey Integrated Transport Network) road link.
type: string
lineString:
description: geoJSON formatted LineString containing two latitude/longitude (WGS84) pairs that identify the start and end points of the street segment.
type: string
sourceSystemId:
format: int64
description: The ID from the source system of the disruption that this street belongs to.
type: integer
sourceSystemKey:
description: The key of the source system of the disruption that this street belongs to.
type: string
Tfl.Api.Presentation.Entities.RoadDisruptionSchedule:
type: object
properties:
startTime:
format: date-time
type: string
endTime:
format: date-time
type: string
Tfl.Api.Presentation.Entities.RoadDisruption:
type: object
properties:
id:
description: Unique identifier for the road disruption
type: string
url:
description: URL to retrieve this road disruption
type: string
point:
description: Latitude and longitude (WGS84) of the centroid of the disruption, stored in a geoJSON-formatted string.
type: string
severity:
description: A description of the severity of the disruption.
type: string
ordinal:
format: int32
description: An ordinal of the disruption based on severity, level of interest and corridor.
type: integer
category:
description: Describes the nature of disruption e.g. Traffic Incidents, Works
type: string
subCategory:
description: Describes the sub-category of disruption e.g. Collapsed Manhole, Abnormal Load
type: string
comments:
description: Full text of comments describing the disruption, including details of any road closures and diversions, where appropriate.
type: string
currentUpdate:
description: "Text of the most recent update from the LSTCC on the state of the\n disruption, including the current traffic impact and any advice to\n road users."
type: string
currentUpdateDateTime:
format: date-time
description: "The time when the last CurrentUpdate description was recorded, \n or null if no CurrentUpdate has been applied."
type: string
corridorIds:
description: The Ids of affected corridors, if any.
type: array
items:
type: string
startDateTime:
format: date-time
description: "The date and time which the disruption started. For a planned disruption (i.e. planned road works) this date will be in the future.\n For unplanned disruptions, this will default to the date on which the disruption was first recorded, but may be adjusted by the operator."
type: string
endDateTime:
format: date-time
description: "The date and time on which the disruption ended. For planned disruptions, this date will have a valid value. For unplanned \n disruptions in progress, this field will be omitted."
type: string
lastModifiedTime:
format: date-time
description: "The date and time on which the disruption was last modified in the system. This information can reliably be used by a developer to quickly\n compare two instances of the same disruption to determine if it has been changed."
type: string
levelOfInterest:
description: "This describes the level of potential impact on traffic operations of the disruption. \n High = e.g. a one-off disruption on a major or high profile route which will require a high level of operational attention \n Medium = This is the default value \n Low = e.g. a frequently occurring disruption which is well known"
type: string
location:
description: Main road name / number (borough) or preset area name where the disruption is located. This might be useful for a map popup where space is limited.
type: string
status:
description: "This describes the status of the disruption. \n Active = currently in progress \n Active Long Term = currently in progress and long term\n Scheduled = scheduled to start within the next 180 days\n Recurring Works = planned maintenance works that follow a regular routine or pattern and whose next occurrence is to start within the next 180 days.\n Recently Cleared = recently cleared in the last 24 hours\n Note that the status of Scheduled or Recurring Works disruptions will change to Active when they start, and will change status again when they end."
type: string
geography:
$ref: '#/components/schemas/System.Data.Spatial.DbGeography'
description: "Geography version of Point for output as GeoJSON.\n Can not use Geometry in a consistent way as non-TIMS disruptions do not have a polygon"
geometry:
$ref: '#/components/schemas/System.Data.Spatial.DbGeography'
description: "GeoJSON formatted latitude/longitude (WGS84) pairs forming an enclosed polyline or polygon. The polygon will only be included where affected streets information\n is not available for the disruption, would be inappropriate (e.g. a very large number of streets), or is centred on an area without streets (e.g. a football stadium)."
streets:
description: A collection of zero or more streets affected by the disruption.
type: array
items:
$ref: '#/components/schemas/Tfl.Api.Presentation.Entities.Street'
isProvisional:
description: True if the disruption is planned on a future date that is open to change
type: boolean
hasClosures:
description: "True if any of the affected Streets have a \"Full Closure\" status, false otherwise. A RoadDisruption that has HasClosures is considered a \n Severe or Serious disruption for severity filtering purposes."
type: boolean
linkText:
description: The text of any associated link
type: string
linkUrl:
description: The url of any associated link
type: string
roadProject:
$ref: '#/components/schemas/Tfl.Api.Presentation.Entities.RoadProject'
description: Any associated road project
publishStartDate:
format: date-time
description: TDM Additional properties
type: string
publishEndDate:
format: date-time
type: string
timeFrame:
type: string
roadDisruptionLines:
type: array
items:
$ref: '#/components/schemas/Tfl.Api.Presentation.Entities.RoadDisruptionLine'
roadDisruptionImpactAreas:
type: array
items:
$ref: '#/components/schemas/Tfl.Api.Presentation.Entities.RoadDisruptionImpactArea'
recurringSchedules:
type: array
items:
$ref: '#/components/schemas/Tfl.Api.Presentation.Entities.RoadDisruptionSchedule'
Tfl.Api.Presentation.Entities.RoadDisruptionLine:
type: object
properties:
id:
format: int32
type: integer
roadDisruptionId:
type: string
isDiversion:
type: boolean
multiLineString:
$ref: '#/components/schemas/System.Data.Spatial.DbGeography'
startDate:
format: date-time
type: string
endDate:
format: date-time
type: string
startTime:
type: string
endTime:
type: string
securitySchemes:
apiKey:
type: apiKey
description: API Key Authentication
name: app_key
in: query
appId:
type: apiKey
description: Application ID
name: app_id
in: query
x-provenance:
method: harvested
publisher: Transport for London, England
source: https://api.tfl.gov.uk/swagger/docs/v1
note: split by refine-openapis from the provider's own published document, verified by fetch (openapi/_original/*.fetch.json);
stamped by stamp-openapi-provenance.py (roadmap#793)