FMCSA carrier search
Search the registered motor carriers, brokers, shippers and freight forwarders (FMCSA census) by name, place, status, operation, entity type, classification, hazmat, cargo, fleet size, drivers and registration date. Each result is a census record: USDOT number, names, status, entity types, operation, classification, business type, hazmat, addresses, dockets, fleet by vehicle type, drivers, cargo, MCS-150 date and mileage, safety rating. Give at least one filter. Pass next_page back as page; null on the last page.
Every response includes credits_used: the credits this call cost.
Parameters
| name | type | description |
|---|---|---|
name | string | Words in the legal or DBA name. Example: swift transportation |
match | contains | starts_with | exact | How name matches (default contains). |
state | string | Two-letter state or province of the physical address. Example: AZ |
city | string | City. |
zip | string | Postal code. |
country | string | Country (US, CA, MX). |
mc | string | MC/MX/FF docket number. |
status | active | inactive | USDOT status. |
operation | interstate | intrastate_hazmat | intrastate_non_hazmat | Carrier operation. |
entity | carrier | shipper | broker | freight_forwarder | cargo_tank | registrant | intermodal_equipment_provider | Entity type. |
classification | authorized_for_hire | exempt_for_hire | private_property | private_passenger_business | private_passenger_non_business | migrant | us_mail | federal_government | state_government | local_government | indian_tribe | Operation classification. |
hazmat | true | false | Hazmat carriers. |
cargo | string | |
min_power_units | integer | Minimum power units. |
max_power_units | integer | Maximum power units. |
min_drivers | integer | Minimum drivers. |
max_drivers | integer | Maximum drivers. |
added_from | string | Registered on or after (YYYY-MM-DD). |
added_to | string | Registered on or before (YYYY-MM-DD). |
sort | name | usdot | power_units | drivers | added | mcs150_date | mileage | Sort field (default name when searching by name, else usdot). |
order | asc | desc | Sort order. |
limit | integer | Results per page. |
page | integer | Page number (1-based). Pass next_page back as page; null on the last page. |
Every endpoint also takes fresh, raw, fields (see lean responses and caching).
Example
curl "https://api.api.sh/fmcsa/v1/search?name=swift+transportation" \
-H "x-api-key: $APISH_KEY" import os, requests
res = requests.get(
"https://api.api.sh/fmcsa/v1/search",
params={"name": "swift transportation"},
headers={"x-api-key": os.environ["APISH_KEY"]},
timeout=120,
)
res.raise_for_status()
data = res.json() const url = new URL("https://api.api.sh/fmcsa/v1/search");
url.searchParams.set("name", "swift transportation");
const res = await fetch(url, { headers: { "x-api-key": process.env.APISH_KEY } });
if (!res.ok) throw new Error(`${res.status} ${await res.text()}`);
const data = await res.json(); Response
A JSON object with the fields described above, plus raw (the source's own data), cached, fetched_at and credits_used. Errors return {"success": false, "error": "…"} with the HTTP status (see errors). A lookup that ran but found nothing (404) costs the price above; refused calls and errors on our side are free (what's charged).