# iRail

> Get live Belgian railway (SNCB/NMBS) information from iRail: departure and arrival boards, journey planning between stations, a train's stops and delays, its carriages, and current disruptions. No account or API key is required.

App · 6 actions. Web page: https://docs.lodol.com/docs/integrations/irail

## Actions

### Find stations

Look up stations by name in any of their official spellings, with each one's id, local name and coordinates. Leave the name empty to list every station.

**Inputs**

- Name (`query`, text): All or part of the station's name, for example Gent, Bruxelles or Luik. Case and accents don't matter.
- Number of stations (`limit`, number): How many stations to return, best match first. Defaults to 25. From 1 to 1000. Default: `25`.
- Language (`lang`, text): The language for station names and messages. One of: `en` (English), `nl` (Nederlands), `fr` (Français), `de` (Deutsch). Default: `en`.

**Outputs**

- `match_count` (number)
- `query` (text)
- `station_count` (number)
- `stations` (list)

**Example output**

```json
{
  "match_count": 1,
  "query": "Gent",
  "station_count": 1,
  "stations": [
    {
      "latitude": 51.035896,
      "link": "https://irail.be/stations/NMBS/008892007",
      "local_name": "Gent-Sint-Pieters",
      "longitude": 3.710675,
      "name": "Ghent-Sint-Pieters",
      "station_id": "BE.NMBS.008892007"
    }
  ]
}
```

### Find train connections

Plan a train journey between two stations: departure and arrival times, live delays, platforms, how long it takes, how many changes, and every train to take, with any service alerts.

**Inputs**

- From station (`from_station`, text, required): Where the trip starts.
- To station (`to_station`, text, required): Where the trip ends.
- Date (`date`, date): The day, in Belgian time. Leave empty for today.
- Time (`time`, time): The time of day in Belgian time, for example 08:12. Leave empty for now.
- Time is (`time_is`, text): Whether the time is when you leave or when you must arrive. One of: `departure` (Leave at this time), `arrival` (Arrive by this time). Default: `departure`.
- Trains to include (`transport`, text): Which kinds of trains the planner may use. One of: `automatic` (Best for the trip (domestic trains within Belgium)), `trains` (All trains, including international ones), `nointernationaltrains` (No international trains), `all` (All transport types). Default: `automatic`.
- Number of connections (`limit`, number): How many connections to return, earliest first. Defaults to 6. From 1 to 12. Default: `6`.
- Language (`lang`, text): The language for station names and messages. One of: `en` (English), `nl` (Nederlands), `fr` (Français), `de` (Deutsch). Default: `en`.

**Outputs**

- `connection_count` (number)
- `connections` (list)
- `from_station` (text)
- `from_station_id` (text)
- `to_station` (text)
- `to_station_id` (text)

**Example output**

```json
{
  "connection_count": 1,
  "connections": [
    {
      "alerts": [],
      "arrival_delay_minutes": 2,
      "arrival_platform": "1",
      "arrival_platform_changed": false,
      "cancelled": false,
      "delayed": true,
      "departure_delay_minutes": 0,
      "departure_platform": "11",
      "departure_platform_changed": false,
      "duration_minutes": 36,
      "expected_arrival_at": "2026-10-16T08:50:00+02:00",
      "expected_arrival_time": "08:50",
      "expected_departure_at": "2026-10-16T08:12:00+02:00",
      "expected_departure_time": "08:12",
      "from_station": "Ghent-Sint-Pieters",
      "from_station_id": "BE.NMBS.008892007",
      "legs": [
        {
          "arrival_delay_minutes": 2,
          "arrival_platform": "1",
          "arrival_platform_changed": false,
          "cancelled": false,
          "departure_delay_minutes": 0,
          "departure_platform": "11",
          "departure_platform_changed": false,
          "direction": "Hasselt",
          "expected_arrival_at": "2026-10-16T08:50:00+02:00",
          "expected_arrival_time": "08:50",
          "expected_departure_at": "2026-10-16T08:12:00+02:00",
          "expected_departure_time": "08:12",
          "from_station": "Ghent-Sint-Pieters",
          "from_station_id": "BE.NMBS.008892007",
          "intermediate_stop_count": 1,
          "occupancy": "low",
          "scheduled_arrival_at": "2026-10-16T08:48:00+02:00",
          "scheduled_arrival_time": "08:48",
          "scheduled_departure_at": "2026-10-16T08:12:00+02:00",
          "scheduled_departure_time": "08:12",
          "to_station": "Brussels-Central",
          "to_station_id": "BE.NMBS.008813003",
          "train": "IC 1519",
          "train_id": "IC1519",
          "train_number": "1519",
          "train_type": "IC",
          "walking": false
        }
      ],
      "remarks": [],
      "scheduled_arrival_at": "2026-10-16T08:48:00+02:00",
      "scheduled_arrival_time": "08:48",
      "scheduled_departure_at": "2026-10-16T08:12:00+02:00",
      "scheduled_departure_time": "08:12",
      "to_station": "Brussels-Central",
      "to_station_id": "BE.NMBS.008813003",
      "trains": [
        "IC 1519"
      ],
      "transfers": 0
    }
  ],
  "from_station": "Ghent-Sint-Pieters",
  "from_station_id": "BE.NMBS.008892007",
  "to_station": "Brussels-Central",
  "to_station_id": "BE.NMBS.008813003"
}
```

