CarrierScrub Lookup API

The Lookup API from CarrierScrub — 1 operation(s) for lookup.

Operations 1

GET /v1/lookup Check one carrier by USDOT or MC number #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/carrierscrub-com:carrierscrub-com-lookup-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

carrierscrub-com-lookup-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: CarrierScrub Lookup API
  version: 1.0.0
  summary: Check a US motor carrier's FMCSA record before a broker tenders a load.
  description: 'Each check returns a GO, CAUTION or STOP verdict with dated reason codes. Every reason states a fact FMCSA published and its date; none is a conclusion about the company. Every result names the FMCSA record it used (record_source) and that record''s date (record_as_of); the legacy record has been frozen since 2026-05-14. API keys work on every plan: on Pay-as-you-go and Small Brokerage each lookup uses one of the brokerage''s 25 free lookups that month, then a $1.00 credit, and on Agency lookups are unlimited. How to get a key is in https://carrierscrub.com/auth.md. AI assistants can use the same checks through the MCP server at https://carrierscrub.com/mcp.'
  contact:
    email: support@carrierscrub.com
    url: https://carrierscrub.com/contact
  termsOfService: https://carrierscrub.com/terms
servers:
- url: https://carrierscrub.com
security:
- apiKey: []
tags:
- name: Lookup
paths:
  /v1/lookup:
    get:
      operationId: lookupCarrier
      summary: Check one carrier by USDOT or MC number
      description: 'Counts once toward the brokerage''s daily API request limit (shared with the MCP server): 100 a day, or 1,000 on the Agency plan, resetting at 00:00 UTC. On Pay-as-you-go and Small Brokerage it uses one of the brokerage''s free monthly lookups, then a credit; a carrier the brokerage already checked today is not charged again. Appears in the brokerage''s audit log under the key''s name.'
      parameters:
      - name: q
        in: query
        required: true
        description: A USDOT number ("USDOT 8893375", "DOT 8893375" or "8893375") or an MC number ("MC 123456"). Bare digits are read as a USDOT number.
        schema:
          type: string
          minLength: 1
          maxLength: 120
        example: USDOT 8893375
      - name: load
        in: query
        required: false
        description: 'Optional load number, recorded with the check in the brokerage''s lookup history and vetting file. Letters, digits, spaces and # . _ / - only; at most 40 characters.'
        schema:
          type: string
          maxLength: 40
      responses:
        '200':
          description: The carrier's verdict.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Verdict'
        '400':
          $ref: '#/components/responses/Error'
        '401':
          $ref: '#/components/responses/Error'
        '402':
          $ref: '#/components/responses/Error'
        '404':
          $ref: '#/components/responses/Error'
        '429':
          $ref: '#/components/responses/Error'
        '503':
          $ref: '#/components/responses/Error'
      tags:
      - Lookup
components:
  responses:
    Error:
      description: 'The check was not completed. 401: no key, or the key is invalid, expired or revoked. 402 (code payg_credits_exhausted): the brokerage has used its free lookups this month and has no credits left; the hint says where to buy them. 404: no carrier for that number. 413: the file is too large. 429: daily limit reached. 503: FMCSA could not be reached and no dated record is on file.'
      content:
        application/json:
          schema:
            type: object
            required:
            - error
            properties:
              error:
                type: string
              hint:
                type: string
  schemas:
    Verdict:
      type: object
      required:
      - dot_number
      - verdict
      - reasons
      - data_as_of
      - record_source
      - record_as_of
      properties:
        dot_number:
          type: string
        legal_name:
          type:
          - string
          - 'null'
        location:
          type:
          - string
          - 'null'
        verdict:
          type: string
          enum:
          - GO
          - CAUTION
          - STOP
        reasons:
          type: array
          items:
            type: object
            required:
            - code
            - detail
            properties:
              code:
                type: string
                description: A reason code, e.g. OUT_OF_SERVICE_ORDER.
              detail:
                type: string
                description: Plain-language statement of the dated FMCSA fact.
        days_until_suspension:
          type:
          - integer
          - 'null'
          description: Days until an already-served revocation takes effect, when dated.
        data_as_of:
          type: string
          description: When CarrierScrub read this record.
        record_source:
          type: string
          enum:
          - motus
          - legacy
          description: Which FMCSA record the verdict rests on.
        record_as_of:
          type: string
          format: date
          description: That record's date. A legacy record is as of 2026-05-14 at the latest.
        freshness:
          type: object
          description: 'How current this answer is. Check it before relying on a GO: a stored answer is CarrierScrub''s saved record, with FMCSA''s out-of-service orders and current authority, insurance and suspension notices re-checked on their own (see reasons).'
          properties:
            source:
              type: string
              enum:
              - live
              - stored
              description: 'live: read from FMCSA for this request. stored: a saved answer.'
            stale:
              type: boolean
              description: 'Part of the answer is not current: a stored answer more than 24 hours old, or the safety record could not be read.'
            live_check_failed:
              type: boolean
              description: A live check was tried and FMCSA did not answer, so this is the stored answer.
        safety:
          type:
          - object
          - 'null'
          description: FMCSA safety rating with its date, 24-month roadside inspection and out-of-service counts, crash counts, and any acute or critical investigation finding, dated to the SMS snapshot (as_of). Most carriers have never been rated; that is not a finding.
        authority_granted_on:
          type:
          - string
          - 'null'
          format: date
        authority_reinstated_on:
          type:
          - string
          - 'null'
          format: date
        record_changes:
          type:
          - object
          - 'null'
          description: What changed on the carrier's FMCSA record and the day CarrierScrub's daily archive saw it, newest first. A fact beside the verdict, never a reason. null until the archive has a complete baseline; an empty events list means none seen since `since`. A phone is shown by its last four digits, an email by its domain, an address by its city and state. `control_notice` may also be set; see below.
          properties:
            since:
              type: string
              format: date
            events:
              type: array
              items:
                type: object
                required:
                - seen
                - source
                - text
                properties:
                  seen:
                    type: string
                    format: date
                  source:
                    type: string
                    enum:
                    - census
                    - motus
                  text:
                    type: string
                  filed:
                    type:
                    - string
                    - 'null'
                    format: date
                    description: The MCS-150 filing that came with a census change.
            control_notice:
              type:
              - object
              - 'null'
              description: 'Set when an established carrier (registered with FMCSA three or more years) had its company officers and a phone, email or address change within a week of each other, in the last 30 days. A notice to confirm who you are dealing with: never a reason code, and it does not change the verdict. Most carriers it appears on have done nothing wrong; a sale or a retirement looks the same on FMCSA''s record. null when there is none.'
              properties:
                seen:
                  type: string
                  format: date
                text:
                  type: string
              required:
              - seen
              - text
  securitySchemes:
    apiKey:
      type: http
      scheme: bearer
      description: 'Authorization: Bearer cs_live_... An owner or admin of the brokerage, on any plan, creates keys in Admin, then API keys. A key that goes unused for 60 days stops working.'
externalDocs:
  description: Getting access
  url: https://carrierscrub.com/auth.md