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
- Resolve ticker (confirm CNPJ / legal name)
- Pull engagement-year DFP and prior-year comparative
- Pull latest ITR for interim monitoring
- Pull FRE sections for risk / contingencies when the committee pack needs them
- 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) perPagemax 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.