Fund Workbook
Returns the workbook Kruncher builds from the data room: a fund sheet with the fund-level cells, a schedule of investments, and one sheet per portfolio company. It is the same projection the Workbook tab renders in the app, with every reviewer annotation (value edits, candidate changes, flags) already applied — the figure you read here is the figure a reviewer signed off.
Endpoint
GET https://api.kruncher.ai/api/integrationfund/fund/workbook
Headers
| Header | Required | Description |
|---|---|---|
Authorization | Yes | Your API key (format: YOUR_API_KEY) |
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
fundExtractionId | string (uuid) | Yes | The run to read. Must be completed |
Request
cURL
curl -X GET "https://api.kruncher.ai/api/integrationfund/fund/workbook?fundExtractionId=3f1c9a2e-7b4d-4e1a-9c2f-5d6e7f8a9b0c" \
-H "Authorization: YOUR_API_KEY_HERE"Response
{
"metadata": { "code": "1000", "title": "Successful", "description": "" },
"data": {
"fundExtractionId": "3f1c9a2e-7b4d-4e1a-9c2f-5d6e7f8a9b0c",
"name": "Northwind Growth Fund II",
"status": "completed",
"refDate": "2026-06-30",
"showDerivedMetrics": true,
"workbook": {
"sheets": [
{
"id": "2.1",
"title": "Fund",
"kind": "fund",
"blocks": [
{
"title": "Fund performance",
"cells": [
{ "cell": "C7", "label": "NAV", "value": 182400000, "unit": "currency", "currency": "EUR", "status": "extracted", "sourceFile": "Q2-2026-quarterly-report.pdf", "pageNumber": 4 },
{ "cell": "C9", "label": "nTVPI", "value": 1.62, "unit": "x", "currency": null, "status": "extracted", "sourceFile": "Q2-2026-quarterly-report.pdf", "pageNumber": 4 },
{ "cell": "C10", "label": "nDPI", "value": 0.41, "unit": "x", "currency": null, "status": "computed", "sourceFile": null, "pageNumber": null }
]
},
{
"title": "Fund terms",
"cells": [
{ "cell": "C21", "label": "Vintage", "value": 2019, "unit": "year", "currency": null, "status": "extracted", "sourceFile": "LPA.pdf", "pageNumber": 12 },
{ "cell": "C22", "label": "Management fee", "value": null, "unit": "percent", "currency": null, "status": "missing", "sourceFile": null, "pageNumber": null }
]
}
]
},
{
"id": "3.1",
"title": "Schedule of investments",
"kind": "schedule",
"columns": ["Company", "Status", "Cost", "NAV", "Distributions", "Total value", "Gross TVPI"],
"rows": [
["Acme Robotics", "active", 12000000, 31500000, 0, 31500000, 2.63],
["Blue Ledger", "exited", 8000000, 0, 19200000, 19200000, 2.4]
],
"totals": ["Total", null, 20000000, 31500000, 19200000, 50700000, 2.54]
},
{
"id": "4.1",
"title": "Acme Robotics",
"kind": "company",
"years": [2024, 2025],
"quarters": ["Q1 2026", "Q2 2026"],
"blocks": [
{
"title": "Financials",
"cells": [
{ "cell": "C5", "label": "Revenue FY2025", "value": 14200000, "unit": "currency", "currency": "EUR", "status": "extracted", "sourceFile": "Q2-2026-quarterly-report.pdf", "pageNumber": 17 }
]
}
]
}
],
"summary": {
"positions": 14,
"extracted": 212,
"notFound": 9,
"missing": 31,
"input": 4,
"withAttention": 6,
"computed": 38,
"annotated": 5,
"valueEdited": 3,
"candidateChanged": 1,
"flaggedForReview": 1,
"reportedAsError": 0
}
}
}
}Response Fields
| Field | Type | Description |
|---|---|---|
fundExtractionId | string | The run |
name | string | Fund name |
status | string | Run status |
refDate | string | Reporting date (YYYY-MM-DD) |
showDerivedMetrics | boolean | Whether computed cells are included |
workbook.sheets[] | array | One sheet per section, in workbook order |
workbook.sheets[].id | string | Sheet id. 2.1 is the fund sheet, 3.1 the schedule of investments, then one sheet per company |
workbook.sheets[].kind | string | fund, schedule or company |
workbook.sheets[].blocks[] | array | Fund and company sheets: groups of cells with a title |
workbook.sheets[].blocks[].cells[] | array | Each cell: cell (the spreadsheet address, e.g. C7), label, value, unit, currency, status, plus provenance fields such as sourceFile and pageNumber |
workbook.sheets[].columns / rows / totals | array | Schedule sheet: tabular layout |
workbook.sheets[].years / quarters | array | Company sheets: the periods the sheet covers |
workbook.summary | object | Cell counts by state across the workbook (see below) |
Well-known fund sheet cells
| Cell | Figure |
|---|---|
C7 | NAV |
C9 | nTVPI (net TVPI) |
C10 | nDPI (net DPI) |
C21 | Vintage |
Cell status values
| Status | Meaning |
|---|---|
extracted | Read from a document; sourceFile and pageNumber say where |
computed | Derived from other cells (only when showDerivedMetrics is true) |
input | Typed in by a reviewer |
notFound | Looked for in the documents but not present |
missing | Not covered by the documents uploaded |
summary also counts reviewer activity: annotated, valueEdited, candidateChanged,
flaggedForReview, reportedAsError, and withAttention (cells that still need a look).
Errors
| Code | HTTP | Meaning |
|---|---|---|
Error100 | 404 | No run with that fundExtractionId in your workspace |
Error212 | 403 | Your user has no role on this fund |
Error0 | 500 | Kruncher cannot reach its analysis engine; retry later |
A run that is not yet completed has no workbook; check available.workbook on
Fund Detail first.
Related Endpoints
- Fund Detail — status and
availableflags - Fund Overview — the same figures as a dashboard
- Fund Data — the raw rows behind the cells
Last updated on