CVM API Pricing: Plans and Extraction Credits
Before you wire a CVM filings API into production, you need predictable costs: subscription tiers, request limits, and what happens when you extract text from a 120-page DFP. apicvm separates HTTP access (resolve, list, download) from extraction credits (page-level markdown via async callback).
This guide explains plans, credit math, gate behavior, and what is free — sourced from the v1 contract, with no invented discounts.
Pricing model overview
Two cost layers:
- Subscription — API key, rate limits, and (on Pro) a monthly extraction grant.
- Extraction credits — consumed per PDF page when you enqueue
POST /v1/document-text-extractions.
File download (GET /v1/documents/:id/file) does not consume credits. Listing and resolve do not consume credits either — only the global rate limit applies.
Plan comparison
| Plan | Price | Global rate limit | Daily request cap | Markdown extraction |
|---|---|---|---|---|
| Student | $3/month | 60 req / 60s | 100 req / UTC day | Not available (403 FORBIDDEN) |
| Pro | $9/month | 60 req / 60s | None | Yes — 1000 credits/month included |
| Scale | Custom | By agreement | By agreement | By agreement |
Student is enough to explore resolve, list, and download. Pro is required for AI/RAG pipelines that need page-level markdown.
Rate limit headers on authenticated routes: X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset. Excess returns 429 RATE_LIMIT_EXCEEDED.
Student plan ($3/month)
Student keys can call business routes within these bounds:
- 60 requests per 60 seconds (sliding window, per API key)
- 100 requests per UTC calendar day
- No extraction —
POST /v1/document-text-extractionsreturns403 FORBIDDEN
Use Student for prototyping download workflows, ticker resolution, and document discovery. When you need markdown for LLMs or agents, upgrade to Pro.
Pro plan ($9/month)
Pro removes the daily request cap and adds extraction:
- 60 requests per 60 seconds (same global window as Student)
- No daily cap on list/resolve/download calls
- 1000 extraction credits per month included in the subscription
Pro grant rules
The 1000 monthly credits are non-cumulative. They reset each Stripe billing cycle — unused credits do not roll over to the next month.
Example: a Pro user extracts three documents in one month:
| Document | Pages | Credits used |
|---|---|---|
| DFP notes | 50 | 50 |
| FRE governance | 80 | 80 |
| DFP financial statements | 120 | 120 |
| Total | 250 |
Remaining from the grant: 750 credits until the billing cycle resets.
Scale plan
Scale is custom pricing by agreement. Contact through signup or sales for higher rate limits and extraction volume. This guide does not specify Scale numbers — only that terms are negotiated.
Extraction credits explained
1 credit = 1 page of the target PDF. List price: $0.01 USD per credit.
The POST returns 202 immediately. A prepare job then counts pages (N) and debits N credits atomically before page workers run.
Credit sources
| Source | Quantity | Rules |
|---|---|---|
| Pro subscription grant | 1000/month | Resets each billing cycle; does not accumulate |
| Credit packs | 1000 / 5000 / 10000 | $10 / $50 / $100 — do not expire |
Packs sum to your usable balance and never expire. When the Pro grant resets, pack balance remains.
Gate behavior (callback)
If balance < N, your callback receives status: "error" with error_code: EXTRACTION_CREDITS_EXCEEDED — nothing is debited and page workers do not run:
{
"status": "error",
"document_id": "550e8400-e29b-41d4-a716-446655440000",
"job_id": "42",
"error_code": "EXTRACTION_CREDITS_EXCEEDED",
"error_message": "Créditos de extração insuficientes",
"balance": 12,
"required": 120
}
Check balance and required to decide whether to buy a pack or pick a smaller document.
Cache hits still cost N credits
If the document already has cached pages (ocr_text with all_pages_done=true), the worker reuses cache — but N credits are still debited at prepare. Delivery cost is the same whether the PDF was extracted yesterday or today.
What consumes credits vs what is free
| Action | Credits | Plan requirement |
|---|---|---|
GET /v1/companies/resolve |
Free | Student+ |
GET /v1/documents |
Free | Student+ |
GET /v1/documents/:id |
Free | Student+ |
GET /v1/documents/:id/file |
Free | Student+ |
POST /v1/document-text-extractions |
N credits (N = pages) | Pro+ |
Download-first workflows (store PDFs locally, run your own OCR) avoid extraction credits entirely. Markdown via apicvm always goes through the credit gate on Pro.
Student vs Pro decision guide
| Need | Student | Pro |
|---|---|---|
| Resolve and list any ticker | Yes | Yes |
| Download PDF originals | Yes | Yes |
| ≤100 API calls per UTC day | Yes | Yes (no daily cap) |
| Page-level markdown extraction | No | Yes |
| 1000 pages/month included | — | Yes |
| Buy extra credit packs | N/A (no extraction) | Yes |
Error codes tied to pricing
| Status / channel | Code | Meaning |
|---|---|---|
| 403 HTTP | FORBIDDEN |
Feature unavailable on plan (Student + extraction) |
callback error |
EXTRACTION_CREDITS_EXCEEDED |
Balance < pages required |
| 429 HTTP | RATE_LIMIT_EXCEEDED |
Global rate limit hit |
Auth errors (401 UNAUTHORIZED) are separate from billing — see authentication guide and errors and rate limits.
Example: extraction cost for a DFP
A 120-page DFP financial statement bundle costs 120 credits — $1.20 at list price, or part of the Pro monthly grant.
curl -X POST -H "Authorization: Bearer $APICVM_KEY" \
-H "Content-Type: application/json" \
-d '{"callback_url":"https://your-app.example.com/callbacks/apicvm","document":{"id":"<document-id>"}}' \
"$APICVM_URL/v1/document-text-extractions"
Returns 202 with job id. Progress arrives only via callbacks — no synchronous text endpoint. Details: Extract text from CVM PDFs for AI agents.
Current limitations
- Pricing reflects MVP plans; Scale terms are not self-serve.
- Credits are page-based — you cannot partially extract a document for fewer credits.
- No refund of credits if a callback fails mid-job after debit (handle idempotency on your webhook).
- Corpus coverage depends on Hold ingestion — pricing does not guarantee every B3 issuer or period is available.
Next steps
- Get an API key — start with Student or Pro
- Read the API docs — endpoints, callbacks, error codes
- Authenticate to the CVM filings API
- Handle errors and rate limits
- Extract text from CVM PDFs for AI agents
Ready to integrate?
Get an API key and start querying Brazilian CVM filings programmatically.