Skip to main content

Overview

Four calls: find out what exists, resolve an identifier, pull a series, then put two different things on one axis. Everything here runs anonymously with the shared testing key.
That key is shared — it identifies the project, not you, and goes on apikey only. See Quickstart.

1. Find out what is actually there

Read as_of (newest elapsed period landed) and complete_through (newest complete period, what default windows serve). A complete_through trailing today by a month or two for a fund dataset is CVM’s filing calendar, not an outage. Market coverage explains all four date columns.

2. Resolve an identifier

You get id, id_type, asset_class, name, isin, cnpj and any B3 tickers — the last from CVM’s published FCA map, never a guessed ticker↔CNPJ join. Note: an unknown identifier returns an empty array, not an error and never a substitute. If lookup gives you nothing, stop there rather than assuming the next call will work.

3. Pull a series

One year of daily prices is ~250 rows, comfortably inside the 1,000-row page. Ask for five years and the call refuses with 22023 rather than handing you the oldest 1,000 — page it with p_after. See the pagination guide before you write a loop. Note: prices are unadjusted (adjusted: false on every row). A return computed across a split date will be wrong unless you handle it yourself.

4. Put two different things on one axis

panel returns a long (id, date, metric, value) frame, so a listed company’s price and a fund’s NAV line up without a join.
Mix identifier kinds freely — tickers, option and termo codnegs, and fund CNPJs in one p_ids array. The fourteen metrics are close, volume, close_unit, close_return, nav, quota, delinquency, yield, inflows, redemptions, quotaholders, receivables, sacado_top1 and sacado_top25. Note: anonymously panel takes at most 3 ids per call — a fourth raises 22023 rather than quietly dropping one. Signing in raises it to 50.

Reading a null correctly

On this API a null is information, with three distinct meanings: None is ever filled with a guess. No forward-fill, no last known close, no interpolation. catalog().applicability lists which columns each family files; metric_coverage() gives the filed span per metric.

Next

Paging without losing rows

Two cursors, one silent ceiling, and how to tell which cut you.

Reading a fundamental

A company’s financial statements end to end.

Market coverage

How far back each domain goes — and the one that is a ratchet.

For agents

The machine-readable contract, for tool-using models.