Brazil CVM Filings for Pension Fund Research
Pension and previdência research teams need primary Brazil filings pension fund inputs for holding notes and peer packs — not only broker PDFs. apicvm exposes DFP, ITR, and FRE over HTTP so document IDs stay reproducible. It is not a NAV, ALM, or liability engine.
The persona
- Equity / credit analysts at closed pension funds covering listed Brazilian issuers
- Research associates building annual DFP packs for investment committees
- Risk teams archiving FRE risk-factor sections next to internal memos
The problem
| Research task | Typical CVM source |
|---|---|
| Annual statements | DFP |
| Interim updates | ITR |
| Risk factors, governance, related parties | FRE (name= filters) |
Portal downloads do not scale across a portfolio watchlist and do not give stable UUIDs for IC citations.
Solution flow
Portfolio ticker list
→ GET /v1/companies/resolve
→ GET /v1/documents (type + year + optional name)
→ GET /v1/documents/:id/file
→ archive UUID next to the IC memo
export APICVM_KEY='apicvm_...'
export APICVM_URL='https://apicvm.dev'
curl -H "Authorization: Bearer $APICVM_KEY" \
"$APICVM_URL/v1/documents?ticker=VALE3&type=DFP&year=2024&perPage=20"
Research checklist
- Resolve ticker (confirm CNPJ / legal name)
- Pull engagement-year DFP and prior-year comparative
- Pull latest ITR for interim monitoring
- Pull FRE sections when reading risk / governance disclosures
- Store document UUIDs next to memo citations
Family-office-adjacent workflows: Brazil filings for family offices. Equity research: Brazil equity research.
Example: portfolio DFP pack
import os, requests
BASE = os.environ["APICVM_URL"]
H = {"Authorization": f"Bearer {os.environ['APICVM_KEY']}"}
HOLDINGS = ["VALE3", "PETR4", "ITUB4", "RAIL3"]
for t in HOLDINGS:
r = requests.get(
f"{BASE}/v1/companies/resolve",
headers=H,
params={"query": t, "by": "ticker"},
timeout=30,
)
if r.status_code == 404:
print(t, "not resolved — skip")
continue
dfp = requests.get(
f"{BASE}/v1/documents",
headers=H,
params={"ticker": t, "type": "DFP", "year": 2024, "perPage": 20},
timeout=30,
).json()["data"]
print(t, "DFP ids", [d["id"] for d in dfp[:3]])
If a ticker is outside the ingested corpus, resolve fails or the document list is empty — do not invent coverage.
Current limitations
- No portfolio weights, NAV, or ALM APIs — documents only.
- Not a substitute for regulatory filings owed by the pension entity itself.
- Markdown extraction is async (Pro) via callback; Student keys cannot extract.
perPagemax 50.
Next steps
Ready to integrate?
Get an API key and start querying Brazilian CVM filings programmatically.