Como um sistema externo — SIEM, scanner, ERP, CMDB — empurra registros para a plataforma.
GET /api/ingestao-pub/entidades com o token. A resposta lista as entidades
liberadas e, para cada uma, todos os campos com tipo, obrigatoriedade e exemplo. É a fonte da
verdade — mais confiável que esta página, porque vem do mesmo código que valida.POST /api/ingestao-pub/{entidade}/preview. Ele valida tudo e
devolve linha a linha o que passaria e o que seria recusado, sem escrever nada. Use isto
durante o desenvolvimento inteiro./preview.Autenticação por Bearer token no cabeçalho:
Authorization: Bearer ing_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Cada token grava apenas nas entidades marcadas pelo administrador. Um token do SIEM que
tenta gravar em emissao recebe 403 — e a mensagem diz explicitamente que a
entidade existe, mas está fora do escopo, para você não perder tempo procurando erro de
digitação no nome.
# O que este token pode gravar, e com quais campos
curl "https://SEU-DOMINIO/api/ingestao-pub/entidades" \
-H "Authorization: Bearer $TOKEN"
Resposta (recortada):
{
"sucesso": true,
"dados": {
"token": { "nome": "SIEM Produção", "prefixo": "ing_AbCdEfGh", "modo": "UPSERT" },
"maxLinhasPorRequisicao": 500,
"entidades": [{
"entidade": "incidente_seguranca",
"nome": "Incidentes de segurança (ISO 27001)",
"endpoint": "POST /api/ingestao-pub/incidente_seguranca",
"campos": [
{ "campo": "codigo", "rotulo": "Código *", "obrigatorio": true,
"tipo": "texto", "exemplo": "INC-2026-0007" },
{ "campo": "tipo", "rotulo": "Tipo (CIA) *", "obrigatorio": true,
"descricao": "Confidencialidade, Integridade ou Disponibilidade...",
"exemplo": "Disponibilidade" }
]
}]
}
}
campo, não o rotulo. É o engano mais comum de quem
integra: o rótulo ("Código *") é o que aparece na planilha para o usuário final; o JSON
usa "codigo". Campo com nome desconhecido é simplesmente ignorado — e se ele era
obrigatório, a linha é recusada por "obrigatório" sem parecer relacionado.
| Método | Caminho | O que faz |
|---|---|---|
| GET | /api/ingestao-pub/entidades | Lista o escopo do token e o formato de cada entidade |
| POST | /api/ingestao-pub/{entidade}/preview | Valida e devolve o resultado sem gravar |
| POST | /api/ingestao-pub/{entidade} | Grava |
{
"linhas": [
{ "campo1": "valor", "campo2": "valor" },
{ "campo1": "valor", "campo2": "valor" }
]
}
Regras que valem para todas as entidades:
| Assunto | Regra |
|---|---|
| Datas | DD/MM/AAAA (aceita com hora). Também aceita ISO. |
| Enums | Mandam-se em português por extenso, não o valor interno:
"Disponibilidade", "Alta", "Encerrado". Sinônimos comuns são
aceitos; se não for reconhecido, a mensagem de erro lista as opções válidas. |
| Sim/Não | "Sim" / "Não" (também aceita true/false). |
| Vazio | Omitir a chave e mandar "" são equivalentes. |
| Reenvio | No modo UPSERT (padrão), reenviar o mesmo registro
atualiza em vez de duplicar. A chave é o campo marcado como tal na entidade — geralmente
codigo. É seguro reenviar a mesma janela de dados a cada execução. |
| Teto | 500 linhas por requisição (o valor real vem em
maxLinhasPorRequisicao). Acima disso, 413 — divida em lotes. |
| Frequência | 60 requisições por minuto por origem. |
{
"sucesso": true,
"mensagem": "2 linha(s) gravada(s), 1 recusada(s).",
"dados": {
"entidade": "incidente_seguranca",
"modo": "UPSERT",
"preview": false,
"loteId": "8f3c...",
"totalLinhas": 3,
"gravadas": 2,
"recusadas": 1,
"resultados": [
{ "linha": 1, "status": "OK", "id": "a1b2..." },
{ "linha": 2, "status": "OK", "id": "c3d4...", "aviso": "Ativo \"AT-9\" não está no inventário — incidente gravado sem vínculo com ativo." },
{ "linha": 3, "status": "ERRO", "erros": ["Data de detecção: \"32/13/2026\" não é uma data válida (use DD/MM/AAAA)."] }
]
}
}
sucesso: true não significa que tudo entrou. Ele diz que o lote foi processado.
Quem responde "o que entrou?" é gravadas / recusadas e a lista
resultados. Monitore recusadas > 0 — senão o seu sistema vai
achar que está sincronizando enquanto metade dos registros é rejeitada em silêncio.
aviso não é erro. A linha entrou; o aviso conta o que a plataforma
interpretou, ignorou ou não conseguiu vincular. Vale registrar no seu log — é onde aparece
"o responsável não é usuário da empresa" e coisas do gênero.
Atenção ao campo tipo: ele classifica a propriedade violada (a tríade
Confidencialidade / Integridade / Disponibilidade), não o vetor de ataque. Ransomware que
derrubou o serviço é "Disponibilidade" — "Ransomware" e
"Vazamento de dados" não são valores válidos.
curl -X POST "https://SEU-DOMINIO/api/ingestao-pub/incidente_seguranca" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"linhas": [{
"codigo": "INC-2026-0007",
"titulo": "Indisponibilidade do portal de protocolo",
"descricao": "Falha no cluster de banco deixou o portal fora por 4h10",
"tipo": "Disponibilidade",
"severidade": "Alta",
"dataDeteccao": "12/03/2026",
"status": "Encerrado",
"ativoAfetado": "AT-2026-0001",
"dadosPessoaisEnvolvidos": "Não",
"rootCause": "Disco cheio no nó primário sem alerta configurado"
}]
}'
curl -X POST "https://SEU-DOMINIO/api/ingestao-pub/ativo_informacao/preview" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"linhas":[{"codigo":"AT-SRV-0042","nome":"Servidor de aplicação — nó 2"}]}'
Repare no /preview: rode assim até a saída ficar
limpa. Só então tire o sufixo.
curl -X POST "https://SEU-DOMINIO/api/ingestao-pub/risco_corporativo" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"linhas":[{"codigo":"R-2026-014","titulo":"Dependência de fornecedor único de nuvem"}]}'
curl -X POST "https://SEU-DOMINIO/api/ingestao-pub/consumo_energia" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"linhas":[{"competencia":"03/2026"}]}'
GET /entidades. Ela é gerada do mesmo código que valida, então nunca fica
desatualizada em relação a esta página.
Erro sempre traz sucesso: false, um codigo estável (bom para tratar no
seu código) e um erro em texto (bom para o log).
| HTTP | codigo | O que significa e o que fazer |
|---|---|---|
| 401 | TOKEN_AUSENTE | Faltou o cabeçalho Authorization: Bearer .... |
| 401 | TOKEN_INVALIDO | O token não é reconhecido. Confira se copiou inteiro (não tem espaço nem quebra de linha). |
| 401 | TOKEN_REVOGADO | O administrador revogou. Não adianta repetir — peça a emissão de um novo e reconfigure. |
| 401 | TOKEN_INATIVO | Desativado temporariamente. Reversível: peça a reativação. |
| 401 | TOKEN_EXPIRADO | Passou da validade. A mensagem traz a data. Peça renovação. |
| 401 | TOKEN_SEM_ESCOPO | O token existe mas nenhuma entidade foi liberada nele. É configuração incompleta do lado do cliente. |
| 403 | ENTIDADE_FORA_DO_ESCOPO | A entidade existe, mas este token não pode gravar nela. A resposta traz entidadesDoToken. Não é erro de digitação — é decisão do administrador. |
| 404 | ENTIDADE_DESCONHECIDA | Não existe entidade com esse nome. A resposta traz entidadesExistentes. Isto sim costuma ser digitação. |
| 400 | CORPO_INVALIDO | O corpo não é {"linhas":[{...}]}, ou algum item não é objeto. |
| 400 | LOTE_VAZIO | linhas veio vazio. |
| 413 | LOTE_GRANDE_DEMAIS | Passou do teto. A resposta traz maximo e recebidas. Divida. |
| 429 | — | Passou de 60 requisições por minuto. Espere e repita — com espaçamento, não em rajada. |
| 500 | ERRO_INTERNO | Falha nossa. Pode repetir com segurança no modo UPSERT. |
Sim, no modo UPSERT (padrão). O registro é casado pela chave da entidade e
atualizado. É o desenho recomendado: mande a janela inteira a cada execução, em vez de tentar
controlar do seu lado o que já foi enviado.
No modo INSERT, o reenvio é reportado como duplicata (não vira erro, mas também não
grava). Se o seu sistema reenvia, peça um token em UPSERT.
As outras entram normalmente. Não há transação de lote inteiro: uma linha ruim no meio de 500 não
descarta as 499 boas. A recusada aparece em resultados com o motivo, e você reenvia só
ela depois de corrigir.
Cada item de resultados com status: "OK" traz o id gerado.
Além disso, todo lote fica registrado na plataforma — o administrador vê no histórico de importações,
com o nome do token como origem.
É a recomendação. Com um token por sistema dá para revogar o do scanner sem derrubar o do ERP, e o histórico diz qual sistema gravou o quê. Um token compartilhado por três integrações vira um problema quando um deles precisa sair.
Não. Esta API só grava. É deliberado: o token é entregue a um sistema de terceiro, e leitura em massa dos dados do cliente é uma superfície diferente, que merece controle próprio. Para leitura, use a API autenticada por sessão de usuário.
O administrador da empresa acrescenta no escopo do token, na tela de tokens de ingestão — sem precisar gerar um token novo nem reconfigurar o seu sistema. Peça a ele.