Quando usar
Use este endpoint quando você já tem o balanço e a DRE em PDF e quer que a GYRA+ transforme as demonstrações em dados estruturados: balanço e DRE padronizados, indicadores calculados e parecer de IA, tudo dentro de um relatório de CNPJ já existente. É o mesmo processamento que roda quando um analista envia o balanço pela tela do Toolbox. Se a GYRA+ já encontrou demonstrações públicas da empresa, o envio soma ao que existe, não substitui. Veja o funcionamento completo em Análise Financeira.A chamada é assíncrona. O
200 significa “arquivos aceitos e enfileirados”, não “dados prontos”. Os dados estruturados saem depois, em GET /report/{id}/section/BALANCE_SHEET (e nas demais seções financeiras).Pré-requisitos
- Um relatório de CNPJ já criado (
POST /v2/report), cujoidvai na URL. - Token JWT válido (
POST /auth/authenticate). - Os PDFs, de preferência contendo apenas as páginas do Balanço Patrimonial e da DRE.
Autenticação
Bearer JWT no headerAuthorization.
Parâmetros
O corpo é
multipart/form-data. Não envie JSON.
Limites e validações
O que acontece depois
- A chamada já cria as seções financeiras do relatório, vazias. É por isso que consultá-las logo depois do upload responde
200com conteúdo vazio, e não404. - Cada arquivo vira um job de extração paralelo: leitura das tabelas (inclusive em documentos escaneados), padronização das linhas para o plano de contas único da GYRA+, validação da consistência contábil e cálculo dos indicadores.
- Ao final, as seções são preenchidas e a organização recebe um e-mail com a planilha consolidada.
O envio cria mais seis seções, derivadas das mesmas demonstrações:
Todas as seções são organizadas por período (
{"202401_202412": {...}}), o que permite comparar exercícios. A lista completa de tipos está em Consultar Seção por Tipo.
Como saber que terminou
Não existe endpoint de status do lote. Duas formas de acompanhar:Polling da seção (mais simples)
Polling da seção (mais simples)
Consulte
GET /report/{id}/section/BALANCE_SHEET a cada alguns minutos. Como as seções passam a existir já no 200 do upload, a leitura é sempre 200: conteúdo vazio significa que a extração ainda está rodando, conteúdo preenchido significa que terminou.Um 404 aqui não quer dizer “ainda processando”, e sim que aquele relatório nunca recebeu balanço, nem por envio nem por descoberta automática.Webhook (evita o polling)
Webhook (evita o polling)
Relatórios criados por
POST /v2/report notificam por webhook. Com um webhook do tipo REPORT registrado, sua URL recebe um POST a cada atualização de seção do relatório, incluindo as financeiras.O payload traz o conteúdo da seção em data.content e o relatório em data.content.report.id, mas não identifica qual seção foi atualizada. Ou seja: use o webhook como gatilho para reconsultar a seção que te interessa, não como um evento “balanço pronto”.Se a extração falhar ou ficar abaixo do nível de confiança exigido, as seções não são preenchidas com número errado: o erro fica registrado no campo
errors da seção e o documento original continua disponível para conferência manual.
