Access Brazil CVM Filings with Dart
Need a Dart CVM filings API client for Brazilian public companies? apicvm is plain HTTPS JSON. Use package:http (or dio) with a Bearer token — there is no official Dart package.
The problem
Flutter desktop tools and Dart CLIs that archive Brazil filings usually hit brittle portal HTML or yearly ZIP dumps without stable document UUIDs. A thin HTTP client against /v1 is easier to share across Flutter and server isolates.
Setup
export APICVM_URL='https://apicvm.dev'
export APICVM_KEY='apicvm_...' # from /signup
Add http: ^1.2.0 to pubspec.yaml.
Resolve a ticker
import 'dart:io';
import 'package:http/http.dart' as http;
final base = Platform.environment['APICVM_URL']!;
final key = Platform.environment['APICVM_KEY']!;
final uri = Uri.parse('$base/v1/companies/resolve').replace(queryParameters: {
'query': 'PETR4',
'by': 'ticker',
});
final res = await http.get(uri, headers: {'Authorization': 'Bearer $key'});
print(res.body);
List DFP documents
final listUri = Uri.parse('$base/v1/documents').replace(queryParameters: {
'ticker': 'PETR4',
'type': 'DFP',
'year': '2024',
'perPage': '20',
});
final listRes = await http.get(listUri, headers: {'Authorization': 'Bearer $key'});
Download a PDF
final fileUri = Uri.parse('$base/v1/documents/$documentId/file');
final fileRes = await http.get(fileUri, headers: {'Authorization': 'Bearer $key'});
await File('petr4-dfp.pdf').writeAsBytes(fileRes.bodyBytes);
File download does not consume extraction credits.
curl cross-check
curl -H "Authorization: Bearer $APICVM_KEY" \
"$APICVM_URL/v1/companies/resolve?query=PETR4&by=ticker"
Current limitations
- Text extraction (
POST /v1/document-text-extractions) is async via callback — not a sync Dart Future of markdown. perPagemax is 50; paginate withpage.- 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.