### Get disruptions and planned works

List the current disruptions and planned works on the Belgian railways, newest first, with a link to each notice. Narrow it to unplanned disruptions or to notices mentioning a station or line.

**Inputs**

- Show (`notice_type`, text): Which notices to list. One of: `all` (Everything), `disruptions` (Unplanned disruptions), `planned_works` (Planned works). Default: `all`.
- Only those mentioning (`mentioning`, text): Only list notices whose title or text mentions this, for example a station such as Leuven. Leave empty for all.
- Number of notices (`limit`, number): How many notices to return, newest first. Defaults to 50. From 1 to 200. Default: `50`.
- Language (`lang`, text): The language for station names and messages. One of: `en` (English), `nl` (Nederlands), `fr` (Français), `de` (Deutsch). Default: `en`.

**Outputs**

- `disruption_count` (number)
- `disruptions` (list)
- `match_count` (number)
- `planned_count` (number)
- `unplanned_count` (number)

**Example output**

```json
{
  "disruption_count": 1,
  "disruptions": [
    {
      "description": "Delays are possible.\nWe are awaiting information by a technical team.\n\nCause: failure of the signaling device in Tilly.",
      "link": "http://www.belgianrail.be/jp/nmbs-realtime/help.exe/en?tpl=showmap_external&tplParamHimMsgInfoGroup=trouble&messageID=114299",
      "published_at": "2026-10-15T19:26:52+02:00",
      "title": "Ottignies - Charleroi-Central: Delays",
      "type": "disruption"
    }
  ],
  "match_count": 1,
  "planned_count": 0,
  "unplanned_count": 1
}
```

### Get live departures or arrivals

Read a Belgian station's live departure or arrival board: each train's time, destination or origin, platform, delay in minutes and whether it is cancelled or its platform changed. Pick a date and time to look ahead.

**Inputs**

- Station (`station`, text, required): The station to read the board of.
- Show (`board`, text): Trains leaving the station, or trains arriving there. One of: `departures`, `arrivals`. Default: `departures`.
- Date (`date`, date): The day, in Belgian time. Leave empty for today.
- Time (`time`, time): The time of day in Belgian time, for example 08:12. Leave empty for now.
- Number of trains (`limit`, number): How many trains to return, soonest first. Defaults to 20. From 1 to 100. Default: `20`.
- Language (`lang`, text): The language for station names and messages. One of: `en` (English), `nl` (Nederlands), `fr` (Français), `de` (Deutsch). Default: `en`.

**Outputs**

- `board` (text)
- `cancelled_count` (number)
- `delayed_count` (number)
- `station` (text)
- `station_id` (text)
- `train_count` (number)
- `trains` (list)

**Example output**

```json
{
  "board": "departures",
  "cancelled_count": 0,
  "delayed_count": 1,
  "station": "Ghent-Sint-Pieters",
  "station_id": "BE.NMBS.008892007",
  "train_count": 1,
  "trains": [
    {
      "arrived": null,
      "cancelled": false,
      "delay_minutes": 3,
      "delayed": true,
      "departed": false,
      "destination": "Antwerp-Central",
      "destination_id": "BE.NMBS.008821006",
      "expected_at": "2026-10-16T08:15:00+02:00",
      "expected_time": "08:15",
      "extra_train": false,
      "occupancy": "medium",
      "origin": null,
      "origin_id": null,
      "platform": "5",
      "platform_changed": false,
      "scheduled_at": "2026-10-16T08:12:00+02:00",
      "scheduled_time": "08:12",
      "train": "IC 3041",
      "train_id": "IC3041",
      "train_number": "3041",
      "train_type": "IC"
    }
  ]
}
```

### Get train composition

See how today's run of a train is made up: how many carriages, first- and second-class seats, and which carriages have toilets, bike space or wheelchair space, for each part of its route.

**Inputs**

- Train (`train`, text, required): The train number as the departure board shows it, for example IC 1519. Spaces and lower case are fine, and the train_id from another iRail step works too.

**Outputs**

- `carriage_count` (number)
- `first_class_seats` (number)
- `has_bike_section` (true/false)
- `has_toilets` (true/false)
- `has_wheelchair_section` (true/false)
- `length_meters` (number)
- `second_class_seats` (number)
- `segment_count` (number)
- `segments` (list)
- `train_id` (text)

