Programmatic access to every lead stage — the same data behind the daily digests, as JSON. Available on the Elite plan. Keys are created in your account → API & webhooks.
Every request carries a Bearer key. Keys are shown once at creation and can be revoked anytime.
curl https://authorityalerts.com/v1/leads?state=FL \
-H "Authorization: Bearer aa_live_XXXXXXXXXXXX"
Rate limits: 60 requests/minute and 10,000/day per account. Over the limit returns 429 with a Retry-After header. Inactive subscriptions get 402; non-Elite plans get 403.
GET /v1/leadsLead events with full carrier contact detail, newest first, cursor-paginated.
Query params: stage (comma-separated, e.g. insurance_cancel_pending,authority_granted) · state (comma-separated) · type (carriers, brokers, freight_forwarders) · fleet_min / fleet_max · since / until (YYYY-MM-DD; history depth follows your plan) · include_agent_contacts=true to include filing-agent phone/email (off by default) · include_contacted=true to include carriers you've already marked · q (name search) · limit (≤1000) · cursor.
{ "data": [ { "usdot": 4123456, "legal_name": "ABC TRUCKING LLC", "stage": "insurance_cancel_pending",
"occurred_on": "2026-09-23", "state": "FL", "city": "TAMPA", "power_units": 2,
"phone": "8135551234", "email": "owner@abctrucking.com", "insurer": "PROGRESSIVE",
"days_to_lapse": 12, ... } ],
"next_cursor": "NTAw" }
GET /v1/leads/countCounts by stage for the same filters — cheap dashboards without pulling rows.
GET /v1/carriers/:usdotOne carrier's full picture: registration record, authorities, authority events, insurance filing history, and its lead events within your history window.
GET /v1/authorities/:docketEverything on one docket (MC number): authority rows, status-change events, insurance filings.
GET /v1/eventsThe raw event firehose — authority status changes and insurance filings since a date, before lead-stage interpretation. For building your own logic on top.
POST /v1/contactedSync your dial list: mark a carrier contacted or skip (or clear), with an optional note. Marked carriers drop out of digests and API results for your whole team.
curl -X POST https://authorityalerts.com/v1/contacted \
-H "Authorization: Bearer aa_live_XXXX" -H "Content-Type: application/json" \
-d '{"usdot": 4123456, "status": "contacted", "note": "LM w/ owner 9/24"}'
Get every matching lead pushed to your endpoint the morning it appears — no polling.
curl -X POST https://authorityalerts.com/v1/webhooks \
-H "Authorization: Bearer aa_live_XXXX" -H "Content-Type: application/json" \
-d '{"url": "https://example.com/hooks/aa", "stages": ["insurance_cancel_pending"], "states": ["FL","GA"]}'
The response includes a whsec_… signing secret, shown once. Each delivery is a POST with headers X-AA-Event: lead, X-AA-Delivery: <id>, and X-AA-Signature: t=<unix>,v1=<hex> where v1 = HMAC-SHA256(secret, t + "." + rawBody). Verify with a 5-minute tolerance:
// Node
import crypto from 'node:crypto';
function verify(secret, rawBody, header) {
const { t, v1 } = Object.fromEntries(header.split(',').map(kv => kv.split('=')));
if (Math.abs(Date.now() / 1000 - Number(t)) > 300) return false;
const mac = crypto.createHmac('sha256', secret).update(`${t}.${rawBody}`).digest('hex');
return crypto.timingSafeEqual(Buffer.from(mac), Buffer.from(v1));
}
Failed deliveries retry with backoff; an endpoint that keeps failing is paused and can be revived with POST /v1/webhooks/:id/replay?since=YYYY-MM-DD, which re-queues matching leads. Manage endpoints with GET /v1/webhooks and DELETE /v1/webhooks/:id.
Zapier / Make: create a "Catch Hook" (Zapier) or "Custom webhook" (Make) trigger, paste its URL into POST /v1/webhooks, and every new lead becomes a Zap/scenario run — append to Google Sheets, create a CRM contact, post to Slack, anything.
GoHighLevel: point the webhook at a GHL inbound webhook trigger; map legal_name, phone, email, state, stage into a contact + pipeline stage. New cancellation alert → new opportunity in your pipeline, automatically.
Google Sheets, no code: the daily digest already attaches a CSV; or run a scheduled Apps Script hitting GET /v1/leads and appending rows.
Your own CRM: one nightly GET /v1/leads?since=… plus POST /v1/contacted when a rep logs a call keeps both sides in sync.
Building something on the data? Tell us — happy to help with integration questions.