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:

  1. Treasury repurchase programs — the company buys its own shares in the market; terms live in buyback notices.
  2. Capital reduction / share cancellation — the company cancels treasury shares or amortizes capital after assembly approval; legal framing differs from an open-market repurchase.
  3. Reverse splits (grupamento) — nominal share count changes via a corporate-action ratio, not the same legal path as redução de capital.
  4. 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

  1. Resolve the issuer — GET /v1/companies/resolve
  2. List event filings — GET /v1/documents with type=FATO_RELEVANTE (optionally add AVISO_AOS_ACIONISTAS)
  3. Scope with year and optional dateRef; sort with field=dateRef&order=desc
  4. Download the PDF — GET /v1/documents/:id/file (no extraction credits)
  5. Optional (Pro): page-level markdown — POST /v1/document-text-extractions with 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 — name tokens 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

Ready to integrate?

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