API
Every number the dashboard shows is available over HTTP: road works, transit disruptions, air quality, and the operations briefing, for your own locations or for any point in Flanders and Brussels. Usable entirely from the command line, with or without a Stadiq dashboard account.
Base URL
https://stadiq.app/api/v1Sign up
No dashboard account needed. Post your email, open the link we send, and your key is waiting in the developer portal. Existing Stadiq customers can skip this and create keys under Settings → API.
curl -X POST https://stadiq.app/api/v1/signup \
-H "Content-Type: application/json" \
-d '{"email":"you@company.be"}'Authentication
The key is shown once at creation. Store it as a secret and send it on every request.
Authorization: Bearer sq_live_…Every response carries X-RateLimit-Limit and X-RateLimit-Remaining. Quotas reset at 00:00 UTC. Responses are cacheable for 60 seconds.
Plans
Command line
The stadiq CLI wraps every endpoint below. It reads the key from ~/.stadiq/config.json or STADIQ_API_KEY, prints a readable summary by default and raw JSON with --json.
npm install -g stadiq
stadiq signup you@company.be # emails a link that creates your key
stadiq login sq_live_… # stores it in ~/.stadiq/config.json
stadiq disruptions --lat 51.2194 --lng 4.4025
stadiq briefing --location <id> --json | jq '.briefing.risk'Endpoints
MCP server
The same four endpoints as agent tools, over the Model Context Protocol. Drop this into Claude Desktop, Cursor or any MCP client and ask about a street directly. All tools are read-only.
{
"mcpServers": {
"stadiq": {
"command": "npx",
"args": ["-y", "stadiq-mcp"],
"env": { "STADIQ_API_KEY": "sq_live_…" }
}
}
}Example
curl -H "Authorization: Bearer sq_live_…" \
"https://stadiq.app/api/v1/disruptions?lat=51.2194&lng=4.4025"{
"location": { "lat": 51.2194, "lng": 4.4025 },
"radiusKm": 2,
"summary": {
"activeWorks": 3,
"plannedWorks": 5,
"upcomingWorks14d": 1,
"transitDisruptions": 2,
"highSeverityTransit": 1
},
"construction": [
{
"id": "gipod-…",
"description": "Rioleringswerken Nationalestraat",
"status": "In uitvoering",
"lat": 51.2181, "lng": 4.3996,
"distanceKm": 0.21,
"startDate": "2026-08-03", "endDate": "2026-09-14"
}
],
"transit": [
{
"id": "delijn-…",
"title": "Omleiding tram 4 — Sint-Jansplein",
"lines": ["4"],
"severity": "high",
"estimatedDelayMin": 8,
"endDate": "2026-08-20"
}
],
"retrievedAt": "2026-08-16T14:02:11.000Z"
}Errors
Errors return a JSON body with error and message.
Notes
- Coverage is Flanders and Brussels, the footprint of the underlying GIPOD, De Lijn and IRCELINE sources. Points outside it return
422rather than an empty result that would read as “nothing happening”. - API output is deterministic. The dashboard's AI-rephrased narrative layer is not part of this contract; the same coordinates always return the same computed numbers.
- Air-quality responses carry measured values only. Estimated and modelled figures shown in the product are excluded here.
- Keys are scoped to one account.
locationIdonly resolves against your own locations, so an API-only account useslat/lng.