Read-only access

The dashboard, in JSON.

Inspect the same bounded responses used by the interface—without starting a provider request or changing stored data.

dashboard-api

GET /traffic/latest?corridor=I25

200 OK · application/json

{
  "corridor": "I25",
  "polledAt": "…Z",
  "avgCurrentSpeed": 67.4
}
31
public GET routes
2
supported corridors
Bounded
deployment-set read limits
GET only
no stored changes

Request path

Bounded before it reaches the database

Every example stays inside the same rules used by the dashboard.

  1. 01Choosea corridor and view2 corridors
  2. 02Boundthe window or result counthistory ≤ 7 days
  3. 03Readcurrent and archived rowslive + archive
  4. 04Returnan explicit result or empty stateJSON / GeoJSON

Live explorer

Try a safe read

Nothing runs until you ask. These presets are read-only, small and already used by the product.

GET/dashboard-api/traffic/latest?corridor=I25&preferUsable=true

Uses the public dashboard route. It never contains provider credentials or private configuration.

ReadyChoose an example, then run it.
{
  "message": "A bounded response will appear here."
}

Endpoint catalog

Start with the question, not the controller

Thirteen useful starting points, grouped by the answer they return.

4 reads

What is happening now?

Live traffic, service health and provider capacity.

  • GET /traffic/latestlatest sample; use preferUsable=true
  • GET /traffic/summarytraffic, incidents and analytics together
  • GET /system/operational-statuscomponent state, reason and next action
  • GET /system/provider-statusTomTom guard and account capacity
4 reads

How has traffic changed?

Bounded history, trends and comparison patterns.

  • GET /traffic/historycorridor samples with optional incidents
  • GET /traffic/analytics/trendstime-bucketed corridor history
  • GET /traffic/zones/trendshistory for each configured speed zone
  • GET /traffic/zones/baselinesweekly refreshed 13-week profiles
5 reads

Where is it happening?

Road geometry, durable events and mapped flow cells.

  • GET /traffic/map/corridorstracked geometry and mile-marker calibration
  • GET /traffic/map/incidents/recentrecent events inside corridor bounds
  • GET /traffic/map/flow-cells/currentcurrent combined-direction half-mile cells
  • GET /traffic/map/variable-speed-limits/currentcurrent I-70 sign limits, direction and source/read times
  • GET /traffic/map/flow-cells/frequencylong-range slowdown frequency

Example request

I-70 · Two-hour history

GET/dashboard-api/traffic/history?corridor=I70&windowMinutes=120&limit=12&includeIncidents=false
samples[].polledAt
UTC · Newest first
samples[].avgCurrentSpeed
mph · Null means a gap
returned
Row count · 0 means no data

Up to 12 samples—not necessarily the full window. Incidents omitted.

Access model

Same data, two trust boundaries

Choose the prefix for the caller. The route suffix and response meaning stay the same.

No API key
Browser-safe public surface/dashboard-api

Available when public dashboard data is enabled, with the configured per-minute ceiling applied.

Caller
Dashboard and public tools
Limit
Deployment configured
X-API-Key
Configured client surface/api

Requires a valid key when API security is enabled for the deployment.

Caller
Approved integrations
Policy
Deployment controlled
Shared retained-data contractOne query layer, identical response meaning

Both prefixes read current and archive-inclusive data. Neither one starts a provider request or changes stored state.

  • JSON
  • GeoJSON
  • GET only

Response contract

Predictable edges make a friendlier API

Clients can distinguish an empty answer, a bad request and a busy public route.

200

Readable result

JSON response or a successful empty collection.

404

No retained sample

Some single-resource reads have nothing to return yet.

400

Outside the contract

Unsupported corridor, timestamp, window or limit.

429

Slow the polling loop

Per-minute public limit exceeded; honor Retry-After.

Built-in guardrails

Useful access without accidental provider spend.