finstatdocs
API Entrar

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 responde 409 not_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).

GET /v1/documents/{id}/result
{
  "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

CampoDescrição
termo_totalA conta padronizada, um dos termos.
valorString decimal com duas casas, em reais. Não converta para float.
moedaBRL.
escala1: o valor já está em reais.
tipobalanco ou dre.
dataData do período, dd/mm/aaaa.
pagePágina do PDF onde está o número, começando em 1.
bbox_left, bbox_top, bbox_width, bbox_heightCaixa do número, em frações da página (0 a 1).
conf1 indica conferência humana. Não é probabilidade.
tipo_balancoEntidade: 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.

Python
from decimal import Decimal

total = sum(Decimal(entry["valor"]) for entry in entries if entry["tipo"] == "dre")
Node
// 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, /history continua com a última versão liberada.