Brazil Financial Restatement Disclosures API: Track Retifications and Reissued DFP/ITR from CVM Filings
A Brazil financial restatement disclosures API in the forensic-research sense is not a service that auto-computes the dollar impact of an accounting change, a vendor “restatement score,” or a diff engine over XBRL line items. It is access to the CVM filings where Brazilian issuers disclose retifications (retificação), reclassifications of prior-period results, and reissued DFP or ITR (Informações Trimestrais, not US income tax returns) packages — usually as FATO_RELEVANTE or COMUNICADO_AO_MERCADO PDFs, sometimes as a new periodic filing row that replaces an earlier document.id for the same reference date. 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 when late adjustments surface.
This guide shows which type values to query, keyword heuristics for restatement titles, and how this hub differs from independent auditor reports, income statement monitoring, and generic material-facts polling.
The problem
Restatement surveillance splits into three stacks that English search results often merge:
- Market data terminals — may flag “accounting changes” from third-party feeds. They rarely store the issuer’s regulatory PDF explaining what was retified, which periods moved, and whether the change is presentation-only vs error correction.
- Periodic packages —
DFPandITRrows that get replaced after the first publication. You need stabledocument.idtracking perdateRef, not just “latest year=2024” without noticing a superseding upload. - Event disclosures — fatos relevantes and market communications when management retifies prior quarters, reclassifies revenue, or corrects control failures outside the normal earnings calendar.
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 restatement and retification workflows.
For assurance language that often precedes a retification, cross-check Brazil independent auditor report disclosures API. For revenue-policy changes that drive reclassifications, see Brazil revenue recognition disclosures API. This guide focuses on the API list-and-download pattern for retification events and reissued periodic packages.
Which filing type carries restatements?
Brazilian issuers do not expose a dedicated type=RESTATEMENT in the apicvm document list. Restatement detail usually appears under:
type |
Role in restatement workflows |
|---|---|
FATO_RELEVANTE |
Material fact announcing retification, reclassification, or correction of prior financial information |
COMUNICADO_AO_MERCADO |
Market communication on accounting policy changes or reissued statements |
ITR / DFP |
Reissued periodic package — new document.id for the same dateRef after retification |
FRE |
Annual reference form — internal control weaknesses or prior-period adjustments in narrative sections |
ATA_ASSEMBLEIA |
Occasionally references approval of restated accounts (when filed) |
Practical rule: poll FATO_RELEVANTE and COMUNICADO_AO_MERCADO with Portuguese and English keywords (retific, reclass, restate, correção, período anterior), track document.id per ticker and dateRef on ITR/DFP, and pull FRE once per year for control-failure context. After download, search PDF text for retificação, reclassificação, reapresentação, períodos anteriores, restatement, correção de erro, or ajuste retrospectivo.
Issuer packaging varies: some filers publish a short fact PDF pointing to a full reissued ITR; others embed the entire corrected financial statements in the event filing. Zero rows with a keyword filter does not mean no restatement occurred — broaden the list or inspect the latest ITR/DFP for duplicate dateRef with different id.
How apicvm helps
- Resolve the issuer —
GET /v1/companies/resolve - List event filings —
GET /v1/documentswithtypes=FATO_RELEVANTE,COMUNICADO_AO_MERCADO - List periodic packages —
GET /v1/documentswithtype=ITRortype=DFPandyear - Narrow with
nametokens —Retific,Reclass,Corre, orRestat - 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 2: List quarterly filings to catch reissued ITR packages
curl -H "Authorization: Bearer $APICVM_KEY" \
"$APICVM_URL/v1/documents?ticker=VALE3&type=ITR&year=2025&perPage=50&field=dateRef&order=desc"
If two rows share the same dateRef but different id, treat the newer upload as a candidate reissue and download both PDFs for manual comparison.
Step 3: Filter annex rows that mention retification in the title
curl -s -H "Authorization: Bearer $APICVM_KEY" \
"$APICVM_URL/v1/documents?ticker=ITUB4&type=DFP&year=2024&perPage=50&name=Retific" \
| jq '.data[] | {id, type, dateRef, name}'
If that returns few rows, retry with name=Reclass, name=Corre, or list without name and inspect titles manually.
On the public demo (VALE3 only), swap the host path to /v1/demo/documents with the same query parameters for smoke tests.
Step 4: Download the retification PDF
DOC_ID=123456
curl -H "Authorization: Bearer $APICVM_KEY" \
"$APICVM_URL/v1/documents/$DOC_ID/file" -o restatement-notice.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"]
RESTATE_RE = re.compile(
r"retific|reclass|restate|corre[cç][aã]o|per[ií]odo anterior|"
r"reapresenta|ajuste retrospectivo",
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 RESTATE_RE.search(doc.get("name") or ""):
continue
seen.add(doc["id"])
print(f"RESTATE {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 restatements sit in the filings stack
| Layer | Types | Restatement relevance |
|---|---|---|
| Events | FATO_RELEVANTE, COMUNICADO_AO_MERCADO |
Retification notices, reclassification announcements |
| Periodic | ITR, DFP |
Reissued financial statements for a given dateRef |
| Reference | FRE |
Control weaknesses, prior-period adjustment narrative |
| Corporate | ATA_ASSEMBLEIA |
Approval of restated accounts (when filed) |
Brazil regulatory filings API explains the full layer map. Pair event polling with quarterly ITR monitoring during 3Q ITR season (typically Oct–Nov). When retifications follow qualified opinions, cross-check Brazil independent auditor report disclosures API. When management revises forward numbers without retifying prior periods, see Brazil guidance outlook disclosures API. For the broader Brazil financial data API pillar, treat restatements as the correction layer on top of periodic statements.
Current limitations
- Documents, not parsed restatement analytics — apicvm does not return before/after EPS, automatic line-item diffs, or “materiality” scores.
- Title heuristics —
namefilters are imperfect; some retifications use generic titles. - Reissue detection — comparing duplicate
dateRefrows requires your own logic; the API does not flag “superseded” explicitly. - 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 material facts monitoring API — generic event poll loop
Ready to integrate?
Get an API key and start querying Brazilian CVM filings programmatically.