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/v1Authentication
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_keyKeys 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.
| view | Returns |
|---|---|
full | The complete report: score, band, warnings, insurance, every section, related companies and, for brokers, monthly payment aging. |
summary | Identity, 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) | Company | What it demonstrates |
|---|---|---|
MC99990001 or DOT 90009001 | SANDBOX PRIME LOGISTICS LLC | Low risk, full payment history |
MC99990002 or DOT 90009002 | SANDBOX FLAGGED FREIGHT LLC | Carries a no-buy warning |
MC99990003 or DOT 90009003 | SANDBOX UNKNOWN BROKERAGE LLC | No payment data on file |
MC99990004 or DOT 90009004 | SANDBOX LAPSED BOND LLC | Bond gap, Extreme band |
MC99990005 or DOT 90009005 | SANDBOX NEW AUTHORITY LLC | Authority granted recently |
MC99990006 or DOT 90009006 | SANDBOX REFRAMED BROKERAGE LLC | Inactive broker — null score, notice set |
90000001 | SANDBOX SAFE TRANSPORT LLC | Carrier, clean inspection record |
90000002 | SANDBOX WATCHLIST TRANSPORT LLC | Carrier, 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”.
| Field | Type | Applies to |
|---|---|---|
subjectType | string | both — broker or carrier |
subjectKey | string | both — the canonical id to store |
name, dba | string | both |
mc, dot | string | both |
location, active | string, boolean | both |
score, band | number, string | both — null when a company is not scored |
warnings | array | both — kind, severity, text |
notice | object | both — a banner such as “not an active broker” |
reasons, metrics | array | both — full view only |
sections | array | both, full view only |
history | array | both, only with include=history |
insurance, relatedCompanies | array | both — full view only |
disputes | array | broker only |
aging | object | broker, full view only. Monthly receivables aging, null when there is no recent data |
doubleBrokerRisk | string | carrier: Low, Inconsistent, Elevated or High |
doubleBrokerReasons | array | carrier, full view only |
cargoTags | array | carrier only |
stats.avgDaysToPay | number | broker — whole days |
stats.reporterCount | number | broker — distinct companies reporting |
stats.evidenceCount | number | broker — invoices behind the figure |
stats.nonPaymentReports | number | broker |
stats.authorityGranted, revocations, reinstatements, insuranceCancellations | string, number | broker, full view only |
stats.inspTotal, OOS rates, crash counts | number | carrier |
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.
| Status | Meaning |
|---|---|
| 400 | Missing or invalid request — no MC/DOT supplied, or an unrecognized view or include. |
| 401 | Missing, invalid, or revoked API key. |
| 402 | Account is not active, or its monthly billable cap has been reached. |
| 403 | Your plan does not include API access. |
| 404 | No broker or carrier found for that number. |
| 429 | Rate limit exceeded. The message states your account's limit. |
| 500 | Unexpected 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.
GET /alerts— changes since a timestamp- Webhooks — pushed alerts when a monitored company changes
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.
Sign up