CarrierOk

BASIC Percentiles API — all 7 FMCSA safety scores for any carrier.

BASIC percentiles are how FMCSA’s CSA program scores carrier safety against peers. FMCSA’s APIs return none of the seven and the public SMS site displays five; CarrierOk computes all seven and returns them in one REST call, with alert flags, intervention thresholds, raw measures, and history.

The short answer

BASIC percentiles rank a carrier against its safety peer group in each of seven categories. FMCSA's public SMS site withholds two of the seven, and FMCSA's own APIs return none of them. CarrierOk computes all seven from the underlying measure and violation data and returns them, with alert flags, on every profile.

The seven
Unsafe Driving, Hours of Service, Driver Fitness, Controlled Substances, Vehicle Maintenance, Hazardous Materials and Crash Indicator.
The withheld two
FMCSA's public SMS site does not display Crash Indicator or Hazardous Materials percentiles. CarrierOk computes and returns both.
What the API returns
Each percentile as a decimal, an alert flag where the percentile crosses FMCSA's intervention threshold, and the underlying measure behind it.
Missing is not zero
A BASIC with too little data to score returns null rather than zero, so code never reads an unscored group as a clean one.
How to get it
GET /v2/profile returns all seven with the rest of the record. A free sandbox key is issued at signup with no card.
The Scores

What are BASIC percentiles?

BASIC stands for Behavior Analysis and Safety Improvement Category, the seven dimensions FMCSA’s CSA program uses to score carrier safety. For each BASIC, a carrier is ranked against a peer group with similar operations and inspection counts; the percentile says what share of its peers it performs worse than. Cross the BASIC’s intervention threshold and it is in alert. Alerts drive roadside attention and the ISS score.

The demo carrier below, the same one in the response sample further down, carries two BASICs over threshold and two without enough data to score.

Unsafe Driving

basic_percentile_unsafe_driving

Speeding, recklessness, improper lane changes, and failure to obey traffic control devices.

Alert threshold: 65% (general freight)

HOS Compliance

basic_percentile_hours_of_service

Hours-of-Service violations including logbook falsification and ELD non-compliance.

Alert threshold: 65% (general freight)

Crash Indicator

basic_percentile_crash_indicator

Crash history and severity relative to peer carriers. Withheld from the public SMS site; computed in-house.

Alert threshold: 65% (general freight)

Driver Fitness

basic_percentile_driver_fitness

Invalid CDLs, disqualified drivers, and failure to meet FMCSA driver qualification requirements.

Alert threshold: 80% (general freight)

Controlled Substances

basic_percentile_controlled_substance

Drug and alcohol violations detected during roadside inspections.

Alert threshold: 80% (general freight)

Vehicle Maintenance

basic_percentile_vehicle_maintence

Brake violations, tire defects, lighting failures, and cargo securement issues. Field spelling (vehicle_maintence) matches the API.

Alert threshold: 80% (general freight)

Hazmat Compliance

basic_percentile_hazardous_materials

Hazardous materials handling violations: placarding, packaging, and documentation. Withheld from the public SMS site; computed in-house.

Alert threshold: 80% (general freight)

The most common misread: a blank BASIC is not a clean one. A percentile is absent when FMCSA lacks the inspections to score it: the response returns no percentile, an alert flag of false, and an intervention threshold of 0.0 for that category.

API Reference

All 7 BASICs. One request.

Pass a DOT or MC docket number. Get back all 7 BASIC percentiles with alert flags, the thresholds that apply to the carrier’s segment, and the raw measures behind the ranks, ready for your qualification logic.

api.carrierok.com
Request
# Get all 7 BASIC scores by DOT number
curl "https://api.carrierok.com/v2/profile?dot_number=1234567" \
  -H "Authorization: Bearer YOUR_API_KEY"

# Get all 7 BASIC scores by MC docket number
curl "https://api.carrierok.com/v2/profile?docket_number=8765432" \
  -H "Authorization: Bearer YOUR_API_KEY"

# Search by company name, phone, EIN, VIN, email, or address
curl "https://api.carrierok.com/v2/profile?company=APEX+TRANSPORT" \
  -H "Authorization: Bearer YOUR_API_KEY"
