API v1.0.0

UK Trains

Query National Rail Darwin API for live train departures and arrivals.

Installation

openclaw skill add jabbslad/uk-trains

Technical Specification

UK Trains

Query National Rail Darwin API for live train departures and arrivals.

Setup

Requires free Darwin API token:

  1. Register at https://realtime.nationalrail.co.uk/OpenLDBWSRegistration/
  2. Set NATIONAL_RAIL_TOKEN in environment (or configure in skills.entries.uk-trains.apiKey)

Commands

# Departures
./scripts/trains.py departures PAD
./scripts/trains.py departures PAD to OXF --rows 5

# Arrivals  
./scripts/trains.py arrivals MAN
./scripts/trains.py arrivals MAN from EUS

# Station search
./scripts/trains.py search paddington
./scripts/trains.py search kings

Station Codes

Use 3-letter CRS codes:

  • PAD = London Paddington
  • EUS = London Euston
  • KGX = London Kings Cross
  • VIC = London Victoria
  • WAT = London Waterloo
  • MAN = Manchester Piccadilly
  • BHM = Birmingham New Street
  • EDB = Edinburgh Waverley
  • GLC = Glasgow Central
  • BRI = Bristol Temple Meads
  • LDS = Leeds
  • LIV = Liverpool Lime Street
  • RDG = Reading
  • OXF = Oxford
  • CBG = Cambridge

Response Format

JSON with:

  • locationName, crs - Station info
  • messages[] - Service alerts
  • trainServices[] - List of trains:
    • std/sta - Scheduled departure/arrival time
    • etd/eta - Expected time ("On time", "Delayed", or actual time)
    • platform - Platform number
    • operator - Train operating company
    • destination[].name - Final destination
    • isCancelled, cancelReason, delayReason - Disruption info

Message Template

Use this compact format for WhatsApp/chat responses:

πŸš‚ {Origin} β†’ {Destination}

*{dep} β†’ {arr}* β”‚πŸ“{platform} β”‚ πŸšƒ {coaches}
{status}

*{dep} β†’ {arr}* β”‚πŸ“{platform} β”‚ πŸšƒ {coaches}
{status}

Elements

  • Header: πŸš‚ emoji + origin β†’ destination
  • Time: Bold, departure β†’ arrival times
  • Platform: πŸ“ + number (or "TBC" if unknown)
  • Coaches: πŸšƒ + space + number
  • Status:
    • βœ… On time
    • ⚠️ Delayed (exp {time})
    • ❌ Cancelled β€” {reason}
    • πŸ”„ Starts here

Example

πŸš‚ Hemel Hempstead β†’ Euston

*20:18 β†’ 20:55* β”‚πŸ“4 β”‚ πŸšƒ 4
βœ… On time

*20:55 β†’ 21:30* β”‚πŸ“4 β”‚ πŸšƒ 12
βœ… On time

*21:11 β†’ 21:41* β”‚πŸ“4 β”‚ πŸšƒ 8
βœ… On time

Getting Arrival Times

To show arrival times, make two API calls:

  1. departures {origin} to {dest} β€” get departure times + service IDs
  2. arrivals {dest} from {origin} β€” get arrival times

Match services by the numeric prefix in serviceID (e.g., 4748110HEMLHMP_ matches 4748110EUSTON__).

Notes

  • Separate each service with a blank line
  • Omit coaches if formation data unavailable
  • For delays, show expected time: ⚠️ Delayed (exp 20:35)