vcspine

vcspine API

One question, answered for 8,590 US venture firms: when did this firm last close a fund, and is it still deploying? Read-only JSON over HTTPS. No SDK, no pagination library, no surprises.

Authenticate

Every request carries a bearer token.

curl -H "Authorization: Bearer vcs_live_..." \
     https://vcspine.com/api/v1/stats

We store a hash of your key, never the key. That means we cannot tell you what it is if you lose it — we can only issue a new one. Get a free key — issued on this page, no email round trip, 100 lookups a day.

Look up one firm

GET /api/v1/firms/{slug}

Returns the firm and every vehicle on file for it — funds, side vehicles, feeders and SPVs, each labelled. You get our classification and the raw rows, so you can disagree with our totals rather than take them on faith.

{
  "data": {
    "slug": "greylock",
    "name": "Greylock",
    "status": "deploying",
    "funds_raised": 14,
    "total_raised": 2834000000,
    "total_raised_is_floor": true,
    "latest_fund": {
      "name": "Greylock 18 Limited Partnership",
      "date": "2026-06-11",
      "date_basis": "sale",
      "amount": 1000000000
    },
    "months_since_latest_fund": 3,
    "states": ["CA", "MA"],
    "has_non_us": true,
    "vehicles": [ ... ]
  }
}

Search and filter

GET /api/v1/firms?status=deploying&state=CA&min_raised=100000000
q
name contains, at least two characters
status
deploying, mid-cycle, late-cycle, no recent fund, unknown
state
two-letter US code, e.g. CA
min_raised
dollars, matched against the capital floor
closed_since
YYYY-MM-DD — firms whose most recent fund closed on or after this date. This is the deployment-liveness query.
sort
raised (default), latest, name
limit
1–200, default 50
cursor
pass meta.next_cursor back, verbatim

Paging

Keyset, not offset. Pass the cursor back and you resume exactly where the last page ended, at constant cost however deep you read. Each page is one call against the daily limit.

while (cursor) {
  const r = await fetch(url + "&cursor=" + cursor, { headers }).then(r => r.json());
  rows.push(...r.data);
  cursor = r.meta.next_cursor;   // null when done
}

The cursor is opaque. Do not parse it; its shape will change.

Counts

GET /api/v1/stats

Firms by status, total capital in each, and the data version.

Errors and limits

Errors are always {"error": {"code", "message"}} with a real HTTP status. 401 bad or missing key, 400 bad parameter (the message names which), 404 no such firm, 429 daily quota reached.

Every response carries X-RateLimit-Limit and X-RateLimit-Remaining. Quotas reset at 00:00 UTC.

What the numbers mean, and where they are wrong

Every response includes a disclosure block, because a number without its caveat is a liability for both of us. The short version:

Definitions and limits has the rest.

New funds and service providers

GET /api/v1/new-funds?first_fund_only=true&since=2026-06-01
GET /api/v1/new-funds?administrator=carta
GET /api/v1/providers/aduro?role=administrator

new-funds: venture funds whose Form D is filed but which no Form ADV lists yet, each with the firm’s administrator and auditor on file, or first_fund: true. Funds filed in the last seven days are held back. providers/{name}: the venture firms that name that administrator or auditor on their latest Form ADV. The firm endpoint also returns service_providers, dated.

Use it from any AI assistant

vcspine speaks the open Model Context Protocol, which Claude, ChatGPT, Gemini, Copilot, Cursor and most agent frameworks now support, and publishes a plain OpenAPI spec for everything else. Five tools: search_firms, get_firm, new_funds, provider_clients, stats. No code, no client library — add the server and ask in English.

Clients that take only a URL (ChatGPT connectors, claude.ai custom connectors and similar): use the server URL with your key in it.

https://vcspine.com/api/mcp?key=vcs_live_...

Clients with a config file (Claude Desktop and Code, Cursor, VS Code, Windsurf, Gemini CLI and others):

{
  "mcpServers": {
    "vcspine": {
      "url": "https://vcspine.com/api/mcp",
      "headers": { "Authorization": "Bearer vcs_live_..." }
    }
  }
}

Custom GPTs, function calling and agent frameworks (OpenAI, Gemini, LangChain, n8n, Zapier and the rest): import /openapi.json and give it the key as a bearer token or as ?key=.

Then ask: “which new venture funds this month have no administrator on file?”, “who are Aduro’s venture clients?”, “which firms in Massachusetts closed a fund in the last six months?” Every answer carries the filing it came from. MCP calls are metered exactly like REST calls — same key, same daily quota. A plain-text guide for models is at /llms.txt.

Machine-readable spec

/openapi.json is an OpenAPI 3.1 document for the endpoints above — enough to generate a client, or to hand to an agent that would rather read a schema than prose.

Get a free key

Issued immediately, on this page. We show it once: only a SHA-256 hash is stored, so if you lose it we cannot tell you what it was, only issue another. 100 lookups a day, resetting at 00:00 UTC — enough to check this data against your own. The whole table, higher volume, or our data inside your own product: write to us.