Skip to main content
The procedure for coding agents and the docs assistant: follow it in order. The contract itself (row caps, tier ceilings, null semantics, regime breaks) is written once on Conventions & limits and served as JSON by 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 no createApiKey; 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 22023 error, 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.
  1. Read the catalog: POST $SILO_URL/rpc/catalog with apikey, Content-Type: application/json, Content-Profile: api and body {}.
  2. Find candidates from its endpoint and metric descriptions, then search the docs MCP for grain, identifiers, date meaning, units, limits and caveats.
  3. Check coverage for the actual observation window.
  4. Resolve fund and company ids with lookup or search_funds; join only on published keys.
  5. Record why each source was selected. If the data cannot support the question or the periods do not align, say so.
The workflows below are examples of what to do after discovery, not a fixed dataset list.

5. Example: does equity stress show up in FIDC credit?

  1. lookup (p_query) / search_funds for FIDC CNPJs. Do not invent a ticker-to-fund join.
  2. panel with p_ids: ["PETR4", "<cnpj>", …], p_metrics: ["close_return","delinquency","nav"], p_freq: "month".
  3. Pivot locally keeping asset_class in the key. Correlate pairwise-complete. No ffill.
  4. delinquency is BRL outstanding, not a rate: divide by nav (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).
  5. close is unadjusted (a split reads as a jump in quotes; panel’s close_return adjusts the previous close across it); quote_history’s close_adj, its default field, is continuous across splits and is refused where unproven. A missing month is not a two-month return.
  6. Before reading a null as a gap, call coverage and metric_coverage.
There is no server-side 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 paged panel 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

Next page: 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.
Notebook 04_fidc_credit is this walkthrough as code.

Notes

Never fabricate a price, NAV, fill, ranking, or ticker-to-CNPJ match. Null stays null. Unknown id returns no row. Known id with an empty window returns an empty series, not a guessed last close.
  • 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) or fidc_sacados (anonymized top-25 debtors): FIDC concentration.
  • Ingest (run_daily, landing tables) is out of scope for this API.