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

# Page a carrier’s benchmark violations

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

The violations section of the safety benchmark on its own, paginated. Same peer framing and row shape as the parent endpoint, sorted worst over-index first.

## Path parameters

- `dot_number` string, required

## Query parameters

- `peer_group` string
- `peer_key` string
- `limit` integer
- `page` integer

## Response `200`

One page of violation standings

- SafetyBenchmarkViolationsPage
  - `dot_number` integer
  - `as_of` string, date, nullable
  - `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
  - `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.
  - `pagination` Pagination
    - `page` integer
    - `limit` integer
    - `total_results` integer
    - `total_pages` integer

## Other responses

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

---

[API](https://skmtc.net/runalphaloops/apis/alphaloops-fmcsa-carrier-data-api.md) · [All operations](https://skmtc.net/runalphaloops/apis/alphaloops-fmcsa-carrier-data-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/runalphaloops/alphaloops-fmcsa-carrier-data-api/revisions/ae58c064a7af/schema)
