POST /rpc/catalog.
1. Read the published site
Prefer MCP search or
llms.txt over training data. The Evidence dashboards and the repository’s docs/ notes are not the read contract: docs/reference/API.md documents the local Flask adapter, not this API.
2. Auth
The publishable key in quickstart is shared, for testing. Anonymous access is free and small; signing in with GitHub raises four ceilings. There is nocreateApiKey; service_role / Secret is never a caller credential. Never mint or forge a key.
Sign in at silo-bz-deloslabs.vercel.app/signin.html and send the token alongside the publishable key:
SILO_URL and SILO_ANON_KEY are set in quickstart.
Ceilings live in Conventions & limits and catalog().limits; never size a request from memory.
- Rows per response never change with tier.
- Exceeding a ceiling is a
22023error, never a silent trim. - The token lasts about an hour and expiry is silent. You drop to anonymous, so a four-id call starts raising
22023. Durable per-user keys do not exist yet. - Landing tables (
cvm_*,b3_cotahist,cia_*,bacen_*) are closed to both tiers.
3. First live call is coverage
POST $SILO_URL/rpc/coverage with body {} (example in quickstart).
Column meanings: Freshness. A
401 is missing or wrong headers. An empty or error body is a failed fetch: raise, do not invent a last date.
4. Discover the data for the question
Start from the research question, not a preselected endpoint.- Read the catalog:
POST $SILO_URL/rpc/catalogwithapikey,Content-Type: application/json,Content-Profile: apiand body{}. - Find candidates from its endpoint and metric descriptions, then search the docs MCP for grain, identifiers, date meaning, units, limits and caveats.
- Check
coveragefor the actual observation window. - Resolve fund and company ids with
lookuporsearch_funds; join only on published keys. - Record why each source was selected. If the data cannot support the question or the periods do not align, say so.
5. Example: does equity stress show up in FIDC credit?
lookup(p_query) /search_fundsfor FIDC CNPJs. Do not invent a ticker-to-fund join.panelwithp_ids: ["PETR4", "<cnpj>", …],p_metrics: ["close_return","delinquency","nav"],p_freq: "month".- Pivot locally keeping
asset_classin the key. Correlate pairwise-complete. No ffill. delinquencyis BRL outstanding, not a rate: divide bynav(both are in the same call). For a FIDC the series starts at 2013-01 and is on every row from 2020-11 (regime break).closeis unadjusted (a split reads as a jump inquotes;panel’sclose_returnadjusts the previous close across it);quote_history’sclose_adj, its default field, is continuous across splits and is refused where unproven. A missing month is not a two-month return.- Before reading a null as a gap, call
coverageandmetric_coverage.
corr; the catalog lists those as notebook_reducers. No RPC returns a truncated result: functions page or refuse.
6. Example: screening a whole family
Rank every FIDC by how much its delinquency worsened is one pagedpanel call when signed in. Anonymous callers cannot use universe mode: enumerate from the funds view and batch ids within the ceiling.
1
Check the family is complete through your window
Require
complete_through >= your end month on the funds_fidc row. Read as_of, not newest_period.2
Enumerate the family from the funds view, paging
Content-Range carries the total. Keep funds whose first_period / last_period span your window.3
Signed in: walk the family with p_after
p_after = the last row’s "<date>|<id>|<metric>|<asset_class>". The SDK’s panel_all(...) does the loop.4
Keep asset_class in the key
The grain is
(id, asset_class, date, metric). A CNPJ that also files as an FI comes back twice per month.5
Reduce locally
Compute
delinquency / nav per fund-month (guard nav of zero), rank on the change, require a minimum of non-null months. No ffill.04_fidc_credit is this walkthrough as code.
Notes
- A fund’s name is never a taxonomy. For “FIDCs exposed to sector X” use
fidc_portfolio(sector and SCR ladders),fidc_cedentes(named originators) orfidc_sacados(anonymized top-25 debtors): FIDC concentration. - Ingest (
run_daily, landing tables) is out of scope for this API.