Brazil CVM Filings for Rating Agency Research

Rating and surveillance teams need primary Brazil filings rating agency inputs for issuer packs — not only secondary research PDFs. apicvm exposes DFP, ITR, and FRE over HTTP so document IDs stay reproducible. It is not a credit rating, scoring, or outlook engine.

The persona

  • Credit analysts covering listed Brazilian corporates
  • Surveillance associates refreshing annual DFP packs after new ITR releases
  • Methodology teams archiving FRE risk-factor and contingency sections

The problem

Research task Typical CVM source
Annual statements DFP
Interim updates ITR
Risk factors, contingencies, governance FRE (name= filters)

Portal downloads do not scale across a rated-universe watchlist and do not give stable UUIDs for workpaper citations.

Solution flow

Issuer ticker list
  → GET /v1/companies/resolve
  → GET /v1/documents (type + year + optional name)
  → GET /v1/documents/:id/file
  → archive UUID next to the surveillance memo
export APICVM_KEY='apicvm_...'
export APICVM_URL='https://apicvm.dev'

curl -H "Authorization: Bearer $APICVM_KEY" \
  "$APICVM_URL/v1/documents?ticker=PETR4&type=DFP&year=2024&perPage=20"

Surveillance checklist

  1. Resolve ticker (confirm CNPJ / legal name)
  2. Pull engagement-year DFP and prior-year comparative
  3. Pull latest ITR for interim monitoring
  4. Pull FRE sections for risk / contingencies when the committee pack needs them
  5. Store document UUIDs next to workpaper citations

Credit-desk adjacent workflows: Brazil filings for credit analysis. Compliance monitoring: Monitor Brazil regulatory filings.

Example: FRE risk sections

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": "VALE3", "type": "FRE", "year": 2024, "name": "Risco", "perPage": 20},
).json()

for d in docs["data"]:
    print(d["id"], d["name"])

Current limitations

  • apicvm does not produce ratings, PD models, or outlook language
  • Text extraction is async via callback (Pro); Student keys cannot extract (403)
  • perPage max is 50; paginate for large name filters
  • Empty lists mean “not in corpus yet”, not “issuer never filed”

Next steps

Ready to integrate?

Get an API key and start querying Brazilian CVM filings programmatically.