Transport for London, England Road API

The Road API from Transport for London, England — 8 operation(s) for road.

GitHub OpenAPI

Operations 8

GET /Road Gets all roads managed by TfL #
GET /Road/{ids} Gets the road with the specified id (e.g. A1) #
GET /Road/{ids}/Status 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. #
GET /Road/{ids}/Disruption Get active disruptions, filtered by road ids #
GET /Road/all/Street/Disruption Gets a list of disrupted streets. If no date filters are provided, current disruptions are returned. #
GET /Road/all/Disruption/{disruptionIds} Gets a list of active disruptions filtered by disruption Ids. #
GET /Road/Meta/Categories Gets a list of valid RoadDisruption categories #
GET /Road/Meta/Severities Gets a list of valid RoadDisruption severity codes #

Work with this as data

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 Specification

transport-for-london-england-road-api-openapi.yml Raw ↑
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)