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:

  1. Material contingencies — List cases above a threshold; classify by type (tax, labor, civil)
  2. Provision adequacy — Compare provisioned amounts vs disclosed possible/probable exposure
  3. ESG maturity — Sustainability report standards (GRI, SASB, TCFD), assurance level, scope 1/2/3 coverage
  4. Integrity program — Code of conduct approval, anti-corruption policy, dedicated compliance area
  5. 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.