## Reference: Carriers

The motor carrier register: name → DOT number → fleet

**Availability: live** on `https://api.cardog.app`.

### GET /v2/carriers

Find a carrier by name, DOT number or VIN *Since 2026-10-27.*

One door into the motor carrier register. `q` is read as a US DOT number when it is all digits, as a VIN when it is 17 characters (the carriers that unit was observed under), and otherwise as a name to match against legal and trade names, best match first. `state` and `country` narrow a name match. Each item links to the carrier read and its fleet. Costs 1 credit.

**Query parameters**

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `q` | string | yes | A carrier name or part of one, a DOT number, or a VIN |
| `state` | string | no | State or province, two letters |
| `country` | string | no | Country: US, CA or MX |
| `limit` | integer | no | Match cap |

**Response 200** `CarrierSearch`: Matches, best first, with how `q` was read

- `query` (object)
  - `query.q` (string)
  - `query.matchedAs` ("name" | "dotNumber" | "vin"): How `q` was read: as a name to match, a DOT number to look up, or a VIN to walk from.
  - `query.state` (string | null)
  - `query.country` (string | null)
- `carriers` (object)
  - `carriers.count` (integer): Items returned (bounded by `limit`)
  - `carriers.items` (object[]): Best match first
    - `carriers.items[].dotNumber` (integer)
    - `carriers.items[].ref` (string): "org:usdot/{dotNumber}"
    - `carriers.items[].legalName` (string | null)
    - `carriers.items[].dbaName` (string | null): Trade name, when the carrier filed one
    - `carriers.items[].domicile` (object)
      - `carriers.items[].domicile.city` (string | null)
      - `carriers.items[].domicile.state` (string | null): State or province, two letters
      - `carriers.items[].domicile.country` (string | null): "US", "CA" or "MX"
    - `carriers.items[].operation` ("interstate" | "intrastate-hazmat" | "intrastate" | "unknown"): The carrier's operating classification on its filing: "interstate" (A), "intrastate-hazmat" (B), "intrastate" (C), or "unknown".
    - `carriers.items[].powerUnits` (integer | null): Declared power units on the latest filing
    - `carriers.items[].links` (object): `carrier`: the full read. `vehicles`: the fleet walk.
- `links`? (object): Related resources, keyed by relation name, each a server-relative path. Example: {"recalls": "/v2/recalls/entity/model-year:toyota/rav4/2021"}

**Errors** (all use the ErrorEnvelope): 400, 401, 402, 429, 500

**Example: cURL**

```bash
curl "https://api.cardog.app/v2/carriers?q=bison%20transport&country=CA" \
  -H "x-api-key: $CARDOG_API_KEY" \
  -H "Cardog-Version: 2026-10-26"
```

**Example: TypeScript** (`npm install @cardog/api`)

```typescript
import { CardogClient } from "@cardog/api";

const client = new CardogClient({ apiKey: process.env.CARDOG_API_KEY });

const carrierSearch = await client.v2.carriers.search({ q: "bison transport", country: "CA" });
console.log(carrierSearch.query);
```

**Example: Python** (`pip install cardog`)

```python
import os

from cardog import Cardog

client = Cardog(api_key=os.environ["CARDOG_API_KEY"])

carrier_search = client.v2.carriers.search(q="bison transport", country="CA")
print(carrier_search.query)
```

### GET /v2/carriers/{dotNumber}

The carrier: identity, what it declared, what the road record shows *Since 2026-10-27.*

The carrier on the federal register by DOT number: legal and trade name, domicile (city, state, country), operating classification, the scale it declared on its latest filing (`declared`, self-reported and dated by `filedOn`), and what roadside inspections and crash reports recorded under it (`observed`: distinct units, inspections, crashes, first and last seen). Declared and observed never mix. A DOT number the road record names but the register does not answers 200 with `legalName` and every `declared` field null, the same DOT numbers `/vehicles` answers for; 404 when the DOT number is on neither. Costs 5 credits.

**Path parameters**

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `dotNumber` | integer | yes | The carrier's US DOT number, e.g. `245330` |

**Response 200** `Carrier`: The carrier

- `dotNumber` (integer)
- `ref` (string)
- `legalName` (string | null): null when the DOT number is on the road record but not on the register
- `dbaName` (string | null)
- `domicile` (object)
  - `domicile.city` (string | null)
  - `domicile.state` (string | null): State or province, two letters
  - `domicile.country` (string | null): "US", "CA" or "MX"
- `operation` ("interstate" | "intrastate-hazmat" | "intrastate" | "unknown"): The carrier's operating classification on its filing: "interstate" (A), "intrastate-hazmat" (B), "intrastate" (C), or "unknown".
- `declared` (object): What the carrier filed about itself. Self-reported; dated by `filedOn`. Every field null when the DOT number is not on the register.
  - `declared.powerUnits` (integer | null)
  - `declared.drivers` (integer | null)
  - `declared.mileage` (object | null): Annual mileage as filed. Self-reported and often years old; read `filedOn` before using it as a denominator.
    - `declared.mileage.value` (integer): Miles
    - `declared.mileage.year` (integer | null): The year the mileage figure is for
  - `declared.filedOn` (string | null): Date of the latest filing these figures come from, YYYY-MM-DD
  - `declared.registeredOn` (string | null): Date the DOT number was first registered, YYYY-MM-DD
  - `declared.hazmat` (boolean | null): Filed as carrying hazardous materials
  - `declared.passengers` (boolean | null): Filed as a passenger carrier
