Access Brazil CVM Filings with Julia

Need a Julia CVM filings API client for Brazilian public companies? apicvm is plain HTTPS JSON. Use HTTP.jl with a Bearer token — there is no official Julia package.

The problem

Quant notebooks in Julia that need Brazilian regulatory PDFs often shell out to scrapers. Stable document UUIDs and typed filters (ticker, type, year) fit DataFrames pipelines better than portal HTML.

Setup

export APICVM_URL='https://apicvm.dev'
export APICVM_KEY='apicvm_...'   # from /signup

Resolve a ticker

curl -H "Authorization: Bearer $APICVM_KEY" \
  "$APICVM_URL/v1/companies/resolve?query=PETR4&by=ticker"

Example: HTTP.jl sketch

using HTTP, JSON3
headers = Dict("Authorization" => "Bearer " * ENV["APICVM_KEY"])
url = ENV["APICVM_URL"] * "/v1/companies/resolve?query=VALE3&by=ticker"
resp = HTTP.get(url; headers=headers)
println(String(resp.body))

List DFP documents

curl -H "Authorization: Bearer $APICVM_KEY" \
  "$APICVM_URL/v1/documents?ticker=PETR4&type=DFP&year=2024&perPage=20"

Parse the JSON data array for id values before downloading.

Download a PDF

curl -OJ -H "Authorization: Bearer $APICVM_KEY" \
  "$APICVM_URL/v1/documents/<document-id>/file"

File download does not consume extraction credits.

Python cross-check

import os, requests

BASE = os.environ["APICVM_URL"]
H = {"Authorization": f"Bearer {os.environ['APICVM_KEY']}"}

docs = requests.get(
    f"{BASE}/v1/documents",
    headers=H,
    params={"ticker": "PETR4", "type": "DFP", "year": 2024, "perPage": 20},
).json()
print(len(docs["data"]))

Current limitations

  • Text extraction (POST /v1/document-text-extractions) is async via callback — not a sync Julia await of markdown.
  • perPage max is 50; paginate with page.
  • Corpus coverage depends on ingestion; empty lists are not "company never filed".

Next steps

Ready to integrate?

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