CarrierOk

Carrier Risk Scoring API — a computed risk score for any motor carrier.

Score any carrier before you work with them. One API call returns CarrierOk’s computed risk score for any DOT or MC number, with the specific reasons behind it: revoked authority, lapsed insurance, identity ties to known double brokers. Built for underwriting, carrier vetting, and fraud screening.

The short answer

A carrier risk scoring API returns a computed judgment about a motor carrier rather than the raw federal record. CarrierOk's returns a risk score with the named flags behind it, all 7 BASIC percentiles, the ISS score with FMCSA's own recommendation band, and policy-level insurance, for any FMCSA registrant, in one call.

What comes back
A risk score and its probability, 50+ named flags as separate booleans, all 7 BASIC percentiles with alert flags, the ISS score with its recommendation, and insurance as the insurer filed it.
Named, not opaque
Each flag is its own field, so a rule can act on the one that matters to you and a decision can be explained rather than asserted.
Coverage
Every FMCSA registrant, including Canada and Mexico-domiciled carriers, and inactive records as well as active ones.
Freshness
Sources are re-ingested when they publish rather than on a fixed clock, and monitoring reports a change the same day it lands.
Evaluating it
A free sandbox key is issued at signup with no card. Live access is $50, applied as $50 of credit, then pay-as-you-go at published per-endpoint rates.
The Risk Layer

Named signals, not a black box.

Before you tender a load, buy an invoice, or quote a policy, you want to know two things about a carrier: how risky is it, and why. The API answers both. risk_score gives you the answer as a tier: Low, Average, Medium, or High. risk_factors gives you the why: 50+ named signals covering the carrier’s authority record, identity connections to other companies, insurance standing, and safety record.

The demo carrier below, the same one in the response sample, shows how a High score arrives: five flagged signals across four categories.

That specificity is the point. A rejection your team can explain, an address shared with other authorities, an insurance policy pending cancellation, holds up with customers, auditors, and your own reviewers in a way a bare score never does.

API Reference

One endpoint. Complete risk output.

Pass a DOT or MC number to GET /v2/profile. The response carries the score, the reasons, and the full safety picture: the ISS score and all 7 BASIC percentiles, ready for your routing logic.

api.carrierok.com
Request
# Get the full risk profile by DOT number
curl "https://api.carrierok.com/v2/profile?dot_number=1234567" \
  -H "Authorization: Bearer YOUR_API_KEY"

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

# Look up by company name, EIN, phone, 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",
    "risk_score": "High",
    "risk_score_probability": 0.84,
    "risk_factors": [{
      "basic_alert_flag": true,
      "violations_severe_flag": true,
      "indicator_network_graph_address": true,
      "pending_insurance_cancellation": true,
      "stability_address_history": false,
      "boc3_on_file": true,
      "active_usdot_status": true,
      "revocation_last_thirtysix_mo": false,
      "dot_out_of_service": false,
      "...": "50+ named signals"
    }],
    "iss_value": "82",
    "iss_recommendation": "INSPECT",
    "basic_alert_unsafe_driving": true,
    "basic_alert_vehicle_maintence": true,
    "...": "300+ fields per record; full list in the data dictionary"
  }]
}
How It Works

How the risk score is computed.

The clear-cut cases are decided by rules. A carrier with an inactive DOT status, an active out-of-service order, no operating authority, or a confirmed double-brokering record scores High, every time. No model gets to argue with an out-of-service order.

Every other carrier is scored by a model trained on confirmed fraud outcomes and measured against the whole carrier population. Most carriers land in Average, the normal band. Medium and High mean the carrier stands measurably apart from its peers; Low means it looks better than most.

Either way, the response tells you which signals drove the score, so every decision you automate is one you can explain.

risk_score

The tier: Low, Average, Medium, or High. Hard rules force High for inactive status, out-of-service orders, pending revocation with an insurance shortfall, and confirmed double-brokering or repeated non-payment; otherwise the model scores the carrier against the whole population.

risk_score_probability

The normalized model probability behind the tier. The model is trained against CarrierOk's confirmed double-broker list; when a hard rule sets the tier, the probability carries a matching fixed value.

risk_factors

50+ named boolean signals across five families: authority, identity network, stability, insurance and filings, safety and operations. Every flag is a named reason you can put in the file.

Use Cases

Who uses the risk scoring API.

The risk layer is embedded into underwriting systems, carrier approval workflows, TMS platforms, and factoring applications.

Commercial auto insurers & MGAs

Insurance Underwriting

Route submissions on the risk tier and the ISS recommendation. At 75 and above, FMCSA's own recommendation is INSPECT; BASIC alert flags surface the specific categories of concern for the underwriter.

risk_scoreiss_valueiss_recommendationbasic_alert_unsafe_driving

Freight brokers & 3PLs

Freight Broker Carrier Approval