- `observed` (object): What the roadside record shows. Counts, never rates.
  - `observed.vehicles` (integer): Distinct VINs seen under this carrier on an inspection or crash report
  - `observed.inspections` (integer): Every roadside inspection under this carrier, with or without a VIN on it; `vehicles`, `firstSeen` and `lastSeen` count only rows that carry a VIN, so do not divide one by the other
  - `observed.crashes` (integer)
  - `observed.firstSeen` (string | null): Earliest event under this carrier, YYYY-MM-DD
  - `observed.lastSeen` (string | null): Latest event under this carrier, YYYY-MM-DD
- `links`? (object): Related resources, keyed by relation name, each a server-relative path. Example: {"recalls": "/v2/recalls/entity/model-year:toyota/rav4/2021"}

**Errors** (all use the ErrorEnvelope): 400, 401, 402, 404, 429, 500

**Example: cURL**

```bash
curl "https://api.cardog.app/v2/carriers/245330" \
  -H "x-api-key: $CARDOG_API_KEY" \
  -H "Cardog-Version: 2026-10-26"
```

**Example: TypeScript** (`npm install @cardog/api`)

```typescript
import { CardogClient } from "@cardog/api";

const client = new CardogClient({ apiKey: process.env.CARDOG_API_KEY });

const carrier = await client.v2.carriers.getByDot("245330");
console.log(carrier.dotNumber);
```

**Example: Python** (`pip install cardog`)

```python
import os

from cardog import Cardog

client = Cardog(api_key=os.environ["CARDOG_API_KEY"])

carrier = client.v2.carriers.get_by_dot("245330")
print(carrier.dot_number)
```

### GET /v2/carriers/{dotNumber}/vehicles

Every unit observed under a carrier *Since 2026-10-27.*

The fleet walk: every VIN an inspector or a crash report put under this DOT number, most recently seen first, with the roles it was seen in, first and last seen, its event counts, and a link to every carrier it was observed under. These are observed associations on dated rows, not a confirmed current fleet and not ownership. Pages by `cursor`; `vehicles.count` is the total across pages. 404 when the DOT number is on neither the register nor the road record. Costs 5 credits per page.

**Path parameters**

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `dotNumber` | integer | yes | The carrier's US DOT number, e.g. `245330` |

**Query parameters**

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `limit` | integer | no | Page size |
| `cursor` | string | no | `page.nextCursor` from the previous page |

**Response 200** `CarrierVehicles`: One page of units, most recently seen first

- `dotNumber` (integer)
- `carrier` (object | null): null when the DOT number is not on the register but units were observed under it
  - `carrier.dotNumber` (integer)
  - `carrier.ref` (string): "org:usdot/{dotNumber}"
  - `carrier.legalName` (string | null)
  - `carrier.dbaName` (string | null): Trade name, when the carrier filed one
  - `carrier.domicile` (object)
    - `carrier.domicile.city` (string | null)
    - `carrier.domicile.state` (string | null): State or province, two letters
    - `carrier.domicile.country` (string | null): "US", "CA" or "MX"
  - `carrier.operation` ("interstate" | "intrastate-hazmat" | "intrastate" | "unknown"): The carrier's operating classification on its filing: "interstate" (A), "intrastate-hazmat" (B), "intrastate" (C), or "unknown".
  - `carrier.powerUnits` (integer | null): Declared power units on the latest filing
  - `carrier.links` (object): `carrier`: the full read. `vehicles`: the fleet walk.
- `vehicles` (object)
  - `vehicles.count` (integer): Distinct units observed under this carrier, all pages
  - `vehicles.items` (object[]): Most recently seen first
    - `vehicles.items[].vin` (string)
    - `vehicles.items[].roles` ("power" | "towed"[]): The roles this unit was observed in under this carrier: ["power"], ["towed"], or both
    - `vehicles.items[].firstSeen` (string | null): YYYY-MM-DD
    - `vehicles.items[].lastSeen` (string | null): YYYY-MM-DD
    - `vehicles.items[].inspections` (integer)
    - `vehicles.items[].crashes` (integer)
    - `vehicles.items[].links` (object): `operators`: every carrier this unit was observed under
- `page` (object)
  - `page.limit` (integer)
  - `page.nextCursor` (string | null): Pass as `cursor` for the next page; null on the last page
- `links`? (object): Related resources, keyed by relation name, each a server-relative path. Example: {"recalls": "/v2/recalls/entity/model-year:toyota/rav4/2021"}

**Errors** (all use the ErrorEnvelope): 400, 401, 402, 404, 429, 500

**Example: cURL**

```bash
curl "https://api.cardog.app/v2/carriers/245330/vehicles?limit=100" \
  -H "x-api-key: $CARDOG_API_KEY" \
  -H "Cardog-Version: 2026-10-26"
```

**Example: TypeScript** (`npm install @cardog/api`)

```typescript
import { CardogClient } from "@cardog/api";

const client = new CardogClient({ apiKey: process.env.CARDOG_API_KEY });

const carrierVehicles = await client.v2.carriers.vehicles("245330", { limit: 100 });
console.log(carrierVehicles.dotNumber);
```

**Example: Python** (`pip install cardog`)

```python
import os

from cardog import Cardog

client = Cardog(api_key=os.environ["CARDOG_API_KEY"])

carrier_vehicles = client.v2.carriers.vehicles("245330", limit=100)
print(carrier_vehicles.dot_number)
```

---

Previous: [History](https://cardog.app/docs/reference/history.md) (API reference)
Next: [Feeds](https://cardog.app/docs/reference/feeds.md) (API reference)
