Brazil Going Concern Disclosures API: Track Substantial Doubt and Liquidity Warnings from CVM Filings

A Brazil going concern disclosures API in the credit-research sense is not a live distress score, a bankruptcy prediction model, or a vendor that tags “GC” on every 10-K equivalent. It is access to the CVM filings where Brazilian issuers and their independent auditors discuss continuidade operacional (going concern), liquidity shortfalls, refinancing plans, and substantial doubt — usually in auditor reports bundled with DFP and ITR (Informações Trimestrais, not US income tax returns), liquidity and risk-factor sections in FRE, and FATO_RELEVANTE when a covenant breach or liquidity event is material. apicvm lets you list those rows by ticker, download the original PDF, and diff new document.id values on a watchlist during 3Q ITR season when auditors refresh review reports.

This guide shows which type values to query, annex title heuristics for auditor reports, and how this hub differs from the broader independent auditor report, debt covenant monitoring, and financial restatement workflows.

The problem

Going-concern surveillance splits into three stacks that English search results often merge:

  1. Market data terminals — may show leverage ratios or CDS. They rarely store the issuer’s regulatory PDF with the auditor’s emphasis-of-matter or management’s liquidity mitigation plan in Portuguese.
  2. Periodic packages — DFP and ITR rows with parecer do auditor independente annexes. You need ticker-first access and stable document.id, not a one-off portal download per name.
  3. Event disclosures — fatos relevantes when refinancing fails, waivers expire, or management discloses liquidity stress before the next full auditor report.

Scraping the CVM portal works for one ticker and breaks on a diversified credit watchlist. Bulk open-data ZIPs are dataset-oriented, not ticker-first. You want GET /v1/documents with stable document.id, then GET /v1/documents/:id/file for the original PDF — scoped to going concern and liquidity workflows.

For covenant math and waiver notices, cross-check Brazil debt covenant disclosures API. For qualified opinions that often accompany GC language, see Brazil independent auditor report disclosures API. This guide focuses on the API list-and-download pattern for continuity and liquidity disclosures.

Which filing type carries going-concern language?

Brazilian issuers do not expose a dedicated type=GOING_CONCERN in the apicvm document list. Substantial-doubt language usually appears under:

type Role in going-concern workflows
DFP / ITR Independent auditor report annex — emphasis on continuity, liquidity, or substantial doubt
FRE Annual reference form — risk factors, liquidity management, refinancing strategy
FATO_RELEVANTE Material fact on covenant breach, debt restructuring, or liquidity support
COMUNICADO_AO_MERCADO Market communication on refinancing or capital injection
DFP / ITR (notes) Explanatory notes on liquidez, passivo circulante, or short-term debt maturities

Practical rule: list DFP/ITR for the issuer and filter annex rows whose name contains Auditor, Parecer, or Independent. Pull the latest FRE for narrative risk factors. Poll FATO_RELEVANTE with Portuguese and English tokens (continuidade, liquidez, going concern, substantial doubt, refinanciamento, covenant). After download, search PDF text for continuidade operacional, dúvida relevante, substantial doubt, ênfase, liquidez, refinanciamento, or going concern.

Issuer packaging varies: some filers embed GC language only in the auditor PDF; others discuss liquidity primarily in FRE risk factors. Zero rows with a keyword filter does not mean no going-concern discussion — broaden the list or open the latest auditor annex manually.

How apicvm helps

  1. Resolve the issuer — GET /v1/companies/resolve
  2. List periodic filings — GET /v1/documents with type=ITR or type=DFP and year
  3. Narrow auditor annexes — name=Auditor or name=Parecer
  4. List annual reference — GET /v1/documents with type=FRE
  5. List liquidity events — GET /v1/documents with types=FATO_RELEVANTE,COMUNICADO_AO_MERCADO
  6. Scope with dateRef; sort with field=dateRef&order=desc
  7. Download the PDF — GET /v1/documents/:id/file (no extraction credits)
  8. Optional (Pro): page-level markdown — POST /v1/document-text-extractions with async callback

Auth: Authorization: Bearer or X-API-Key. Try VALE3 without a key via the demo API.

Setup

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

Step 1: List independent auditor annexes on recent ITR packages

