AuthorityAlerts Live leads Pricing Outreach Daily stats Free sample Sign in Start trial

API & Webhooks

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.

Authentication

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.

Endpoints

GET /v1/leads

Lead 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/count

Counts by stage for the same filters — cheap dashboards without pulling rows.

GET /v1/carriers/:usdot

One carrier's full picture: registration record, authorities, authority events, insurance filing history, and its lead events within your history window.

GET /v1/authorities/:docket

Everything on one docket (MC number): authority rows, status-change events, insurance filings.

GET /v1/events

The 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/contacted

Sync 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"}'

Webhooks

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.

Works with your stack

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.