Legal Contingencies and ESG from CVM FRE Filings
You are building a compliance copilot, ESG scoring pipeline, or legal-tech tool for Brazilian public companies. Your users ask: What are the material lawsuits? Are provisions adequate? Does the company have a formal integrity program? How mature are internal controls?
These answers live in FRE (Formulário de Referência) — not in price feeds or annual financial statements alone. apicvm gives you programmatic FRE access: resolve a ticker, list filings, extract page-level markdown, and trace every answer to a source page.
The persona
Typical builders:
- Compliance analysts — map tax, labor, and civil contingencies across a portfolio
- ESG researchers — assess sustainability reporting, integrity programs, and governance frameworks
- Legal-tech products — automate provision adequacy checks against disclosed case values
- AI agents — answer due-diligence questions with CVM-sourced citations
Common blocker: contingency tables in FRE list hundreds of cases with probability classifications (remote, possible, probable) and provision amounts — all buried in PDFs without a structured API.
The problem
Brazilian issuers disclose legal contingencies and ESG practices across multiple FRE sections:
| Disclosure | FRE content | Research question |
|---|---|---|
| Judicial contingencies | Tax, labor, civil cases with amounts and probability | Is provision coverage adequate? |
| ESG practices | Sustainability reports, GRI/SASB alignment, emissions inventory | How mature is the ESG program? |
| Integrity/compliance | Code of conduct, anti-corruption policies, whistleblower channels | Does the company meet compliance standards? |
| Internal controls | COSO/ISO frameworks, audit committee oversight, risk management | Are controls effective? |
Manual review of FRE for each company in a screen does not scale. Market data APIs rarely include contingency detail. You need: ticker → FRE → extract → structured Q&A with page citations.
Solution: apicvm FRE pipeline
User asks about RADL3 tax contingencies
→ GET /v1/companies/resolve?query=RADL3
→ GET /v1/documents?ticker=RADL3&type=FRE&year=2025
→ POST /v1/document-text-extractions (callback = your server)
→ Index contingency and ESG sections
→ Answer with source page references
Step 1: Resolve and list FRE
export APICVM_KEY='apicvm_...'
export APICVM_URL='https://apicvm.dev'
curl -H "Authorization: Bearer $APICVM_KEY" \
"$APICVM_URL/v1/companies/resolve?query=RADL3&by=ticker"
curl -H "Authorization: Bearer $APICVM_KEY" \
"$APICVM_URL/v1/documents?ticker=RADL3&type=FRE&year=2025&perPage=50"
FRE returns many files per year. Target sections on legal proceedings, risk factors, and sustainability — or extract the full set and search across pages.
Step 2: Extract text
import os, requests
BASE = os.environ["APICVM_URL"]
H = {"Authorization": f"Bearer {os.environ['APICVM_KEY']}"}
fre = requests.get(
f"{BASE}/v1/documents",
params={"ticker": "RADL3", "type": "FRE", "year": 2025, "perPage": 50},
headers=H,
).json()
# Extract documents whose names match legal/ESG sections
keywords = ["conting", "processo", "sustentab", "integridade", "risco"]
targets = [
d for d in fre["data"]
if any(k in d.get("name", "").lower() for k in keywords)
]
for doc in targets[:5]:
requests.post(
f"{BASE}/v1/document-text-extractions",
json={"documentId": doc["id"], "callbackUrl": "https://your-server.example/callback"},
headers=H,
)
Step 3: Structure compliance queries
Once markdown arrives via callback, automate recurring questions:
- Material contingencies — List cases above a threshold; classify by type (tax, labor, civil)
- Provision adequacy — Compare provisioned amounts vs disclosed possible/probable exposure
- ESG maturity — Sustainability report standards (GRI, SASB, TCFD), assurance level, scope 1/2/3 coverage
- Integrity program — Code of conduct approval, anti-corruption policy, dedicated compliance area
- Internal controls — Framework adopted (COSO, Three Lines Model), audit committee oversight
Cross-reference with DFP footnotes for updated provision balances and ITR for interim changes.
Example: contingency screening workflow
For a portfolio of retail and agribusiness tickers:
for TICKER in RADL3 TTEN3 PGMN3; do
curl -s -H "Authorization: Bearer $APICVM_KEY" \
"$APICVM_URL/v1/documents?ticker=$TICKER&type=FRE&year=2025&perPage=50" \
| jq '.data | length'
done
Extract legal-proceedings sections, parse case tables, flag issuers where possible losses exceed provisions by a configurable threshold. Store page numbers from extraction callbacks for audit trails.
Why FRE, not just DFP
DFP footnotes include provision balances, but FRE carries the full case inventory — individual lawsuit amounts, probability estimates, and management commentary on ESG and compliance programs. For due-diligence depth, FRE is the primary source; DFP and ITR provide financial-statement confirmation.
Current limitations
- No contingency parser — apicvm returns text, not structured case objects. Your pipeline must extract tables from markdown.
- Portuguese source — legal and ESG disclosures are in Portuguese.
- Multiple FRE files — section mapping requires name matching or full-corpus search.
- Corpus coverage — verify FRE availability for target tickers and years.
- Not legal advice — extracted data supports research workflows; compliance decisions require professional review.
Next steps
Ready to integrate?
Get an API key and start querying Brazilian CVM filings programmatically.