Skip to main content
GET
Returns full carrier details including address, contact, fleet, authority, safety summary, insurance summary, a composite risk score, related companies linked by shared officers/phone/email/address, and chameleon-carrier signals.
string
required
The carrier’s USDOT number
string
Reconstruct the carrier as it appeared at the given date (YYYY-MM-DD or RFC3339). See Point-in-time queries below. Default behavior (no as_of) returns current state.

Risk Score

The risk_score object is a composite 0–100 trust score derived from three components: Compliance (40%), Safety (35%), and Insurance (25%). Higher scores mean higher trust. Hard caps apply after scoring: inactive carriers are capped at 15, carriers with pending revocation at 35, active carriers with no BIPD insurance at 35, a detected chameleon link at 45, and carriers with a prior revocation at 55. The breakdown always reconstructs a number: when cap is absent, sum(score × weight) / sum(weight) rounds to score; when cap is present, it rounds to cap.uncapped_score and score equals cap.value. For example, a carrier whose components average 81 but has no active BIPD filing returns "score": 35 with "cap": { "value": 35, "reason": "NO_BIPD", "uncapped_score": 81 }. If pending revocation and no BIPD both bind at 35, reason is PENDING_REVOCATION.
Need to score against stricter thresholds than the federal minimums (e.g. require $1M BIPD)? Use POST /v1/carriers/{dot}/risk-score with a custom policy body.
Need to see how the score has moved over time? Use GET /v1/carriers/{dot}/risk-history for per-ETL snapshots.
The related_companies array lists carriers linked to the subject carrier via shared company officers, phone numbers, email addresses, email domains, physical addresses, or mailing addresses. Each entry includes a match_types array listing every match dimension (e.g. ["officer", "phone"]). Possible match type values: officer, phone, email, email_domain, address, mailing_address. The chameleon_links array surfaces potential successor/predecessor relationships — carriers that share enough identifying signals (address, officer name, phone, email) with another DOT that one may have been re-registered after the other’s authority was revoked. Each entry includes:

Point-in-Time (?as_of=)

Pass ?as_of=2026-04-15 (or RFC3339 like 2026-04-15T12:00:00Z) to reconstruct the carrier as it appeared on that date. The response shape is identical, with an extra top-level as_of block describing the reconstruction.

What’s reconstructed

  • Identity (legal_name, dba_name, officers), authority (carrier_status, authority_status, broker_authority_status), revocation flags, contact (street, city, state, phone, email), and fleet size (subject to the recording threshold above) — all backward-replayed from etl_changes.
  • Insurance — filtered to policies that were in force at as_of based on each policy’s effective_date / expiration_date.

What’s NOT reconstructed

  • risk_score is omitted (set to null). Some scoring inputs (notably mcs150_date) are not tracked in the change feed, so a recomputed score would mix historical authority with current MCS-150 staleness and lie. Compose with /risk-history instead.
  • safety, safety_full — current values, not point-in-time. The safety table is rebuilt every ETL run with no historical snapshot.
  • chameleon_links, related_companies — current-state derivative signals, omitted entirely.
  • mcs150, mc_number, entity_type, equipment breakdown, mailing address, ZIP, prior-revocation flags — current values.
The full caveat list is enumerated in as_of.limitations on every response, so consumers can render disclaimers without hardcoding the list.

Errors