> ## Documentation Index
> Fetch the complete documentation index at: https://octo-98895abd.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Market coverage

> What exists, how far back it goes, how often it updates — and the one dataset that is a ratchet.

### Overview

Three questions before you write a query: **does SILO have it**, **how far back**, and **how stale can it be**. [Data inventory](/api-docs/data-inventory) is the table-by-table view of the warehouse; this is the view from the API.

Every date below is a *floor*, not a promise about today. The authoritative answer is `coverage()` and `metric_coverage()`, generated from the data — ask them first, and use this page to know what to ask for.

### Ask the API what it holds

```bash theme={null}
curl -s -X POST "$SILO_URL/rpc/coverage" \
  -H "apikey: $SILO_ANON_KEY" -H "Content-Type: application/json" -d '{}'
```

Four date columns meaning four different things. Reading one for another is the most common coverage mistake:

| Column | Means | Use it for |
| - | - | - |
| `as_of` | the newest period that has landed **and has actually elapsed** | "how current is this, really" |
| `complete_through` | the newest **complete** period for that filing cadence | what a default window serves |
| `newest_period` | the newest period **key** present — can sit in the future | spotting forward-dated keys (FIP is keyed 31-December) |
| `landed_at` | when ingest last **succeeded** for that source | whether *we* are broken |
| `landed_git_sha` | the git commit of that same run; `null` when it recorded none | which code produced the newest data |

**Note**: a stale `landed_at` is a pipeline failure. A `complete_through` that trails today is Brazil's filing calendar — CVM publishes one to two months in arrears, and that is not an outage.

`metric_coverage()` goes finer: first and last period carrying a **non-null** value for every `(entity_type, metric)` pair, plus how many rows filed it.

### How far back

| Domain | Endpoints | History starts | Cadence |
| - | - | - | - |
| **B3 cash quotes** | `quotes`, `equities`, `bdrs`, `units`, `fund_quotas`, `cash_securities`, `auctions`, `quote_history`, `quote_latest` | COTAHIST, 2019 onward by default; earlier years load into the same partitioned tape | daily, T+1 |
| **Options & termo** | `option_chain`, `option_history`, `option_exercises`, `termo_history` | same tape, same depth | daily, T+1 |
| **FI funds** | `fund_nav`, `funds`, `fund_profile`, `search_funds` | 2019 (daily `inf_diario` partition floor) | monthly, 1–2 months in arrears |
| **Fund holdings** | `fund_holdings`, `fund_debentures` | 2005 (CDA blocks 4, 2 and 6) | monthly, in arrears |
| **FIDC** | `fund_nav`, `fidc_portfolio`, `fidc_sacados`, `fidc_cedentes`, `fidc_tranches`, `fidc_aging` | 2019 for the monthly informe; tab II sectors and tab VIII debtors from 2013; tab I originator slots from 2019-11; tab X SCR grades from 2023-10; tranches and the aging ladder from **2025-01** (CVM publishes no archive of those tabs) | monthly, in arrears |
| **Fund documents (FNET)** | `fund_documents`, `fund_restatements`, `fund_restatement_diff` | **first crawl or backfill** — the register is loaded by delivery day, so its span is what Silo has crawled, not FNET's own start; diffs cover FIDC informe mensal restatements delivered from **2026** on | daily (trailing 3 delivery days); fund links fortnightly |
| **FII** | `fund_nav` | 2021 monthly, 2019 for the periodic documents | monthly / quarterly |
| **FIAGRO** | `fund_nav` | **2025-05** — the family is new, not missing | monthly |
| **FIP** | `fund_nav` | 2010, keyed 31-December | yearly |
| **Listed companies** | `financials`, `company_financials`, `lookup`, `company_events` | 2019 for ITR/DFP; 2010 for the published ticker map; **2015** for IPE events (earlier filings carry no protocol number and are not held) | quarterly; IPE daily |
| **ANBIMA classes** | `anbima_classes` | 2019 | monthly, on publication |
| **Macro & FX** | `macro_series`, `ptax` | as far back as each SGS series / PTAX history has been loaded — read `coverage()` | daily (monthly for IGP-M, INPC, GDP) |
| **Rates** | `future_curve`, `future_series`, `curve`, `curve_history` | DI1 contracts from 2018-01-02, B3 reference curves from 2008-01-02, as loaded — read `coverage()` | daily |
| **Benchmark index** | `index_history` | B3's own published daily levels of IBOV from 1968-01-02 and of IBXX, IBXL, IFIX, SMLL, IDIV, ICON, IMOB and UTIL, each from its own first session. B3 calls every one a total-return index (distributions reinvested), as published and not adjusted: `divisor_step` marks the eleven sessions B3 re-scaled IBOV, the last on 1997-03-03 — read `coverage()` for the depth | daily |
| **Fixed-income ETFs** | `trade_consolidated_history` | B3's consolidated trade file, segment FORWARD only: the 46 fixed-income ETFs COTAHIST does not carry (IMAB11, B5P211, IRFM11, LFTS11, ...) and 21 other FORWARD tickers, as published, from **2025-06-10**, the source's retention edge. The close is `last_price` (`ref_price` is never a close); no opening price; not adjusted for distributions | daily |
| **Research universe** | `research_universe` | listed shares and units on the B3 cash tape from 2019-01-02; refreshed daily, so `last_observed` lags by up to a day | daily |
| **Inflation** | `inflation`, `inflation_items` | IPCA 1980; BCB cores and IBGE groups 1991; IPCA-15 2000; the item tree with weights 2012 | monthly, on IBGE's release (\~10th of the following month) |
| **B3 BDI — lending & flows** | `short_interest`, `short_interest_by_sector`, `investor_flow`, `lending_trades`, `lending_participants` | **first capture only — see below** | daily, T+2 for `investor_flow` |

