Brazil CVM Filings for Insurance Research
Insurance and actuarial research teams need primary Brazil filings insurance inputs for peer packs and risk notes — not only broker PDFs. apicvm exposes DFP, ITR, and FRE over HTTP so document IDs stay reproducible. It is not a pricing, reserving, or Solvency model.
The persona
- Insurance credit analysts covering listed Brazilian insurers and conglomerates
- Actuarial research associates collecting public disclosure packs
- Reinsurance desks building peer filing archives for Brazil
The problem
| Research task | Typical CVM source |
|---|---|
| Annual statements | DFP |
| Interim updates | ITR |
| Risk factors, controls, related parties | FRE (name= filters) |
Portal downloads do not scale across an insurer watchlist and do not give stable UUIDs for citations.
Solution flow
Insurer / peer ticker list
→ GET /v1/companies/resolve
→ GET /v1/documents (type + year + optional name)
→ GET /v1/documents/:id/file
→ archive UUID in the research index
export APICVM_KEY='apicvm_...'
export APICVM_URL='https://apicvm.dev'
curl -H "Authorization: Bearer $APICVM_KEY" \
"$APICVM_URL/v1/documents?ticker=PSSA3&type=DFP&year=2024&perPage=20"
PSSA3 is Porto Seguro — a common insurance research name. Confirm live metadata with resolve; corpus coverage varies by year.
Research checklist
- Resolve ticker (confirm CNPJ / legal name)
- Pull engagement-year DFP and prior-year comparative
- Pull latest ITR for interim monitoring
- Pull FRE sections when reading risk / governance disclosures
- Store document UUIDs next to memo citations
Credit-adjacent workflows: Brazil filings for credit analysis.
Example: peer pack
import os, requests
BASE = os.environ["APICVM_URL"]
H = {"Authorization": f"Bearer {os.environ['APICVM_KEY']}"}
PEERS = ["PSSA3", "BBSE3", "IRBR3"] # resolve each; skip if not in corpus
for t in PEERS:
r = requests.get(
f"{BASE}/v1/companies/resolve",
headers=H,
params={"query": t, "by": "ticker"},
timeout=30,
)
if r.status_code == 404:
print(t, "not resolved — skip")
continue
dfp = requests.get(
f"{BASE}/v1/documents",
headers=H,
params={"ticker": t, "type": "DFP", "year": 2024, "perPage": 20},
timeout=30,
).json()["data"]
print(t, "DFP ids", [d["id"] for d in dfp[:3]])
If a ticker is outside the ingested corpus, resolve fails or the document list is empty — do not invent coverage.
Current limitations
- No premium, claim triangle, or capital-model APIs — documents only.
- Not a substitute for SUSEP filings when those are the required source.
- Markdown extraction is async (Pro) via callback; Student keys cannot extract.
perPagemax 50.
Next steps
Ready to integrate?
Get an API key and start querying Brazilian CVM filings programmatically.