Brazil Reference Form API: Access FRE (Formulário de Referência) Filings

Fundamentals tell you what a B3 issuer earned last quarter. FRE (Formulário de Referência) tells you who runs the company, how they are paid, what can go wrong, and which lawsuits are on the books. If you are searching for a Brazil reference form API, you want that governance and risk layer listable by ticker — with stable document IDs and section filters — not a relabeled US 10-K. apicvm exposes type=FRE through the same resolve → list → download flow as DFP and ITR.

The problem

Three common traps:

  1. 10-K mental model — English IR pages call FRE "similar to a 10-K." In Brazil, audited numbers live in DFP and interim financials in ITR (Informações Trimestrais — Brazilian quarterly filings, not an income tax return). The narrative handbook — business description, risk factors, board, pay — lives in FRE. Point type=10-K at this API and you get nothing useful.
  2. One PDF assumption — FRE is a bundle of section files. A large issuer can file seventy-plus PDFs in a year. Downloading every row to answer one governance question is expensive.
  3. Statements vs reference form — Quarterly models need DFP/ITR. ESG screens, proxy research, and risk agents need FRE. See Brazil financial statements API for the statement layer.

Scraping the CVM portal works for one ticker and breaks at scale. Bulk open-data ZIPs are dataset-oriented, not ticker-first. You want GET /v1/documents?ticker=VALE3&type=FRE&year=2025&name=DescricaoFatoresRisco.

What FRE is on CVM

FRE is Brazil's annual reference form. CVM requires listed companies to file and update it with business context, risk disclosures, governance structure, executive compensation, related-party transactions, and legal contingencies.

Theme Typical FRE sections Research use
Risk DescricaoFatoresRisco, DescricaoPrincipaisFatoresRisco Downside mapping, ESG risk
Governance InformacoesConselhoAdm, CaracteristicasOrgaosAdmECF Board independence, committees
Compensation PoliticaPraticaRemuneracao, RemuneracaoEmpregados Pay alignment, clawbacks
Legal ProcessosNaoSigilosos, ContingenciasRelevantes Litigation sizing
Ownership OrganogramaAcionistasGrupoEconomico, AcordosAcionistas Control blocks, voting agreements

dateRef on FRE rows is typically the reference year-end (e.g. 2025-12-31). Companies restate individual sections during the year, so one calendar year can contain multiple versions of the same prefix.

For regulatory background, see What is FRE? and the FRE filing type.

How apicvm helps

  1. Resolve the issuer — GET /v1/companies/resolve
  2. List the FRE bundle — GET /v1/documents?type=FRE
  3. Discover section prefixes — GET /v1/document-prefixes?type=FRE
  4. Filter by section — name= query param (prefix match)
  5. Download the PDF — GET /v1/documents/:id/file
  6. Optional (Pro): page-level markdown — POST /v1/document-text-extractions (async callback)

Auth: Authorization: Bearer or X-API-Key. Try VALE3 without a key via the demo API.

On VALE3 for calendar year 2025, the demo corpus held 78 FRE section files (demo API, queried 2026-09-07). The demo exposes 70+ distinct prefixes for type=FRE, from DescricaoFatoresRisco to RemuneracaoEmpregados.

Try without a key (VALE3)

