rejseplanen
Installation
SKILL.md
Rejseplanen Public Transport Skill
Plan journeys, check departures/arrivals, and search for stops/stations across all Danish public transport (trains, buses, metro, light rail) via the Rejseplanen API. Requires an API access ID — users must set the REJSEPLANEN_ACCESS_ID environment variable.
Setup
How to obtain REJSEPLANEN_ACCESS_ID
- Go to the Rejseplanen API access page
- Fill out the request form with your name, email, and a brief description of your use case
- Rejseplanen will email you an access ID (typically within a few business days)
- Set it as an environment variable:
export REJSEPLANEN_ACCESS_ID=your_access_id_here
To make it permanent, add the export line to your shell profile (~/.bashrc, ~/.zshrc, etc.).
If REJSEPLANEN_ACCESS_ID is not set, the CLI will exit with a clear error message.
When to use this skill
Invoke this skill when the user wants to:
- Plan a journey between two locations in Denmark (e.g., "How do I get from Aarhus to Copenhagen?")
- Check ticket prices / fares for a journey (included by default in trip output)
- Check upcoming departures from a Danish stop/station
- Check upcoming arrivals at a Danish stop/station
- Search for a stop or station by name
- Look up train, bus, metro, or light rail schedules in Denmark
- Check service disruptions, delays, or travel alerts
- Find nearby stops/stations by coordinates
- Check real-time delay information for departures/arrivals
- Check bike or wheelchair accessibility for a journey
Commands
Search for stops/stations
bun run skills/rejseplanen/cli/src/cli.ts location --query <name> [flags]
Key flags:
--query <name>— Search string (required)--max <n>— Max results (default: 10)--type <S|A|P|ALL>— Filter by type: S=stop, A=address, P=POI, ALL=all (default: ALL)--format json|table|plain
Plan a trip
bun run skills/rejseplanen/cli/src/cli.ts trip --origin <id-or-name> --destination <id-or-name> [flags]
Key flags:
--origin <id-or-name>— Origin stop ID or name (required)--destination <id-or-name>— Destination stop ID or name (required)--date <YYYY-MM-DD>— Travel date (default: today)--time <HH:MM>— Travel time (default: now)--arrive-by— Search for arrival time instead of departure--results <n>— Number of trip results, 1-6 (default: 5)--no-fares— Exclude fare/pricing (fares included by default)--via <id-or-name>— Via stop ID or name--stops— Show intermediate stops for each leg--scroll <token>— Scroll token for pagination (use scrollEarlier/scrollLater from output)--format json|table|plain
Check departures from a stop
bun run skills/rejseplanen/cli/src/cli.ts departures --stop <id> [flags]
Key flags:
--stop <id>— Stop ID from location search (required)--date <YYYY-MM-DD>— Date (default: today)--time <HH:MM>— Time (default: now)--duration <minutes>— Time window in minutes, 0-1439 (default: 60)--max <n>— Max results (default: 20)--format json|table|plain
Check arrivals at a stop
bun run skills/rejseplanen/cli/src/cli.ts arrivals --stop <id> [flags]
Same flags as departures.
Find nearby stops
bun run skills/rejseplanen/cli/src/cli.ts nearby --lat <latitude> --lon <longitude> [flags]
Key flags:
--lat <n>— Latitude (required)--lon <n>— Longitude (required)--radius <meters>— Search radius (default: 1000)--max <n>— Max results (default: 10)--format json|table|plain
Check service disruptions
bun run skills/rejseplanen/cli/src/cli.ts disruptions [flags]
Key flags:
--stop <id>— Filter by stop ID--line <name>— Filter by line--date <YYYY-MM-DD>— Date (default: today)--time <HH:MM>— Time (default: now)--max <n>— Max results (default: 20)--format json|table|plain
Natural workflow: location -> trip / departures / arrivals / nearby / disruptions
- Use
locationto find a stop and get its ID, or usenearbyto find stops near coordinates - Use
tripto plan a journey between two stops (fares included by default) - Use
departures/arrivalsto check schedules and real-time delays - Use
disruptionsto check for service alerts before traveling
# Step 1: find stop IDs
bun run skills/rejseplanen/cli/src/cli.ts location --query "København H"
bun run skills/rejseplanen/cli/src/cli.ts location --query "Aarhus H"
# Step 1 (alt): find nearby stops by coordinates
bun run skills/rejseplanen/cli/src/cli.ts nearby --lat 55.6727 --lon 12.5655
# Step 2: plan a trip (fares included by default)
bun run skills/rejseplanen/cli/src/cli.ts trip --origin "8600626" --destination "8600079"
# Step 3: check departures
bun run skills/rejseplanen/cli/src/cli.ts departures --stop "8600626"
# Step 4: check disruptions
bun run skills/rejseplanen/cli/src/cli.ts disruptions
Usage examples
Find a station
bun run skills/rejseplanen/cli/src/cli.ts location --query "Nørreport"
Plan a trip from Copenhagen to Aarhus
bun run skills/rejseplanen/cli/src/cli.ts trip --origin "København H" --destination "Aarhus H" --date 2026-03-20 --time 08:00
Next departures from København H
bun run skills/rejseplanen/cli/src/cli.ts departures --stop "8600626" --duration 30
Arrivals at Odense in table format
bun run skills/rejseplanen/cli/src/cli.ts arrivals --stop "8600067" --format table
Find stops near a location
bun run skills/rejseplanen/cli/src/cli.ts nearby --lat 55.6727 --lon 12.5655 --radius 500
Check current disruptions
bun run skills/rejseplanen/cli/src/cli.ts disruptions
Trip with intermediate stops via Odense
bun run skills/rejseplanen/cli/src/cli.ts trip --origin "København H" --destination "Aarhus H" --via "Odense" --stops
JSON output shapes
location output
{
"type": "rejseplanen_location",
"query": "København",
"locations": [
{
"id": "8600626",
"name": "København H",
"lat": 55.672778,
"lon": 12.564444,
"type": "ST"
}
],
"count": 1
}
trip output
{
"type": "rejseplanen_trip",
"origin": "København H",
"destination": "Aarhus H",
"date": "2026-03-20",
"time": "08:00",
"via": "Odense",
"scrollEarlier": "token...",
"scrollLater": "token...",
"trips": [
{
"origin": "København H",
"destination": "Aarhus H",
"departure": "08:12",
"arrival": "11:23",
"duration": "3:11",
"changes": 0,
"legs": [
{
"name": "IC 123",
"type": "IC",
"origin": "København H",
"destination": "Aarhus H",
"departure": "08:12",
"arrival": "11:23",
"track": "7",
"direction": "Aarhus H",
"cancelled": false,
"rtDeparture": null,
"rtArrival": null,
"delayed": true,
"delayMinutes": 5,
"notes": [{"type": "bike", "text": "Cykel reservation påkrævet"}],
"stops": [{"name": "Høje Taastrup St.", "arrival": "08:27", "departure": "08:28"}]
}
]
}
],
"tripCount": 1
}
departures output
{
"type": "rejseplanen_departures",
"stop": "8600626",
"date": "2026-03-20",
"time": "08:00",
"departures": [
{
"name": "IC 123",
"line": "IC",
"direction": "Aarhus H",
"date": "2026-03-20",
"time": "08:12",
"rtDate": null,
"rtTime": null,
"track": "7",
"cancelled": false,
"stopId": "8600626",
"delayed": true,
"delayMinutes": 5,
"notes": [{"type": "bike", "text": "Cykel reservation påkrævet"}]
}
],
"count": 1
}
arrivals output
{
"type": "rejseplanen_arrivals",
"stop": "8600626",
"date": "2026-03-20",
"time": "08:00",
"arrivals": [
{
"name": "IC 456",
"line": "IC",
"origin": "Aarhus H",
"date": "2026-03-20",
"time": "11:23",
"rtDate": null,
"rtTime": null,
"track": "7",
"cancelled": false,
"stopId": "8600626",
"delayed": true,
"delayMinutes": 5,
"notes": [{"type": "bike", "text": "Cykel reservation påkrævet"}]
}
],
"count": 1
}
nearby output
{
"type": "rejseplanen_nearby",
"lat": 55.672736,
"lon": 12.565558,
"radius": 1000,
"stops": [
{
"id": "8600626",
"name": "København H",
"lat": 55.672736,
"lon": 12.565558,
"dist": 120,
"type": "ST"
}
],
"count": 1
}
disruptions output
{
"type": "rejseplanen_disruptions",
"date": "2026-03-18",
"disruptions": [
{
"id": "HIM_123",
"subject": "Sporarbejde København H - Ringsted",
"message": "Full disruption text...",
"priority": 2,
"startDate": "2026-03-18",
"startTime": "04:00",
"endDate": "2026-03-20",
"endTime": "23:59",
"affectedStops": ["København H", "Ringsted St."],
"affectedLines": ["IC", "Re"]
}
],
"count": 1
}
Output formats
| Format | Best for |
|---|---|
json |
Default — programmatic use, full data |
table |
Quick human-readable overview |
plain |
Easy reading of individual items |
All errors are written to stderr as { "error": "...", "code": "..." } and the process exits with code 1.
Related skills