Access Brazil CVM Filings with Erlang

Need a Erlang CVM filings API client for Brazilian public companies? apicvm is plain HTTPS JSON. Use httpc or gun with a Bearer token — there is no official Erlang package.

The problem

OTP services that monitor Brazilian issuers need typed HTTP calls with durable document IDs. Portal scrapers break under supervision trees; /v1 JSON fits better.

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: httpc sketch

application:ensure_all_started(inets),
Url = os:getenv("APICVM_URL") ++ "/v1/companies/resolve?query=VALE3&by=ticker",
Auth = {"Authorization", "Bearer " ++ os:getenv("APICVM_KEY")},
{ok, {{_, 200, _}, _, Body}} = httpc:request(get, {Url, [Auth]}, [], []),
io:format("~s~n", [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 Erlang 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.