Vet a trucking carrier before you tender the load
Send up to 25 USDOT or MC numbers and get a verdict for each (clear, review, do not use) with the FMCSA facts behind it: USDOT status, operating authority, insurance on file vs required, out-of-service orders, 24-month inspections and crashes vs the national rate. For freight brokers, shippers, 3PLs, factoring and insurance teams, TMS builders and AI agents. Free tier, no key; plans from $19/month.
Opens Stripe's billing portal: invoices, payment method, cancel.



Who it's for
Anyone who hands freight, money or cover to a trucking company and needs to know it is authorised, insured and not shut down, today.
Check authority, insurance and OOS orders at onboarding and before every tender; watch your whole carrier list for changes.
Screen carriers in bulk with the same rules every time, and keep the FMCSA evidence with the decision.
Spot new entrants, lapsed cover and out-of-service orders before you advance money or bind a policy.
One JSON call (or MCP tool) instead of reading SAFER page by page.
Try it
Paste USDOT or MC numbers (up to 25, any separator). Haulroll returns them riskiest first, with the reason for each verdict.
Raw JSON response
Real sample output
Captured from a live call to this API.
{
"results": [
{
"query": "USDOT 1185624",
"status": "ok",
"usdot": "1185624",
"name": "LEE LOGISTIC",
"verdict": {
"level": "do_not_use",
"riskScore": 100,
"flags": [
{
"level": "do_not_use",
"code": "usdot_inactive",
"text": "USDOT number status: Inactive"
},
{
"level": "do_not_use",
"code": "no_active_authority",
"text": "Interstate for-hire carrier without active operating authority"
},
{
"level": "do_not_use",
"code": "insurance_below_required",
"text": "Liability insurance on file $0 is below the required $750,000"
},
{
"level": "do_not_use",
"code": "oos_order",
"text": "Out-of-service order since 2026-09-01: New Entrant Revoked - Refusal of Audit/No Contact"
},
{
"level": "info",
"code": "no_inspections",
"text": "No roadside inspections in 24 months"
}
]
},
"carrier": {
"usdot": "1185624",
"legalName": null,
"legalNameWithheld": true,
"dbaName": "LEE LOGISTIC",
"usdotStatus": "Inactive",
"entity": [
"Carrier"
],
"operation": "Interstate",
"classification": [
"AUTHORIZED FOR HIRE"
],
"city": "CHARLOTTE",
"state": "NC",
"zip": "28262",
"country": "US",
"registered": "2003-11-10",
"ageDays": 8357,
"mcs150Date": "2025-10-14",
"mcs150AgeDays": 348,
"mileage": 1,
"mileageYear": 2024,
"powerUnits": 1,
"trucks": 1,
"buses": 0,
"drivers": 1,
"cdlDrivers": 1,
"hazmat": false,
"cargo": [
"General freight",
"Household goods"
],
"docket": "MC479455"
},
"authority": {
"docket": "MC479455",
"source": "FMCSA Licensing & Insurance",
"common": "inactive",
"contract": "none",
"broker": "none",
"type": "Property",
"pendingApplication": false,
"revocationPending": false,
"bipdRequired": 750000,
"bipdOnFile": 0,
"cargoRequired": false,
"cargoOnFile": false,
"bondRequired": false,
"bondOnFile": false
},
"insurance": [],
"oosOrders": [
{
"date": "2026-09-01",
"reason": "New Entrant Revoked - Refusal of Audit/No Contact",
"rescinded": null,
"active": true
}
],
"inspections24m": {
"inspections": 0,
"driverInspections": 0,
"driverOos": 0,
"vehicleInspections": 0,
"vehicleOos": 0,
"driverOosRate": null,
"vehicleOosRate": null
},
"crashes24m": {
"crashes": 0,
"fatalCrashes": 0,
"injuryCrashes": 0,
"towawayCrashes": 0,
"fatalities": 0,
"injuries": 0
},
"suspensionNotices": [],
"links": {
"safer": "https://safer.fmcsa.dot.gov/query.asp?searchtype=ANY&query_type=queryCarrierSnapshot&query_param=USDOT&query_string=1185624",
"sms": "https://ai.fmcsa.dot.gov/SMS/Carrier/1185624/CarrierRegistration.aspx"
}
},
{
"query": "USDOT 80806",
"status": "ok",
"usdot": "80806",
"name": "J B HUNT TRANSPORT INC",
"verdict": {
"level": "clear",
"riskScore": 0,
"flags": []
},
"carrier": {
"usdot": "80806",
"legalName": "J B HUNT TRANSPORT INC",
"legalNameWithheld": false,
"dbaName": "J B HUNT",
"usdotStatus": "Active",
"entity": [
"Freight forwarder",
"Carrier",
"Shipper",
"Broker"
],
"operation": "Interstate",
"classification": [
"AUTHORIZED FOR HIRE"
],
"city": "LOWELL",
"state": "AR",
"zip": "72745",
"country": "US",
"registered": "1974-06-01",
"ageDays": 19111,
"mcs150Date": "2025-07-07",
"mcs150AgeDays": 447,
"mileage": 1629835251,
"mileageYear": 2024,
"powerUnits": 25280,
"trucks": 25280,
"buses": 0,
"drivers": 24116,
"cdlDrivers": 23669,
"hazmat": true,
"cargo": [
"General freight",
"Metal: sheets, coils, rolls",
"Motor vehicles",
"Logs, poles, beams, lumber",
"Building materials",
"Fresh produce",
"Liquids/gases",
"Intermodal containers",
"Oilfield equipment",
"Livestock",
"Grain, feed, hay",
"Meat",
"US mail",
"Chemicals",
"Commodities dry bulk",
"Refrigerated food",
"Beverages",
"Paper products",
"Agricultural/farm supplies",
"Construction",
"Other: IEP"
],
"docket": "MC135797"
},
"authority": {
"docket": "MC135797",
"source": "FMCSA Licensing & Insurance",
"common": "active",
"contract": "active",
"broker": "active",
"type": "Property, Household goods, Broker",
"pendingApplication": false,
"revocationPending": false,
"bipdRequired": 1000000,
"bipdOnFile": 3500000,
"cargoRequired": true,
"cargoOnFile": true,
"bondRequired": true,
"bondOnFile": true
},
"insurance": [
{
"insurer": "TRAVELERS CASUALTY & SURETY CO. OF AMERICA",
"type": "Bond",
"form": "84",
"coverage": 0,
"effective": "2014-01-13"
},
{
"insurer": "SELF-INSURED",
"type": "BIPD (liability)",
"form": "91X",
"coverage": 1000000,
"effective": "1993-03-01"
},
{
"insurer": "ACE AMERICAN INSURANCE COMPANY",
"type": "BIPD (liability)",
"form": "91X",
"coverage": 2500000,
"effective": "2025-12-31"
},
{
"insurer": "TRAVELERS CASUALTY & SURETY CO. OF AMERICA",
"type": "Cargo",
"form": "83",
"coverage": 0,
"effective": "2023-10-23"
}
],
"oosOrders": [],
"inspections24m": {
"inspections": 20172,
"driverInspections": 20158,
"driverOos": 145,
"vehicleInspections": 11078,
"vehicleOos": 2466,
"driverOosRate": 0.7,
"vehicleOosRate": 22.3
},
"crashes24m": {
"crashes": 1472,
"fatalCrashes": 44,
"injuryCrashes": 494,
"towawayCrashes": 934,
"fatalities": 48,
"injuries": 649
},
"suspensionNotices": [],
"links": {
"safer": "https://safer.fmcsa.dot.gov/query.asp?searchtype=ANY&query_type=queryCarrierSnapshot&query_param=USDOT&query_string=80806",
"sms": "https://ai.fmcsa.dot.gov/SMS/Carrier/80806/CarrierRegistration.aspx"
}
}
],
"count": 2,
"summary": {
"carriers": 2,
"doNotUse": 1,
"review": 0,
"clear": 1,
"notFound": 0
},
"national24m": {
"driverOosRate": 6.3,
"vehicleOosRate": 22.8,
"inspections": 5716888,
"since": "2024-09-27"
},
"note": "Riskiest first. Rules: do_not_use = inactive USDOT, active out-of-service order, interstate for-hire without active authority, or liability insurance below the required amount. review = new entrant (<90 days), pending or revocation-pending authority, missing cargo insurance/bond, suspension notice in 12 months, driver or vehicle OOS rate over 1.5x national, a fatal crash for a small fleet, or an MCS-150 older than 24 months. clear = none of these.",
"sources": "FMCSA open data on data.transportation.gov: Company Census File, L&I Carrier/Insurance, Motus registrations, Out-of-Service Orders, Vehicle Inspection File, Crash File. FMCSA updates these daily; cached up to 6 hours.",
"checkedAt": "2026-09-27T12:07:50.149Z"
}Limits, plainly
Free and rate limited so it stays fast for everyone. Loop over longer lists 25 carriers at a time: a Broker key covers 750 calls, up to 18,750 carrier checks a month. Run /api/alerts on your carrier list every morning to catch out-of-service orders, suspensions and insurance cancellations.
- Up to 25 carriers per call; 10 calls a minute per IP on the free tier.
- Free tier: 50 calls a day per IP, no key. Paid keys from $19/month (see Get an API key).
- Data: FMCSA's public files on data.transportation.gov (Company Census, Licensing & Insurance, Out-of-Service Orders, inspections, crashes). FMCSA updates them daily; answers are cached up to 6 hours.
- The verdict is a transparent rule set on public FMCSA data, not an FMCSA safety rating or a guarantee; your own carrier policy still decides. Company facts only: no phone numbers, emails or officer names.
Running your own trucks too?
Recallroll API decodes up to 10 VINs per call and lists every open NHTSA recall for each, Do Not Drive warnings first. Same key style and Stripe checkout, plans from $19/month.
Get an API key
FMCSA carrier vetting API: up to 25 USDOT or MC numbers per call, each with a verdict (clear, review, do_not_use) and the evidence: USDOT status and age, operating authority, liability insurance on file vs required, out-of-service orders, 24-month inspections and crashes vs national rates. Plus carrier alerts for a watch list and new USDOT registrations. Keys work on the REST API and the MCP server.
3,500 calls a month · 60 per minute
Get Brokerage keyor $490/year, 2 months freePay with card, Apple Pay, Google Pay or Link through Stripe Checkout (sales tax/VAT handled by Stripe). Your key appears on the page you return to right after checkout: save it. Manage or cancel any time at haulroll-api.cybermax-tools.workers.dev/manage. Send it as x-api-key: YOUR_KEY (or Authorization: Bearer YOUR_KEY, which MCP clients support). Check usage at /key. Failed calls are not counted. VerifyCarrier's API is $19 for 500 lookups, $49 for 2,500 and $99 for 10,000 a month; CarrierOK starts at $149 a seat (checked 27 Sep 2026). Haulroll uses the same $19/$49/$99 points with 50% more calls, and each call vets up to 25 carriers with a clear/review/do_not_use verdict; free 50 calls a day (VerifyCarrier: 100 a month) and $5 pay-as-you-go for 200 calls.
Using several CyberMax APIs? CyberMax API All-Access: one key for all 9 APIs (this one included, 750 calls a month here) for $119/month. See All-Access
curl -s "https://haulroll-api.cybermax-tools.workers.dev/api/carrier?..." -H "x-api-key: YOUR_KEY"
# MCP (Claude Desktop, Cursor, VS Code)
{ "mcpServers": { "haulroll-api": { "type": "http", "url": "https://haulroll-api.cybermax-tools.workers.dev/mcp",
"headers": { "Authorization": "Bearer YOUR_KEY" } } } }
# Usage so far
curl -s https://haulroll-api.cybermax-tools.workers.dev/key -H "x-api-key: YOUR_KEY"Use the API
JSON over HTTPS, CORS enabled, no key. GET for quick calls, POST a JSON body for lists. Spec: openapi.json · llms.txt
curl -s "https://haulroll-api.cybermax-tools.workers.dev/api/carrier?dot=80806%2C+MC681958%2C+1185624"
# lists: POST a JSON body
curl -s -X POST https://haulroll-api.cybermax-tools.workers.dev/api/carrier \
-H "content-type: application/json" \
-d '{"carriers":["80806","MC681958"]}'import requests
r = requests.post("https://haulroll-api.cybermax-tools.workers.dev/api/carrier",
json={"carriers":["80806","MC681958"]}, timeout=30)
r.raise_for_status()
for row in r.json()["results"]:
print(row)Endpoints: /api/carrier vet up to 25 carriers by usdot or mc number: verdict with fmcsa evidence · /api/alerts monitor a carrier list: fmcsa events in the last n days · /api/new-carriers new usdot registrations: carriers fmcsa added in the last n days
Add it to your AI agent (MCP)
A remote MCP server at https://haulroll-api.cybermax-tools.workers.dev/mcp (streamable HTTP, no auth). Read-only tools with JSON schemas, so agents know exactly what to send.
// Claude Desktop, Cursor, VS Code, any MCP client (remote, no key)
{
"mcpServers": {
"haulroll-api": { "type": "http", "url": "https://haulroll-api.cybermax-tools.workers.dev/mcp" }
}
}
# Claude Code
claude mcp add --transport http haulroll-api https://haulroll-api.cybermax-tools.workers.dev/mcp
# Tools: vet_carriers, carrier_alerts, new_carriers
# e.g. vet_carriers({"carriers":["80806"]})vet_carriers
Verdict for 1-25 US motor carriers by USDOT or MC/MX/FF number: USDOT status and age, operating authority, liability insurance on file vs required, out-of-service orders, 24-month inspections (driver/vehicle OOS rates vs national) and crashes, with flags. Riskiest first.carrier_alerts
FMCSA events in the last N days for up to 25 carriers: out-of-service orders, authority suspension notices and status changes, insurance cancellations. Empty = nothing new.new_carriers
Carriers FMCSA added in the last N days (active only), filterable by state, cargo, hazmat, interstate and for-hire. Company facts only.
FAQ
Why not FMCSA SAFER or the free QCMobile API?
They are FMCSA's own tools and they are free. SAFER shows one carrier per page for people, not programs. QCMobile needs a Login.gov account and a web key, returns raw fields one carrier at a time, and leaves the judgement to you. Haulroll batches 25 carriers per call, joins authority, insurance, out-of-service orders, inspections and crashes, compares OOS rates with the national rate and returns a verdict with the reasons.
Why not VerifyCarrier or a broker onboarding platform?
VerifyCarrier's API plans are $19/month for 500 lookups, $49 for 2,500 and $99 for 10,000 (public pricing, 27 Sep 2026). Haulroll uses the same price points with more calls, and each call vets up to 25 carriers: Broker $19 for 750 calls, Brokerage $49 for 3,500 calls, Platform $99 for 15,000 calls. Full onboarding platforms add carrier packets and identity checks; if what you need is the FMCSA answer in your own system, a key is enough.
How is the verdict decided?
do_not_use: USDOT not active, an active out-of-service order, an interstate for-hire carrier without active authority, or liability insurance below the required amount. review: USDOT under 90 days old (new entrant) or under a year, authority pending or revocation pending, cargo insurance or broker bond missing, a suspension notice in the last 12 months, a driver or vehicle OOS rate over 1.5x the national rate (5+ inspections), a fatal crash for a small fleet, or an MCS-150 older than 24 months. clear: none of these. Every flag is listed.
How fresh is the data?
FMCSA publishes these files on data.transportation.gov and updates them daily. Haulroll asks them live and caches each answer up to 6 hours (alerts 1 hour). Inspection and crash counts cover the last 24 months, the window FMCSA's SMS uses.
Is this an FMCSA safety rating?
No. FMCSA's ratings (Satisfactory, Conditional, Unsatisfactory) come from compliance reviews, and most SMS BASIC percentiles for property carriers are not public. Haulroll's verdict is a transparent rule set on public FMCSA records to help you decide faster; your own carrier policy decides. Not affiliated with or endorsed by FMCSA or USDOT.
Is there a key or a cost?
The free tier needs no key: 50 calls a day per IP. Paid keys: Broker $19/month for 750 calls, Brokerage $49/month for 3,500 calls, Platform $99/month for 15,000 calls; or pay as you go: $5 for 200 calls that never expire. Yearly billing gives 2 months free. Every call vets up to 25 carriers. Send the key as the x-api-key header. No surprise overage charges; cancel any time.
Can I use it from Claude, Cursor or another AI agent?
Yes. Add the MCP server URL below (with your key as a Bearer token for paid limits). Tools: vet_carriers, carrier_alerts and new_carriers.
Do you return phone numbers or emails?
No. Haulroll returns company facts only. FMCSA's census includes contact and officer fields; Haulroll never requests them, and legal names that look like a person's name are withheld (the USDOT number and SAFER link identify the carrier).