Developers

A clean API for company lifecycle events

A predictable REST API and signed webhooks, with one event schema for all 50 states. You can make your first call in minutes.

Quickstart

Your first request

Authenticate with a bearer token and query the /v1/events endpoint using the same filters as the dashboard. Results are paginated with an opaque cursor.

  • API keys scoped to read, write or webhook management.
  • Versioned. Breaking changes only ever ship in a new version.
  • SDKs for Node.js and Python, with OpenAPI 3.1 for everything else.
bash
curl https://api.companyvisor.com/v1/events \
  -H "Authorization: Bearer $COMPANYVISOR_KEY" \
  -G \
  -d type=company.formed \
  -d state=TX,AZ \
  -d category=construction \
  -d name=roofing \
  -d since=2026-09-01
Reference

Core endpoints

Everything available in the dashboard is also available through the API.

GET/v1/events

List formation and insolvency events, filtered and paginated.

GET/v1/companies/{id}

Retrieve a company and its full lifecycle history.

GET/v1/companies/search

Look up companies by name, state, city and category.

POST/v1/alerts

Create a saved filter that powers dashboard, email and webhook delivery.

POST/v1/watchlists/{id}/companies

Add companies to a watchlist in bulk (up to 10,000 per request).

POST/v1/webhook_endpoints

Register an HTTPS endpoint and choose which alerts it receives.

DEL/v1/webhook_endpoints/{id}

Remove an endpoint. Deliveries already queued are cancelled.

Webhooks

Reliable delivery, verified on arrival

Each delivery is a POST with a JSON body and a CV-Signature header. Respond with any 2xx status within 10 seconds to acknowledge it.

  • HMAC-SHA256 signatures with a timestamp to block replay attacks.
  • Retries for 72 hours with exponential backoff if your endpoint is down.
  • Delivery log. Inspect, debug and replay any event from the dashboard.
  • Idempotent by design. Each event has a stable id you can use to deduplicate.
verify.js
import crypto from "node:crypto";

// header: CV-Signature: t=1727186531,v1=5f2b...
export function verify(rawBody, header, secret) {
  const { t, v1 } = Object.fromEntries(
    header.split(",").map((p) => p.split("="))
  );
  const expected = crypto
    .createHmac("sha256", secret)
    .update(`${t}.${rawBody}`)
    .digest("hex");

  const fresh = Math.abs(Date.now() / 1000 - Number(t)) < 300;
  return fresh && crypto.timingSafeEqual(
    Buffer.from(expected), Buffer.from(v1)
  );
}
Events & filters

Event types and query parameters

Event typeSent when
company.formedA new entity is registered with a state
company.insolvency_filedA bankruptcy, receivership or dissolution is filed
company.insolvency_updatedA case is converted, dismissed or discharged
company.updatedName, address or status changes on a watched company
ParamTypeDescription
typeenum[]One or more event types
namestringBusiness name search query
categorystring[]Industry category slugs
statestring[]Two-letter state codes
citystring[]City names
since / untildateFiling date range
cursorstringPagination cursor
Platform

Built for production workloads

The things you'd otherwise have to build yourself are already included.

Rate limits

Generous per-key limits with clear RateLimit-* headers.

Cursor pagination

Stable ordering, so you never miss or repeat an event while paging.

Bulk export

Full historical snapshots as compressed CSV or Parquet.

Security

TLS 1.2+, scoped keys, IP allowlisting and audit logs.

Start building today.

Get a sandbox API key with sample events for all 50 states. Move to live data whenever you're ready.