Brazil Capital Reduction Disclosures API: Track Share Cancellations from CVM Filings
A Brazil capital reduction disclosures API in the registry sense is not a notary or B3 ledger endpoint. It is access to the CVM filings that announce redução de capital — cancellation or amortization of shares, capital social adjustments, and assembly-approved programs that shrink outstanding equity without a typical follow-on issuance. Market data feeds may show a lower share count after settlement; apicvm returns the regulatory PDF you can cite when you reconcile cap tables, dilution models, and compliance archives.
This guide shows which type values to query, how to list and download capital-reduction notices on a watchlist, and how to separate share cancellation from treasury buybacks, reverse splits, and primary offerings.
The problem
Brazilian capital-structure events split into four stacks that English search results often merge:
- Treasury repurchase programs — the company buys its own shares in the market; terms live in buyback notices.
- Capital reduction / share cancellation — the company cancels treasury shares or amortizes capital after assembly approval; legal framing differs from an open-market repurchase.
- Reverse splits (grupamento) — nominal share count changes via a corporate-action ratio, not the same legal path as redução de capital.
- Follow-on issuance — aumento de capital increases share count; the opposite economic direction.
Scraping the CVM portal works for one ticker and breaks on a multi-name 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 — the same pattern as List avisos aos acionistas via API, scoped to capital reduction events.
For tender offers and control transactions, see Brazil tender offer disclosures API. For the generic poll loop on all material facts, see Brazil material facts monitoring API.
Which filing type carries redução de capital?
Brazilian issuers do not expose a dedicated type=CAPITAL_REDUCTION in the apicvm document list. Reduction programs usually surface under:
type |
Role in capital-reduction workflows |
|---|---|
FATO_RELEVANTE |
Material fact when the board or assembly approves cancellation, amortization, or a market-moving update to the program |
AVISO_AOS_ACIONISTAS |
Notice to shareholders — assembly convocation, formal terms, record context, and shareholder-facing legal text |
Practical rule: poll FATO_RELEVANTE on active watchlists, add AVISO_AOS_ACIONISTAS when you track assembly-driven corporate actions, then filter rows by name keywords (Reducao, redução, amortizacao, amortização, cancelamento) before downloading PDFs. After download, search PDF text for redução de capital, amortização de ações, or cancelamento de ações.
On VALE3 for calendar year 2025, the demo corpus returned 21 combined FATO_RELEVANTE and AVISO_AOS_ACIONISTAS rows with no reducao / amortizacao tokens in name (demo API, queried 2026-09-16). Banks and restructurings-heavy names follow the same list-and-download workflow when those tokens appear. Zero rows in a given year does not prove no reduction occurred — see limitations below.
How apicvm helps
- Resolve the issuer —
GET /v1/companies/resolve - List event filings —
GET /v1/documentswithtype=FATO_RELEVANTE(optionally addAVISO_AOS_ACIONISTAS) - Scope with
yearand optionaldateRef; 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 material facts for one ticker
curl -H "Authorization: Bearer $APICVM_KEY" \
"$APICVM_URL/v1/documents?ticker=BBDC4&type=FATO_RELEVANTE&year=2025&perPage=50&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 3: Download a capital reduction notice PDF
curl -H "Authorization: Bearer $APICVM_KEY" \
-o capital-reduction-notice.pdf \
"$APICVM_URL/v1/documents/<document-id>/file"
Download does not consume extraction credits.
Example: Python watchlist for capital reduction filings
Poll material facts across a cap-table-focused watchlist. Persist seen in your database in production.
import os, time, requests, re
from datetime import datetime
BASE = os.environ["APICVM_URL"]
H = {"Authorization": f"Bearer {os.environ['APICVM_KEY']}"}
WATCH = ["BBDC4", "ITUB4", "PETR4", "VALE3", "ABEV3"]
YEAR = datetime.utcnow().year
REDUCTION_RE = re.compile(
r"reducao|redução|amortizacao|amortização|cancelamento", re.I
)
seen = set() # load from your store on startup
def list_events(ticker):
r = requests.get(
f"{BASE}/v1/documents",
headers=H,
params={
"ticker": ticker,
"types": "FATO_RELEVANTE,AVISO_AOS_ACIONISTAS",
"year": YEAR,
"perPage": 50,
"field": "dateRef",
"order": "desc",
},
)
if r.status_code == 429:
time.sleep(5)
return list_events(ticker)
r.raise_for_status()
return r.json()["data"]
for ticker in WATCH:
for doc in list_events(ticker):
if doc["id"] in seen:
continue
if not REDUCTION_RE.search(doc.get("name") or ""):
continue
seen.add(doc["id"])
print(f"REDUCTION {ticker} {doc['dateRef']} {doc['name'][:70]}")
Wire this into GitHub Actions or extend the diff pattern from Brazil material facts monitoring API.
Where capital reduction sits in the filings stack
| Layer | Types | Capital reduction relevance |
|---|---|---|
| Events | FATO_RELEVANTE, AVISO_AOS_ACIONISTAS |
Assembly approval, cancellation terms, shareholder notices |
| Statements | DFP, ITR |
Share capital and treasury shares after cancellation |
| Governance | FRE |
Capital policy, buyback vs reduction context |
Brazil regulatory filings API explains the full layer map. During earnings windows, pair this hub with Track Brazil earnings season for ITR alongside event filings.
Current limitations
- Documents, not registry — apicvm does not file with a notary or return live outstanding share count from the exchange.
- Keyword filters are heuristic —
nametokens help; false negatives are possible if issuers use unusual titles. - 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.
Next steps
- Read the API docs
- Get an API key
- List avisos aos acionistas — focused
AVISO_AOS_ACIONISTASreference
Ready to integrate?
Get an API key and start querying Brazilian CVM filings programmatically.