Developers

SureLoadr API

Pull freight broker credit and carrier vetting reports programmatically — the same risk scores and data you see in the dashboard, delivered as JSON for your underwriting, onboarding, and compliance systems.

The API is available on the API Access plan and on custom plans for partners integrating SureLoadr data into their own software. See plans for high-volume users or contact us to enable it.

Base URL

https://www.sureloadr.com/api/v1

Authentication

Every request must include your secret API key as a Bearer token in the Authorization header. Generate and manage keys in your dashboard: API-only accounts have a Keys tab, and every other plan with API access finds them under Settings → API Keys. Your key is shown once at creation — store it securely and never expose it in client-side code.

Authorization: Bearer sk_live_your_api_key

Keys come in two kinds, chosen when you create one. A live key (sk_live_…) returns real reports and is billable. A test key (sk_test_…) returns fixed sample companies from the sandbox and is never billed. An account can hold one of each, revoked independently.

Endpoints

GET /carrier/{dot}

Returns the carrier vetting report for a USDOT number.

dot — the carrier's USDOT number (digits).

curl https://www.sureloadr.com/api/v1/carrier/1234567 \
  -H "Authorization: Bearer sk_live_your_api_key"

GET /broker/{mc}

Returns the broker credit report for an MC (docket) number.

mc — the broker's MC / docket number. Accepts MC123456, 123456, or zero-padded forms.

curl https://www.sureloadr.com/api/v1/broker/MC123456 \
  -H "Authorization: Bearer sk_live_your_api_key"

GET /search

Resolves a company name to SureLoadr ids, so a system that stores names rather than MC numbers can find the id to pull a report with. Free — a search is never a billable call.

q — name or number, at least 3 characters. typebroker or carrier (required). limit — optional, 1–12.

Returns identity only: subjectKey, name, dba, mc, dot, location and active. There is no score in a search result — pull the report for that.

curl "https://www.sureloadr.com/api/v1/search?q=blue%20ridge&type=broker" \
  -H "Authorization: Bearer sk_live_your_api_key"

POST /reports/batch

Up to 100 companies in one request. A bad id fails only its own item — the request still returns 200 with a per-item status, so one typo cannot discard the other ninety-nine reports.

typebroker or carrier. ids — an array of 1–100 ids. view — optional, full (default) or summary.

Each item carries a status of ok (with data), not_found, ambiguous (with matches, as below) or error. Repeating an id inside one batch is one lookup and one charge.

Billing is per company record returned, exactly as if you had called the single endpoint once per id — including the 24-hour de-duplication, which spans both routes. A company pulled on its own in the morning and again in an afternoon batch is billed once. Items that are not_found, ambiguous or error are never billed.

curl -X POST https://www.sureloadr.com/api/v1/reports/batch \
  -H "Authorization: Bearer sk_live_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{"type":"broker","ids":["MC123456","MC234567"],"view":"summary"}'

Response shapes

Both endpoints accept an optional view parameter. full is the default, so an existing integration needs no change.

viewReturns
fullThe complete report — score, band, warnings, insurance, every section, twelve weeks of history and related companies.
summaryIdentity, score, band, warnings and the headline numbers. Drops sections, history, insurance, relatedCompanies, metrics and reasons.
curl "https://www.sureloadr.com/api/v1/broker/MC123456?view=summary" \
  -H "Authorization: Bearer sk_live_your_api_key"

An unrecognized view value returns 400 rather than quietly falling back, so a typo surfaces on the first call instead of in your parser.

{
  "data": {
    "subjectType": "broker",
    "subjectKey": "MC123456",
    "name": "EXAMPLE LOGISTICS LLC",
    "mc": "MC123456",
    "dot": "7654321",
    "location": "COLUMBUS, OH",
    "active": true,
    "score": 82,
    "band": "Moderate (70-84)",
    "notice": null,
    "warnings": [ /* same as above */ ],
    "stats": {
      "avgDaysToPay": 34,
      "reporterCount": 1240,
      "evidenceCount": 88300,
      "nonPaymentReports": 0
    }
  }
}

When several companies match

