Parameters, response columns and types are generated from the SQL catalog and
render under Endpoints → Funds in the sidebar. This page carries what a
schema cannot: the conventions, the nulls that are deliberate, and the traps.
Overview
Brazilian investment vehicles as disclosed to the CVM, keyed by CNPJ.
CNPJ input is stripped to its 14 digits, so
12.345.678/0001-90 and 12345678000190 are the same argument. Monthly periods are keyed on the first day of the month.
Note: ETFs are carved out of this universe and are not in api.funds. Post-CVM-175 share classes make their NAV series structurally different from the rest of the fund population, so they are ranked and served separately.
GET /funds
The registry view: one row per (cnpj, entity_type) — what we hold, not what the fund is worth.
POST /rpc/search_funds
Substring search over the registry, ordered by latest_aum descending, nulls last.
[].
POST /rpc/fund_profile
One fund’s summary card: coverage plus peak and latest AUM.
[] — the profile is built from the monthly facts, so there is nothing to summarize. A CNPJ filing under more than one entity_type returns one row per type; do not assume a single row.
POST /rpc/fund_nav
The monthly fundamentals series for one CNPJ — the fund-side equivalent of quote_history.
p_from’s default is a fixed date, not a rolling window — omit it for the full stored history. p_entity_type is needed only for the rare CNPJ that reports under two.
Rows are ordered by
period, then entity_type.
Which columns each family files
Every family returns the same eleven columns, but each family’s arm of the fact table fills only some; the rest areNULL by construction. So a null has two meanings: outside a family’s list it is not applicable and carries no information; inside it, it is a blank in that month’s filing. Machine-readable as catalog().applicability.fund_nav.columns_by_family, and it is what the panel metric table’s Asset class column is derived from.
fidc row: nav and delinquency are the two columns that family files, the other six are null by construction, and period is the month’s last day.
Notes
-
Nulls here are real. A column is null because the family does not file that field, or because the filing left it blank — never because a value was dropped or replaced. Nothing is forward-filled, and a month with no filing is an absent row, not a repeated one. Check
periodcontinuity before differencing. -
One 1,000-row page, and it refuses above it (
22023). At a monthly grain 1,000 rows is over 80 years of one fund, so reaching it usually means the request is wrong rather than the fund. -
Paging requires
p_entity_type. The cursor is a bareperiod, unique only within one family — 385 CNPJs file under two (fiandfidc) in the same month, so a bare-date cursor would skip or repeat a row at a page edge. Dropp_afterto get the whole result with every row labelled byentity_type.In the SDK:silo.iter_fund_nav("05754060000113", "fi"), which raises locally if you leave the family out. -
periodandperiod_monthare two conventions for the same month.periodis CVM’s filed month-end date (2024-01-31); the trailingperiod_monthis the first of that month (2024-01-01), which is howpanelkeys fund observations. Join a nav series to a panel onperiod_month, not onperiod. -
Empty results: unknown CNPJ, or a real CNPJ with no filings in the window →
200 []. A CNPJ that exists only as an ETF is absent from this universe by design. Passing"p_from": nullexplicitly returns[]— omit the key to get the default instead.