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.
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.
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_drivingSpeeding, recklessness, improper lane changes, and failure to obey traffic control devices.
Alert threshold: 65% (general freight)HOS Compliance
basic_percentile_hours_of_serviceHours-of-Service violations including logbook falsification and ELD non-compliance.
Alert threshold: 65% (general freight)Crash Indicator
basic_percentile_crash_indicatorCrash 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_fitnessInvalid CDLs, disqualified drivers, and failure to meet FMCSA driver qualification requirements.
Alert threshold: 80% (general freight)Controlled Substances
basic_percentile_controlled_substanceDrug and alcohol violations detected during roadside inspections.
Alert threshold: 80% (general freight)Vehicle Maintenance
basic_percentile_vehicle_maintenceBrake 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_materialsHazardous 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.
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.
# 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"{
"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"
}]
}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.
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.
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.
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.
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 endpoint response fields.
| Field | Type | Description |
|---|---|---|
| basic_percentile_{basic} | float | Carrier'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} | boolean | True 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} | float | The 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 / string | The raw BASIC measure the percentile rank is computed from: violation severity per relevant unit. Some measures return as strings. |
| basic_history | array | Month-end snapshots of BASIC measures, violation counts, and inspection totals; use for trend analysis across the policy period. |
| iss_value | string | Inspection 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
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.