← Stadiq

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/v1

Sign 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

DeveloperFree100 calls / day
Self-serve sign-up, no card. Enough to build and evaluate against.
API€29 / month10,000 calls / day
Production volume, API only. Upgrade from the developer portal.
Pro€49 / month10,000 calls / day
The full dashboard, alerts and PDF reports, with API access included.
EnterpriseOn requestUnlimited
Custom contract, 365-day history, custom integrations. Signed-in customers can start the conversation under Settings, Billing; otherwise email team@stadiq.app.

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

GET /locations
The monitored locations on your account.
Returns: id, name, address, lat, lng, label, isPrimary
GET /disruptions
Road works within 2 km and transit disruptions affecting the point.
locationIdOne of your location ids. Mutually exclusive with lat/lng.
lat, lngAny point inside the service area.
Returns: summary counts, construction[], transit[]
GET /air-quality
Latest reading from the nearest IRCELINE station, plus LEZ status.
locationIdOne of your location ids.
lat, lngAny point inside the service area.
Returns: reading, thresholds, compliance, lez
GET /briefing
Operations briefing for the point: risk level, key facts, best and worst 24h windows.
locationIdOne of your location ids.
lat, lngAny point inside the service area.
Returns: risk, headline, keyFacts[], bestWindow, worstWindow, nextRushPeak

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.

401
missing_key / invalid_key
No Bearer token, or the key is unknown or revoked.
403
plan_required
The account's plan does not include API access.
404
location_not_found
That locationId does not belong to your account.
400
missing_target / invalid_coordinates
Neither locationId nor a valid lat/lng pair was given.
422
outside_service_area
Coordinates fall outside Flanders and Brussels.
429
quota_exceeded
Daily call quota reached. Resets at 00:00 UTC.
502
upstream_error
An upstream source (GIPOD, De Lijn, IRCELINE) failed. Retry shortly.

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. locationId only resolves against your own locations, so an API-only account uses lat/lng.