TransCAPI Journey API

The Journey API from TransCAPI — 3 operation(s) for journey.

Operations 3

GET /v1/journey.json Plan a journey between two points #
GET /v1/journey/reachable.json Area reachable by public transport (isochrones) #
POST /v1/journey/travel_times.json Travel times from one origin to many destinations #

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/transcapi:transcapi-journey-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

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

transcapi-journey-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  contact:
    url: https://www.transcapi.com
  description: 'Public transport data for Great Britain (England, Scotland and Wales): stops and places, bus and rail departures and arrivals with live running, routes and services, live bus positions, disruptions and journey planning. Every departure says in `source` whether its time is live or timetabled. Data is official open data; attribution requirements are at https://www.transcapi.com/docs/data-sources.'
  termsOfService: https://www.transcapi.com/terms
  title: TransC Journey API
  version: 1.0.0
servers:
- description: Production
  url: https://api.transcapi.com
security:
- ApiKeyHeader: []
- ApiKeyQuery: []
tags:
- name: Journey
paths:
  /v1/journey.json:
    get:
      description: 'Returns transit itineraries between two coordinates, with per-leg fare estimates and live vehicle positions where available, plus optional walking and cycling alternatives. Covers England, Scotland and Wales (bus, coach, rail, Underground, metro, tram, ferry) up to two months ahead, and the island of Ireland (Translink in Northern Ireland, every NTA-listed operator in the Republic, Luas and Irish Rail) as a separate area: a journey between Great Britain and Ireland returns 422 outside_coverage, as does the Isle of Man. Bus, tram and metro legs follow the operator''s route where published (leg_geometry_source). Walking legs carry terrain (climb, descent, steepest gradient, shape and estimated calories, from OS Terrain 50) and each itinerary a walking summary. Every leg and itinerary carries carbon: grams of CO2e from the UK government''s 2026 conversion factors, with driving alone the same distance for comparison. Itineraries with changes carry connections: the time to spare at each and the chance of making it, from how the buses involved have run on recent days.'
      parameters:
      - in: query
        name: from_lat
        required: true
        schema:
          type: number
      - in: query
        name: from_lon
        required: true
        schema:
          type: number
      - in: query
        name: to_lat
        required: true
        schema:
          type: number
      - in: query
        name: to_lon
        required: true
        schema:
          type: number
      - description: ISO8601 datetime for departure (or arrival if arrive_by=true). Defaults to now.
        in: query
        name: datetime
        schema:
          type: string
      - in: query
        name: arrive_by
        schema:
          default: false
          type: boolean
      - description: 'Comma-separated non-transit alternatives to compute alongside the transit result - any of `walk`, `bicycle`, `car`. Pass an empty value to skip them. Transit is always returned. `car` is off by default and returns a single driving itinerary for comparison against transit; like the other alternatives it is subject to the same coverage area, since driving needs the same street network.

          '
        in: query
        name: modes
        schema:
          default: walk,bicycle
          type: string
      - description: 'Comma-separated optional transit sub-modes - any of `tram`, `rail`. Bus and coach are always included. Pass an empty value to search bus and coach only.

          '
        in: query
        name: transit_modes
        schema:
          default: tram,rail
          type: string
      - description: 'Price rail legs with a railcard (code from /v1/rail/railcards.json, e.g. YNG for the 16-25 Railcard).

          '
        in: query
        name: railcard
        schema:
          type: string
      - in: query
        name: include_fares
        schema:
          default: true
          type: boolean
      - in: query
        name: include_live
        schema:
          default: true
          type: boolean
      - description: Include every stop called at on each transit leg.
        in: query
        name: include_intermediate_stops
        schema:
          default: false
          type: boolean
      - description: 'Maximum length in metres of any single walking leg. Itineraries with a longer walk are excluded. Does not apply to the direct walking alternative.

          '
        in: query
        name: max_walk_distance
        schema:
          type: integer
      - description: 'Maximum total metres walked across the whole journey, summed over every walking leg. Does not apply to the direct walking alternative.

          '
        in: query
        name: max_total_walk_distance
        schema:
          type: integer
      - description: 'Steepest slope, in percent, allowed on any walking leg, up or down (8.3 is the 1-in-12 ramp standard). Itineraries with a steeper walk are excluded, measured from OS Terrain 50. Walks that couldn''t be measured don''t exclude a journey but leave accessibility.gradient_checked false.

          '
        in: query
        name: max_gradient
        schema:
          type: number
      - description: 'Include turn-by-turn directions on each walking leg - direction, street name, distance and coordinate per step.

          '
        in: query
        name: include_steps
        schema:
          default: false
          type: boolean
      - in: query
        name: limit
        schema:
          default: 5
          type: integer
      responses:
        '200':
          description: Journey itineraries
        '400':
          description: 'Invalid parameter, or date_out_of_range - the datetime is outside the timetables loaded (about two months ahead); the message gives the first and last dates that can be planned.

            '
        '422':
          description: Origin or destination lies outside the routing coverage area
      summary: Plan a journey between two points
      tags:
      - Journey
      operationId: getV1JourneyJson
      x-operation-id-source: derived
  /v1/journey/reachable.json:
    get:
      description: GeoJSON of the area reachable from a point within each cutoff, by bus, coach, tram, metro, Underground, ferry and rail, anywhere in Great Britain or Ireland, leaving at a given time today or tomorrow. Walking to, between and from stops is estimated by straight-line distance with a detour allowance, so edges are good estimates rather than street-exact.
      parameters:
      - in: query
        name: lat
        required: true
        schema:
          type: number
      - in: query
        name: lon
        required: true
        schema:
          type: number
      - description: Comma-separated minutes, up to four, each at most 90.
        in: query
        name: cutoffs
        schema:
          default: 15,30,45
          type: string
      - description: Departure time, ISO 8601, now until the end of tomorrow. Defaults to now.
        in: query
        name: datetime
        schema:
          format: date-time
          type: string
      - description: Longest walk to or from a stop, metres (100-2000).
        in: query
        name: max_walk
        schema:
          default: 800
          type: integer
      responses:
        '200':
          description: A GeoJSON FeatureCollection
          largest first.: null
          one feature per cutoff: null
        '422':
          description: Outside Great Britain and Ireland
        '503':
          description: The day's data isn't built yet
      summary: Area reachable by public transport (isochrones)
      tags:
      - Journey
      operationId: getV1JourneyReachableJson
      x-operation-id-source: derived
  /v1/journey/travel_times.json:
    post:
      description: Minutes by public transport (with walking) from one point to up to 500 destinations, anywhere in Great Britain or Ireland, leaving at a given time today or tomorrow. null where a destination can't be reached within max_minutes. Walking is estimated by straight-line distance with a detour allowance. Also accepts GET with `to=lat,lon|lat,lon` (up to 100).
      requestBody:
        content:
          application/json:
            schema:
              properties:
                datetime:
                  format: date-time
                  type: string
                from:
                  properties:
                    lat:
                      type: number
                    lon:
                      type: number
                  type: object
                max_minutes:
                  default: 90
                  type: integer
                max_walk:
                  default: 800
                  type: integer
                to:
                  items:
                    properties:
                      id:
                        type: string
                      lat:
                        type: number
                      lon:
                        type: number
                    type: object
                  type: array
              required:
              - from
              - to
              type: object
      responses:
        '200':
          description: One result per destination
          in the order given.: null
      summary: Travel times from one origin to many destinations
      tags:
      - Journey
      operationId: postV1JourneyTravelTimesJson
      x-operation-id-source: derived
components:
  securitySchemes:
    ApiKeyHeader:
      in: header
      name: X-Api-Key
      type: apiKey
    ApiKeyQuery:
      in: query
      name: api_key
      type: apiKey