Response200 OK
{
  "total_count": 1,
  "items": [{
    "dot_number": "1234567",
    "docket": "MC8765432",
    "legal_name": "APEX TRANSPORT LLC",
    "basic_percentile_unsafe_driving": 0.84,
    "basic_percentile_hours_of_service": 0.29,
    "basic_percentile_vehicle_maintence": 0.83,
    "basic_percentile_driver_fitness": 0.58,
    "basic_percentile_crash_indicator": 0.62,
    "basic_alert_unsafe_driving": true,
    "basic_alert_hours_of_service": false,
    "basic_alert_vehicle_maintence": true,
    "basic_alert_driver_fitness": false,
    "basic_alert_crash_indicator": false,
    "basic_measure_unsafe_driving": "12.64",
    "basic_measure_vehicle_maintence": "10.41",
    "intervention_threshold_unsafe_driving": 0.65,
    "intervention_threshold_vehicle_maintence": 0.8,
    "intervention_threshold_controlled_substance": 0.0,
    "basic_history": ["...month-end BASIC snapshots for trend analysis..."],
    "iss_value": "82",
    "iss_recommendation": "INSPECT",
    "...": "300+ fields per record; full list in the data dictionary"
  }]
}
Why All Seven

Zero from the API. Five on the site. Seven here.

FMCSA’s own APIs (QCMobile and the SAFER web services) return no BASIC percentiles at all. The public SMS site displays five of the seven and withholds Crash Indicator and HazMat Compliance.

CarrierOk computes all seven in-house from the underlying measure and violation data, and ships each one with everything needed to act on it: the flag, the threshold it is judged against, the raw measure, and the month-end history.

The same response carries the ISS score, computed with FMCSA’s published ISS-CSA algorithm, so one call covers both the category view and the composite.

basic_percentile_{basic}

All seven percentiles, including Crash Indicator and HazMat Compliance, the two the public SMS site withholds.

basic_alert_{basic}

Both alert paths: percentile over the segment's intervention threshold, or a serious violation found in an investigation.

intervention_threshold_{basic}

The threshold that applies to this carrier's segment, per BASIC: 65% or 80% for general freight. Returns 0.0 when the BASIC is not scored.

basic_measure_{basic}

The raw measure the percentile rank is computed from, for teams building their own models.

basic_history

Month-end snapshots of BASIC measures, violation counts, and inspection totals: the trend behind the current number.

Use Cases

Built for teams that need the full picture.

BASIC percentiles are the foundation of every carrier qualification decision. These are the teams building on top of them.

Insurance carriers & MGAs

Underwriter Pre-Submission Screen

Surface all 7 BASICs at the point of submission. Know instantly which categories are in alert territory before an underwriter opens the file. Build automated routing: clean profiles go straight to issue, alerted profiles route to manual review with the specific BASICs flagged.

basic_alert_unsafe_drivingbasic_alert_vehicle_maintencebasic_percentile_crash_indicator

Freight brokers & 3PLs

Carrier Qualification for Freight Brokers

Automate the FMCSA screen: any carrier over your alert threshold on Vehicle Maintenance or Unsafe Driving is flagged before a load is tendered, with an audit trail behind every carrier decision.

basic_percentile_unsafe_drivingbasic_percentile_hours_of_servicebasic_percentile_vehicle_maintence

Commercial lines renewal teams

Bulk Portfolio Review

Score your entire book against current BASIC percentiles at renewal. Identify carriers who have moved into alert territory during the policy period. Build a prioritized list of accounts that warrant rate adjustment or non-renewal.

basic_historybasic_percentile_crash_indicatorbasic_percentile_driver_fitness

Transportation management systems

TMS Carrier Scoring Integration

Embed BASIC percentiles into your carrier scorecard inside your TMS. Surface the 7 BASICs alongside on-time performance and tender acceptance. Give dispatchers and ops teams current safety context without leaving the platform.

basic_measure_unsafe_drivingintervention_threshold_unsafe_drivingbasic_history
Response Fields

BASIC endpoint response fields.

FieldTypeDescription
basic_percentile_{basic}floatCarrier's percentile within its FMCSA peer group; higher means worse. Absent when there is too little data in that category to assign a percentile. Suffixes: unsafe_driving, hours_of_service, vehicle_maintence (API spelling), driver_fitness, controlled_substance, hazardous_materials, crash_indicator.
basic_alert_{basic}booleanTrue when the BASIC is prioritized for intervention: percentile over the segment's threshold, or a serious violation found in an investigation. Same 7 suffixes as the percentile fields.
intervention_threshold_{basic}floatThe percentile threshold that applies to this carrier's segment: 0.65 or 0.80 for general freight. Returns 0.0 when the BASIC is not scored for this carrier.
basic_measure_{basic}float / stringThe raw BASIC measure the percentile rank is computed from: violation severity per relevant unit. Some measures return as strings.
basic_historyarrayMonth-end snapshots of BASIC measures, violation counts, and inspection totals; use for trend analysis across the policy period.
iss_valuestringInspection Selection System score computed with FMCSA's published ISS-CSA algorithm from the BASIC profile, returned on the same response.

