CarrierOk

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 short answer

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.
The Score

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.

PASSISS 1–49
Inspection not warranted

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.

OPTIONALISS 50–74
Inspection warranted, lower priority

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.

INSPECTISS 75–100
Inspection warranted, top priority

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.

API Reference

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.

api.carrierok.com
Request
# 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"
Response200 OK
{
  "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"
  }]
}
The Reason Field

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.

Use Cases

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.

iss_valueiss_recommendationbasic_alert_unsafe_driving

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.

iss_valueiss_recommendation_reasonbasic_percentile_unsafe_driving

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.

iss_valueiss_recommendationbasic_history

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_valueiss_recommendation_reasonrisk_score
Response Fields

ISS endpoint response fields.

FieldTypeDescription
iss_valuestringInspection 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_recommendationstringFMCSA's recommendation band for the score: PASS 1–49, OPTIONAL 50–74, INSPECT 75–100.
iss_recommendation_reasonstringThe algorithm branch that produced the score, e.g. "High-Risk Carrier", "Insurance Shortfall on Active For-Hire Authority", "Insufficient Safety Data".
basic_percentile_{basic}floatPercentile 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}booleanTrue 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_historyarrayPast BASIC snapshots — use for trend analysis at renewal or over the policy period.
risk_scorestringCarrierOk's computed risk tier, returned on the same profile response alongside risk_score_probability.

ISS Score 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.
The Inspection Selection System (ISS) is the algorithm FMCSA gives roadside inspectors to decide which carriers to prioritize for inspection. Every carrier gets a value from 1 to 100, computed from its safety record; higher means more likely to be selected. Because the score condenses a carrier's compliance picture into one number, commercial trucking underwriters also use it as a screening signal.
They are FMCSA's three recommendation bands. PASS covers ISS 1–49: inspection not warranted. OPTIONAL covers 50–74: inspection warranted at lower priority. INSPECT covers 75–100: inspection warranted at top priority, with 100 reserved for carriers under an out-of-service order. The API returns the band verbatim in the iss_recommendation field.
FMCSA's own line is 75: at 75 and above the recommendation becomes INSPECT. Underwriters commonly use the same line as a screening cutoff, with appetite varying by program; CarrierOk returns the raw iss_value plus the recommendation so you can apply your own guidelines. One caution: a score in the 50–74 OPTIONAL band is often an insufficient-data score rather than measured medium risk — check iss_recommendation_reason before treating it as a finding.
CarrierOk implements FMCSA's published ISS-CSA algorithm — the safety groups, the insufficient-data rules, and the out-of-service override — and recomputes scores as new safety data arrives throughout the day. FMCSA's own APIs (QCMobile and the SAFER web services) return no computed ISS and no BASIC percentiles; CarrierOk computes both and returns them on the same response.
It still gets a score. FMCSA's insufficient-data rules assign values in the 50–74 OPTIONAL band — carriers with zero inspections are scored 63–69 by fleet size — and no carrier can reach the PASS band without enough inspection history to be measured. The iss_recommendation_reason reads 'Insufficient Safety Data', and the unmeasured basic_percentile_* fields are simply absent from the response. Treat a missing percentile as no data, not as a clean record.
FMCSA's published algorithm randomly selects one percent of insufficient-data carriers each month and sets their ISS to 99, so inspection coverage reaches carriers the data can't rank. On a thin record, a 99 can be a random draw rather than a safety finding — when it is, the iss_recommendation_reason reads 'Randomly Selected for Inspection (Insufficient Data Sample)'.
CarrierOk ingests FMCSA updates and rebuilds ISS scores throughout the day as new safety data lands. To track changes over time, use the basic_history array in the profile response, or add carriers to your monitoring watchlist and poll GET /v2/monitoring/list with view_changes_safety=true to see which monitored carriers changed.
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.
ISS (iss_value) is computed with FMCSA's published algorithm from FMCSA safety data: the score the industry already speaks. risk_score is CarrierOk's own risk tier (Low, Average, Medium, or High), built from a risk model plus hard rules over authority status, insurance, and reported-carrier history, and it arrives with the named signals in the risk_factors array. Both are returned on the same GET /v2/profile response. Use iss_value when you need the FMCSA-grounded score for regulatory alignment, and risk_score for fraud and authority behavior that safety data does not capture.
ISS is 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.

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.