Stib

View API Documentation

STIB is the main public transport operator in Brussels. It has its own open data platform which provides different data sets. The GTFS feed is used to provide the schedule of the vehicles. Contrary to the SNCB and other operators, the STIB does not provide a GTFS-RT feed. It provides different proprietary APIs to get the real-time data. The MobilityTwin.Brussels platform provides a vehicle_position endpoint which provides the estimated positions of the vehicles based on the GTFS feed and the proprietary APIs. It also provides the vehicle_schedule endpoint which provides the schedule of the vehicles per stop for a given period of time.

Source

Endpoints

Gtfs

/stib/gtfs
GTFS APPLICATION/ZIP

The GTFS zip file of STIB/MIVB

Refresh: Daily
From
2024-04-05 06:20:01
To
2026-08-31 06:20:07
Records
707

GTFS (Parquet)

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

The GTFS feed of STIB/MIVB 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.

Refresh: Daily (regenerated from the GTFS feed)
From
2024-04-05 06:20:01
To
2026-08-31 06:20:07
Records
689

Segments

/stib/segments
GEOJSON APPLICATION/JSON

The segments of the STIB/MIVB network

Refresh: Daily (derived from the STIB shapefile and stops)
From
2024-08-21 14:48:24
To
2026-08-31 05:20:01
Records
660

Stops

/stib/stops
GEOJSON APPLICATION/JSON

The stops of STIB/MIVB. The data was enriched and cleaned for easier use.

Refresh: Daily (derived from stops-by-line and stop-details)
From
2024-08-21 14:48:23
To
2026-08-31 02:20:00
Records
218

Vehicle distance

/stib/vehicle-distance
JSON APPLICATION/JSON

This endpoint provides the raw data of the STIB/MIVB proprietary API which returns the distance of each vehicle since the last stop.

Refresh: Every 20 seconds
From
2023-02-24 17:55:46
To
2026-08-31 07:14:42
Records
4,851,023

Vehicle position

/stib/vehicle-position
GEOJSON APPLICATION/JSON

The estimated positions of the vehicles based on the GTFS feed and the proprietary APIs. Because the STIB/MIVB proprietary API does not provide the identity of the vehicles, the MobilityTwin.Brussels platform also performs computations to attribute a unique identity to each vehicle along a given trip. These ids do not correspond to the ids of the GTFS feed but are rather generated randomly. The ids are unique for a given trip. To track a vehicle across consecutive queries, use the uuid field which remains stable for the duration of a trip.

Refresh: Every 20 seconds (computed from vehicle-distance)
From
2024-08-21 14:54:58
To
2026-08-31 07:12:58
Records
2,858,163

Punctuality

/stib/punctuality
PARQUET APPLICATION/OCTET-STREAM

Daily punctuality table for STIB/MIVB, reconstructed from the anonymous vehicle-distance feed. STIB publishes no GTFS-RT trip updates and no vehicle identity: the source is a set of positions every 20 seconds, each carrying only a line, a direction, the stop point last passed and the metres since. This table is therefore *derived*, not reported. Vehicles are recovered by aligning consecutive polls under the constraint that vehicles on a line do not overtake each other; stop calls are read where a vehicle's distance along the line crosses a stop; and GTFS trip ids are assigned by a second order-preserving alignment of the day's journeys against the day's timetable. Columns match the other operators' punctuality tables, with three appended: `journey_id`, `match_deviation_minutes`, and `observed`/`inferred`. Two limits are structural and must be read before use. **`cancelled` is always false and `trip_schedule_relationship` always 0** — the feed carries no cancellation signal at all, and an unmatched trip is equally evidence that the tracker lost the vehicle, so no cancellation is claimed rather than guessed. Do not compute a STIB cancellation rate from this table. **`observed` marks a measured time and `inferred` a derived one**; they are mutually exclusive, and a consumer wanting measurement only should filter on `observed`. Rows with neither carry a `missing_reason`. Typical quality, measured across 146 days spanning April 2024 to August 2026: about 92% of timetabled trips matched on days without a feed outage, 88% of scheduled stop calls carrying a measured time and 94% once inference is included, with a median match deviation of 1.3 minutes. Quality does not degrade with age. The denominator is the timetable, and since no cancellation signal exists, a trip that was short-turned or never ran keeps all of its scheduled calls.

Refresh: Daily (one file per Brussels service day)
From
2024-04-06 00:00:00
To
2024-12-07 00:00:00
Records
243

Speed

/stib/speed
JSON APPLICATION/JSON

The average speed of the vehicles of STIB/MIVB on a 20 seconds interval, per line, stop and direction.

Refresh: Every 20 seconds (computed from vehicle-distance)
From
2024-08-21 14:54:58
To
2026-08-31 07:14:20
Records
2,709,608

Aggregated speed

/stib/aggregated-speed
JSON APPLICATION/JSON

The average speed of the vehicles of STIB/MIVB on a 10 minutes interval, per line, stop and direction.

Refresh: Every 20 seconds (10-minute rolling average)
From
2024-08-21 15:01:24
To
2026-08-31 07:14:20
Records
2,621,087

Trips

/stib/trips
MF-JSON APPLICATION/JSON

All the trips of STIB/MIVB 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

Shapefile

/stib/shapefile
GEOJSON APPLICATION/JSON

The shapefile of STIB/MIVB

Refresh: Daily (derived from the STIB shapefile)
From
2024-08-21 14:48:24
To
2026-08-31 05:20:01
Records
714

Stop details

/stib/stop-details
JSON APPLICATION/JSON

Detailed information about each STIB/MIVB stop including GPS coordinates and names in French and Dutch.

Refresh: Daily
From
2026-04-29 11:31:03
To
2026-08-31 02:20:00
Records
107

Stops by line

/stib/stops-by-line
JSON APPLICATION/JSON

The ordered list of stops for each STIB/MIVB line, per direction.

Refresh: Daily
From
2026-04-29 11:31:02
To
2026-08-31 02:20:00
Records
107

Waiting times

/stib/waiting-times
JSON APPLICATION/JSON

Real-time waiting times at STIB/MIVB stops with expected arrival times per line and destination.

Refresh: Every 60 seconds
From
2026-03-30 11:00:43
To
2026-08-31 07:14:19
Records
281,560

Travellers information

/stib/travellers-information
JSON APPLICATION/JSON

Real-time traveller information messages and service alerts for STIB/MIVB lines and stops.

Refresh: Every 15 minutes
From
2026-03-30 11:15:23
To
2026-08-31 07:12:29
Records
10,377