Introduction
# 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
```bash # 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)`