USDOTNew Trucking Companies

Developers

Webhooks and API

Every plan can push each morning's matches to your own endpoint as signed JSON. The Team plan adds a read API for any day's batch.

Webhook (every plan)

Set a URL in your settings. When your digest goes out we POST the same matches as JSON:

POST https://your-endpoint.example.com/ntc
Content-Type: application/json
X-NTC-Timestamp: 1790744888
X-NTC-Signature: sha256=<hex HMAC-SHA256 of "<timestamp>." + raw body>
X-NTC-Test: 0

The HMAC key is the webhook secret shown in your settings. X-NTC-Test: 1 marks the sample the "Test webhook" button sends. We wait up to 10 seconds for a 2xx and do not retry, so return quickly and queue your own work. Up to 2,000 events per call; the full list is always in the digest CSV.

Verify in Python

import hmac, hashlib

def verify(raw_body: bytes, headers: dict, secret: str) -> bool:
    ts = headers["X-NTC-Timestamp"]
    sent = headers["X-NTC-Signature"].removeprefix("sha256=")
    mac = hmac.new(secret.encode(), ts.encode() + b"." + raw_body, hashlib.sha256)
    return hmac.compare_digest(mac.hexdigest(), sent)

Verify in Node

const crypto = require("crypto");

function verify(rawBody, headers, secret) {
  const ts = headers["x-ntc-timestamp"];
  const sent = (headers["x-ntc-signature"] || "").replace("sha256=", "");
  const mac = crypto.createHmac("sha256", secret)
    .update(ts + ".").update(rawBody).digest("hex");
  return crypto.timingSafeEqual(Buffer.from(mac), Buffer.from(sent));
}

Straight into a Google Sheet

No server needed: a Google Apps Script web app can be the webhook.

// Extensions > Apps Script in your Google Sheet, paste, then
// Deploy > New deployment > Web app (execute as you, access: anyone).
// Put the web app URL in your feed settings as the webhook URL.
function doPost(e) {
  var body = JSON.parse(e.postData.contents);
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0];
  if (sheet.getLastRow() === 0) {
    sheet.appendRow(["Event", "Event date", "USDOT", "Docket", "Legal name",
      "Email", "Phone", "Cell", "City", "State", "Power units", "Page"]);
  }
  (body.events || []).forEach(function (r) {
    var c = r.carrier || {};
    sheet.appendRow([r.event_label, r.event_date, c.dot, r.docket, c.legal_name,
      c.email, c.phone, c.cell, c.city, c.state, c.power_units, r.url]);
  });
  return ContentService.createTextOutput("ok");
}

API (Team plan)

Create a key in your settings, then:

GET https://newtruckingcompanies.com/ntc/v1/events?date=2026-09-29
X-API-Key: ntc_...

Response

{
  "date": "2026-09-29",
  "count": 1,
  "events": [{
    "event": "authority_granted",
    "event_label": "Authority granted",
    "event_date": "2026-09-28",
    "first_seen": "2026-09-29",
    "docket": "MC70228171",
    "detail": {"auth": "property"},
    "carrier": {
      "dot": "4588199", "legal_name": "Example Freight LLC", "dba_name": null,
      "officers": ["Jane Example"], "email": "jane@example.com",
      "email_shared": null, "email_mx": true,
      "phone": "(555) 010-0000", "cell": null,
      "street": "1 Main St", "city": "Dallas", "state": "TX", "zip": "75201",
      "power_units": 1, "drivers": 1, "fleet": "0-1",
      "operation": "interstate", "classes": ["for_hire"], "hazmat": false,
      "cargo_groups": ["general"], "add_date": "2026-09-02",
      "dockets": {"MC70228171": {"auth": "property", "status": "Active",
                                 "bipd_on_file": true, "boc3": true}}
    },
    "url": "https://newtruckingcompanies.com/carrier/4588199/"
  }]
}

Fields

Wire it into your CRM this week

Webhook on every plan. JSON API on Team. 7-day free trial.