Sncb

View API Documentation

SNCB is the national railway company of Belgium. It is an autonomous government company. It is responsible for the operation of the national railway system. It provides a GTFS and GTFS-RT feed. The MobilityTwin.Brussels platform enriches these by providing estimated positions of the trains based on the GTFS-RT feed.

Source

Endpoints

Vehicle position

/sncb/vehicle-position
GEOJSON APPLICATION/JSON

The estimated positions of SNCB/NMBS trains: where the timetable (GTFS) has each train at the moment of every GTFS-RT poll, placed along Infrabel's track segments. Realtime delays are not applied, since the realtime feed's trip ids match the timetable for only about half the trains.

Refresh: Every 20 seconds (derived from the GTFS-RT feed)
From
2024-08-21 14:54:59
To
2026-10-11 00:14:51
Records
3,184,423

Trips

/sncb/trips
MF-JSON APPLICATION/JSON

All the trips of SNCB for the specified period of time. This is an aggregate of the GeoJSON files returned by the vehicle-position endpoint of MobilityTwin.Brussels.

Refresh: On request — aggregated from vehicle-position over the queried interval
Availability depends on source data

Gtfs

/sncb/gtfs
GTFS APPLICATION/ZIP

The GTFS zip file of SNCB/NMBS. SNCB publishes no shapes.txt (optional in GTFS); train paths are available from infrabel/segments.

Refresh: Daily
From
2024-08-21 14:52:00
To
2026-10-10 02:10:03
Records
712

GTFS (Parquet)

/sncb/gtfs-parquet
GTFS-PARQUET APPLICATION/ZIP

The GTFS feed of SNCB/NMBS converted to Apache Parquet format (zip archive of .parquet files). Parquet uses columnar storage with zstd compression and strong typing, resulting in 40-75% smaller files compared to the original GTFS zip. This format enables extremely efficient data transfer and near-zero RAM overhead when reading specific columns via Polars or DuckDB, making it ideal for analytical workloads and large-scale processing. Produced using gtfs-parquet v0.4.0. No shapes table: SNCB publishes no shapes.txt.

Refresh: Daily (regenerated from the GTFS feed)
From
2024-08-21 14:52:00
To
2026-10-10 02:10:03
Records
693

GTFS-RT

/sncb/gtfs-realtime
GTFS-RT APPLICATION/OCTET-STREAM

The GTFS-RT binary file of SNCB/NMBS

Refresh: Every 20 seconds
From
2024-08-21 14:54:59
To
2026-10-11 00:14:51
Records
3,182,512

GTFS-RT Alerts

/sncb/gtfs-rt-alert
GTFS-RT APPLICATION/OCTET-STREAM

Real-time service alerts for SNCB/NMBS trains (delays, cancellations, disruptions).

Refresh: Every 15 minutes
From
2026-03-30 11:01:24
To
2026-10-11 00:07:13
Records
15,510

GTFS-RT Trip updates

/sncb/gtfs-rt-trip-update
GTFS-RT APPLICATION/OCTET-STREAM

Real-time trip updates for SNCB/NMBS trains including schedule deviations and cancellations, as re-published by the Belgian Mobility API. That re-publication keeps only the trips whose id matches its own SNCB timetable exactly, about a fifth of the trains (ids prefixed gt:nmbssncb:, each with its full stop list); gtfs-realtime carries every train, straight from SNCB.

Refresh: Every 20 seconds
From
2026-03-30 11:00:46
To
2026-10-11 00:14:52
Records
773,126

Punctuality

/sncb/punctuality
PARQUET APPLICATION/OCTET-STREAM

Daily punctuality table derived from SNCB/NMBS's GTFS-RT trip-update stream over a full Brussels-day window. Each row represents one (trip, stop) observation with the latest known arrival/departure times, delays, and schedule_relationship — plus a synthetic row per cancelled trip when the feed signals cancellation without stop-time entries. Single Parquet file (zstd-compressed). Read with Polars, DuckDB or PyArrow. Trip ids are the realtime feed's: they lack the `gt:nmbssncb:` prefix of the published GTFS and often end with a different validity date, so join on the id without the prefix and without its last `:` component. From 2026-09-30, `route_id` is filled from the timetable where the trip matches (about 90%). `direction_id` and `stop_sequence` are always null: SNCB publishes neither, in realtime or in its timetable.

Refresh: Daily (one file per Brussels-day, anchored to 00:00 Europe/Brussels)
From
2024-08-22 00:00:00
To
2026-10-11 00:00:00
Records
687