curl -s -H "Authorization: Bearer $APICVM_KEY" \
  "$APICVM_URL/v1/documents?ticker=GGBR4&type=ITR&year=2025&perPage=50&field=dateRef&order=desc" \
  | jq '.data[] | select(.name | test("auditor|parecer|independent"; "i")) | {id, type, dateRef, name}'

Response rows include stable id, dateRef, name, and nested company metadata. Use id as your cache key — not name, which can be long and encoding-sensitive.

Paginate with page= when meta.lastPage > 1. perPage maxes at 50.

Step 2: Download the auditor report PDF

DOC_ID=123456
curl -H "Authorization: Bearer $APICVM_KEY" \
  "$APICVM_URL/v1/documents/$DOC_ID/file" -o auditor-report.pdf

Search the PDF locally for going-concern phrases. apicvm does not return a pre-parsed goingConcern: true field.

Step 4: Pull FRE for liquidity risk narrative

curl -H "Authorization: Bearer $APICVM_KEY" \
  "$APICVM_URL/v1/documents?ticker=VALE3&type=FRE&year=2025&perPage=10&field=dateRef&order=desc"

For section-level FRE extraction patterns, see FRE risk factors API section filter.

On the public demo (VALE3 only), swap the host path to /v1/demo/documents with the same query parameters for smoke tests.

Step 5: Watchlist poll (Python sketch)

import os, re, requests

BASE = os.environ["APICVM_URL"]
KEY = os.environ["APICVM_KEY"]
HEADERS = {"Authorization": f"Bearer {KEY}"}
WATCH = ["GGBR4", "PETR4", "VALE3", "ITUB4"]
GC_EVENT_RE = re.compile(
    r"continuidade|liquidez|refinanciamento|covenant|going concern|"
    r"substantial doubt|d[uú]vida relevante",
    re.I,
)
seen = set()

def list_events(ticker):
    r = requests.get(
        f"{BASE}/v1/documents",
        headers=HEADERS,
        params={
            "ticker": ticker,
            "types": "FATO_RELEVANTE,COMUNICADO_AO_MERCADO",
            "year": 2025,
            "perPage": 50,
            "field": "dateRef",
            "order": "desc",
        },
        timeout=60,
    )
    r.raise_for_status()
    return r.json().get("data") or []

for ticker in WATCH:
    for doc in list_events(ticker):
        if doc["id"] in seen:
            continue
        if not GC_EVENT_RE.search(doc.get("name") or ""):
            continue
        seen.add(doc["id"])
        print(f"GC_EVENT {ticker} {doc['dateRef']} {doc['name'][:70]}")

Wire this into GitHub Actions CVM filings monitor. For NLP over downloaded PDFs, see extract text from CVM PDFs for AI agents.

Where going-concern signals sit in the filings stack

Layer Types Going-concern relevance
Periodic ITR, DFP Auditor reports, liquidity notes, short-term debt tables
Reference FRE Risk factors, liquidity management, refinancing strategy
Events FATO_RELEVANTE, COMUNICADO_AO_MERCADO Covenant breach, restructuring, capital support
Credit Balance sheet notes Current vs non-current liabilities (manual read)

Brazil regulatory filings API explains the full layer map. Pair auditor annex polling with quarterly ITR monitoring during 3Q ITR season (typically Oct–Nov). When GC warnings follow accounting retifications, cross-check Brazil financial restatement disclosures API. For leverage context, see Brazil balance sheet disclosures API. For the broader Brazil financial data API pillar, treat going concern as the credit stress layer on top of periodic statements.

Current limitations

  • Documents, not parsed GC analytics — apicvm does not return clean vs qualified labels, automatic substantial-doubt flags, or emphasis-of-matter extraction.
  • Title heuristics — name filters miss annexes with generic titles; some GC language lives only inside the PDF body.
  • Polling, not push — no webhook when CVM publishes a new auditor report. Schedule polls and diff document.id.
  • Ingestion lag — sync is not real-time. A notice may appear on the portal before it is in the corpus.
  • Corpus coverage — not every issuer or period is present. Validate against the portal for production compliance use cases.
  • Demo scope — /v1/demo/* is limited to VALE3. Other tickers need a production key.
  • ITR disambiguation — Informações Trimestrais (CVM quarterly financials), not US income tax return software.

Next steps

Ready to integrate?

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