Get started
Pagination
Lists return a page and a next_cursor. Pass it back as cursor for the next page; it is null on the last one. Keep the other parameters the same.
Response
200{
"firms": [
"…"
],
"next_cursor": "2~sequoia-capital"
}Page size and depth
limit sets the page size, up to 25 on Free and 100 on Pro and Team. Each plan also has a number of pages per query: 2 on Free, 40 on paid plans. Past it the API answers 429 with depth_limit, so narrow the query with filters instead of reading the whole catalog.
Walking every page
async function* pages(path) {
let cursor = null;
do {
const url = new URL(`https://api.vcinfo.io${path}`);
if (cursor) url.searchParams.set("cursor", cursor);
const res = await fetch(url, { headers: { "X-API-Key": process.env.VCINFO_KEY } });
if (!res.ok) throw new Error((await res.json()).error.code);
const page = await res.json();
yield page;
cursor = page.next_cursor;
} while (cursor);
}
for await (const page of pages("/v1/firms?country=Germany&stage=seed")) {
for (const firm of page.firms) console.log(firm.name);
}import os, requests
def pages(path, **params):
while True:
res = requests.get(f"https://api.vcinfo.io{path}", params=params,
headers={"X-API-Key": os.environ["VCINFO_KEY"]})
res.raise_for_status()
page = res.json()
yield page
if not page.get("next_cursor"):
break
params["cursor"] = page["next_cursor"]
for page in pages("/v1/firms", country="Germany", stage="seed"):
for firm in page["firms"]:
print(firm["name"])Paged lists: /v1/firms, /v1/companies, /v1/firms/{ref}/portfolio, /v1/firms/{ref}/events, /v1/events and the /news lists. The rest return one page, sized by limit.