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/{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. 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. 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.
| view | Returns |
|---|---|
full | The complete report — score, band, warnings, insurance, every section, twelve weeks of history and related companies. |
summary | Identity, 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.
| Id | Company | What it demonstrates |
|---|---|---|
MC99990001 | SANDBOX PRIME LOGISTICS LLC | Low risk, full payment history |
MC99990002 | SANDBOX FLAGGED FREIGHT LLC | Carries a no-buy warning |
MC99990003 | SANDBOX UNKNOWN BROKERAGE LLC | No payment data on file |
MC99990004 | SANDBOX LAPSED BOND LLC | Bond gap, Extreme band |
MC99990005 | SANDBOX NEW AUTHORITY LLC | Authority granted recently |
MC99990006 | 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. */ ],
"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”.
| 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, history | array | both — full view only |
insurance, relatedCompanies | array | both — full view only |
disputes | array | broker — always empty for carriers |
doubleBrokerRisk | string | carrier — Low, Inconsistent, Elevated or High; null for brokers |
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.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. |
| 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