Inspection Selection System (ISS) API — the current ISS for any motor carrier.
ISS is the 1–100 score FMCSA uses to decide which carriers get inspected, and a screening signal for commercial trucking underwriters. One REST call returns the current value, the PASS / OPTIONAL / INSPECT recommendation, and the reason behind it. Not available from FMCSA’s own APIs.
The Inspection Selection System score is FMCSA's 1 to 100 value telling roadside inspectors which carriers to prioritise. FMCSA does not return it through its own APIs. CarrierOk computes it in-house from the same BASIC inputs, and returns it with FMCSA's recommendation band and the reason string on every profile response.
- What ISS is
- A single value from 1 to 100 built from a carrier's safety record. Higher means more likely to be selected for inspection.
- The bands
- 75 and above reads Inspect, 50 to 74 reads Optional, below 50 reads Pass. CarrierOk returns the band and the reason alongside the number, not just the value.
- Where FMCSA puts it
- Not in QCMobile and not in MOTUS. The score is used inside roadside inspection systems rather than published through a developer API.
- How to get it
- GET /v2/profile returns iss_value, iss_recommendation and iss_recommendation_reason with the rest of the record, for any FMCSA registrant.
- Evaluating it
- A free sandbox key is issued at signup with no card, so the field can be checked against a carrier you already know before anything is paid.
What is the Inspection Selection System?
The Inspection Selection System (ISS) is the algorithm FMCSA gives roadside inspectors to decide which carriers to pull in for inspection. Every carrier gets a value from 1 to 100, computed from its safety data: BASIC percentiles, serious violations, insurance and authority status, and inspection history. Higher means inspect. Commercial trucking underwriters use the same score to screen risk.
The score maps to three recommendation bands, and the API returns the band verbatim in iss_recommendation.
A measured clean record. The PASS band is reachable only through the Safety Algorithm, so a carrier needs enough inspection history to earn a score this low.
A single elevated BASIC, an insurance shortfall, or not enough data to judge: FMCSA's insufficient-data rules assign 50–74, so a new entrant with a spotless record still scores at least 50.
The Safety Algorithm's top groups: high-risk carriers, multiple BASICs over their intervention thresholds, or an Hours-of-Service alert on its own. A score of 100 is reserved for carriers under an out-of-service order.
The most common misread is treating an OPTIONAL score as measured medium risk. The 50–74 band holds both carriers whose safety data earned the score and carriers FMCSA does not have enough data to judge — and the response says which one you are looking at.
One endpoint. Score, recommendation, reason.
Pass a DOT or MC docket number. Get back iss_value, the PASS / OPTIONAL / INSPECT recommendation, the reason the algorithm assigned it, and the BASIC percentiles behind the score — ready for your underwriting logic.
# Get ISS score by DOT number
curl "https://api.carrierok.com/v2/profile?dot_number=1234567" \
-H "Authorization: Bearer YOUR_API_KEY"
# Get ISS score 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",
"iss_value": "82",
"iss_recommendation": "INSPECT",
"iss_recommendation_reason": "Multiple BASICs Prioritized - Mixed (1 Roadside)",
"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_vehicle_maintence": true,
"basic_alert_crash_indicator": false,
"basic_history": ["...past BASIC snapshots for trend analysis..."],
"risk_score": "High",
"risk_score_probability": 0.84,
"...": "300+ fields per record — full list in the data dictionary"
}]
}Every score arrives with its reason.
CarrierOk implements FMCSA’s published ISS-CSA algorithm and recomputes it throughout the day as new safety data lands. FMCSA’s own APIs return no ISS and no BASIC percentiles, and the public SMS site withholds two of the seven BASICs; CarrierOk computes all of it.
Because we run the algorithm ourselves, every score ships with the branch that produced it in iss_recommendation_reason.
For underwriting, the difference matters: an OPTIONAL 62 that reads “Insufficient Safety Data” and one that reads “Vehicle Maintenance BASIC Prioritized” are different risks. One is a finding; the other is missing data. The reason field is how you tell them apart.
“High-Risk Carrier”
The Safety Algorithm's top group: four or more BASICs over threshold, or two or more with Unsafe Driving, Hours-of-Service, or Crash Indicator at the 85th percentile or higher.
“Insurance Shortfall on Active For-Hire Authority”
BIPD coverage on file below the required minimum while for-hire authority is active. No BASIC alert needed; the algorithm treats it as a serious violation.
“Sufficient Data - No BASICs Prioritized”
Enough inspection history to measure, and nothing over threshold. The only path into the PASS band.
“Insufficient Safety Data”
Not enough inspections to score the carrier's BASICs. ISS floors at 50 no matter how clean the record is; carriers with zero inspections are scored 63–69 by fleet size.
“Randomly Selected for Inspection (Insufficient Data Sample)”
FMCSA's algorithm elevates a random one percent of insufficient-data carriers to 99 each month. On a thin record, a 99 can be a draw, not a finding.
“Out-of-Service Order - Highest Priority”
An active out-of-service order overrides everything else. ISS is set to 100.
Built for the underwriting workflow.
Underwriting teams screen with ISS. These are the workflows built on top of it.
Insurance carriers & surplus lines MGAs
Commercial Auto Underwriting
Surface ISS and alert BASICs at quote submission to route carriers instantly: standard market, refer, or decline. Embed directly into your rating engine.
Managing general agents
MGA Appetite Screening
Pre-screen submissions against your appetite before committing underwriter time. Any DOT above your threshold gets flagged automatically. Build soft-decline letters that reference specific BASICs, not just a black-box score.
Commercial lines renewal teams
Renewal Review Automation
Pull current ISS at renewal for every carrier in your book. Flag any carrier whose score has increased since last term. Trigger rate review workflows for carriers that crossed into INSPECT during the policy period.
Actuarial & analytics teams
Portfolio Risk Benchmarking
Score your entire book by ISS distribution. Identify concentration risk in one fleet segment, and separate measured scores from insufficient-data scores before they skew the model. Track portfolio ISS drift over time using the basic_history array and the monitoring watchlist.
ISS endpoint response fields.
| Field | Type | Description |
|---|---|---|
| iss_value | string | Inspection Selection System (ISS) value, returned as a string. Computed with FMCSA's published ISS-CSA algorithm; 100 is reserved for carriers under an out-of-service order. |
| iss_recommendation | string | FMCSA's recommendation band for the score: PASS 1–49, OPTIONAL 50–74, INSPECT 75–100. |
| iss_recommendation_reason | string | The algorithm branch that produced the score, e.g. "High-Risk Carrier", "Insurance Shortfall on Active For-Hire Authority", "Insufficient Safety Data". |
| basic_percentile_{basic} | float | Percentile for each of the 7 BASICs (suffixes: unsafe_driving, hours_of_service, vehicle_maintence, driver_fitness, controlled_substance, hazardous_materials, crash_indicator). Absent when there is too little data in that category to assign a percentile. |
| basic_alert_{basic} | boolean | True when the BASIC is prioritized for intervention: percentile over the FMCSA threshold, or a serious violation found in an investigation. Same 7 suffixes as the percentile fields. |
| basic_history | array | Past BASIC snapshots — use for trend analysis at renewal or over the policy period. |
| risk_score | string | CarrierOk's computed risk tier, returned on the same profile response alongside risk_score_probability. |
ISS Score API — Frequently Asked Questions
Add ISS scoring to your underwriting workflow.
The current ISS, recommendation, and reason for any motor carrier. Free sandbox to evaluate; full profiles are priced per unique carrier per month, not per call.