Skip to Content
Docs are evolving — expect frequent updates.
FundsFunds overview

Funds

The Fund Integration API exposes the fund analyses your team runs in Kruncher: a data room (quarterly reports, capital account statements, LPAs, schedules of investments) is uploaded, Kruncher extracts and reconciles the figures, and the result is a fund run you can read back as a workbook, a dashboard, a list of underlying assets, a legal structure and the raw extracted rows. You can also push a new data room and be told when the analysis is done.

Base URL and authentication

All fund endpoints live under:

CODE
https://api.kruncher.ai/api/integrationfund/

Authenticate with the same API key you use for the rest of the Integration API (Settings → API Integration in the Kruncher app). Send it raw in the Authorization header — no Bearer prefix:

CODE
Authorization: YOUR_API_KEY

Every response uses the standard envelope:

CODE
{
  "metadata": { "code": "1000", "title": "Successful", "description": "" },
  "data": { }
}

Concepts

Fund runs and ids

Each analysis of a data room is a fund run, identified by fundExtractionId. A run belongs to a fund (fundId), and re-analysing the same fund with a later quarter’s documents creates a new run on the same fund (an incremental run, which carries baseFundExtractionId). Every read endpoint takes fundExtractionId; List Funds returns one entry per fund with its latest run, and Fund Detail lists all of a fund’s runs under fundRuns.

IdWhat it identifies
fundExtractionIdOne analysis run of a data room. The id every read endpoint takes.
fundIdThe fund the run belongs to. Shared across a fund’s versions.
baseFundExtractionIdFor an incremental run, the run it extends. null for the first run.
refDateThe reporting date the documents describe (YYYY-MM-DD).

Membership

Access follows the fund’s members, exactly as in the app. The API key belongs to a user; the endpoints return only the funds that user has a role on (owner, contributor or reader, reported as myRole). A fund the user has no role on answers Error212 (HTTP 403). An unknown id answers Error100 (HTTP 404).

Status

A run moves through pendingrunningcompleted, or ends in error (with errorMessage). Only a completed run has a workbook, an overview, assets and data.

Endpoints

Read

EndpointDescription
List FundsEvery fund you can open, with headline figures and portfolio size
Fund DetailRun summary: status, stage, companies, versions and which views are available
Fund WorkbookThe reviewed workbook: fund sheet, schedule of investments, one sheet per company
Fund OverviewThe dashboard: performance, portfolio totals, NAV estimator, portfolio stats
Fund AssetsThe underlying assets with cost, NAV, distributions, multiples and Kruncher signals
Fund StructureThe legal structure as a Mermaid flowchart plus the extracted entities
Fund DataRaw extracted and reconciled rows, by section

Push

EndpointDescription
Upload & RunUpload a data room and start a fund analysis (10 credits)

Webhook

EventDescription
fundAnalysisCompletedFires when a fund analysis finishes processing

Walkthrough: read → push → webhook

1. See which funds you already have.

CODE
curl -s "https://api.kruncher.ai/api/integrationfund/funds" \
  -H "Authorization: YOUR_API_KEY" | jq '.data.funds[] | {name, fundExtractionId, status, refDate}'

2. Read one run. Start with the detail to see what is available, then pull the view you need.

CODE
FUND_RUN="3f1c9a2e-7b4d-4e1a-9c2f-5d6e7f8a9b0c"
 
curl -s "https://api.kruncher.ai/api/integrationfund/fund?fundExtractionId=$FUND_RUN" \
  -H "Authorization: YOUR_API_KEY" | jq '.data.available'
 
curl -s "https://api.kruncher.ai/api/integrationfund/fund/overview?fundExtractionId=$FUND_RUN" \
  -H "Authorization: YOUR_API_KEY" | jq '.data.portfolio'

3. Push a new data room. Upload the files, then start the run with the returned folderPath.

CODE
UPLOAD=$(curl -s -X POST "https://api.kruncher.ai/api/integrationfund/fund/upload" \
  -H "Authorization: YOUR_API_KEY" \
  -F "files=@Q2-2026-quarterly-report.pdf" \
  -F "files=@Q2-2026-capital-account.pdf" \
  -F "files=@schedule-of-investments.xlsx")
 
FOLDER=$(echo "$UPLOAD" | jq -r '.data.folderPath')
 
curl -s -X POST "https://api.kruncher.ai/api/integrationfund/fund/run" \
  -H "Authorization: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d "{\"name\": \"Northwind Growth Fund II\", \"folderPath\": \"$FOLDER\", \"refDate\": \"2026-06-30\"}"

4. Wait for completion. Either poll Fund Detail until status is completed, or subscribe to the fundAnalysisCompleted event in Settings → API Integration → Webhook and fetch the detail when it arrives:

CODE
{
  "event": "fundAnalysisCompleted",
  "data": {
    "fundExtractionId": "3f1c9a2e-7b4d-4e1a-9c2f-5d6e7f8a9b0c",
    "fundId": "9e8d7c6b-5a4f-4e3d-2c1b-0a9f8e7d6c5b",
    "fundName": "Northwind Growth Fund II",
    "status": "completed",
    "refDate": "2026-06-30",
    "fundstage": { "id": "1a2b3c4d-0000-4000-8000-000000000001", "name": "Screening", "type": "screening" },
    "companiesCount": 14
  }
}

Errors

CodeHTTPMeaning
Error100404No run with that fundExtractionId in your workspace
Error212403The fund exists but your user has no role on it
Error131402Your plan has no credits left to start a run
Error209400The data room has more than 50 files
Error0500Kruncher cannot reach its analysis engine; retry later

Errors come back in the same envelope, with the code, title and description in metadata and data: null.

  • Webhooks — the fundAnalysisCompleted event
  • Company Report — portfolio companies that were analysed (projectMode: analyze) have full company reports
Last updated on