Use the MC number for a broker or the DOT number for a carrier. Those are unique identifiers and return a single report — they are what an integration should store and send.

One registration, one report per product. FMCSA records broker authority and carrier authority separately on the same MC/DOT, and each call returns at most one report — never two. Read data.subjectType to know which one you got. A company that holds both authorities (J. B. Hunt, MC135797 / DOT 80806, for example) has a Broker Credit Report at /v1/broker/MC135797 and a separate Carrier Risk Analysis at /v1/carrier/MC135797; they score different things and each is its own billable call. A registration whose broker authority is inactive but which operates as an active motor carrier is a carrier: /v1/broker/<that MC> returns its Carrier Risk Analysis with subjectType: "carrier", and there is no broker report for it. Search hits and matches entries carry a subjectType for the same reason.

A company name will often match several companies. When more than one matches, the response is 200 with a matches array and no data key:

{
  "matches": [
    {
      "subjectKey": "MC015600",
      "name": "EXAMPLE RIDGE LOGISTICS LLC",
      "dba": null,
      "mc": "MC015600",
      "dot": "1234567",
      "location": "DALLAS, TX",
      "active": true
    },
    { /* … */ }
  ],
  "matchCount": 2,
  "truncated": false
}

Each entry is identity only — no score. Pick the one you want and call again with its subjectKey. truncated: true means more than twelve companies matched and the list was cut short, so narrow the query.

A bare number can be ambiguous too: some dockets exist in both zero-padded and unpadded form, so 15600 may match two records where MC015600 matches one.

An ambiguous response is never billed — no report was returned.

Sandbox and test keys

A test key (sk_test_…) serves a fixed set of sample companies and never reads real data. Live scores are recalculated nightly, so a test asserting a real company's score will eventually fail for reasons that have nothing to do with your code. The sandbox companies never change.

IdCompanyWhat it demonstrates
MC99990001SANDBOX PRIME LOGISTICS LLCLow risk, full payment history
MC99990002SANDBOX FLAGGED FREIGHT LLCCarries a no-buy warning
MC99990003SANDBOX UNKNOWN BROKERAGE LLCNo payment data on file
MC99990004SANDBOX LAPSED BOND LLCBond gap, Extreme band
MC99990005SANDBOX NEW AUTHORITY LLCAuthority granted recently
MC99990006SANDBOX REFRAMED BROKERAGE LLCInactive broker — null score, notice set
90000001SANDBOX SAFE TRANSPORT LLCCarrier, clean inspection record
90000002SANDBOX WATCHLIST TRANSPORT LLCCarrier, elevated double-brokering risk

Every one is fictitious. Any other id returns 404, and MC99999999 and 90009999 are guaranteed to stay missing so you can test error handling. Sandbox calls are never billed, and a test key cannot reach real data any more than a live key can reach the sandbox.

Example (JavaScript)

const res = await fetch(
  "https://www.sureloadr.com/api/v1/broker/123456",
  { headers: { Authorization: "Bearer sk_live_your_api_key" } }
);
const { data } = await res.json();
console.log(data.name, data.score, data.band);

Example response

Successful responses return HTTP 200 with a top-level data object:

{
  "data": {
    "subjectType": "broker",
    "subjectKey": "MC123456",
    "name": "EXAMPLE LOGISTICS LLC",
    "dba": null,
    "mc": "MC123456",
    "dot": "7654321",
    "location": "COLUMBUS, OH",
    "active": true,
    "score": 82,
    "band": "Moderate (70-84)",
    "warnings": [
      {
        "kind": "no_buy",
        "severity": "high",
        "text": "One or more factoring companies have placed this broker on a no-buy list."
      }
    ],
    "stats": {
      "avgDaysToPay": 34,
      "reporterCount": 1240,
      "evidenceCount": 88300,
      "nonPaymentReports": 0
    },
    "sections": [ /* authority, payment experiences, contact, etc. */ ],
    "history": [ /* 12 weekly score points */ ]
  }
}

Field reference

Both endpoints return the same object. Fields that do not apply to a subject type are present and null in full, so one parser handles both — a null means not applicable to this type, never “checked and clear”.

