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_cursorback, 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:
- Totals are floors. Funds filed as “Indefinite”
are excluded rather than counted as zero.
total_raised_is_floortells you when that applies. - Dates are first closes.
date_basis: "sale"means the date of first sale."filing"means no sale date was reported and we fell back to the filing date — weaker evidence, and we say so rather than let you assume. - SPVs and feeders are excluded from totals but returned in full on the firm endpoint. An SPV is one investment; a feeder holds the same capital as its master and would double-count it.
- Not every dollar arrives as a filed fund.
A firm deploying from a family office, a corporate balance sheet or an
evergreen structure looks quiet here.
statusdescribes what has been filed, not whether a firm is solvent or investing.
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.
Here is your key. Copy it now.
Try it:
100 calls a day, resetting at 00:00 UTC. The API docs have the endpoints.