Este documento descreve a integração utilizada pelo IAGO para criação automática de peças no eTCE-GO, incluindo:
A finalidade do endpoint é permitir que uma peça produzida com apoio de Inteligência Artificial seja criada no eTCE e vinculada ao último andamento do processo no setor informado.
Importante: a peça criada pelo IAGO deve ser considerada uma minuta sujeita à revisão de um servidor.
O uso do usuário de serviçoBOTMINUTApermite identificar a origem automatizada do documento.
Swagger:
Endpoint:
POST https://api-etce.tce.gti.br/api/v1/Documento/iago
Swagger:
Endpoint:
POST https://api-etce.tce.go.gov.br/api/v1/Documento/iago
POST /api/v1/Documento/iago
Cria o documento gerado pelo IAGO no eTCE e vincula o documento ao último andamento do processo, considerando o processo, o setor informado e o usuário autenticado.
O endpoint centraliza as validações necessárias para a criação da peça.
A integração utiliza autenticação via OpenID Connect / Keycloak, com obtenção prévia de um token Bearer.
curl --location 'https://auth.tce.go.gov.br/realms/tce-go/protocol/openid-connect/token' \ --header 'Content-Type: application/x-www-form-urlencoded' \ --data-urlencode 'client_id=iago-web' \ --data-urlencode 'username=BOTMINUTA' \ --data-urlencode 'password=<SENHA>' \ --data-urlencode 'grant_type=password'
curl --location 'https://auth-hom.tce.go.gov.br/realms/tce-go/protocol/openid-connect/token' \ --header 'Content-Type: application/x-www-form-urlencoded' \ --data-urlencode 'client_id=iago-web' \ --data-urlencode 'username=botminuta' \ --data-urlencode 'password=<SENHA>' \ --data-urlencode 'grant_type=password'
O token retornado deve ser enviado ao endpoint:
Authorization: Bearer <TOKEN> Content-Type: application/json
| HTTP | Situação |
|---|---|
401 Unauthorized | Requisição realizada sem autenticação/token válido. |
403 Forbidden | Usuário autenticado, porém sem autorização para utilização do endpoint. |
O usuário recomendado para criação das peças geradas pelo IAGO é:
BOTMINUTA
O uso desse usuário permite identificar que o documento foi produzido por meio da integração com Inteligência Artificial e que deve passar por revisão de um servidor antes da continuidade do fluxo.
Uma das principais regras da integração é:
O usuário autenticado precisa estar vinculado ao setor informado na requisição.
Além disso, o processo precisa estar no setor informado para que o documento possa ser efetivamente criado e vinculado ao andamento correspondente.
Atualmente existem vinculações do usuário de serviço aos seguintes setores:
| Setor | Descrição | Usuário/vinculação |
|---|---|---|
DI-TI | Diretoria de Tecnologia da Informação | BOTMINUTA |
GPCCR | Gabinete do Procurador de Contas Carlos Gustavo Silva Rodrigues | BOTMINUTA_GPCCR |
Importante: caso a funcionalidade seja disponibilizada para novos setores, será necessário incluir o usuário de serviço no setor correspondente antes de utilizar o endpoint.
{
"setorGeralId": 26,
"codigoProcesso": 202400047002057,
"tipoDocumento": "DP",
"corpoDocumento": "<p>Conteúdo da minuta...</p>",
"ementa": "Ementa opcional da peça"
}
| Campo | Obrigatório | Descrição |
|---|---|---|
setorGeralId | Sim | Identificador do setor no qual o processo deverá estar e ao qual o usuário autenticado deverá estar vinculado. |
codigoProcesso | Sim | Código do processo onde a peça será criada. |
tipoDocumento | Sim | Indicador do tipo de documento. Na primeira versão da integração deve ser utilizado DP, correspondente a Parecer. |
corpoDocumento | Sim | Conteúdo da peça em HTML simples. |
ementa | Não | Ementa que será associada ao documento. Quando informada, será utilizada na criação da peça; quando omitida, a API utiliza a ementa cadastrada na autuação do processo. |
tipoDocumento = “DP”.corpoDocumento deve possuir conteúdo HTML válido e conteúdo efetivo.
O campo ementa é opcional.
A ementa do documento será gerada utilizando o conteúdo enviado na própria requisição:
{
"ementa": "Análise da prestação de contas..."
}
O campo ementa da requisição é opcional.
Durante o processamento, a API também considera a ementa cadastrada na autuação do processo.
A definição da ementa do documento ocorre da seguinte forma:
ementa é informado na requisição, esse conteúdo será utilizado na peça;ementa não é informado, será utilizada a ementa cadastrada na autuação.Para que a criação do documento seja concluída, o processo deve possuir ementa cadastrada na autuação.
Caso essa informação não esteja preenchida, a API retorna:
{
"title": "Processo sem ementa.",
"detail": "O documento não pode ser criado pois a EMENTA do PROCESSO deve ser cadastrada, entre em contato com Serviço de PROTOCOLO.",
"typeDetail": "text/plain",
"status": "Error",
"type": "Conflict",
"instance": null,
"code": "409"
}
Campo ementa no endpoint | Ementa utilizada no documento |
|---|---|
| Informado | Conteúdo enviado na requisição |
| Não informado | Ementa cadastrada na autuação |
—-
Na primeira versão da integração foi implementada a criação de Parecer.
O valor esperado é:
{
"tipoDocumento": "DP"
}
DP corresponde ao tipo documental Parecer.
Não devem ser enviados outros tipos documentais enquanto não forem explicitamente habilitados para a integração.
{
"title": "Tipo de documento não permitido.",
"detail": "Tipo de documento não permitido para integração com o Iago.",
"typeDetail": "text/plain",
"status": "Error",
"type": "Conflict",
"instance": null,
"code": "409"
}
Também pode ocorrer validação relacionada ao cadastro ou habilitação do tipo documental para o setor informado:
{
"title": "Parâmetro inválido",
"detail": "Não existe o tipo de documento com o indicador DP informado.",
"typeDetail": "text/plain",
"status": "Error",
"type": "BadRequest",
"instance": null,
"code": "400"
}
De forma simplificada, o endpoint executa o seguinte fluxo:
O processo informado precisa existir.
Caso contrário, a operação é interrompida.
{
"title": "Parâmetro inválido",
"detail": "Processo informado não existe.",
"typeDetail": "text/plain",
"status": "Error",
"type": "BadRequest",
"instance": null,
"code": "400"
}
O usuário autenticado precisa estar vinculado ao setorGeralId informado.
{
"title": "Objeto informado está inválido.",
"detail": "{\r\n \"Validacoes\" : [ \r\n {\r\n \"SetorInvalido\" : \"O usuário autenticado não está vinculado ao setor informado.\"\r\n }\r\n ] \r\n}\r\n",
"typeDetail": "application/json",
"status": "Validation",
"type": "Validation",
"instance": null,
"code": "422"
}
Essa regra é válida tanto para processos comuns quanto reservados.
O processo deve estar no setor informado na requisição, permitindo que a peça seja vinculada ao andamento correto.
Não é permitido utilizar a integração para incluir uma peça em processo pertencente a setor para o qual o usuário de serviço não esteja devidamente vinculado.
Não é permitida a criação de documentos por este endpoint em processos classificados como sigilosos, mesmo que o usuário possua acesso ao processo.
{
"title": "Processo Sigiloso.",
"detail": "Não é permitida a criação de documentos no processo (2013100280472), pois ele possui caráter sigiloso.",
"typeDetail": "text/plain",
"status": "Error",
"type": "Conflict",
"instance": null,
"code": "409"
}
O número do processo apresentado na mensagem varia conforme o processo informado.
A criação é permitida em processo reservado desde que:
Caso o usuário não esteja vinculado ao setor informado, a requisição é rejeitada com 422.
A ementa utilizada no documento segue a seguinte prioridade:
ementa informada no body da requisição;Caso não exista uma ementa válida disponível, a criação é interrompida.
Deve existir responsável cadastrado para o setor do processo.
Caso não exista responsável cadastrado, a criação da minuta será interrompida.
Não é permitida a substituição quando o processo já possui documento assinado ou aguardando assinatura.
{
"title": "Documento Assinado/Aguardando assinatura.",
"detail": "O processo atual já possui um documento assinado ou aguardando assinatura e não pode ser alterado.",
"typeDetail": "text/plain",
"status": "Error",
"type": "Conflict",
"instance": null,
"code": "409"
}
Não é permitida a substituição automática quando o documento está aberto para edição.
{
"title": "Substituição automática não permitida.",
"detail": "O documento já se encontra aberto para edição no Word. A substituição automática não é permitida.",
"typeDetail": "text/plain",
"status": "Error",
"type": "Conflict",
"instance": null,
"code": "409"
}
Um documento criado anteriormente pelo IAGO pode ser automaticamente substituído somente quando não tiver sofrido alteração por usuário.
Nesse cenário, o endpoint retorna sucesso e:
{
"acaoExecutada": "Substituicao"
}
Se um documento criado pelo IAGO tiver sido posteriormente alterado por um usuário, a substituição automática não é permitida.
{
"title": "Substituição automática não permitida.",
"detail": "O documento existente foi criado pelo IAGO e possui alterações realizadas por um usuário. A substituição automática não é permitida.",
"typeDetail": "text/plain",
"status": "Error",
"type": "Conflict",
"instance": null,
"code": "409"
}
Documentos originalmente criados por usuário não podem ser substituídos automaticamente pela integração.
{
"title": "Substituição automática não permitida.",
"detail": "O documento existente foi criado por um usuário. A substituição automática não é permitida.",
"typeDetail": "text/plain",
"status": "Error",
"type": "Conflict",
"instance": null,
"code": "409"
}
corpoDocumento é obrigatório e precisa conter conteúdo válido.
Não são aceitos:
null;
Para valor vazio ou null:
{
"title": "Parâmetro inválido",
"detail": "O corpo do documento deve ser informado.",
"typeDetail": "text/plain",
"status": "Error",
"type": "BadRequest",
"instance": null,
"code": "400"
}
Para HTML inválido ou contendo somente tags vazias:
{
"title": "Parâmetro inválido",
"detail": "O corpo do documento informado está em um formato inválido.",
"typeDetail": "text/plain",
"status": "Error",
"type": "BadRequest",
"instance": null,
"code": "400"
}
O endpoint deve ser utilizado para inclusão de documento em um processo por vez.
Não deve ser enviada uma lista de processos no campo codigoProcesso.
Após a criação do documento, o endpoint atualiza o andamento do processo, incluindo os dados utilizados para referenciar o documento gerado no TCE-Docs.
Entre os dados relacionados ao documento estão:
ID_DOCUMENT_N TIPO_DOCUMENT_A
Quando não informado:
{
"title": "Parâmetro inválido",
"detail": "O setor geral do usuário deve ser informado.",
"typeDetail": "text/plain",
"status": "Error",
"type": "BadRequest",
"instance": null,
"code": "400"
}
Quando não informado:
{
"title": "Parâmetro inválido",
"detail": "O código do processo deve ser informado.",
"typeDetail": "text/plain",
"status": "Error",
"type": "BadRequest",
"instance": null,
"code": "400"
}
Quando vazio ou null:
{
"title": "Parâmetro inválido",
"detail": "O corpo do documento deve ser informado.",
"typeDetail": "text/plain",
"status": "Error",
"type": "BadRequest",
"instance": null,
"code": "400"
}
O campo não é obrigatório.
São permitidos:
conversaId = 0.curl --location 'https://api-etce.tce.gti.br/api/v1/Documento/iago' \ --header 'Authorization: Bearer <TOKEN>' \ --header 'Content-Type: application/json' \ --data '{ "setorGeralId": 26, "conversaId": 0, "codigoProcesso": 202400047002057, "tipoDocumento": "DP", "corpoDocumento": "<p>Conteúdo da minuta gerada pelo IAGO.</p>", "ementa": "Ementa da peça gerada pelo IAGO" }'
Para produção utilizar:
https://api-etce.tce.go.gov.br/api/v1/Documento/iago
{
"documentoId": 6255658,
"codigoProcesso": 201800047000443,
"tipoDocumento": "Parecer",
"dataHora": "2026-07-17T11:29:34.724411-03:00",
"nomeUsuario": "BOTMINUTA",
"acaoExecutada": "CriacaoNova"
}
{
"documentoId": 6255660,
"codigoProcesso": 201800047000443,
"tipoDocumento": "Parecer",
"dataHora": "2026-07-17T11:41:00.2380878-03:00",
"nomeUsuario": "BOTMINUTA",
"acaoExecutada": "Substituicao"
}
| Campo | Descrição |
|---|---|
documentoId | Identificador do documento criado/atualizado no TCE-Docs. |
codigoProcesso | Processo relacionado à operação. |
tipoDocumento | Descrição do tipo documental criado. |
dataHora | Data e hora da operação. |
nomeUsuario | Usuário responsável pela criação via integração. |
acaoExecutada | Informa se houve CriacaoNova ou Substituicao. |
| HTTP | Situação |
|---|---|
200 OK | Documento criado ou substituído com sucesso. |
400 Bad Request | Campos ou parâmetros inválidos, processo inexistente, conteúdo obrigatório ausente, tipo cadastral inexistente etc. |
401 Unauthorized | Ausência de autenticação válida. |
403 Forbidden | Usuário autenticado sem autorização para utilizar o endpoint. |
409 Conflict | Regra de negócio impede a criação ou substituição. |
422 Unprocessable Entity | Falha de validação ou vínculo, como usuário não vinculado ao setor informado. |
500 Internal Server Error | Erro interno da aplicação. |
| Validação | Resultado |
|---|---|
| Usuário sem autenticação | 401 |
| Usuário sem permissão | 403 |
setorGeralId ausente | 400 |
| Usuário não vinculado ao setor | 422 |
codigoProcesso ausente | 400 |
| Processo inexistente | 400 |
| Processo sigiloso | 409 |
| Processo reservado no mesmo setor | Permitido, se as demais regras forem atendidas |
| Processo reservado fora do setor | 422 |
| Processo sem ementa disponível | 409 |
| Tipo diferente do permitido para integração | 409 |
| Documento assinado/aguardando assinatura | 409 |
| Documento em edição no Word | 409 |
| Documento IAGO sem alteração humana | Substituição permitida |
| Documento IAGO alterado por usuário | 409 |
| Documento criado por usuário | 409 |
corpoDocumento vazio ou null | 400 |
| HTML inválido/tags vazias | 400 |
conversaId ausente | Permitido |
conversaId = 0 | Permitido |
Para habilitar a criação automática de peças em novos setores, deve-se verificar no mínimo:
DP;
Enquanto não houver ampliação formal da integração, deve-se considerar a primeira versão restrita à criação de Parecer (DP).
Antes de enviar a requisição:
tipoDocumento = “DP”;corpoDocumento;ementa quando o IAGO possuir uma ementa específica para a peça;conversaId quando houver necessidade de rastreabilidade da interação;409 e 422 como respostas funcionais de regra de negócio/validação;