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

  1. Pre-write pack — resolve ticker, pull latest ITR + prior DFP IDs
  2. Quote check — download the FRE section PDF that contains the claim
  3. 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.