Skip to main content

Como funciona

Após o upload, o arquivo passa por três etapas:
  1. Leitura do conteúdo do documento
  2. Classificação do tipo (balanço, DRE, nota fiscal, etc.)
  3. Extração dos dados em formato JSON

Consultar status

GET /v2/file_uploads/:id

Resposta

{
  "object": "file_upload",
  "id": "fu_abc123",
  "status": "uploaded",
  "parsing": {
    "status": "completed",
    "template": "balance_sheet",
    "confidence": 0.95,
    "started_time": "2024-12-07T11:01:00.000Z",
    "completed_time": "2024-12-07T11:02:30.000Z"
  },
  "parsed_data": {}
}

Campos retornados

CampoTipoDescrição
parsing.statusstringStatus atual do processamento
parsing.templatestringTemplate identificado (ex: balance_sheet)
parsing.confidencenumberConfiança da Classificação (0 a 1)
parsing.started_timestringInício do processamento
parsing.completed_timestringFim do processamento
parsing.errorstringMensagem de erro, se houver

Templates disponíveis

TemplateTipo de documentoDisponibilidade
balance_sheetBalanço patrimonialDisponível
income_statementDREEm breve
invoiceNotas fiscaisEm breve
no_templateOutros documentosDisponível

Aguardar processamento

O tempo varia de 30 segundos a 15 minutos, dependendo do tamanho do documento.
Exemplo de polling até a conclusão:
async function waitForProcessing(fileId, token, maxAttempts = 30) {
  for (let i = 0; i < maxAttempts; i++) {
    const response = await fetch(
      `https://api.base39.com.br/v2/file_uploads/${fileId}`,
      {
        headers: { Authorization: `Bearer ${token}` },
      }
    );

    const data = await response.json();

    if (data.parsing.status === "completed") {
      return data;
    }

    if (data.parsing.status === "failed") {
      throw new Error(data.parsing.error);
    }

    await new Promise((r) => setTimeout(r, 2000));
  }

  throw new Error("Timeout");
}

Acessar dados extraídos

Após o processamento, o JSON estruturado pode ser baixado:
const fileUpload = await waitForProcessing(fileId, token);

if (fileUpload.parsed_data) {
  const response = await fetch(fileUpload.parsed_data);
  const data = await response.json();

  // Acessar primeira empresa e período
  const company = data.companies[0];
  const period = company.periods[0];

  console.log("Empresa:", company.company_name);
  console.log("Ativo total:", period.assets.value);
  console.log("Passivo total:", period.liabilities.value);
  console.log("Patrimônio Líquido:", period.equity.value);
}