Brazil Independent Auditor Report Disclosures API: Track Audit Opinions and Going-Concern Language from CVM Filings
A Brazil independent auditor report disclosures API in the reporting-quality sense is not a live “accounting risk score,” a PCAOB database, or a model that auto-labels qualified opinions. It is access to the CVM filings where Brazilian issuers publish the independent auditor’s report (parecer dos auditores independentes), limited review reports on quarterly ITR packages, fiscal council opinions, and related assurance annexes — bundled inside DFP and ITR (Informações Trimestrais, not US income tax returns), audit-committee and control narratives in FRE, and event PDFs when auditors resign, are replaced, or issue emphasis-of-matter language outside the normal calendar. apicvm lets you list those rows by ticker, download the original filing, and diff new document.id values on a watchlist during 3Q ITR season.
This guide shows which type values to query, annex filters for auditor PDFs, and how this hub differs from financial footnotes extraction, balance sheet, and FRE governance analysis.
The problem
Audit-opinion surveillance splits into three stacks that English search results often merge:
- Market data terminals — may flag “accounting concerns” from vendors. They rarely store the issuer’s regulatory PDF with the full auditor report, emphasis paragraphs, and related-party carve-outs in one place.
- Periodic packages —
DFP,ITR, andFREwith independent auditor reports, review reports, fiscal council letters, and internal-control attestations. Essential during earnings season and credit reviews, but you still need ticker-first access and stable file IDs. - Event disclosures — fatos relevantes and market communications when an auditor change, qualified opinion, or going-concern discussion is disclosed before the next periodic filing.
Scraping the CVM portal works for one ticker and breaks on a diversified watchlist. Bulk open-data ZIPs are dataset-oriented, not ticker-first. You want GET /v1/documents with stable document.id, then GET /v1/documents/:id/file for the original PDF — scoped to assurance and auditor-report workflows.
For numeric footnotes that drive impairments and fair-value adjustments, cross-check Brazil asset impairment write-down disclosures API. For DRE lines that auditors reference in emphasis paragraphs, see Brazil income statement disclosures API. This guide focuses on the API list-and-download pattern for auditor annexes.
Which filing type carries auditor reports?
Brazilian issuers do not expose a dedicated type=AUDITOR_REPORT in the apicvm document list. Assurance detail usually appears under:
type |
Role in auditor-report workflows |
|---|---|
ITR / DFP |
Periodic packages — independent auditor report, limited review on quarters, fiscal council report, director declarations |
FRE |
Annual reference form — audit committee, internal controls, auditor independence policies |
FATO_RELEVANTE |
Material fact when auditor resignation, replacement, or qualified opinion is disclosed as an event |
COMUNICADO_AO_MERCADO |
Occasional market communication on audit-committee findings or restatements |
ATA_ASSEMBLEIA |
Sometimes references appointment or ratification of auditors |
Practical rule: list latest ITR/DFP for each ticker during 3Q ITR season, filter annex rows whose name mentions auditoria / parecer / relatório / audit, poll FATO_RELEVANTE for auditor-change keywords, and pull FRE once per year for governance context. After download, search PDF text for auditores independentes, parecer, ressalva, ênfase, going concern, continuidade operacional, substituição do auditor, opinião adversa, abstenção, or revisão limitada.
Issuer packaging varies: some filers embed the auditor report inside a single “financial statements” PDF; others split opinion, financials, and notes into separate annex rows. Zero rows with a name filter does not mean the issuer omitted an auditor report — broaden the list before download.
How apicvm helps
- Resolve the issuer —
GET /v1/companies/resolve - List periodic packages —
GET /v1/documentswithtype=ITRortype=DFPandyear - Narrow to auditor annexes —
nametokens such asAuditor,Parecer, orRelatório - Optional section prefixes —
GET /v1/document-prefixeswhen you need a named slice inside a large PDF (filter by section name) - List event filings —
GET /v1/documentswithtype=FATO_RELEVANTEorCOMUNICADO_AO_MERCADO - Scope with
dateRef; sort withfield=dateRef&order=desc - Download the PDF —
GET /v1/documents/:id/file(no extraction credits) - Optional (Pro): page-level markdown —
POST /v1/document-text-extractionswith async callback
Auth: Authorization: Bearer or X-API-Key. Try VALE3 without a key via the demo API.
Setup
export APICVM_KEY='apicvm_...'
export APICVM_URL='https://apicvm.dev'
Step 1: List quarterly filings for an audit-sensitive watchlist name
curl -H "Authorization: Bearer $APICVM_KEY" \
"$APICVM_URL/v1/documents?ticker=ITUB4&type=ITR&year=2025&perPage=10&field=dateRef&order=desc"
Response rows include stable id, dateRef, name, and nested company metadata. Use id as your cache key — not name, which can be long and encoding-sensitive.
Paginate with page= when meta.lastPage > 1. perPage maxes at 50.
Step 2: Filter annex rows that likely contain the auditor report
curl -s -H "Authorization: Bearer $APICVM_KEY" \
"$APICVM_URL/v1/documents?ticker=ITUB4&type=ITR&year=2025&perPage=50&name=Audit" \
| jq '.data[] | {id, type, dateRef, name}'
If that returns few rows, retry with name=Parecer, name=Relat, or name=Auditoria, or list without name and inspect titles manually.
Step 3: List auditor-change or qualified-opinion material facts
curl -s -H "Authorization: Bearer $APICVM_KEY" \
"$APICVM_URL/v1/documents?ticker=PETR4&types=FATO_RELEVANTE,COMUNICADO_AO_MERCADO&year=2025&perPage=50" \
| jq '.data[] | select(.name | test("auditor|audit|parecer|ressalva|substitui|going concern|continuidade"; "i")) | {id, type, dateRef, name}'
On the public demo (VALE3 only), swap the host path to /v1/demo/documents with the same query parameters for smoke tests.
For annual audit-committee and independence context, list the latest FRE:
curl -s -H "Authorization: Bearer $APICVM_KEY" \
"$APICVM_URL/v1/documents?ticker=VALE3&type=FRE&year=2025&perPage=5&field=dateRef&order=desc" \
| jq '.data[] | {id, dateRef, name}'
Pair FRE pulls with analyze Brazil FRE governance risks when you need committee structure, not just the auditor PDF.
Step 4: Download the auditor report PDF
DOC_ID=123456
curl -H "Authorization: Bearer $APICVM_KEY" \
"$APICVM_URL/v1/documents/$DOC_ID/file" -o auditor-report.pdf
Store document.id in your warehouse. Re-download when the issuer replaces a filing; do not assume name alone is a stable key.
Step 5: Watchlist poll (Python sketch)
import os, re, requests
BASE = os.environ["APICVM_URL"]
KEY = os.environ["APICVM_KEY"]
HEADERS = {"Authorization": f"Bearer {KEY}"}
WATCH = ["PETR4", "VALE3", "ITUB4", "WEGE3"]
AUDIT_RE = re.compile(
r"auditor|audit|parecer|ressalva|ênfase|enfase|substitui|"
r"going concern|continuidade|revisão limitada|revisao limitada",
re.I,
)
seen = set()
def list_events(ticker):
r = requests.get(
f"{BASE}/v1/documents",
headers=HEADERS,
params={
"ticker": ticker,
"types": "FATO_RELEVANTE,COMUNICADO_AO_MERCADO",
"year": 2025,
"perPage": 50,
"field": "dateRef",
"order": "desc",
},
timeout=60,
)
r.raise_for_status()
return r.json().get("data") or []
for ticker in WATCH:
for doc in list_events(ticker):
if doc["id"] in seen:
continue
if not AUDIT_RE.search(doc.get("name") or ""):
continue
seen.add(doc["id"])
print(f"AUDIT {ticker} {doc['dateRef']} {doc['name'][:70]}")
Wire this into GitHub Actions CVM filings monitor or extend the diff pattern from Brazil material facts monitoring API. For NLP over downloaded PDFs, see extract text from CVM PDFs for AI agents.
Where auditor reports sit in the filings stack
| Layer | Types | Auditor-report relevance |
|---|---|---|
| Periodic | ITR, DFP |
Independent auditor report, limited review, fiscal council |
| Reference | FRE |
Audit committee, internal control, auditor independence |
| Events | FATO_RELEVANTE, COMUNICADO_AO_MERCADO |
Auditor changes, qualified opinions, restatements |
| Corporate | ATA_ASSEMBLEIA |
Auditor appointment / ratification (when filed) |
Brazil regulatory filings API explains the full layer map. Pair assurance pulls with quarterly ITR monitoring during 3Q ITR season (typically Oct–Nov). When emphasis paragraphs cite balance-sheet stress, cross-check Brazil balance sheet disclosures API. For the broader Brazil financial data API pillar, treat auditor reports as the assurance layer on top of periodic statements.
Current limitations
- Documents, not parsed audit analytics — apicvm does not return clean vs qualified labels, going-concern flags, or automatic emphasis-of-matter extraction.
- Annex naming varies —
namefilters are heuristic; some auditor PDFs share a generic financial-statements title. - ITR vs DFP — quarterly packages often include limited review reports, not a full annual opinion. Do not treat them as interchangeable.
- Polling, not push — no webhook when CVM publishes a new fact. Schedule polls and diff
document.id. - Ingestion lag — sync is not real-time. A notice may appear on the portal before it is in the corpus.
- Corpus coverage — not every issuer or period is present. Validate against the portal for production compliance use cases.
- Demo scope —
/v1/demo/*is limited to VALE3. Other tickers need a production key. - ITR disambiguation — Informações Trimestrais (CVM quarterly financials), not US income tax return software.
Next steps
- Read the API docs
- Get an API key
- Brazil financial statements API — DFP and ITR package overview
Ready to integrate?
Get an API key and start querying Brazilian CVM filings programmatically.