Brazil CVM Filings for Investigative Journalism
Newsrooms covering Brazilian issuers need citable Brazil filings journalism sources — annual statements, interim updates, and FRE risk language — without depending on a colleague’s desktop download. apicvm gives HTTP access to DFP, ITR, and FRE with stable document IDs. It is not a news wire and does not summarize stories for you.
The persona
- Business reporters verifying claims against primary filings
- Data desks building issuer watchlists before earnings weeks
- Investigators tracing related-party or contingency language in FRE
The problem
| Story need | Typical CVM source |
|---|---|
| Audited annual numbers | DFP |
| Fresh quarterly print | ITR |
| Risk factors, litigation, related parties | FRE sections |
Portal UI clicks do not leave a reproducible archive when editors ask “which PDF did we cite?”
Solution flow
Issuer ticker / name
→ GET /v1/companies/resolve
→ GET /v1/documents (filters)
→ GET /v1/documents/:id/file
→ cite UUID + filing name in the notes field
export APICVM_KEY='apicvm_...'
export APICVM_URL='https://apicvm.dev'
curl -H "Authorization: Bearer $APICVM_KEY" \
"$APICVM_URL/v1/documents?ticker=VIVT3&type=FRE&year=2024&name=Risco&perPage=20"
Section filters: FRE risk factors via section filter.
Newsroom patterns
- Pre-write pack — resolve ticker, pull latest ITR + prior DFP IDs
- Quote check — download the FRE section PDF that contains the claim
- Watchlist — nightly job listing new years/types for a ticker basket
Try the public demo (VALE3 only, no key) while prototyping: Try the apicvm demo API.
Example: risk-section inventory
import os, requests
BASE = os.environ["APICVM_URL"]
H = {"Authorization": f"Bearer {os.environ['APICVM_KEY']}"}
docs = requests.get(
f"{BASE}/v1/documents",
headers=H,
params={
"ticker": "VIVT3",
"type": "FRE",
"year": 2024,
"name": "Risco",
"perPage": 50,
},
timeout=30,
).json()["data"]
for d in docs:
print(d["id"], d["name"])
Current limitations
- No NLP “story generator” — you still read the PDF (or Pro async extract).
- Corpus ≠ every file on the CVM portal; confirm before publishing.
- Rate limits apply per API key; batch politely overnight.
- Student plan cannot run markdown extraction.
Next steps
Ready to integrate?
Get an API key and start querying Brazilian CVM filings programmatically.