FieldTypeApplies to
subjectTypestringboth — broker or carrier
subjectKeystringboth — the canonical id to store
name, dbastringboth
mc, dotstringboth
location, activestring, booleanboth
score, bandnumber, stringboth — null when a company is not scored
warningsarrayboth — kind, severity, text
noticeobjectboth — a banner such as “not an active broker”
reasons, metricsarrayboth — full view only
sections, historyarrayboth — full view only
insurance, relatedCompaniesarrayboth — full view only
disputesarraybroker — always empty for carriers
doubleBrokerRiskstringcarrier — Low, Inconsistent, Elevated or High; null for brokers
cargoTagsarraycarrier only
stats.avgDaysToPaynumberbroker — whole days
stats.reporterCountnumberbroker — distinct companies reporting
stats.evidenceCountnumberbroker — invoices behind the figure
stats.nonPaymentReportsnumberbroker
stats.inspTotal, OOS rates, crash countsnumbercarrier

Band values are Low (85-100), Moderate (70-84), High (51-69) and Extreme (<51).

Rate limits

Requests are limited per account, not per key — creating a second key does not raise your ceiling. The default is 60 per minute; your account may be set higher or lower. Exceeding it returns HTTP 429, and the message states the limit that actually applies to you.

A batch spends one unit of that budget per company rather than one per request, because the limit exists to bound work and not HTTP calls. A batch larger than your remaining budget for the current minute is refused with 429 before any report is built, and the message says how many you have left — so you are never charged for a batch that was only half served.

/search carries its own separate allowance of 20 per minute, counted apart from report calls, so free lookups cannot exhaust the budget you need for reports.

An account may also carry a monthly ceiling on billable calls as a runaway guard. Reaching it returns HTTP 402 until the next month. Need a higher limit? Contact us.

Errors

Errors return the appropriate HTTP status with a JSON { "error": "…" } body.

StatusMeaning
400Missing or invalid request — no MC/DOT supplied, or an unrecognized view.
401Missing, invalid, or revoked API key.
402Account is not active, or its monthly billable cap has been reached.
403Your plan does not include API access.
404No broker or carrier found for that number.
429Rate limit exceeded. The message states your account's limit.
500Unexpected server error.

Not yet available

These are planned and are not live. They are listed so you know what is coming, not so you can build against them — calling any of them today returns 404.

Frequently asked questions

Does SureLoadr have an API?

Yes. SureLoadr offers a REST API that returns freight broker credit reports and carrier vetting reports as JSON, using the same FMCSA-backed risk scores shown in the dashboard. It is available on the API Access plan and on custom plans arranged directly for partners.

Is the SureLoadr API REST or SOAP?

The SureLoadr API is a modern REST API. You make HTTPS GET requests and receive JSON responses, authenticated with a Bearer API key — there is no SOAP, XML, or WSDL to work with.

How do I get a SureLoadr API key?

Contact us to discuss pricing or to request a test key: email support@sureloadr.com, use the contact form on our site, or call 1-855-378-7873. Once API access is enabled on your account you generate the key yourself. API-only accounts have a Keys tab; every other plan finds them under Settings → API Keys. Your secret key is shown once at creation, so store it securely and send it as an Authorization: Bearer header.

What data does the SureLoadr API return?

Each report includes a risk score and band, operating authority status, insurance filings, and — for carriers — safety (FMCSA SMS) and double-brokering signals, or for brokers, payment-risk, bond status, and verified non-payment history.

How much does the SureLoadr API cost?

API access starts at $299 per month, with volume pricing quoted against your book. Partners integrating SureLoadr data into their own software are quoted a custom plan. It is built for high-volume users such as freight factoring companies that pull many broker credit reports.

Is there a rate limit on the SureLoadr API?

Yes. Requests are limited per account rather than per key, so creating a second key does not raise your ceiling. The default is 60 per minute and your account can be set higher or lower; exceeding it returns an HTTP 429 response stating the limit that applies to you. Higher throughput is available on request.

Can factoring companies pull broker credit in bulk?

Yes. Freight factoring companies use the SureLoadr API to pull broker credit and payment-risk reports programmatically into their underwriting systems, rather than checking brokers one at a time in a dashboard.