List Brazil Investor Presentations (Apresentações a Investidores) via API
Equity pipelines often need the deck the issuer filed — earnings slides, strategy days, capital-markets updates — not a paraphrase buried in FRE narrative. If you want a Brazil investor presentation API for those PDFs, scraping the CVM portal mixes presentations with every other market communication. On apicvm, apresentações a investidores are a typed filter: APRESENTACAO_INVESTIDORES, with the same resolve → list → download flow used for DFP, ITR, and FRE.
This guide shows how to list investor presentations by ticker, grab a document UUID, and download the original PDF.
The problem
Research and IR-monitoring workflows treat presentations as primary artifacts:
- Quarterly earnings and guidance decks
- Strategy / capital-markets day materials
- Cross-checks against material facts and DFP/ITR numbers
The portal can surface those filings. It does not give agents a stable typed filter and a per-document UUID. Bulk open-data dumps help offline ETL; they are awkward for “give me PETR4 investor presentations for 2024 over HTTP.”
What “investor presentation” means here
In the apicvm contract, presentations published as market communications are split out from generic comunicados:
API type |
Role |
|---|---|
APRESENTACAO_INVESTIDORES |
Investor presentations filed as market communications |
COMUNICADO_AO_MERCADO |
Other market communications (excluding presentations) |
FATO_RELEVANTE |
Material facts — event disclosures, not the deck |
ATA_ASSEMBLEIA |
Assembly minutes — governance record, not IR slides |
This is not a literal SEC earnings-slide or 8-K exhibit clone. The analogy helps orientation; taxonomy and filing cadence are Brazilian.
IPE-style documents are single PDFs. Section prefixes (GET /v1/document-prefixes) still apply only to DFP, ITR, and FRE.
How apicvm helps
- Resolve the issuer —
GET /v1/companies/resolve - List presentations —
GET /v1/documents?type=APRESENTACAO_INVESTIDORES - Download the PDF —
GET /v1/documents/:id/file - Optional (Pro): enqueue page-level markdown —
POST /v1/document-text-extractions
Auth: Authorization: Bearer or X-API-Key.
Setup
export APICVM_KEY='apicvm_...'
export APICVM_URL='https://apicvm.dev'
Prefer the demo API only for VALE3 evaluation — demo download/markdown scope is FRE risk factors, not IPE types. For investor presentations, use a real key.
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 queries return 409 AMBIGUOUS_RESULT with candidates — tighten with by=ticker or by=cnpj.
Step 2: List apresentações a investidores
Filter by ticker, type, and year. perPage max is 50.
curl -H "Authorization: Bearer $APICVM_KEY" \
"$APICVM_URL/v1/documents?ticker=PETR4&type=APRESENTACAO_INVESTIDORES&year=2024&perPage=20&field=dateRef&order=desc"
Each data[] item includes id (UUID), type, year, name, dateRef, and nested company. Store the UUID before downloading — display names are often long Portuguese titles from the feed.
Event + deck watchlist
Use types (comma-separated) when the agent should see material facts and presentations together:
curl -H "Authorization: Bearer $APICVM_KEY" \
"$APICVM_URL/v1/documents?ticker=PETR4&types=APRESENTACAO_INVESTIDORES,FATO_RELEVANTE&year=2024&perPage=50"
For pagination (page, field, order), see Paginate and filter CVM documents.
Step 3: Download the PDF
curl -OJ -H "Authorization: Bearer $APICVM_KEY" \
"$APICVM_URL/v1/documents/<document-id>/file"
File download does not consume extraction credits. An empty list can mean a corpus gap for that issuer/year — not that APRESENTACAO_INVESTIDORES is unsupported.
Example: Python
import os
import requests
BASE = os.environ["APICVM_URL"]
H = {"Authorization": f"Bearer {os.environ['APICVM_KEY']}"}
company = requests.get(
f"{BASE}/v1/companies/resolve",
params={"query": "PETR4", "by": "ticker"},
headers=H,
timeout=60,
)
company.raise_for_status()
docs = requests.get(
f"{BASE}/v1/documents",
params={
"ticker": "PETR4",
"type": "APRESENTACAO_INVESTIDORES",
"year": 2024,
"perPage": 20,
"field": "dateRef",
"order": "desc",
},
headers=H,
timeout=60,
)
docs.raise_for_status()
for row in docs.json()["data"]:
print(row["id"], row.get("dateRef"), row.get("name"))
Optional: extract text for agents (Pro)
Presentations are PDFs (often slide decks). If an agent needs searchable markdown, enqueue async extraction with an HTTPS callback — same contract as DFP/FRE. There is no synchronous “return full text now” route, and Student keys get 403 on extraction. Details: Extract text from CVM PDFs and async callbacks.
Presentations vs comunicados vs material facts
| Need | Prefer |
|---|---|
| IR / earnings / strategy decks | APRESENTACAO_INVESTIDORES |
| Other market communications (no decks) | COMUNICADO_AO_MERCADO |
| Event disclosures | FATO_RELEVANTE — material facts guide |
| Meeting outcomes / votes | ATA_ASSEMBLEIA — assembly minutes guide |
Equity research workflows often pair decks with financial statements. See Brazil equity research with CVM filings.
Current limitations
- Coverage depends on the ingestion sync — empty results can be a gap, not an API error
- Not a push/webhook feed for “new presentation arrived”; clients poll
GET /v1/documents - Do not claim real-time delivery; latency follows the sync pipeline
/v1/document-prefixesdoes not catalog IPE section trees — presentations are whole PDFs- Demo routes do not expose IPE download/markdown beyond the VALE3 FRE demo scope
Next steps
- Read the API docs — full
/v1contract and error codes - Get an API key — list and download across supported issuers
- IPE filing type overview — taxonomy and sibling types
- List Brazil material facts via API — event disclosures in the same IPE cluster
Ready to integrate?
Get an API key and start querying Brazilian CVM filings programmatically.