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/{id}

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

id — the broker's MC number (MC123456 or zero-padded forms) or its USDOT number (1234567). Always send an MC with its MC prefix: a bare number is looked up as a USDOT number first.

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. type — broker 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.

type — broker or carrier. ids — an array of 1–100 ids (for brokers, MC or USDOT numbers, as on /broker). view — optional, full (default) or summary. include — optional, ["history"] to add score history to every item.

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, in the same view, is billed once. A summary and a full report on the same company count once each. 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, related companies and, for brokers, monthly payment aging.
summaryIdentity, score, band, warnings and the headline numbers. Drops sections, aging, 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
    }
  }
}

Score history

Neither view includes score history unless you ask for it. Add include=history to either view to get history: twelve weekly points, each with week, score and, for brokers, avgDaysToPay. Leave it off if you store results and build your own trend, since the response is smaller and faster without it. An unrecognized include value returns 400.

curl "https://www.sureloadr.com/api/v1/broker/MC123456?include=history"   -H "Authorization: Bearer sk_live_your_api_key"

When several companies match

Use the MC number or USDOT number for a broker, and the DOT number for a carrier. Those are unique identifiers and return a single report — they are what an integration should store and send. Send a broker's MC with its MC prefix (MC123456, not 123456): a bare number on /broker is matched as a USDOT number first, and only falls back to an MC when no USDOT number matches.

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.

Id (MC or DOT for brokers)CompanyWhat it demonstrates
MC99990001 or DOT 90009001SANDBOX PRIME LOGISTICS LLCLow risk, full payment history
MC99990002 or DOT 90009002SANDBOX FLAGGED FREIGHT LLCCarries a no-buy warning
MC99990003 or DOT 90009003SANDBOX UNKNOWN BROKERAGE LLCNo payment data on file
MC99990004 or DOT 90009004SANDBOX LAPSED BOND LLCBond gap, Extreme band
MC99990005 or DOT 90009005SANDBOX NEW AUTHORITY LLCAuthority granted recently
MC99990006 or DOT 90009006SANDBOX 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. */ ],
    "aging": { /* monthly receivables aging */ }
  }
}

Field reference

A broker report carries only broker fields and a carrier report carries only carrier fields. Read subjectType to know which you have. A field that does apply can still be null when we have no data for it, and that means unknown, 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
sectionsarrayboth, full view only
historyarrayboth, only with include=history
insurance, relatedCompaniesarrayboth — full view only
disputesarraybroker only
agingobjectbroker, full view only. Monthly receivables aging, null when there is no recent data
doubleBrokerRiskstringcarrier: Low, Inconsistent, Elevated or High
doubleBrokerReasonsarraycarrier, full view only
cargoTagsarraycarrier only
stats.avgDaysToPaynumberbroker — whole days
stats.reporterCountnumberbroker — distinct companies reporting
stats.evidenceCountnumberbroker — invoices behind the figure
stats.nonPaymentReportsnumberbroker
stats.authorityGranted, revocations, reinstatements, insuranceCancellationsstring, numberbroker, full view only
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 or include.
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.