Skip to main content
GET
Returns the persisted history of a carrier’s risk score. A new row is written by the daily ETL only when the score, grade, tier, or flag set changes — not on every run — so the history reads as a clean trend of material events.
History is store-on-change. A flag appearing or disappearing counts as a material event even when the numeric score is unchanged; component sub-score drift does not.
string
required
The carrier’s USDOT number
integer
default:"50"
Maximum rows to return. Clamped to [1, 200]; malformed input falls back to the default.
Rows are returned newest first. Carriers with no recorded history (e.g. a brand-new DOT, or a query against a database before its first ETL has run) get {"data": []} — the response is shape-stable, not a 404.

Fields

Pairing with ?as_of=

For an evidence-packet workflow (“what was the score on the day we dispatched the load?”), combine this endpoint with point-in-time carrier lookup:
  1. Hit GET /v1/carriers/{dot}?as_of=2026-04-15 for identity, authority, and insurance as of that date.
  2. Hit GET /v1/carriers/{dot}/risk-history and pick the newest row whose computed_at <= 2026-04-15 for the score on that day.
The carrier ?as_of= response intentionally omits risk_score because some scoring inputs (e.g. MCS-150 date) are not point-in-time — composing with this endpoint is the honest path.

Horizon

GET /v1/meta exposes risk_history_horizon (the earliest computed_at in the table) and risk_history_rows. The horizon represents the date Phase 3 first deployed; queries return an empty array for carriers with no history rows, but never a 404.