API documentation
Fund look through
A fund your bank holds in its Depot A is watched through its constituents. You upload the constituents the fund's manager reports, Stonewake matches each one to its company through the ISIN and LEI registers, and every matched company joins your team's book, watched like your other holdings. Each fund then shows its constituents weakest first, with the credit status, the signals and the daily press tone of every company. In the dashboard the funds sit on the portfolio page under Funds, where Import funds also offers a template to download.
Matching, never guessing
Every constituent is matched by its ISIN or LEI through the same resolver for every line, in a fixed order. The GLEIF and ANNA map from ISIN to LEI answers first, then ESMA FIRDS and FCA FIRDS, then the LEI the line states. Every source that answers must name the same company, or the line is a conflict and is matched to none of them. A line that gives only a name is never matched, however exactly it names a company, and it says how many companies carry that name. A constituent no source names stays unmatched. An unmatched line is shown as unmatched, names no company and never joins the book. Every matched line keeps the evidence that proved it, the source, what was looked up and the record or identifier row that answered.
The file
The first line is the header. as_of and weight are required, with fund_isin or fund_lei for the fund and isin, lei or name for the constituent.
fund_isin,fund_lei,fund_name,as_of,isin,lei,name,weight
DE0008491051,,UniGlobal,2026-10-31,DE0007164600,,SAP SE,4.5
DE0008491051,,UniGlobal,2026-10-31,DE0007236101,,Siemens AG,3.25
DE0008491051,,UniGlobal,2026-10-31,DE0008404005,,Allianz SE,2.8- Each line names its fund by the fund's ISIN or LEI, and both must pass their check digits (ISO 6166 and ISO 17442). Lines that name the same fund form that fund, so one file may hold several funds.
as_ofis the day the manager states the constituents for, written2026-10-31or31.10.2026, and never after today. All lines of one fund state the sameas_of, and the samefund_leiandfund_namewhere they give one.weightis the constituent's share of the fund in percent, more than 0 and at most 100, with at most six decimals after a point or a comma, for example4.5,4,5or4.5%.- The file is comma separated, and a header written with semicolons is read with semicolons. At most 2,000 lines and 1,000,000 characters per file. A file saved as Unicode text, or any file holding a control character, is refused as a whole.
fund_nameandnameare shown for your check and never used to match.
What each fund and each line answers
| Fund outcome | Meaning |
|---|---|
new | The fund is stored and its matched companies join the book. |
replaces | The fund was stored before with other lines, or a line now matches another company or none. The new upload is stored and the earlier one is kept as history. |
unchanged | The stored fund states exactly the same, every line matched as before. Nothing is written. |
invalid | Nothing of the fund is stored and none of its companies joins the book, because a line of it cannot be read (fund_has_invalid_lines), its lines state different as_of dates (as_of_differs) or a different fund LEI or name (fund_lines_disagree). |
| Line status | Meaning |
|---|---|
resolved | Every source that answered names one company. |
conflict | Two sources name different companies. Matched to none. |
ambiguous | The line gives only a name. Matched to none. |
unresolved | No source names a company for it, or an identifier fails its check digits. |
invalid | The line breaks the file rules and was never looked up, for example a weight that is not a number between 0 and 100 or an as_of after today. |
A matched company then shows what the import does in the book, add, reactivate, in_book or duplicate, as the Book import does. A line whose fund cannot be read at all, for example one with no fund identifier, is listed apart with its reason.
Weakest first
A fund's constituents are ordered by their standing in your team's book. Red comes first, then amber, then unmatched, because a constituent nobody can name is never a pass, then insufficient, then the companies not assessed yet or no longer in the book, and green last. Within a standing the more negative daily press tone comes first, then the larger weight. Each fund also counts its lines and sums their weights per standing, and the fund list puts the weakest fund first.
The press tone is the newest daily reading of News monitoring, the mean tone of the coverage over its window. It is context beside the credit status and never part of the score.
Over the API and MCP
GET /v1/portfolio/fundslists your team's funds, the weakest fund first, with the figures per standing.GET /v1/portfolio/funds/{fund_id}serves one fund with its constituents weakest first, paged bylimit(default and maximum 100) andoffset, each with its match, reason, evidence, standing, score, top signals and press tone.POST /v1/portfolio/funds/importpreviews a fund file. Send{"csv": "..."}.dry_runis always true on/v1, so the API stays read only, and applying an import happens in the dashboard. The lines come in pages in file order, each naming its fund, whilefunds,countsandtotalcover the whole file.- The MCP tools
portfolio_fundsandportfolio_fund_import_previewread the same.