The public demo is scoped to Vale (VALE3, CNPJ 33592510000154). Download and cached markdown are limited to FRE 2025 files whose name starts with DescricaoFatoresRisco. Other tickers return 403 on /v1/demo/*.

export APICVM_URL='https://apicvm.dev'

curl "$APICVM_URL/v1/demo/documents?ticker=VALE3&type=FRE&year=2025&perPage=5"

curl "$APICVM_URL/v1/demo/documents?ticker=VALE3&type=FRE&year=2025&name=DescricaoFatoresRisco&perPage=5"

Pick an id from data[], then download:

curl -OJ "$APICVM_URL/v1/demo/documents/<document-id>/file"

Setup (authenticated)

export APICVM_KEY='apicvm_...'
export APICVM_URL='https://apicvm.dev'

Step 1: Resolve the company

curl -H "Authorization: Bearer $APICVM_KEY" \
  "$APICVM_URL/v1/companies/resolve?query=PETR4&by=ticker"

Confirm cnpj and tickers[]. Ambiguous name searches return 409 AMBIGUOUS_RESULT — pin down with by=ticker or by=cnpj.

Step 2: List FRE sections

Full bundle for a year:

curl -H "Authorization: Bearer $APICVM_KEY" \
  "$APICVM_URL/v1/documents?ticker=PETR4&type=FRE&year=2025&perPage=50"

Filter to risk factors only:

curl -H "Authorization: Bearer $APICVM_KEY" \
  "$APICVM_URL/v1/documents?ticker=PETR4&type=FRE&year=2025&name=DescricaoFatoresRisco&perPage=20"

Discover available prefixes before filtering:

curl -H "Authorization: Bearer $APICVM_KEY" \
  "$APICVM_URL/v1/document-prefixes?type=FRE"

perPage maxes at 50. Paginate with page= when meta.lastPage > 1.

Step 3: Download a section

curl -H "Authorization: Bearer $APICVM_KEY" \
  -o fre-section.pdf \
  "$APICVM_URL/v1/documents/<document-id>/file"

Download does not consume extraction credits.

Example: Python governance pull for a watchlist

import os, requests

BASE = os.environ["APICVM_URL"]
H = {"Authorization": f"Bearer {os.environ['APICVM_KEY']}"}
WATCH = ["PETR4", "VALE3", "ITUB4"]
YEAR = 2025
RISK_PREFIX = "DescricaoFatoresRisco"

def list_fre_sections(ticker, name_prefix=None):
    params = {
        "ticker": ticker,
        "type": "FRE",
        "year": YEAR,
        "perPage": 50,
    }
    if name_prefix:
        params["name"] = name_prefix
    r = requests.get(f"{BASE}/v1/documents", headers=H, params=params)
    r.raise_for_status()
    return r.json()["data"]

for ticker in WATCH:
    risk = list_fre_sections(ticker, RISK_PREFIX)
    all_fre = list_fre_sections(ticker)
    print(f"{ticker}: {len(risk)} risk-factor files, {len(all_fre)} total FRE in {YEAR}")
    if risk:
        latest = sorted(risk, key=lambda x: x["name"], reverse=True)[0]
        print(f"  latest risk file: {latest['name'][:60]}")

For governance Q&A after extract, see Analyze governance and risk from Brazil FRE filings. For prefix-only workflows, see FRE risk factors API section filter.

Reference form vs statements vs event disclosures

Layer Types Use
Reference form (this page) FRE Governance, risk, compensation, contingencies
Statements DFP, ITR Fundamentals, QoQ/YoY models
Event IPE FATO_RELEVANTE, COMUNICADO_AO_MERCADO, etc. Guidance, M&A, decks between quarters

Many production pipelines poll all three layers on different schedules. Hubs: Brazil financial statements API and Brazil IPE disclosures API.

Per-type deep dives

Focused guides with SEC analogies and edge cases:

Current limitations

  • Polling, not push — apicvm does not emit a webhook when CVM publishes a new FRE section. Poll on a schedule and diff document IDs.
  • Ingestion lag — sync is not guaranteed real-time. A section may appear on the portal before it is in the corpus.
  • Corpus coverage — not every issuer or period is present. Zero rows for a year does not prove the company did not file.
  • No SEC form codes — type=10-K, type=10-Q, or type=20-F is rejected. Use FRE, DFP, and ITR.
  • Demo scope — /v1/demo/* is limited to VALE3 risk-factor FRE sections. Other tickers and prefixes need a production key.
  • Bundle size — large issuers file many section PDFs per year. Filter by name or prefix before bulk download or extraction.

Next steps

Ready to integrate?

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