BASIC Percentiles API: Frequently Asked Questions

CarrierOk is a carrier intelligence API. It consolidates the FMCSA record on any motor carrier or broker and adds the scoring FMCSA does not publish: all 7 BASIC percentiles, a computed ISS score, 50+ named risk signals, and policy-level insurance history, with monitoring that reports changes the same day. The same record is delivered however you consume it: a REST API, the web app, a Chrome extension, or bulk files.
BASIC stands for Behavior Analysis and Safety Improvement Category, the seven dimensions FMCSA's CSA program uses to score carrier safety: Unsafe Driving, Hours-of-Service Compliance, Driver Fitness, Controlled Substances/Alcohol, Vehicle Maintenance, Hazardous Materials Compliance, and Crash Indicator. For each BASIC, the carrier is ranked against a peer group with similar operations and inspection counts; a percentile of 84 means it performs worse than 84 percent of that group. The API returns percentiles on a 0–1 scale.
An alert means the BASIC is prioritized for intervention: the carrier's percentile crossed the intervention threshold for its segment, or an investigation found a serious violation in that category. For general freight, the thresholds are 65% for Unsafe Driving, HOS Compliance, and Crash Indicator, and 80% for Driver Fitness, Controlled Substances, Vehicle Maintenance, and HazMat; passenger carriers alert at lower percentiles. The API returns the alert flag and the applicable threshold on every response.
FMCSA's public SMS website displays five of the seven BASICs and withholds Crash Indicator and HazMat Compliance, and FMCSA's APIs return no BASIC percentiles at all. Sources that mirror the public site inherit the five. CarrierOk computes all seven in-house from the underlying measure and violation data, so every response carries the full set.
From 24 months of roadside inspection, violation, and crash data. FMCSA computes a measure for each BASIC (violation severity per relevant unit), then groups carriers into peer groups by operation type and inspection count and ranks them. CarrierOk computes all seven percentiles in-house, including the two withheld from the public site, and returns the raw measures alongside the ranks.
FMCSA's own algorithm treats Unsafe Driving, Hours-of-Service, and Crash Indicator as its severity trio: the high-risk definition names those three at the 85th percentile, and an HOS alert alone is enough for an INSPECT recommendation. Crash Indicator directly reflects crash involvement, which is why underwriters watch it despite it being withheld from the public site. HazMat Compliance applies only to carriers hauling hazardous materials. CarrierOk returns all seven so your model can apply its own weights.
CarrierOk ingests FMCSA safety data throughout the day. Percentiles move on FMCSA's monthly SMS snapshot cycle, while crash and inspection records land as FMCSA publishes them. To track movement over time, use the basic_history array on the same profile response; it carries the month-end trail of measures, violation counts, and inspection totals.
The basic_percentile_* field is simply absent, the basic_alert_* flag is false, and the intervention_threshold_* field returns 0.0 for that BASIC. A BASIC needs a minimum of relevant inspections before a percentile is assigned: roughly 3 driver inspections for HOS and Controlled Substances, 5 driver inspections for Driver Fitness, and 5 vehicle inspections for Vehicle Maintenance and HazMat, plus at least one recorded violation in the category. Unsafe Driving and Crash Indicator have their own minimums based on violation and crash counts. Treat a missing percentile as no data, not as a clean record; this is common for new entrants.
Yes. Add carriers to your watchlist with POST /v2/monitoring/add (a JSON body of profile_ids), then poll GET /v2/monitoring/list?view_changes_safety=true to see which monitored carriers have safety changes in your date window; the endpoint supports date_min and date_max filters. The CarrierOk web app also logs every change to your Monitoring feed the same day. Remove carriers with POST /v2/monitoring/remove.
All 7 BASICs are included in every profile response, so it is priced like the rest of the API: evaluation happens in the free sandbox (fixture data for 10 carriers, no credit card required), a $50 activation is applied as $50 of API credit, and billing after that is usage-based: full profiles are priced per unique carrier per month, not per call. There are no monthly plans or request quotas; rates are published in the developer portal.

Access all 7 BASIC percentiles for any carrier.

All seven BASICs with alert flags, thresholds, and history on one call. Free sandbox to evaluate; full profiles are priced per unique carrier per month, not per call.