Resultado e histórico
O resultado só existe depois da liberação (status completed). Há duas rotas, ambas com escopo documents:read:
GET /v1/documents/{id}/result: só este documento. Antes da liberação responde409not_completed.GET /v1/history/{cnpj}: todos os documentos liberados desse CNPJ na sua empresa. Responde{}quando não há.
Formato
As duas devolvem o mesmo formato (History): um objeto cuja chave junta entidade e data do período, e cujo valor é uma lista de linhas (HistoryEntry).
{
"Individual - 31/12/2025 - ": [
{
"termo_total": "ac - caixa e equivalentes",
"valor": "152340.75",
"moeda": "BRL",
"escala": "1",
"tipo": "balanco",
"section": "ac",
"subsection": "",
"data": "31/12/2025",
"data_ano": "2025",
"data_init": "",
"page": 2,
"bbox_left": 0.62,
"bbox_top": 0.214,
"bbox_width": 0.12,
"bbox_height": 0.015,
"x": 0.62,
"y": 0.214,
"conf": 1,
"tipo_balanco": "Individual",
"consolidado": false,
"empresa": "Empresa Exemplo Ltda",
"cnpj": "00000000000191",
"id": "00000000-0000-4000-8000-000000000001-0",
"unique_id": "00000000-0000-4000-8000-000000000001-0",
"parent": "",
"is_total": 0,
"formula": "",
"tempo": "",
"over_threshold_h": 0,
"over_threshold_v": 0
},
{
"termo_total": "dre - receita bruta",
"valor": "1250000.00",
"moeda": "BRL",
"escala": "1",
"tipo": "dre",
"section": "dre",
"subsection": "",
"data": "31/12/2025",
"data_ano": "2025",
"data_init": "",
"page": 4,
"bbox_left": 0.62,
"bbox_top": 0.188,
"bbox_width": 0.12,
"bbox_height": 0.015,
"x": 0.62,
"y": 0.188,
"conf": 1,
"tipo_balanco": "Individual",
"consolidado": false,
"empresa": "Empresa Exemplo Ltda",
"cnpj": "00000000000191",
"id": "00000000-0000-4000-8000-000000000001-1",
"unique_id": "00000000-0000-4000-8000-000000000001-1",
"parent": "",
"is_total": 0,
"formula": "",
"tempo": "",
"over_threshold_h": 0,
"over_threshold_v": 0
}
]
}A chave tem o formato <entidade> - <dd/mm/aaaa> - , com o espaço final. No histórico de um CNPJ, cada combinação de entidade e data é uma chave.
Campos principais
| Campo | Descrição |
|---|---|
termo_total | A conta padronizada, um dos termos. |
valor | String decimal com duas casas, em reais. Não converta para float. |
moeda | BRL. |
escala | 1: o valor já está em reais. |
tipo | balanco ou dre. |
data | Data do período, dd/mm/aaaa. |
page | Página do PDF onde está o número, começando em 1. |
bbox_left, bbox_top, bbox_width, bbox_height | Caixa do número, em frações da página (0 a 1). |
conf | 1 indica conferência humana. Não é probabilidade. |
tipo_balanco | Entidade: Individual, Controladora, Consolidado ou Combinado. |
A lista completa, com os campos de compatibilidade, está no objeto HistoryEntry da referência.
Valores monetários
valor é uma string, como "1250000.00". Converta para um tipo decimal exato (Decimal em Python, uma biblioteca decimal ou centavos inteiros em JavaScript). float e number perdem precisão em valores grandes.
from decimal import Decimal
total = sum(Decimal(entry["valor"]) for entry in entries if entry["tipo"] == "dre")// Centavos como bigint: exato e sem dependência.
const cents = (valor: string) => BigInt(valor.replace(".", ""));
const total = entries.filter((e) => e.tipo === "dre").reduce((sum, e) => sum + cents(e.valor), 0n);Mostrar a origem de um número
page e a caixa (bbox_*) apontam onde o número está no PDF. Multiplique as frações pela largura e altura da página renderizada para destacar o valor sobre o documento original.
Histórico de um CNPJ
O histórico combina documentos complementares da mesma entidade e data, por termo:
- Uma nova versão de um termo substitui todas as linhas anteriores desse termo.
- Um PDF complementar que não traz um termo não apaga o termo anterior.
- Durante uma nova conferência,
/historycontinua com a última versão liberada.