---
title: "Get a carrier’s safety benchmark"
method: GET
path: "/v1/carriers/{dot_number}/safety-benchmark"
---

# Get a carrier’s safety benchmark

`GET /v1/carriers/{dot_number}/safety-benchmark`

## Request

- Base URL: `https://api.runalphaloops.com`
- URL: `https://api.runalphaloops.com/v1/carriers/{dot_number}/safety-benchmark`
- Auth: HTTP bearer
- TypeScript: <https://skmtc.dev/runalphaloops/apis/alphaloops-fmcsa-carrier-data-api/docs/v1/carriers/:dot_number/safety-benchmark/get.ts> (a function with typed inputs; its response is checked against the schema)

A carrier’s safety standing: a FIXED overall score and letter grade (computed once against the canonical peer model — it never changes with the lens) plus a peer comparison re-framed against whichever peer_group you pick. Percentiles are always oriented so 100 is best. Check peer_group.reliable before presenting comparisons; thin buckets (n < 384) are returned flagged, never hidden. Data refreshes weekly (as_of). 404 no_benchmark means the carrier has no inspection history, not an invalid DOT.

## Path parameters

- `dot_number` string, required

## Query parameters

- `peer_group` string
- `include` string
- `peer_key` string
- `violations_limit` integer

## Response `200`

Fixed standing plus the requested sections framed by the chosen lens

- SafetyBenchmarkResponse
  - `dot_number` integer
  - `as_of` string, date, nullable: Weekly data vintage
  - `carrier` object
    - `name` string, nullable
    - `profile` object: The carrier’s axis values (region, carrier_type, fleet_size, radius, equipment, cab, mileage)
  - `peer_group` ResolvedPeerGroup: The peer frame the comparison was placed in.
    - `group_type` string
    - `label` string
    - `peer_key` string, nullable: The carrier’s bucket within the lens; null when unresolvable
    - `n` integer, nullable: Bucket size
    - `reliable` boolean: n >= 384; thin buckets are returned flagged, never hidden
    - `available` boolean: false when the carrier’s profile is missing an axis this lens needs — the fixed grade still returns, only the comparison is omitted
  - `overall` object: FIXED — computed against the canonical peer model; never moves with peer_group
    - `score` number, nullable
    - `grade` string, nullable
    - `peer_percentile` number, nullable: Standing within the chosen lens (mean of scored metric percentiles)
    - `industry_percentile` number, nullable
    - `data_confidence` string, nullable
  - `categories` object: Key set is whatever the pipeline emitted — do not hardcode it
  - `metrics` SafetyBenchmarkMetric[]
    - `metric` string
    - `label` string, nullable
    - `units` string, nullable
    - `carrier_value` number, nullable
    - `percentile` number, nullable: Oriented so 100 is always best
    - `direction` 'lower_is_better' | 'higher_is_better': Orientation of the RAW value
    - `scored` boolean: Whether this metric feeds the overall peer percentile
    - `percentile_source` 'precomputed' | 'interpolated' | 'null', nullable: precomputed = the pipeline’s own number (canonical lenses, matches the grade); interpolated = placed inside the lens’s quantile distribution
    - `peer` object, nullable
      - `n` integer, nullable
      - `median` number, nullable
      - `boxplot` object, nullable
        - `min` number
        - `p10` number
        - `p25` number
        - `p50` number
        - `p75` number
        - `p90` number
        - `max` number
  - `violations` SafetyBenchmarkViolation[]
    - `unit` string, nullable
    - `unit_id` string
    - `family` string, nullable
    - `basic` string, nullable: FMCSA BASIC category
    - `severity` number, nullable
    - `eligible_denominator` boolean: true when both sides used the eligible-inspection denominator (vehicle-condition families are only citable at CVSA levels 1/2/5)
    - `carrier` object
      - `times_cited` integer, nullable
      - `last_cited_date` string, date, nullable
      - `days_since` integer, nullable
      - `trend_direction` string, nullable
      - `trend_slope_per_yr` number, nullable
      - `rate_per_1k` number, nullable: The rate the carrier is judged on, per the eligible_denominator rule
      - `total_inspections` integer, nullable
      - `q_citations` number[], nullable: Trailing quarters, oldest first
      - `q_inspections` number[], nullable
      - `q_inspections_eligible` number[], nullable
    - `peer` object, nullable: null when the lens resolves no bucket for this family
      - `rate_per_1k` number, nullable
      - `rate_per_1k_eligible` number, nullable
      - `oos_pct` number, nullable
      - `group_carriers` integer, nullable
      - `group_inspections` integer, nullable
      - `low_sample` boolean
      - `q_rate_per_1k` number[], nullable
      - `q_starts` string[], nullable
    - `over_index` number, nullable: carrier rate ÷ peer rate: 1.0 = at peer, 2.0 = double. Always computed from matched denominators; null when the peer side is missing.
  - `violations_truncated` boolean
  - `flags` object
    - `low_sample` boolean
    - `litigation_notes` string[]
    - `data_limitations` string[]

## Other responses

- `400`: Invalid parameters
- `401`: Invalid or missing API key
- `404`: Carrier has no inspections and therefore no safety benchmark
- `429`: Too many requests. Check X-RateLimit-Remaining and Retry-After headers.

## Changes

- **2026-08-18** `ae58c064a7af`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/runalphaloops/apis/alphaloops-fmcsa-carrier-data-api/changes/v1/carriers/:dot_number/safety-benchmark/get.md)

---

[API](https://skmtc.dev/runalphaloops/apis/alphaloops-fmcsa-carrier-data-api.md) - [All operations](https://skmtc.dev/runalphaloops/apis/alphaloops-fmcsa-carrier-data-api/llms.txt) - [OpenAPI document](https://skmtc.dev/runalphaloops/apis/alphaloops-fmcsa-carrier-data-api/revisions/ae58c064a7af?raw)