**Example output**

```json
{
  "carriage_count": 1,
  "first_class_seats": 0,
  "has_bike_section": true,
  "has_toilets": false,
  "has_wheelchair_section": false,
  "length_meters": 27.0,
  "second_class_seats": 110,
  "segment_count": 1,
  "segments": [
    {
      "carriage_count": 1,
      "carriages": [
        {
          "air_conditioning": true,
          "bike_section": true,
          "first_class_seats": 0,
          "heating": true,
          "length_meters": 27.0,
          "model": "M7",
          "number": "75077",
          "position": 1,
          "power_outlets": true,
          "priority_seats": false,
          "second_class_seats": 110,
          "standing_places": 0,
          "toilets": false,
          "type": "M7BXH",
          "wheelchair_section": false
        }
      ],
      "first_class_seats": 0,
      "from_station": "Blankenberge",
      "from_station_id": "BE.NMBS.008891405",
      "has_bike_section": true,
      "has_toilets": false,
      "has_wheelchair_section": false,
      "length_meters": 27.0,
      "second_class_seats": 110,
      "to_station": "Hasselt",
      "to_station_id": "BE.NMBS.008831005"
    }
  ],
  "train_id": "IC1519"
}
```

### Get train status

Follow one train: its current delay, whether it is cancelled, where it is, and every stop with times, delays and platforms. Pick your station to get that stop on its own, for example to be told when your 8:12 is late.

**Inputs**

- Train (`train`, text, required): The train number as the departure board shows it, for example IC 1519. Spaces and lower case are fine, and the train_id from another iRail step works too.
- Date (`date`, date): The day the train runs, in Belgian time. Leave empty for today.
- Your station (`station`, text): Optional. A station the train stops at; its stop is returned as 'stop'.
- Language (`lang`, text): The language for station names and messages. One of: `en` (English), `nl` (Nederlands), `fr` (Français), `de` (Deutsch). Default: `en`.

**Outputs**

- `cancelled` (true/false)
- `date` (text)
- `delay_minutes` (number)
- `destination` (text)
- `finished` (true/false)
- `last_station` (text)
- `latitude` (number)
- `longitude` (number)
- `next_stop` (text)
- `origin` (text)
- `partly_cancelled` (true/false)
- `stop` (object)
- `stop_count` (number)
- `stops` (list)
- `train` (text)
- `train_id` (text)
- `train_number` (text)
- `train_type` (text)

**Example output**

```json
{
  "cancelled": false,
  "date": "2026-10-16",
  "delay_minutes": 3,
  "destination": "Hasselt",
  "finished": false,
  "last_station": "Bruges",
  "latitude": 51.197226,
  "longitude": 3.216726,
  "next_stop": "Ghent-Sint-Pieters",
  "origin": "Blankenberge",
  "partly_cancelled": false,
  "stop": {
    "arrival_cancelled": false,
    "arrival_delay_minutes": 3,
    "arrived": false,
    "cancelled": false,
    "departed": false,
    "departure_cancelled": false,
    "departure_delay_minutes": 3,
    "expected_arrival_at": "2026-10-16T08:13:00+02:00",
    "expected_arrival_time": "08:13",
    "expected_departure_at": "2026-10-16T08:15:00+02:00",
    "expected_departure_time": "08:15",
    "extra_stop": false,
    "occupancy": "low",
    "platform": "11",
    "platform_changed": false,
    "scheduled_arrival_at": "2026-10-16T08:10:00+02:00",
    "scheduled_arrival_time": "08:10",
    "scheduled_departure_at": "2026-10-16T08:12:00+02:00",
    "scheduled_departure_time": "08:12",
    "station": "Ghent-Sint-Pieters",
    "station_id": "BE.NMBS.008892007"
  },
  "stop_count": 1,
  "stops": [
    {
      "arrival_cancelled": false,
      "arrival_delay_minutes": 3,
      "arrived": false,
      "cancelled": false,
      "departed": false,
      "departure_cancelled": false,
      "departure_delay_minutes": 3,
      "expected_arrival_at": "2026-10-16T08:13:00+02:00",
      "expected_arrival_time": "08:13",
      "expected_departure_at": "2026-10-16T08:15:00+02:00",
      "expected_departure_time": "08:15",
      "extra_stop": false,
      "occupancy": "low",
      "platform": "11",
      "platform_changed": false,
      "scheduled_arrival_at": "2026-10-16T08:10:00+02:00",
      "scheduled_arrival_time": "08:10",
      "scheduled_departure_at": "2026-10-16T08:12:00+02:00",
      "scheduled_departure_time": "08:12",
      "station": "Ghent-Sint-Pieters",
      "station_id": "BE.NMBS.008892007"
    }
  ],
  "train": "IC 1519",
  "train_id": "IC1519",
  "train_number": "1519",
  "train_type": "IC"
}
```