Ingest runs once a day at 06:00 UTC. A slice CVM publishes late is healed on a later run — the daily job re-probes a trailing window and re-fetches any month with no successful ingest.

### The B3 BDI ratchet

<Warning>
  **B3 keeps roughly 21 business days of its lending and participation files and publishes no archive. There is no backfill at any price.** These five endpoints are exactly as deep as the daily job has been running. A session missed is not expensive to recover — it is impossible.
</Warning>

No deep-history route exists and none is coming: the legacy B3 download API returns HTTP 400 for every BDI table name, and the `pesquisapregao` archive returns empty zips. `run_backfill` deliberately offers no lending option.

The failure is silent by default — an over-wide request returns **HTTP 200** with the window quietly clamped (2024-01-02 through 2026-09-10 returns 18 sessions). A 200 is not evidence the span you asked for was delivered, which is why every ingest reconciles received sessions against requested ones.

Treat these five as a live feed with a short tail, not as history. If you need a long series, capture it as it publishes. Always read `as_of` before assuming a window exists.

#### Three caveats these endpoints publish as columns

<AccordionGroup>
  <Accordion title="short_interest: pct_float is two different metrics">
    `float_basis` says which denominator produced `pct_float`. `index_free_float` is B3's real free float and covers index constituents only; `shares_outstanding` is a larger denominator and therefore a smaller percentage. **Do not rank across the two.** `pct_float` and `days_to_cover` are `null` — never `0` — when their denominator is missing.
  </Accordion>

  <Accordion title="investor_flow is derived and lags T+2">
    B3 publishes a month-to-date cumulative snapshot; the daily figure is its first difference within a month. Rows whose `flow_basis` is `unknown_opening_snapshot` carry null flows on purpose — reporting the cumulative total as one day's flow would invent a spike.
  </Accordion>

  <Accordion title="lending_trades: doador and tomador are brokerages">
    Not beneficial owners. Around 75% of trades carry the same code on both legs, so a large borrow through a broker is that broker's client book. Read `short_interest` through `is_total` as well: B3 publishes both the per-market rows and its own `Total` sum, and adding them double-counts.
  </Accordion>
</AccordionGroup>

### What is not here

Nothing on this API is interpolated or forward-filled, and exactly one price is adjusted.

* **Quotes are unadjusted, except `quote_history`'s `close_adj`.** `close` and the `adjusted` flag (`false` on every row) are as traded. `close_adj`, the default field of `quote_history`, is continuous across splits, groupings and bonus shares, and a window it cannot adjust is refused with the cause, never served raw. `close_total_return`, selected in `p_fields`, adds the cash distributions and is NULL with a reason wherever one cannot be valued. The tape starts on 2019-01-02, and `quote_history` refuses a window that starts before an instrument's first session. `b3_corporate_event` still carries the events as published.
* **A null is a null.** Never a guessed last close, a zero, or a carried-forward figure. An unknown ticker returns an empty array.
* **A regime break is not a trend.** FIDC `delinquency` starts in 2013-01 and is on every row only from 2020-11, so a count of reporting funds jumps there. `catalog().regime_breaks` lists them.
* **No ANBIMA-to-fund mapping exists.** ANBIMA rows are industry aggregates carrying no fund id, and CVM's `classe` is a different taxonomy. Joining by name would be an invention.

### Next

<CardGroup cols={2}>
  <Card title="Your first screen" icon="play" href="/api-docs/guides/first-screen">
    A working screen of real data in four calls.
  </Card>

  <Card title="Paging without losing rows" icon="list-ol" href="/api-docs/guides/pagination">
    Two different cursors, and the trap of confusing them.
  </Card>

  <Card title="Coverage reference" icon="table" href="/api-docs/coverage">
    The `coverage()` and `metric_coverage()` endpoints in full.
  </Card>

  <Card title="Data inventory" icon="database" href="/api-docs/data-inventory">
    Every table, its grain, and what we deliberately do not ingest.
  </Card>
</CardGroup>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.