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.
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.
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
from companyvisor import Client cv = Client(api_key="cv_live_...") for event in cv.events.list( type="company.insolvency_filed", state=["NY", "NJ"], category="construction", ): print(event.company.name, event.insolvency.kind)
{ "data": [ { "id": "evt_01J8Z6Q4M2", "type": "company.formed", "company": { "id": "co_7Hn2kQ", "name": "Northwind Roofing LLC", "entity_type": "llc", "state": "TX", "city": "Austin" } } ], "next_cursor": "eyJpZCI6ImV2dF8wMUo4...", "has_more": true }
Core endpoints
Everything available in the dashboard is also available through the API.
/v1/eventsList formation and insolvency events, filtered and paginated.
/v1/companies/{id}Retrieve a company and its full lifecycle history.
/v1/companies/searchLook up companies by name, state, city and category.
/v1/alertsCreate a saved filter that powers dashboard, email and webhook delivery.
/v1/watchlists/{id}/companiesAdd companies to a watchlist in bulk (up to 10,000 per request).
/v1/webhook_endpointsRegister an HTTPS endpoint and choose which alerts it receives.
/v1/webhook_endpoints/{id}Remove an endpoint. Deliveries already queued are cancelled.
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.
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) ); }
import hmac, hashlib, time def verify(raw_body: bytes, header: str, secret: str) -> bool: parts = dict(p.split("=", 1) for p in header.split(",")) signed = f"{parts['t']}.".encode() + raw_body expected = hmac.new(secret.encode(), signed, hashlib.sha256).hexdigest() fresh = abs(time.time() - int(parts["t"])) < 300 return fresh and hmac.compare_digest(expected, parts["v1"])
Event types and query parameters
| Event type | Sent when |
|---|---|
| company.formed | A new entity is registered with a state |
| company.insolvency_filed | A bankruptcy, receivership or dissolution is filed |
| company.insolvency_updated | A case is converted, dismissed or discharged |
| company.updated | Name, address or status changes on a watched company |
| Param | Type | Description |
|---|---|---|
| type | enum[] | One or more event types |
| name | string | Business name search query |
| category | string[] | Industry category slugs |
| state | string[] | Two-letter state codes |
| city | string[] | City names |
| since / until | date | Filing date range |
| cursor | string | Pagination cursor |
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.