Screen carriers before tendering loads. Block carriers whose risk_factors trip identity-network or authority-revocation signals. Set risk_score thresholds per load type or lane.

risk_scorerisk_factorsauthority_common

TMS platforms & logistics software

TMS Automated Screening

Embed risk scoring into carrier onboarding workflows. Auto-approve carriers below your threshold, flag outliers for human review, and refresh scores on each load assignment.

risk_scorerisk_score_probabilityrisk_factors

Freight factoring companies

Factoring Carrier Eligibility

Assess carrier risk at invoice submission. Signals like revocation_last_thirtysix_mo, consecutive_authority, and the identity-network matches are key fraud indicators for factoring workflows.

risk_factorsrevocation_last_thirtysix_morisk_score_probability
Response Fields

Key risk scoring fields.

FieldTypeDescription
risk_scorestringCarrierOk's computed risk tier. Average is the normal band of the population; Medium and High sit one and two standard deviations above it on the risk model, and hard rules force High for inactive status, out-of-service orders, pending revocation with an insurance shortfall, and confirmed double-broker or repeated non-payment reports.
risk_score_probabilityfloatThe normalized model probability behind the tier. The model is trained against CarrierOk's confirmed double-broker list; rule-driven tiers carry a matching fixed value.
risk_factorsarray[object]Named boolean signals across authority, identity network, stability, insurance and filings, and safety and operations. Polarity follows the name (stability_address_history true means stable). History signals return null for carriers under a year old.
iss_valuestringInspection Selection System score computed with FMCSA's published ISS-CSA algorithm, returned on the same response.
iss_recommendationstringFMCSA's recommendation band for the score: PASS 1–49, OPTIONAL 50–74, INSPECT 75–100.
basic_percentile_*floatAll 7 BASIC percentiles, computed in-house. FMCSA's APIs return none of the seven; the public SMS site displays five. Absent when there is too little data in that category.
basic_alert_*booleanTrue when the BASIC is prioritized for intervention: percentile over the segment's threshold, or a serious violation found in an investigation.

Carrier Risk Scoring 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.
risk_score is CarrierOk's computed risk tier: Low, Average, Medium, or High. Average means the carrier sits in the normal band of the population on CarrierOk's risk model; Medium and High mark carriers one and two standard deviations above that norm, and Low marks carriers below it or on CarrierOk's vetted good-carrier list. Hard rules force High regardless of the model: an inactive USDOT status, an active out-of-service order, no active authority, pending revocation combined with insurance below the requirement, or presence on the confirmed double-broker and repeated non-payment lists.
The normalized probability from CarrierOk's risk model, which is trained against the confirmed double-broker list, patterns like shared contact details across authorities, contact and filing behavior, and fleet ratios. When a hard rule sets the tier, the probability is set to a matching fixed value so the two fields never disagree. Use the tier for routing and the probability when your own model wants a continuous input.
No. Polarity follows the name: dot_out_of_service true is adverse, but stability_address_history true means the address has been stable and boc3_on_file true means the filing exists. Read each signal as the answer to the question its name asks. The signal families and each signal's healthy state are listed in the data dictionary.
The named-signal layer returned beside the score: 50+ boolean signals across five families (authority, identity network, stability, insurance and filings, safety and operations). It exists so a decision carries its reasons: instead of citing a black-box score, your file can say pending_insurance_cancellation or indicator_network_graph_address. History signals return null for carriers under a year old, where stability cannot be judged yet.
ISS is FMCSA's inspection-prioritization score, computed with the published ISS-CSA algorithm from safety data; it is the number the industry already speaks. risk_score is CarrierOk's own tier, built for fraud and authority behavior that safety data does not capture: identity networks, revocation patterns, insurance behavior, and reported non-payment. A carrier can have a clean ISS and still tier High. Both arrive on the same response.
The unmeasured basic_percentile_* fields are absent from the response and their alert flags are false. The ISS is still assigned: FMCSA's insufficient-data rules place such carriers in the 50 to 74 OPTIONAL band. The risk layer still runs, because most of its inputs are registration, authority, and insurance data rather than inspections; only the stability history signals return null, for carriers under a year old.
CarrierOk ingests FMCSA updates and rebuilds its computed tables throughout the day. Authority, insurance, and out-of-service inputs move as FMCSA publishes them; BASIC percentiles move on the monthly SMS snapshot cycle.
Yes. Most customers use the API in three ways: a synchronous lookup during carrier onboarding with tier-based routing; a monitored watchlist (register carriers with POST /v2/monitoring/add, then poll GET /v2/monitoring/list?view_changes_risk=true to pull watched carriers whose risk profile changed); and the Monitoring feed in the CarrierOk platform, where every change on a watched carrier is logged the same day. Test threshold logic against historical data before deploying automated decisions.
The risk layer 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.

Start building with the risk scoring API.

The tier, the probability, and the named reasons for any motor carrier. Free sandbox to evaluate; full profiles are priced per unique carrier per month, not per call.