Skip to main content
Parameters, response columns and types are generated from the SQL catalog and render under Endpoints → Rates in the sidebar. This page carries what a schema cannot: how each rate is quoted, and which vertices are B3’s extrapolation.

Overview

Four functions over two B3 files Silo ingests daily. Nothing is interpolated, rolled or spliced; the one derived column is contract_month.
  • future_curve(p_root, p_trade_date) — every outright DI1 contract on one session, nearest maturity first. Default: the newest session held.
  • future_series(p_ticker, p_from, p_to) — one contract through time. The same contracts are in panel as id_type future (settlement_rate, settlement_price, open_interest), next to tickers and funds.
  • curve(p_curve, p_trade_date) — one reference curve on one session, every vertex. Default: PRE, the newest session held.
  • curve_history(p_curve, p_tenor_days, p_from, p_to) — one of B3’s fixed vertices through time.

DI1 futures

The source is B3’s Price Report (BVBG.086.01), one row per session and outright DI1 contract, from 2018-01-02; B3’s older reports are empty.
  • DI1 is quoted in rate. settlement_rate and the open_px / low_px / high_px / avg_px / close_px columns are % a.a. on 252 business days, so the low rate is the high price. settlement_price is the PU: R$ per contract, 100,000 at maturity.
  • contract_month is the first day of the month the ticker names, read with B3’s month letters (F January, G February, H March, J April, K May, M June, N July, Q August, U September, V October, X November, Z December). The contract matures on that month’s first business day. The business days to maturity are not stored and not computed here.
  • Nothing is made continuous. future_series follows one contract from listing to expiry. For a constant maturity, read B3’s own curve below.

Reference curves

The source is B3’s reference-rate file (TaxaSwap.txt), every vertex of three curves, from 2008-01-02. Read rate_basis before comparing two curves. B3 defines implied inflation as (1 + PRE) / (1 + DPL) − 1 at the same tenor. It carries an inflation risk premium: market pricing, not an expectation. DPL’s shortest vertices lean on the current month’s IPCA projection.
The long end of every curve is B3’s extrapolation, not a price. Past the last maturity of the contract that anchors a curve, B3 extends the last forward rate (Manual de Curvas v21). On 2026-09-25, PRE ran to 34 years while the last DI1 contract matured in about 14. Where the tail starts moves as contracts list and expire.

Fixed and moving vertices

B3 publishes every curve on one grid:
  • Fixed vertices (vertex_type = F) sit at nominal tenors, which vertex_code carries: 1, 7, 14, 21, 30, 60, 90 … 360 … 720 … 1800 … 10800 calendar days. The actual calendar_days is a day or two longer when the nominal date is not a business day. The 30-day vertex was 30 days on 2008-01-02 and 31 on 2026-09-25.
  • Moving vertices (M) sit at the maturities of B3’s contracts.
curve_history serves a fixed vertex by its nominal tenor (p_tenor_days). Any other tenor raises 22023 listing the fixed ones, because an interpolated tenor is a choice of method. Read curve and interpolate in the notebook; B3’s own method for PRE and DPL is flat-forward on 252 business days.

Freshness

coverage() has a di_futures row and a reference_curves row. Each landed_at is its own ingest (the Price Report and the reference-rate file log separately under the market ingest). History comes from a backfill, so a span that starts later than the dates above was not loaded; it is not missing at B3.

Limits

All four refuse above one 1,000-row page (22023). One session is about 50 DI1 contracts and about 300 vertices per curve. For the two histories, narrow p_from / p_to: a daily series fits about four years per call.