Glautec CRM

API pública

Integre o Glautec CRM com tokens de API. Envie o token e o tenant em cada requisição.

Autenticação

Crie um token em Tokens de API. O valor começa com glt_ e só aparece na criação.

URL base do gateway

http://localhost:8080

A URL completa é a base + o caminho do endpoint. Exemplo: http://localhost:8080/crm/projects

Cabeçalhos

Erros

Falhas vêm como JSON com error e code.

HTTPcodeDescrição
400validationDados inválidos, tenant ausente ou corpo incompleto.
401unauthorizedToken ausente, inválido ou expirado na troca.
403forbiddenToken desabilitado, sem permissão do endpoint ou usuário inativo.
404not_foundRecurso ou serviço não encontrado.
409conflictConflito de dados ou serviço indisponível.
{ "error": "Token de API inválido.", "code": "unauthorized" }

Login e sessão

Estes endpoints não usam token glt_. Servem para o CRM e para apps que trocam e-mail e senha por JWT.

/identity/auth/login

POST/identity/auth/login

Login

Troca e-mail e senha por access e refresh tokens. Não usa token glt_.

URL: http://localhost:8080/identity/auth/loginSucesso: 200Não envie token glt_. Use e-mail e senha, ou o JWT de sessão.

Instrução

  1. Chame POST em http://localhost:8080/identity/auth/login.
  2. Envie X-Tenant: admin. Não envie Authorization com glt_.
  3. Envie application/json com os campos da tabela de detalhes.
  4. Sucesso responde HTTP 200.
Como chamar
curl -sS -X POST "http://localhost:8080/identity/auth/login" \ -H "X-Tenant: admin" \ -H "Content-Type: application/json" \ --data-binary '{ "email": "admin@glautec.local", "password": "Admin@12345" }'

Detalhes

Parâmetros
CampoOndeTipoObrigatórioDescriçãoExemplo
emailcorpostringSim
passwordcorpostringSim
Corpo de exemplo
{ "email": "admin@glautec.local", "password": "Admin@12345" }
Resposta de exemplo
{ "accessToken": "eyJ...", "refreshToken": "...", "accessTokenExpiresAt": "2026-09-04T15:15:00Z", "refreshTokenExpiresAt": "2026-09-11T15:00:00Z" }

/identity/auth/refresh

POST/identity/auth/refresh

Renovar sessão

Emite um novo par de tokens a partir do refresh token.

URL: http://localhost:8080/identity/auth/refreshSucesso: 200Não envie token glt_. Use e-mail e senha, ou o JWT de sessão.

Instrução

  1. Chame POST em http://localhost:8080/identity/auth/refresh.
  2. Envie X-Tenant: admin. Não envie Authorization com glt_.
  3. Envie application/json com os campos da tabela de detalhes.
  4. Sucesso responde HTTP 200.
Como chamar
curl -sS -X POST "http://localhost:8080/identity/auth/refresh" \ -H "X-Tenant: admin" \ -H "Content-Type: application/json" \ --data-binary '{ "refreshToken": "base64..." }'

Detalhes

Parâmetros
CampoOndeTipoObrigatórioDescriçãoExemplo
refreshTokencorpostringSim
Corpo de exemplo
{ "refreshToken": "base64..." }
Resposta de exemplo

Sem corpo de resposta.

/identity/auth/logout

POST/identity/auth/logout

Encerrar sessão

Revoga o refresh token informado.

URL: http://localhost:8080/identity/auth/logoutSucesso: 204Não envie token glt_. Use e-mail e senha, ou o JWT de sessão.

Instrução

  1. Chame POST em http://localhost:8080/identity/auth/logout.
  2. Envie X-Tenant: admin. Não envie Authorization com glt_.
  3. Envie application/json com os campos da tabela de detalhes.
  4. Sucesso responde HTTP 204.
Como chamar
curl -sS -X POST "http://localhost:8080/identity/auth/logout" \ -H "X-Tenant: admin" \ -H "Content-Type: application/json" \ --data-binary '{ "refreshToken": "base64..." }'

Detalhes

Parâmetros
CampoOndeTipoObrigatórioDescriçãoExemplo
refreshTokencorpostringSim
Corpo de exemplo
{ "refreshToken": "base64..." }
Resposta de exemplo

Sem corpo de resposta.

/identity/auth/me

GET/identity/auth/me

Usuário autenticado

Retorna a conta do JWT atual. Funciona com sessão ou com token glt_.

URL: http://localhost:8080/identity/auth/meSucesso: 200Não envie token glt_. Use e-mail e senha, ou o JWT de sessão.

Instrução

  1. Chame GET em http://localhost:8080/identity/auth/me.
  2. Envie Authorization: Bearer glt_… e X-Tenant: admin.
  3. Sucesso responde HTTP 200.
Como chamar
curl -sS -X GET "http://localhost:8080/identity/auth/me" \ -H "Authorization: Bearer $TOKEN" \ -H "X-Tenant: admin"

Detalhes

Esta rota não tem parâmetros.

Corpo de exemplo

Sem corpo.

Resposta de exemplo
{ "id": "00000000-0000-0000-0000-000000000002", "email": "admin@glautec.local", "name": "Administrador", "isActive": true, "roles": [ "Admin" ], "permissions": [ "projects.read" ] }

Projetos

/crm/projects

GET/crm/projects

Listar projetos

Lista os projetos visíveis para o usuário do token.

URL: http://localhost:8080/crm/projectsSucesso: 200Permissão no token: projects.read

Instrução

  1. Chame GET em http://localhost:8080/crm/projects.
  2. Envie Authorization: Bearer glt_… e X-Tenant: admin.
  3. O token precisa incluir a permissão projects.read.
  4. Filtros opcionais vão na query string, conforme a tabela de detalhes.
  5. Sucesso responde HTTP 200.
Como chamar
curl -sS -X GET "http://localhost:8080/crm/projects?search=Vendas" \ -H "Authorization: Bearer $TOKEN" \ -H "X-Tenant: admin"

Detalhes

Parâmetros
CampoOndeTipoObrigatórioDescriçãoExemplo
searchquerystringNãoFiltra por nome ou descrição.Vendas
Corpo de exemplo

Sem corpo.

Resposta de exemplo
[ { "id": "00000000-0000-0000-0000-000000000001", "name": "Vendas", "description": "Pipeline comercial", "ownerUserId": "00000000-0000-0000-0000-000000000002", "access": "owner", "taskCount": 4, "openTaskCount": 3, "createdAt": "2026-09-01T12:00:00Z" } ]
POST/crm/projects

Criar projeto

Cria um projeto com o pipeline padrão de status.

URL: http://localhost:8080/crm/projectsSucesso: 200Permissão no token: projects.create

Instrução

  1. Chame POST em http://localhost:8080/crm/projects.
  2. Envie Authorization: Bearer glt_… e X-Tenant: admin.
  3. O token precisa incluir a permissão projects.create.
  4. Envie application/json com os campos da tabela de detalhes.
  5. Sucesso responde HTTP 200.
Como chamar
curl -sS -X POST "http://localhost:8080/crm/projects" \ -H "Authorization: Bearer $TOKEN" \ -H "X-Tenant: admin" \ -H "Content-Type: application/json" \ --data-binary '{ "name": "Projeto API", "description": "Criado pelo script de teste" }'

Detalhes

Parâmetros
CampoOndeTipoObrigatórioDescriçãoExemplo
namecorpostringSim
descriptioncorpostringNão
Corpo de exemplo
{ "name": "Projeto API", "description": "Criado pelo script de teste" }
Resposta de exemplo
{ "id": "00000000-0000-0000-0000-000000000001", "name": "Projeto API", "access": "owner", "taskCount": 0, "openTaskCount": 0 }

/crm/projects/{id}

GET/crm/projects/{id}

Obter projeto

Detalhe de um projeto, inclusive o nível de acesso.

URL: http://localhost:8080/crm/projects/{id}Sucesso: 200Permissão no token: projects.read

Instrução

  1. Chame GET em http://localhost:8080/crm/projects/{id}.
  2. Envie Authorization: Bearer glt_… e X-Tenant: admin.
  3. O token precisa incluir a permissão projects.read.
  4. Sucesso responde HTTP 200.
Como chamar
curl -sS -X GET "http://localhost:8080/crm/projects/00000000-0000-0000-0000-000000000001" \ -H "Authorization: Bearer $TOKEN" \ -H "X-Tenant: admin"

Detalhes

Parâmetros
CampoOndeTipoObrigatórioDescriçãoExemplo
idcaminhouuidSimIdentificador do projeto.00000000-0000-0000-0000-000000000001
Corpo de exemplo

Sem corpo.

Resposta de exemplo
{ "id": "00000000-0000-0000-0000-000000000001", "name": "Vendas", "description": "Pipeline comercial", "access": "owner", "taskCount": 4, "openTaskCount": 3, "createdAt": "2026-09-01T12:00:00Z" }
PUT/crm/projects/{id}

Atualizar projeto

Altera nome e descrição do projeto.

URL: http://localhost:8080/crm/projects/{id}Sucesso: 200Permissão no token: projects.update

Instrução

  1. Chame PUT em http://localhost:8080/crm/projects/{id}.
  2. Envie Authorization: Bearer glt_… e X-Tenant: admin.
  3. O token precisa incluir a permissão projects.update.
  4. Envie application/json com os campos da tabela de detalhes.
  5. Sucesso responde HTTP 200.
Como chamar
curl -sS -X PUT "http://localhost:8080/crm/projects/00000000-0000-0000-0000-000000000001" \ -H "Authorization: Bearer $TOKEN" \ -H "X-Tenant: admin" \ -H "Content-Type: application/json" \ --data-binary '{ "name": "Projeto API", "description": "Atualizado pelo script" }'

Detalhes

Parâmetros
CampoOndeTipoObrigatórioDescriçãoExemplo
idcaminhouuidSim
namecorpostringSim
descriptioncorpostringNão
Corpo de exemplo
{ "name": "Projeto API", "description": "Atualizado pelo script" }
Resposta de exemplo

Sem corpo de resposta.

DELETE/crm/projects/{id}

Excluir projeto

Remove o projeto se não houver tarefas.

URL: http://localhost:8080/crm/projects/{id}Sucesso: 204Permissão no token: projects.delete

Instrução

  1. Chame DELETE em http://localhost:8080/crm/projects/{id}.
  2. Envie Authorization: Bearer glt_… e X-Tenant: admin.
  3. O token precisa incluir a permissão projects.delete.
  4. Sucesso responde HTTP 204.
Como chamar
curl -sS -X DELETE "http://localhost:8080/crm/projects/00000000-0000-0000-0000-000000000001" \ -H "Authorization: Bearer $TOKEN" \ -H "X-Tenant: admin"

Detalhes

Parâmetros
CampoOndeTipoObrigatórioDescriçãoExemplo
idcaminhouuidSim
Corpo de exemplo

Sem corpo.

Resposta de exemplo

Sem corpo de resposta.

/crm/projects/{id}/shares

GET/crm/projects/{id}/shares

Listar compartilhamentos

Usuários com acesso compartilhado ao projeto.

URL: http://localhost:8080/crm/projects/{id}/sharesSucesso: 200Permissão no token: projects.read

Instrução

  1. Chame GET em http://localhost:8080/crm/projects/{id}/shares.
  2. Envie Authorization: Bearer glt_… e X-Tenant: admin.
  3. O token precisa incluir a permissão projects.read.
  4. Sucesso responde HTTP 200.
Como chamar
curl -sS -X GET "http://localhost:8080/crm/projects/00000000-0000-0000-0000-000000000001/shares" \ -H "Authorization: Bearer $TOKEN" \ -H "X-Tenant: admin"

Detalhes

Parâmetros
CampoOndeTipoObrigatórioDescriçãoExemplo
idcaminhouuidSim
Corpo de exemplo

Sem corpo.

Resposta de exemplo
[ { "userId": "00000000-0000-0000-0000-000000000002", "role": "edit" } ]

/crm/projects/{id}/shares/{userId}

PUT/crm/projects/{id}/shares/{userId}

Compartilhar projeto

Concede acesso de ver ou editar.

URL: http://localhost:8080/crm/projects/{id}/shares/{userId}Sucesso: 200Permissão no token: projects.update

Instrução

  1. Chame PUT em http://localhost:8080/crm/projects/{id}/shares/{userId}.
  2. Envie Authorization: Bearer glt_… e X-Tenant: admin.
  3. O token precisa incluir a permissão projects.update.
  4. Envie application/json com os campos da tabela de detalhes.
  5. Sucesso responde HTTP 200.
Como chamar
curl -sS -X PUT "http://localhost:8080/crm/projects/00000000-0000-0000-0000-000000000001/shares/00000000-0000-0000-0000-000000000002" \ -H "Authorization: Bearer $TOKEN" \ -H "X-Tenant: admin" \ -H "Content-Type: application/json" \ --data-binary '{ "role": "view" }'

Detalhes

Parâmetros
CampoOndeTipoObrigatórioDescriçãoExemplo
idcaminhouuidSim
userIdcaminhouuidSim
rolecorpoview | editSim
Corpo de exemplo
{ "role": "view" }
Resposta de exemplo
{ "userId": "00000000-0000-0000-0000-000000000002", "role": "view" }
DELETE/crm/projects/{id}/shares/{userId}

Remover compartilhamento

Revoga o acesso compartilhado.

URL: http://localhost:8080/crm/projects/{id}/shares/{userId}Sucesso: 204Permissão no token: projects.update

Instrução

  1. Chame DELETE em http://localhost:8080/crm/projects/{id}/shares/{userId}.
  2. Envie Authorization: Bearer glt_… e X-Tenant: admin.
  3. O token precisa incluir a permissão projects.update.
  4. Sucesso responde HTTP 204.
Como chamar
curl -sS -X DELETE "http://localhost:8080/crm/projects/00000000-0000-0000-0000-000000000001/shares/00000000-0000-0000-0000-000000000002" \ -H "Authorization: Bearer $TOKEN" \ -H "X-Tenant: admin"

Detalhes

Parâmetros
CampoOndeTipoObrigatórioDescriçãoExemplo
idcaminhouuidSim
userIdcaminhouuidSim
Corpo de exemplo

Sem corpo.

Resposta de exemplo

Sem corpo de resposta.

/crm/projects/{projectId}/extra-field-types

GET/crm/projects/{projectId}/extra-field-types

Listar campos extras

Tipos de campo extra do projeto e se entram no fluxo.

URL: http://localhost:8080/crm/projects/{projectId}/extra-field-typesSucesso: 200Permissão no token: projects.read

Instrução

  1. Chame GET em http://localhost:8080/crm/projects/{projectId}/extra-field-types.
  2. Envie Authorization: Bearer glt_… e X-Tenant: admin.
  3. O token precisa incluir a permissão projects.read.
  4. Sucesso responde HTTP 200.
Como chamar
curl -sS -X GET "http://localhost:8080/crm/projects/00000000-0000-0000-0000-000000000001/extra-field-types" \ -H "Authorization: Bearer $TOKEN" \ -H "X-Tenant: admin"

Detalhes

Parâmetros
CampoOndeTipoObrigatórioDescriçãoExemplo
projectIdcaminhouuidSim
Corpo de exemplo

Sem corpo.

Resposta de exemplo
[ { "id": "00000000-0000-0000-0000-000000000007", "projectId": "00000000-0000-0000-0000-000000000001", "name": "Origem", "dataType": "Select", "options": [ "Site", "Indicação" ], "enabled": true, "sortOrder": 0, "isRequired": false } ]
POST/crm/projects/{projectId}/extra-field-types

Criar campo extra

Cria um tipo e o inclui no fluxo do projeto.

URL: http://localhost:8080/crm/projects/{projectId}/extra-field-typesSucesso: 200Permissão no token: projects.update

Instrução

  1. Chame POST em http://localhost:8080/crm/projects/{projectId}/extra-field-types.
  2. Envie Authorization: Bearer glt_… e X-Tenant: admin.
  3. O token precisa incluir a permissão projects.update.
  4. Envie application/json com os campos da tabela de detalhes.
  5. Sucesso responde HTTP 200.
Como chamar
curl -sS -X POST "http://localhost:8080/crm/projects/00000000-0000-0000-0000-000000000001/extra-field-types" \ -H "Authorization: Bearer $TOKEN" \ -H "X-Tenant: admin" \ -H "Content-Type: application/json" \ --data-binary '{ "name": "Origem", "dataType": "Select", "options": "Site\nIndicação" }'

Detalhes

Parâmetros
CampoOndeTipoObrigatórioDescriçãoExemplo
projectIdcaminhouuidSim
namecorpostringSim
dataTypecorpoText | Number | Date | Boolean | SelectSim
optionscorpostringNãoUma opção por linha, obrigatório se dataType=Select.
Corpo de exemplo
{ "name": "Origem", "dataType": "Select", "options": "Site\nIndicação" }
Resposta de exemplo

Sem corpo de resposta.

/crm/projects/{projectId}/extra-field-types/{id}

PUT/crm/projects/{projectId}/extra-field-types/{id}

Atualizar campo extra

Altera nome, tipo e opções.

URL: http://localhost:8080/crm/projects/{projectId}/extra-field-types/{id}Sucesso: 200Permissão no token: projects.update

Instrução

  1. Chame PUT em http://localhost:8080/crm/projects/{projectId}/extra-field-types/{id}.
  2. Envie Authorization: Bearer glt_… e X-Tenant: admin.
  3. O token precisa incluir a permissão projects.update.
  4. Envie application/json com os campos da tabela de detalhes.
  5. Sucesso responde HTTP 200.
Como chamar
curl -sS -X PUT "http://localhost:8080/crm/projects/00000000-0000-0000-0000-000000000001/extra-field-types/00000000-0000-0000-0000-000000000007" \ -H "Authorization: Bearer $TOKEN" \ -H "X-Tenant: admin" \ -H "Content-Type: application/json" \ --data-binary '{ "name": "Origem", "dataType": "Select", "options": "Site\nIndicação\nEvento" }'

Detalhes

Parâmetros
CampoOndeTipoObrigatórioDescriçãoExemplo
projectIdcaminhouuidSim
idcaminhouuidSim
namecorpostringSim
dataTypecorpoText | Number | Date | Boolean | SelectSim
optionscorpostringNão
Corpo de exemplo
{ "name": "Origem", "dataType": "Select", "options": "Site\nIndicação\nEvento" }
Resposta de exemplo

Sem corpo de resposta.

DELETE/crm/projects/{projectId}/extra-field-types/{id}

Excluir campo extra

Remove o tipo se ainda não foi preenchido.

URL: http://localhost:8080/crm/projects/{projectId}/extra-field-types/{id}Sucesso: 204Permissão no token: projects.update

Instrução

  1. Chame DELETE em http://localhost:8080/crm/projects/{projectId}/extra-field-types/{id}.
  2. Envie Authorization: Bearer glt_… e X-Tenant: admin.
  3. O token precisa incluir a permissão projects.update.
  4. Sucesso responde HTTP 204.
Como chamar
curl -sS -X DELETE "http://localhost:8080/crm/projects/00000000-0000-0000-0000-000000000001/extra-field-types/00000000-0000-0000-0000-000000000007" \ -H "Authorization: Bearer $TOKEN" \ -H "X-Tenant: admin"

Detalhes

Parâmetros
CampoOndeTipoObrigatórioDescriçãoExemplo
projectIdcaminhouuidSim
idcaminhouuidSim
Corpo de exemplo

Sem corpo.

Resposta de exemplo

Sem corpo de resposta.

/crm/projects/{projectId}/extra-fields

PUT/crm/projects/{projectId}/extra-fields

Definir fluxo de campos extras

Substitui quais campos extras entram neste processo.

URL: http://localhost:8080/crm/projects/{projectId}/extra-fieldsSucesso: 200Permissão no token: projects.update

Instrução

  1. Chame PUT em http://localhost:8080/crm/projects/{projectId}/extra-fields.
  2. Envie Authorization: Bearer glt_… e X-Tenant: admin.
  3. O token precisa incluir a permissão projects.update.
  4. Envie application/json com os campos da tabela de detalhes.
  5. Sucesso responde HTTP 200.
Como chamar
curl -sS -X PUT "http://localhost:8080/crm/projects/00000000-0000-0000-0000-000000000001/extra-fields" \ -H "Authorization: Bearer $TOKEN" \ -H "X-Tenant: admin" \ -H "Content-Type: application/json" \ --data-binary '[ { "typeId": "00000000-0000-0000-0000-000000000007", "sortOrder": 0, "isRequired": true } ]'

Detalhes

Parâmetros
CampoOndeTipoObrigatórioDescriçãoExemplo
projectIdcaminhouuidSim
Corpo de exemplo
[ { "typeId": "00000000-0000-0000-0000-000000000007", "sortOrder": 0, "isRequired": true } ]
Resposta de exemplo

Sem corpo de resposta.

Status

/crm/projects/{projectId}/statuses

GET/crm/projects/{projectId}/statuses

Listar status

Colunas do pipeline do projeto.

URL: http://localhost:8080/crm/projects/{projectId}/statusesSucesso: 200Permissão no token: statuses.read

Instrução

  1. Chame GET em http://localhost:8080/crm/projects/{projectId}/statuses.
  2. Envie Authorization: Bearer glt_… e X-Tenant: admin.
  3. O token precisa incluir a permissão statuses.read.
  4. Sucesso responde HTTP 200.
Como chamar
curl -sS -X GET "http://localhost:8080/crm/projects/00000000-0000-0000-0000-000000000001/statuses" \ -H "Authorization: Bearer $TOKEN" \ -H "X-Tenant: admin"

Detalhes

Parâmetros
CampoOndeTipoObrigatórioDescriçãoExemplo
projectIdcaminhouuidSim
Corpo de exemplo

Sem corpo.

Resposta de exemplo
[ { "id": "00000000-0000-0000-0000-000000000004", "projectId": "00000000-0000-0000-0000-000000000001", "name": "Novo", "sortOrder": 0, "isInitial": true, "outcome": "Open" } ]
POST/crm/projects/{projectId}/statuses

Criar status

Adiciona uma coluna ao pipeline.

URL: http://localhost:8080/crm/projects/{projectId}/statusesSucesso: 200Permissão no token: statuses.create

Instrução

  1. Chame POST em http://localhost:8080/crm/projects/{projectId}/statuses.
  2. Envie Authorization: Bearer glt_… e X-Tenant: admin.
  3. O token precisa incluir a permissão statuses.create.
  4. Envie application/json com os campos da tabela de detalhes.
  5. Sucesso responde HTTP 200.
Como chamar
curl -sS -X POST "http://localhost:8080/crm/projects/00000000-0000-0000-0000-000000000001/statuses" \ -H "Authorization: Bearer $TOKEN" \ -H "X-Tenant: admin" \ -H "Content-Type: application/json" \ --data-binary '{ "name": "Qualificação", "sortOrder": 1, "isInitial": false, "outcome": "Open" }'

Detalhes

Parâmetros
CampoOndeTipoObrigatórioDescriçãoExemplo
projectIdcaminhouuidSim
namecorpostringSim
sortOrdercorponumberSim
isInitialcorpobooleanSim
outcomecorpoOpen | Won | LostSim
Corpo de exemplo
{ "name": "Qualificação", "sortOrder": 1, "isInitial": false, "outcome": "Open" }
Resposta de exemplo

Sem corpo de resposta.

/crm/projects/{projectId}/statuses/{id}

GET/crm/projects/{projectId}/statuses/{id}

Obter status

Detalhe de uma coluna do pipeline.

URL: http://localhost:8080/crm/projects/{projectId}/statuses/{id}Sucesso: 200Permissão no token: statuses.read

Instrução

  1. Chame GET em http://localhost:8080/crm/projects/{projectId}/statuses/{id}.
  2. Envie Authorization: Bearer glt_… e X-Tenant: admin.
  3. O token precisa incluir a permissão statuses.read.
  4. Sucesso responde HTTP 200.
Como chamar
curl -sS -X GET "http://localhost:8080/crm/projects/00000000-0000-0000-0000-000000000001/statuses/00000000-0000-0000-0000-000000000004" \ -H "Authorization: Bearer $TOKEN" \ -H "X-Tenant: admin"

Detalhes

Parâmetros
CampoOndeTipoObrigatórioDescriçãoExemplo
projectIdcaminhouuidSim
idcaminhouuidSim
Corpo de exemplo

Sem corpo.

Resposta de exemplo

Sem corpo de resposta.

PUT/crm/projects/{projectId}/statuses/{id}

Atualizar status

Altera nome, ordem, inicial e resultado.

URL: http://localhost:8080/crm/projects/{projectId}/statuses/{id}Sucesso: 200Permissão no token: statuses.update

Instrução

  1. Chame PUT em http://localhost:8080/crm/projects/{projectId}/statuses/{id}.
  2. Envie Authorization: Bearer glt_… e X-Tenant: admin.
  3. O token precisa incluir a permissão statuses.update.
  4. Envie application/json com os campos da tabela de detalhes.
  5. Sucesso responde HTTP 200.
Como chamar
curl -sS -X PUT "http://localhost:8080/crm/projects/00000000-0000-0000-0000-000000000001/statuses/00000000-0000-0000-0000-000000000004" \ -H "Authorization: Bearer $TOKEN" \ -H "X-Tenant: admin" \ -H "Content-Type: application/json" \ --data-binary '{ "name": "Qualificação", "sortOrder": 1, "isInitial": false, "outcome": "Open" }'

Detalhes

Parâmetros
CampoOndeTipoObrigatórioDescriçãoExemplo
projectIdcaminhouuidSim
idcaminhouuidSim
namecorpostringSim
sortOrdercorponumberSim
isInitialcorpobooleanSim
outcomecorpoOpen | Won | LostSim
Corpo de exemplo
{ "name": "Qualificação", "sortOrder": 1, "isInitial": false, "outcome": "Open" }
Resposta de exemplo

Sem corpo de resposta.

DELETE/crm/projects/{projectId}/statuses/{id}

Excluir status

Remove a coluna se não estiver em uso.

URL: http://localhost:8080/crm/projects/{projectId}/statuses/{id}Sucesso: 204Permissão no token: statuses.delete

Instrução

  1. Chame DELETE em http://localhost:8080/crm/projects/{projectId}/statuses/{id}.
  2. Envie Authorization: Bearer glt_… e X-Tenant: admin.
  3. O token precisa incluir a permissão statuses.delete.
  4. Sucesso responde HTTP 204.
Como chamar
curl -sS -X DELETE "http://localhost:8080/crm/projects/00000000-0000-0000-0000-000000000001/statuses/00000000-0000-0000-0000-000000000004" \ -H "Authorization: Bearer $TOKEN" \ -H "X-Tenant: admin"

Detalhes

Parâmetros
CampoOndeTipoObrigatórioDescriçãoExemplo
projectIdcaminhouuidSim
idcaminhouuidSim
Corpo de exemplo

Sem corpo.

Resposta de exemplo

Sem corpo de resposta.

Tarefas

/crm/leads

POST/crm/leads

Receber lead

Cria a tarefa/lead no status inicial do projeto.

URL: http://localhost:8080/crm/leadsSucesso: 200Permissão no token: tasks.create

Instrução

  1. Chame POST em http://localhost:8080/crm/leads.
  2. Envie Authorization: Bearer glt_… e X-Tenant: admin.
  3. O token precisa incluir a permissão tasks.create.
  4. Envie application/json com os campos da tabela de detalhes.
  5. Sucesso responde HTTP 200.
Como chamar
curl -sS -X POST "http://localhost:8080/crm/leads" \ -H "Authorization: Bearer $TOKEN" \ -H "X-Tenant: admin" \ -H "Content-Type: application/json" \ --data-binary '{ "projectId": "00000000-0000-0000-0000-000000000001", "clientId": "00000000-0000-0000-0000-000000000040", "title": "Proposta comercial", "priority": "Medium" }'

Detalhes

Parâmetros
CampoOndeTipoObrigatórioDescriçãoExemplo
projectIdcorpouuidSim
clientIdcorpouuidSimCliente do cadastro. Nome, e-mail, telefone e empresa vêm deste relacionamento.
titlecorpostringNão
sourcecorpostringNão
notescorpostringNão
prioritycorpoLow | Medium | HighNão
assignedUserIdcorpouuidNão
dueAtcorpodatetimeNão
extraFieldscorpo{ typeId, value }[]Não
Corpo de exemplo
{ "projectId": "00000000-0000-0000-0000-000000000001", "clientId": "00000000-0000-0000-0000-000000000040", "title": "Proposta comercial", "priority": "Medium" }
Resposta de exemplo

Sem corpo de resposta.

/crm/tasks

GET/crm/tasks

Listar tarefas

Lista tarefas/leads com filtros opcionais.

URL: http://localhost:8080/crm/tasksSucesso: 200Permissão no token: tasks.read

Instrução

  1. Chame GET em http://localhost:8080/crm/tasks.
  2. Envie Authorization: Bearer glt_… e X-Tenant: admin.
  3. O token precisa incluir a permissão tasks.read.
  4. Filtros opcionais vão na query string, conforme a tabela de detalhes.
  5. Sucesso responde HTTP 200.
Como chamar
curl -sS -X GET "http://localhost:8080/crm/tasks?projectId=00000000-0000-0000-0000-000000000001&kind=Lead&statusId=00000000-0000-0000-0000-000000000004&search=Maria&clientId=00000000-0000-0000-0000-000000000040" \ -H "Authorization: Bearer $TOKEN" \ -H "X-Tenant: admin"

Detalhes

Parâmetros
CampoOndeTipoObrigatórioDescriçãoExemplo
projectIdqueryuuidNão00000000-0000-0000-0000-000000000001
kindqueryLeadNãoLead
statusIdqueryuuidNão00000000-0000-0000-0000-000000000004
searchquerystringNãoCliente ou título.Maria
clientIdqueryuuidNãoFiltra pelo cliente vinculado.
Corpo de exemplo

Sem corpo.

Resposta de exemplo

Sem corpo de resposta.

/crm/tasks/{id}

GET/crm/tasks/{id}

Obter tarefa

Detalhe da tarefa, inclusive campos extras.

URL: http://localhost:8080/crm/tasks/{id}Sucesso: 200Permissão no token: tasks.read

Instrução

  1. Chame GET em http://localhost:8080/crm/tasks/{id}.
  2. Envie Authorization: Bearer glt_… e X-Tenant: admin.
  3. O token precisa incluir a permissão tasks.read.
  4. Sucesso responde HTTP 200.
Como chamar
curl -sS -X GET "http://localhost:8080/crm/tasks/00000000-0000-0000-0000-000000000003" \ -H "Authorization: Bearer $TOKEN" \ -H "X-Tenant: admin"

Detalhes

Parâmetros
CampoOndeTipoObrigatórioDescriçãoExemplo
idcaminhouuidSim
Corpo de exemplo

Sem corpo.

Resposta de exemplo
{ "id": "00000000-0000-0000-0000-000000000003", "kind": "Lead", "projectId": "00000000-0000-0000-0000-000000000001", "statusId": "00000000-0000-0000-0000-000000000004", "statusName": "Novo", "statusOutcome": "Open", "priority": "Medium", "title": "Maria Silva", "contactName": "Maria Silva", "extraFields": [] }
PUT/crm/tasks/{id}

Atualizar tarefa

Altera título, cliente, prazo, notas e campos extras.

URL: http://localhost:8080/crm/tasks/{id}Sucesso: 200Permissão no token: tasks.update

Instrução

  1. Chame PUT em http://localhost:8080/crm/tasks/{id}.
  2. Envie Authorization: Bearer glt_… e X-Tenant: admin.
  3. O token precisa incluir a permissão tasks.update.
  4. Envie application/json com os campos da tabela de detalhes.
  5. Sucesso responde HTTP 200.
Como chamar
curl -sS -X PUT "http://localhost:8080/crm/tasks/00000000-0000-0000-0000-000000000003" \ -H "Authorization: Bearer $TOKEN" \ -H "X-Tenant: admin" \ -H "Content-Type: application/json" \ --data-binary '{ "title": "Proposta comercial", "clientId": "00000000-0000-0000-0000-000000000040", "priority": "High" }'

Detalhes

Parâmetros
CampoOndeTipoObrigatórioDescriçãoExemplo
idcaminhouuidSim
titlecorpostringSim
clientIdcorpouuidSim
prioritycorpoLow | Medium | HighSim
dueAtcorpodatetimeNão
extraFieldscorpo{ typeId, value }[]Não
Corpo de exemplo
{ "title": "Proposta comercial", "clientId": "00000000-0000-0000-0000-000000000040", "priority": "High" }
Resposta de exemplo

Sem corpo de resposta.

DELETE/crm/tasks/{id}

Excluir tarefa

Remove a tarefa e os arquivos.

URL: http://localhost:8080/crm/tasks/{id}Sucesso: 204Permissão no token: tasks.delete

Instrução

  1. Chame DELETE em http://localhost:8080/crm/tasks/{id}.
  2. Envie Authorization: Bearer glt_… e X-Tenant: admin.
  3. O token precisa incluir a permissão tasks.delete.
  4. Sucesso responde HTTP 204.
Como chamar
curl -sS -X DELETE "http://localhost:8080/crm/tasks/00000000-0000-0000-0000-000000000003" \ -H "Authorization: Bearer $TOKEN" \ -H "X-Tenant: admin"

Detalhes

Parâmetros
CampoOndeTipoObrigatórioDescriçãoExemplo
idcaminhouuidSim
Corpo de exemplo

Sem corpo.

Resposta de exemplo

Sem corpo de resposta.

/crm/tasks/{id}/status

PUT/crm/tasks/{id}/status

Alterar status

Move a tarefa no pipeline.

URL: http://localhost:8080/crm/tasks/{id}/statusSucesso: 200Permissão no token: tasks.update

Instrução

  1. Chame PUT em http://localhost:8080/crm/tasks/{id}/status.
  2. Envie Authorization: Bearer glt_… e X-Tenant: admin.
  3. O token precisa incluir a permissão tasks.update.
  4. Envie application/json com os campos da tabela de detalhes.
  5. Sucesso responde HTTP 200.
Como chamar
curl -sS -X PUT "http://localhost:8080/crm/tasks/00000000-0000-0000-0000-000000000003/status" \ -H "Authorization: Bearer $TOKEN" \ -H "X-Tenant: admin" \ -H "Content-Type: application/json" \ --data-binary '{ "statusId": "00000000-0000-0000-0000-000000000004" }'

Detalhes

Parâmetros
CampoOndeTipoObrigatórioDescriçãoExemplo
idcaminhouuidSim
statusIdcorpouuidSim
Corpo de exemplo
{ "statusId": "00000000-0000-0000-0000-000000000004" }
Resposta de exemplo

Sem corpo de resposta.

/crm/tasks/{id}/assignee

PUT/crm/tasks/{id}/assignee

Atribuir responsável

Define o usuário responsável. Envie null para limpar.

URL: http://localhost:8080/crm/tasks/{id}/assigneeSucesso: 200Permissão no token: tasks.assign

Instrução

  1. Chame PUT em http://localhost:8080/crm/tasks/{id}/assignee.
  2. Envie Authorization: Bearer glt_… e X-Tenant: admin.
  3. O token precisa incluir a permissão tasks.assign.
  4. Envie application/json com os campos da tabela de detalhes.
  5. Sucesso responde HTTP 200.
Como chamar
curl -sS -X PUT "http://localhost:8080/crm/tasks/00000000-0000-0000-0000-000000000003/assignee" \ -H "Authorization: Bearer $TOKEN" \ -H "X-Tenant: admin" \ -H "Content-Type: application/json" \ --data-binary '{ "assignedUserId": "00000000-0000-0000-0000-000000000002" }'

Detalhes

Parâmetros
CampoOndeTipoObrigatórioDescriçãoExemplo
idcaminhouuidSim
assignedUserIdcorpouuid | nullSim
Corpo de exemplo
{ "assignedUserId": "00000000-0000-0000-0000-000000000002" }
Resposta de exemplo

Sem corpo de resposta.

/crm/tasks/{id}/todos

GET/crm/tasks/{id}/todos

Listar to-dos

Itens da lista da tarefa.

URL: http://localhost:8080/crm/tasks/{id}/todosSucesso: 200Permissão no token: tasks.read

Instrução

  1. Chame GET em http://localhost:8080/crm/tasks/{id}/todos.
  2. Envie Authorization: Bearer glt_… e X-Tenant: admin.
  3. O token precisa incluir a permissão tasks.read.
  4. Sucesso responde HTTP 200.
Como chamar
curl -sS -X GET "http://localhost:8080/crm/tasks/00000000-0000-0000-0000-000000000003/todos" \ -H "Authorization: Bearer $TOKEN" \ -H "X-Tenant: admin"

Detalhes

Parâmetros
CampoOndeTipoObrigatórioDescriçãoExemplo
idcaminhouuidSim
Corpo de exemplo

Sem corpo.

Resposta de exemplo
[ { "id": "00000000-0000-0000-0000-000000000005", "taskId": "00000000-0000-0000-0000-000000000003", "title": "Ligar", "isDone": false, "sortOrder": 0 } ]
POST/crm/tasks/{id}/todos

Adicionar to-do

Inclui um item na lista.

URL: http://localhost:8080/crm/tasks/{id}/todosSucesso: 200Permissão no token: tasks.update

Instrução

  1. Chame POST em http://localhost:8080/crm/tasks/{id}/todos.
  2. Envie Authorization: Bearer glt_… e X-Tenant: admin.
  3. O token precisa incluir a permissão tasks.update.
  4. Envie application/json com os campos da tabela de detalhes.
  5. Sucesso responde HTTP 200.
Como chamar
curl -sS -X POST "http://localhost:8080/crm/tasks/00000000-0000-0000-0000-000000000003/todos" \ -H "Authorization: Bearer $TOKEN" \ -H "X-Tenant: admin" \ -H "Content-Type: application/json" \ --data-binary '{ "title": "Agendar reunião" }'

Detalhes

Parâmetros
CampoOndeTipoObrigatórioDescriçãoExemplo
idcaminhouuidSim
titlecorpostringSim
Corpo de exemplo
{ "title": "Agendar reunião" }
Resposta de exemplo

Sem corpo de resposta.

/crm/tasks/{id}/todos/{todoId}

PUT/crm/tasks/{id}/todos/{todoId}

Atualizar to-do

Altera título e conclusão.

URL: http://localhost:8080/crm/tasks/{id}/todos/{todoId}Sucesso: 200Permissão no token: tasks.update

Instrução

  1. Chame PUT em http://localhost:8080/crm/tasks/{id}/todos/{todoId}.
  2. Envie Authorization: Bearer glt_… e X-Tenant: admin.
  3. O token precisa incluir a permissão tasks.update.
  4. Envie application/json com os campos da tabela de detalhes.
  5. Sucesso responde HTTP 200.
Como chamar
curl -sS -X PUT "http://localhost:8080/crm/tasks/00000000-0000-0000-0000-000000000005/todos/00000000-0000-0000-0000-000000000005" \ -H "Authorization: Bearer $TOKEN" \ -H "X-Tenant: admin" \ -H "Content-Type: application/json" \ --data-binary '{ "title": "Agendar reunião", "isDone": true }'

Detalhes

Parâmetros
CampoOndeTipoObrigatórioDescriçãoExemplo
idcaminhouuidSim
todoIdcaminhouuidSim
titlecorpostringSim
isDonecorpobooleanSim
Corpo de exemplo
{ "title": "Agendar reunião", "isDone": true }
Resposta de exemplo

Sem corpo de resposta.

DELETE/crm/tasks/{id}/todos/{todoId}

Excluir to-do

Remove o item da lista.

URL: http://localhost:8080/crm/tasks/{id}/todos/{todoId}Sucesso: 204Permissão no token: tasks.update

Instrução

  1. Chame DELETE em http://localhost:8080/crm/tasks/{id}/todos/{todoId}.
  2. Envie Authorization: Bearer glt_… e X-Tenant: admin.
  3. O token precisa incluir a permissão tasks.update.
  4. Sucesso responde HTTP 204.
Como chamar
curl -sS -X DELETE "http://localhost:8080/crm/tasks/00000000-0000-0000-0000-000000000005/todos/00000000-0000-0000-0000-000000000005" \ -H "Authorization: Bearer $TOKEN" \ -H "X-Tenant: admin"

Detalhes

Parâmetros
CampoOndeTipoObrigatórioDescriçãoExemplo
idcaminhouuidSim
todoIdcaminhouuidSim
Corpo de exemplo

Sem corpo.

Resposta de exemplo

Sem corpo de resposta.

/crm/tasks/{id}/attachments

GET/crm/tasks/{id}/attachments

Listar arquivos

Arquivos enviados na tarefa.

URL: http://localhost:8080/crm/tasks/{id}/attachmentsSucesso: 200Permissão no token: tasks.read

Instrução

  1. Chame GET em http://localhost:8080/crm/tasks/{id}/attachments.
  2. Envie Authorization: Bearer glt_… e X-Tenant: admin.
  3. O token precisa incluir a permissão tasks.read.
  4. Sucesso responde HTTP 200.
Como chamar
curl -sS -X GET "http://localhost:8080/crm/tasks/00000000-0000-0000-0000-000000000003/attachments" \ -H "Authorization: Bearer $TOKEN" \ -H "X-Tenant: admin"

Detalhes

Parâmetros
CampoOndeTipoObrigatórioDescriçãoExemplo
idcaminhouuidSim
Corpo de exemplo

Sem corpo.

Resposta de exemplo
[ { "id": "00000000-0000-0000-0000-000000000006", "taskId": "00000000-0000-0000-0000-000000000003", "fileName": "proposta.pdf", "contentType": "application/pdf", "sizeBytes": 12000, "createdAt": "2026-09-01T12:00:00Z" } ]
POST/crm/tasks/{id}/attachments

Enviar arquivo

Upload multipart, máximo 10 MB. Grava na biblioteca e vincula à tarefa.

URL: http://localhost:8080/crm/tasks/{id}/attachmentsSucesso: 200Permissão no token: tasks.update

Instrução

  1. Chame POST em http://localhost:8080/crm/tasks/{id}/attachments.
  2. Envie Authorization: Bearer glt_… e X-Tenant: admin.
  3. O token precisa incluir a permissão tasks.update.
  4. Envie multipart/form-data com o campo file. Máximo 10 MB.
  5. Sucesso responde HTTP 200.
Como chamar
curl -sS -X POST "http://localhost:8080/crm/tasks/00000000-0000-0000-0000-000000000003/attachments" \ -H "Authorization: Bearer $TOKEN" \ -H "X-Tenant: admin" \ -F "file=@./exemplo.pdf"

Detalhes

Parâmetros
CampoOndeTipoObrigatórioDescriçãoExemplo
idcaminhouuidSim
filearquivofileSimCampo multipart file.
Corpo de exemplo

Envie multipart/form-data com o campo file. Máximo 10 MB.

Resposta de exemplo

Sem corpo de resposta.

/crm/tasks/{id}/attachments/link

POST/crm/tasks/{id}/attachments/link

Vincular arquivo

Relaciona um arquivo já existente na biblioteca à tarefa.

URL: http://localhost:8080/crm/tasks/{id}/attachments/linkSucesso: 200Permissão no token: tasks.update

Instrução

  1. Chame POST em http://localhost:8080/crm/tasks/{id}/attachments/link.
  2. Envie Authorization: Bearer glt_… e X-Tenant: admin.
  3. O token precisa incluir a permissão tasks.update.
  4. Envie application/json com os campos da tabela de detalhes.
  5. Sucesso responde HTTP 200.
Como chamar
curl -sS -X POST "http://localhost:8080/crm/tasks/00000000-0000-0000-0000-000000000006/attachments/link" \ -H "Authorization: Bearer $TOKEN" \ -H "X-Tenant: admin" \ -H "Content-Type: application/json" \ --data-binary '{ "fileId": "00000000-0000-0000-0000-000000000031" }'

Detalhes

Parâmetros
CampoOndeTipoObrigatórioDescriçãoExemplo
idcaminhouuidSim
fileIdcorpouuidSim
Corpo de exemplo
{ "fileId": "00000000-0000-0000-0000-000000000031" }
Resposta de exemplo

Sem corpo de resposta.

/crm/tasks/{id}/attachments/{attachmentId}/file

GET/crm/tasks/{id}/attachments/{attachmentId}/file

Baixar arquivo

Conteúdo binário do arquivo.

URL: http://localhost:8080/crm/tasks/{id}/attachments/{attachmentId}/fileSucesso: 200Permissão no token: tasks.read

Instrução

  1. Chame GET em http://localhost:8080/crm/tasks/{id}/attachments/{attachmentId}/file.
  2. Envie Authorization: Bearer glt_… e X-Tenant: admin.
  3. O token precisa incluir a permissão tasks.read.
  4. Sucesso responde HTTP 200.
Como chamar
curl -sS -X GET "http://localhost:8080/crm/tasks/00000000-0000-0000-0000-000000000006/attachments/00000000-0000-0000-0000-000000000006/file" \ -H "Authorization: Bearer $TOKEN" \ -H "X-Tenant: admin"

Detalhes

Parâmetros
CampoOndeTipoObrigatórioDescriçãoExemplo
idcaminhouuidSim
attachmentIdcaminhouuidSim
Corpo de exemplo

Sem corpo.

Resposta de exemplo

Sem corpo de resposta.

/crm/tasks/{id}/attachments/{attachmentId}

DELETE/crm/tasks/{id}/attachments/{attachmentId}

Remover arquivo

Desvincula o arquivo da tarefa. Arquivos da biblioteca permanecem; uploads só da tarefa são apagados.

URL: http://localhost:8080/crm/tasks/{id}/attachments/{attachmentId}Sucesso: 204Permissão no token: tasks.update

Instrução

  1. Chame DELETE em http://localhost:8080/crm/tasks/{id}/attachments/{attachmentId}.
  2. Envie Authorization: Bearer glt_… e X-Tenant: admin.
  3. O token precisa incluir a permissão tasks.update.
  4. Sucesso responde HTTP 204.
Como chamar
curl -sS -X DELETE "http://localhost:8080/crm/tasks/00000000-0000-0000-0000-000000000006/attachments/00000000-0000-0000-0000-000000000006" \ -H "Authorization: Bearer $TOKEN" \ -H "X-Tenant: admin"

Detalhes

Parâmetros
CampoOndeTipoObrigatórioDescriçãoExemplo
idcaminhouuidSim
attachmentIdcaminhouuidSim
Corpo de exemplo

Sem corpo.

Resposta de exemplo

Sem corpo de resposta.

Arquivos

/files/folders

GET/files/folders

Listar pastas

Pastas de um nível. Sem parentId lista a raiz.

URL: http://localhost:8080/files/foldersSucesso: 200Permissão no token: files.read

Instrução

  1. Chame GET em http://localhost:8080/files/folders.
  2. Envie Authorization: Bearer glt_… e X-Tenant: admin.
  3. O token precisa incluir a permissão files.read.
  4. Filtros opcionais vão na query string, conforme a tabela de detalhes.
  5. Sucesso responde HTTP 200.
Como chamar
curl -sS -X GET "http://localhost:8080/files/folders?parentId=00000000-0000-0000-0000-000000000001" \ -H "Authorization: Bearer $TOKEN" \ -H "X-Tenant: admin"

Detalhes

Parâmetros
CampoOndeTipoObrigatórioDescriçãoExemplo
parentIdqueryuuidNão
Corpo de exemplo

Sem corpo.

Resposta de exemplo
[ { "id": "00000000-0000-0000-0000-000000000030", "parentId": null, "name": "Contratos", "description": null, "createdAt": "2026-09-09T12:00:00Z" } ]
POST/files/folders

Criar pasta

Cria uma pasta. O nome é único no mesmo nível.

URL: http://localhost:8080/files/foldersSucesso: 200Permissão no token: files.create

Instrução

  1. Chame POST em http://localhost:8080/files/folders.
  2. Envie Authorization: Bearer glt_… e X-Tenant: admin.
  3. O token precisa incluir a permissão files.create.
  4. Envie application/json com os campos da tabela de detalhes.
  5. Sucesso responde HTTP 200.
Como chamar
curl -sS -X POST "http://localhost:8080/files/folders" \ -H "Authorization: Bearer $TOKEN" \ -H "X-Tenant: admin" \ -H "Content-Type: application/json" \ --data-binary '{ "parentId": null, "name": "Contratos", "description": "Documentos comerciais" }'

Detalhes

Parâmetros
CampoOndeTipoObrigatórioDescriçãoExemplo
parentIdcorpouuid | nullNão
namecorpostringSim
descriptioncorpostringNão
Corpo de exemplo
{ "parentId": null, "name": "Contratos", "description": "Documentos comerciais" }
Resposta de exemplo

Sem corpo de resposta.

/files/folders/{id}

PUT/files/folders/{id}

Atualizar pasta

Renomeia ou move a pasta.

URL: http://localhost:8080/files/folders/{id}Sucesso: 200Permissão no token: files.update

Instrução

  1. Chame PUT em http://localhost:8080/files/folders/{id}.
  2. Envie Authorization: Bearer glt_… e X-Tenant: admin.
  3. O token precisa incluir a permissão files.update.
  4. Envie application/json com os campos da tabela de detalhes.
  5. Sucesso responde HTTP 200.
Como chamar
curl -sS -X PUT "http://localhost:8080/files/folders/00000000-0000-0000-0000-000000000030" \ -H "Authorization: Bearer $TOKEN" \ -H "X-Tenant: admin" \ -H "Content-Type: application/json" \ --data-binary '{ "parentId": null, "name": "Contratos", "description": "Atualizado" }'

Detalhes

Parâmetros
CampoOndeTipoObrigatórioDescriçãoExemplo
idcaminhouuidSim
parentIdcorpouuid | nullNão
namecorpostringSim
descriptioncorpostringNão
Corpo de exemplo
{ "parentId": null, "name": "Contratos", "description": "Atualizado" }
Resposta de exemplo

Sem corpo de resposta.

DELETE/files/folders/{id}

Excluir pasta

Remove a pasta se estiver vazia.

URL: http://localhost:8080/files/folders/{id}Sucesso: 204Permissão no token: files.delete

Instrução

  1. Chame DELETE em http://localhost:8080/files/folders/{id}.
  2. Envie Authorization: Bearer glt_… e X-Tenant: admin.
  3. O token precisa incluir a permissão files.delete.
  4. Sucesso responde HTTP 204.
Como chamar
curl -sS -X DELETE "http://localhost:8080/files/folders/00000000-0000-0000-0000-000000000030" \ -H "Authorization: Bearer $TOKEN" \ -H "X-Tenant: admin"

Detalhes

Parâmetros
CampoOndeTipoObrigatórioDescriçãoExemplo
idcaminhouuidSim
Corpo de exemplo

Sem corpo.

Resposta de exemplo

Sem corpo de resposta.

/files/files

GET/files/files

Listar arquivos

Metadados no banco, paginado. unfiled=true lista arquivos sem pasta.

URL: http://localhost:8080/files/filesSucesso: 200Permissão no token: files.read

Instrução

  1. Chame GET em http://localhost:8080/files/files.
  2. Envie Authorization: Bearer glt_… e X-Tenant: admin.
  3. O token precisa incluir a permissão files.read.
  4. Filtros opcionais vão na query string, conforme a tabela de detalhes.
  5. Sucesso responde HTTP 200.
Como chamar
curl -sS -X GET "http://localhost:8080/files/files?folderId=00000000-0000-0000-0000-000000000030&unfiled=exemplo&ownerType=exemplo&ownerId=00000000-0000-0000-0000-000000000001&search=exemplo&page=exemplo&pageSize=exemplo" \ -H "Authorization: Bearer $TOKEN" \ -H "X-Tenant: admin"

Detalhes

Parâmetros
CampoOndeTipoObrigatórioDescriçãoExemplo
folderIdqueryuuidNão
unfiledquerybooleanNão
ownerTypequerystringNãoEx.: task
ownerIdqueryuuidNão
searchquerystringNão
pagequerynumberNãoPágina 1-based. Padrão 1.
pageSizequerynumberNãoPadrão 20, máximo 100.
Corpo de exemplo

Sem corpo.

Resposta de exemplo
{ "items": [ { "id": "00000000-0000-0000-0000-000000000031", "name": "proposta.pdf", "originalName": "proposta.pdf", "extension": "pdf", "contentType": "application/pdf", "sizeBytes": 12000, "provider": "b2", "checksumSha256": "abc", "ownerType": "task", "createdAt": "2026-09-09T12:00:00Z" } ], "page": 1, "pageSize": 20, "total": 1 }
POST/files/files

Enviar arquivo

Upload multipart, máximo 25 MB. Bytes vão para o storage; a ficha fica no banco.

URL: http://localhost:8080/files/filesSucesso: 200Permissão no token: files.create

Instrução

  1. Chame POST em http://localhost:8080/files/files.
  2. Envie Authorization: Bearer glt_… e X-Tenant: admin.
  3. O token precisa incluir a permissão files.create.
  4. Envie multipart/form-data com o campo file. Máximo 10 MB.
  5. Sucesso responde HTTP 200.
Como chamar
curl -sS -X POST "http://localhost:8080/files/files" \ -H "Authorization: Bearer $TOKEN" \ -H "X-Tenant: admin" \ -F "file=@./exemplo.pdf"

Detalhes

Parâmetros
CampoOndeTipoObrigatórioDescriçãoExemplo
filearquivofileSim
folderIdarquivouuidNão
descriptionarquivostringNão
ownerTypearquivostringNão
ownerIdarquivouuidNão
Corpo de exemplo

Envie multipart/form-data com o campo file. Máximo 10 MB.

Resposta de exemplo

Sem corpo de resposta.

/files/files/{id}

GET/files/files/{id}

Obter arquivo

Metadados do arquivo, inclusive checksum e provider.

URL: http://localhost:8080/files/files/{id}Sucesso: 200Permissão no token: files.read

Instrução

  1. Chame GET em http://localhost:8080/files/files/{id}.
  2. Envie Authorization: Bearer glt_… e X-Tenant: admin.
  3. O token precisa incluir a permissão files.read.
  4. Sucesso responde HTTP 200.
Como chamar
curl -sS -X GET "http://localhost:8080/files/files/00000000-0000-0000-0000-000000000031" \ -H "Authorization: Bearer $TOKEN" \ -H "X-Tenant: admin"

Detalhes

Parâmetros
CampoOndeTipoObrigatórioDescriçãoExemplo
idcaminhouuidSim
Corpo de exemplo

Sem corpo.

Resposta de exemplo

Sem corpo de resposta.

PUT/files/files/{id}

Atualizar arquivo

Altera nome, descrição, pasta ou extraJson.

URL: http://localhost:8080/files/files/{id}Sucesso: 200Permissão no token: files.update

Instrução

  1. Chame PUT em http://localhost:8080/files/files/{id}.
  2. Envie Authorization: Bearer glt_… e X-Tenant: admin.
  3. O token precisa incluir a permissão files.update.
  4. Envie application/json com os campos da tabela de detalhes.
  5. Sucesso responde HTTP 200.
Como chamar
curl -sS -X PUT "http://localhost:8080/files/files/00000000-0000-0000-0000-000000000031" \ -H "Authorization: Bearer $TOKEN" \ -H "X-Tenant: admin" \ -H "Content-Type: application/json" \ --data-binary '{ "folderId": null, "name": "proposta.pdf", "description": "Enviada ao cliente" }'

Detalhes

Parâmetros
CampoOndeTipoObrigatórioDescriçãoExemplo
idcaminhouuidSim
folderIdcorpouuid | nullNão
namecorpostringSim
descriptioncorpostringNão
extraJsoncorpostringNão
Corpo de exemplo
{ "folderId": null, "name": "proposta.pdf", "description": "Enviada ao cliente" }
Resposta de exemplo

Sem corpo de resposta.

DELETE/files/files/{id}

Excluir arquivo

Remove o registro e o objeto no storage.

URL: http://localhost:8080/files/files/{id}Sucesso: 204Permissão no token: files.delete

Instrução

  1. Chame DELETE em http://localhost:8080/files/files/{id}.
  2. Envie Authorization: Bearer glt_… e X-Tenant: admin.
  3. O token precisa incluir a permissão files.delete.
  4. Sucesso responde HTTP 204.
Como chamar
curl -sS -X DELETE "http://localhost:8080/files/files/00000000-0000-0000-0000-000000000031" \ -H "Authorization: Bearer $TOKEN" \ -H "X-Tenant: admin"

Detalhes

Parâmetros
CampoOndeTipoObrigatórioDescriçãoExemplo
idcaminhouuidSim
Corpo de exemplo

Sem corpo.

Resposta de exemplo

Sem corpo de resposta.

/files/files/{id}/content

GET/files/files/{id}/content

Baixar arquivo

Conteúdo binário.

URL: http://localhost:8080/files/files/{id}/contentSucesso: 200Permissão no token: files.read

Instrução

  1. Chame GET em http://localhost:8080/files/files/{id}/content.
  2. Envie Authorization: Bearer glt_… e X-Tenant: admin.
  3. O token precisa incluir a permissão files.read.
  4. Sucesso responde HTTP 200.
Como chamar
curl -sS -X GET "http://localhost:8080/files/files/00000000-0000-0000-0000-000000000031/content" \ -H "Authorization: Bearer $TOKEN" \ -H "X-Tenant: admin"

Detalhes

Parâmetros
CampoOndeTipoObrigatórioDescriçãoExemplo
idcaminhouuidSim
Corpo de exemplo

Sem corpo.

Resposta de exemplo

Sem corpo de resposta.

Clientes

/clients/clients

GET/clients/clients

Listar clientes

Cadastro de clientes do tenant.

URL: http://localhost:8080/clients/clientsSucesso: 200Permissão no token: clients.read

Instrução

  1. Chame GET em http://localhost:8080/clients/clients.
  2. Envie Authorization: Bearer glt_… e X-Tenant: admin.
  3. O token precisa incluir a permissão clients.read.
  4. Filtros opcionais vão na query string, conforme a tabela de detalhes.
  5. Sucesso responde HTTP 200.
Como chamar
curl -sS -X GET "http://localhost:8080/clients/clients?search=Maria&isActive=exemplo" \ -H "Authorization: Bearer $TOKEN" \ -H "X-Tenant: admin"

Detalhes

Parâmetros
CampoOndeTipoObrigatórioDescriçãoExemplo
searchquerystringNãoNome, e-mail, documento ou cidade.Maria
isActivequerybooleanNão
Corpo de exemplo

Sem corpo.

Resposta de exemplo
[ { "id": "00000000-0000-0000-0000-000000000040", "name": "Empresa Exemplo", "tradeName": "Exemplo", "email": "contato@empresa.com", "phone": "11999999999", "document": "12345678000199", "isActive": true, "createdAt": "2026-09-09T12:00:00Z" } ]
POST/clients/clients

Criar cliente

Cria um cliente. E-mail e documento, se informados, são únicos.

URL: http://localhost:8080/clients/clientsSucesso: 200Permissão no token: clients.create

Instrução

  1. Chame POST em http://localhost:8080/clients/clients.
  2. Envie Authorization: Bearer glt_… e X-Tenant: admin.
  3. O token precisa incluir a permissão clients.create.
  4. Envie application/json com os campos da tabela de detalhes.
  5. Sucesso responde HTTP 200.
Como chamar
curl -sS -X POST "http://localhost:8080/clients/clients" \ -H "Authorization: Bearer $TOKEN" \ -H "X-Tenant: admin" \ -H "Content-Type: application/json" \ --data-binary '{ "name": "Empresa Exemplo", "tradeName": "Exemplo", "email": "contato@empresa.com", "phone": "11999999999", "document": "12345678000199", "city": "São Paulo", "state": "SP", "isActive": true }'

Detalhes

Parâmetros
CampoOndeTipoObrigatórioDescriçãoExemplo
namecorpostringSim
tradeNamecorpostringNão
emailcorpostringNão
phonecorpostringNão
documentcorpostringNão
websitecorpostringNão
streetcorpostringNão
citycorpostringNão
statecorpostringNão
zipcorpostringNão
sourcecorpostringNão
notescorpostringNão
isActivecorpobooleanNão
Corpo de exemplo
{ "name": "Empresa Exemplo", "tradeName": "Exemplo", "email": "contato@empresa.com", "phone": "11999999999", "document": "12345678000199", "city": "São Paulo", "state": "SP", "isActive": true }
Resposta de exemplo

Sem corpo de resposta.

/clients/clients/{id}

GET/clients/clients/{id}

Obter cliente

Detalhe do cliente.

URL: http://localhost:8080/clients/clients/{id}Sucesso: 200Permissão no token: clients.read

Instrução

  1. Chame GET em http://localhost:8080/clients/clients/{id}.
  2. Envie Authorization: Bearer glt_… e X-Tenant: admin.
  3. O token precisa incluir a permissão clients.read.
  4. Sucesso responde HTTP 200.
Como chamar
curl -sS -X GET "http://localhost:8080/clients/clients/00000000-0000-0000-0000-000000000040" \ -H "Authorization: Bearer $TOKEN" \ -H "X-Tenant: admin"

Detalhes

Parâmetros
CampoOndeTipoObrigatórioDescriçãoExemplo
idcaminhouuidSim00000000-0000-0000-0000-000000000040
Corpo de exemplo

Sem corpo.

Resposta de exemplo

Sem corpo de resposta.

PUT/clients/clients/{id}

Atualizar cliente

Altera os dados do cliente.

URL: http://localhost:8080/clients/clients/{id}Sucesso: 200Permissão no token: clients.update

Instrução

  1. Chame PUT em http://localhost:8080/clients/clients/{id}.
  2. Envie Authorization: Bearer glt_… e X-Tenant: admin.
  3. O token precisa incluir a permissão clients.update.
  4. Envie application/json com os campos da tabela de detalhes.
  5. Sucesso responde HTTP 200.
Como chamar
curl -sS -X PUT "http://localhost:8080/clients/clients/00000000-0000-0000-0000-000000000040" \ -H "Authorization: Bearer $TOKEN" \ -H "X-Tenant: admin" \ -H "Content-Type: application/json" \ --data-binary '{ "name": "Empresa Exemplo", "email": "contato@empresa.com", "isActive": true }'

Detalhes

Parâmetros
CampoOndeTipoObrigatórioDescriçãoExemplo
idcaminhouuidSim
namecorpostringSim
emailcorpostringNão
isActivecorpobooleanNão
Corpo de exemplo
{ "name": "Empresa Exemplo", "email": "contato@empresa.com", "isActive": true }
Resposta de exemplo

Sem corpo de resposta.

DELETE/clients/clients/{id}

Excluir cliente

Remove o cliente. Tarefas vinculadas mantêm o id.

URL: http://localhost:8080/clients/clients/{id}Sucesso: 204Permissão no token: clients.delete

Instrução

  1. Chame DELETE em http://localhost:8080/clients/clients/{id}.
  2. Envie Authorization: Bearer glt_… e X-Tenant: admin.
  3. O token precisa incluir a permissão clients.delete.
  4. Sucesso responde HTTP 204.
Como chamar
curl -sS -X DELETE "http://localhost:8080/clients/clients/00000000-0000-0000-0000-000000000040" \ -H "Authorization: Bearer $TOKEN" \ -H "X-Tenant: admin"

Detalhes

Parâmetros
CampoOndeTipoObrigatórioDescriçãoExemplo
idcaminhouuidSim
Corpo de exemplo

Sem corpo.

Resposta de exemplo

Sem corpo de resposta.

Automações

/crm/automations

GET/crm/automations

Listar automações

Fluxos de conversa WhatsApp do tenant.

URL: http://localhost:8080/crm/automationsSucesso: 200Permissão no token: automations.read

Instrução

  1. Chame GET em http://localhost:8080/crm/automations.
  2. Envie Authorization: Bearer glt_… e X-Tenant: admin.
  3. O token precisa incluir a permissão automations.read.
  4. Sucesso responde HTTP 200.
Como chamar
curl -sS -X GET "http://localhost:8080/crm/automations" \ -H "Authorization: Bearer $TOKEN" \ -H "X-Tenant: admin"

Detalhes

Esta rota não tem parâmetros.

Corpo de exemplo

Sem corpo.

Resposta de exemplo
[ { "id": "00000000-0000-0000-0000-000000000050", "name": "Boas-vindas", "description": "Primeiro contato", "isEnabled": true, "flowJson": "{\"nodes\":[],\"edges\":[]}", "createdAt": "2026-09-25T12:00:00Z" } ]
POST/crm/automations

Criar automação

Cria um fluxo. Se flowJson vier vazio, nasce só com o gatilho inicial.

URL: http://localhost:8080/crm/automationsSucesso: 200Permissão no token: automations.create

Instrução

  1. Chame POST em http://localhost:8080/crm/automations.
  2. Envie Authorization: Bearer glt_… e X-Tenant: admin.
  3. O token precisa incluir a permissão automations.create.
  4. Envie application/json com os campos da tabela de detalhes.
  5. Sucesso responde HTTP 200.
Como chamar
curl -sS -X POST "http://localhost:8080/crm/automations" \ -H "Authorization: Bearer $TOKEN" \ -H "X-Tenant: admin" \ -H "Content-Type: application/json" \ --data-binary '{ "name": "Boas-vindas", "description": "Primeiro contato", "isEnabled": true, "flowJson": "{\"nodes\":[{\"id\":\"trigger-1\",\"type\":\"trigger\",\"position\":{\"x\":80,\"y\":120},\"data\":{\"kind\":\"first_message\"}}],\"edges\":[]}" }'

Detalhes

Parâmetros
CampoOndeTipoObrigatórioDescriçãoExemplo
namecorpostringSim
descriptioncorpostringNão
isEnabledcorpobooleanNão
flowJsoncorpostringNãoJSON do React Flow: nodes (trigger, message, menu, wait, handoff, end) e edges.
Corpo de exemplo
{ "name": "Boas-vindas", "description": "Primeiro contato", "isEnabled": true, "flowJson": "{\"nodes\":[{\"id\":\"trigger-1\",\"type\":\"trigger\",\"position\":{\"x\":80,\"y\":120},\"data\":{\"kind\":\"first_message\"}}],\"edges\":[]}" }
Resposta de exemplo

Sem corpo de resposta.

/crm/automations/{id}

GET/crm/automations/{id}

Obter automação

Detalhe do fluxo, inclusive o JSON do canvas.

URL: http://localhost:8080/crm/automations/{id}Sucesso: 200Permissão no token: automations.read

Instrução

  1. Chame GET em http://localhost:8080/crm/automations/{id}.
  2. Envie Authorization: Bearer glt_… e X-Tenant: admin.
  3. O token precisa incluir a permissão automations.read.
  4. Sucesso responde HTTP 200.
Como chamar
curl -sS -X GET "http://localhost:8080/crm/automations/{id}" \ -H "Authorization: Bearer $TOKEN" \ -H "X-Tenant: admin"

Detalhes

Parâmetros
CampoOndeTipoObrigatórioDescriçãoExemplo
idcaminhouuidSim
Corpo de exemplo

Sem corpo.

Resposta de exemplo

Sem corpo de resposta.

PUT/crm/automations/{id}

Atualizar automação

Substitui nome, status e o JSON do fluxo. Exige ao menos um gatilho.

URL: http://localhost:8080/crm/automations/{id}Sucesso: 200Permissão no token: automations.update

Instrução

  1. Chame PUT em http://localhost:8080/crm/automations/{id}.
  2. Envie Authorization: Bearer glt_… e X-Tenant: admin.
  3. O token precisa incluir a permissão automations.update.
  4. Envie application/json com os campos da tabela de detalhes.
  5. Sucesso responde HTTP 200.
Como chamar
curl -sS -X PUT "http://localhost:8080/crm/automations/{id}" \ -H "Authorization: Bearer $TOKEN" \ -H "X-Tenant: admin" \ -H "Content-Type: application/json" \ --data-binary '{ "name": "Menu comercial", "isEnabled": true, "flowJson": "{\"nodes\":[{\"id\":\"trigger-1\",\"type\":\"trigger\",\"position\":{\"x\":0,\"y\":0},\"data\":{\"kind\":\"first_message\"}}],\"edges\":[]}" }'

Detalhes

Parâmetros
CampoOndeTipoObrigatórioDescriçãoExemplo
idcaminhouuidSim
namecorpostringSim
descriptioncorpostringNão
isEnabledcorpobooleanNão
flowJsoncorpostringSim
Corpo de exemplo
{ "name": "Menu comercial", "isEnabled": true, "flowJson": "{\"nodes\":[{\"id\":\"trigger-1\",\"type\":\"trigger\",\"position\":{\"x\":0,\"y\":0},\"data\":{\"kind\":\"first_message\"}}],\"edges\":[]}" }
Resposta de exemplo

Sem corpo de resposta.

DELETE/crm/automations/{id}

Excluir automação

Remove o fluxo do tenant.

URL: http://localhost:8080/crm/automations/{id}Sucesso: 204Permissão no token: automations.delete

Instrução

  1. Chame DELETE em http://localhost:8080/crm/automations/{id}.
  2. Envie Authorization: Bearer glt_… e X-Tenant: admin.
  3. O token precisa incluir a permissão automations.delete.
  4. Sucesso responde HTTP 204.
Como chamar
curl -sS -X DELETE "http://localhost:8080/crm/automations/{id}" \ -H "Authorization: Bearer $TOKEN" \ -H "X-Tenant: admin"

Detalhes

Parâmetros
CampoOndeTipoObrigatórioDescriçãoExemplo
idcaminhouuidSim
Corpo de exemplo

Sem corpo.

Resposta de exemplo

Sem corpo de resposta.

Usuários

/identity/users

GET/identity/users

Listar usuários

Contas do tenant.

URL: http://localhost:8080/identity/usersSucesso: 200Permissão no token: users.read

Instrução

  1. Chame GET em http://localhost:8080/identity/users.
  2. Envie Authorization: Bearer glt_… e X-Tenant: admin.
  3. O token precisa incluir a permissão users.read.
  4. Filtros opcionais vão na query string, conforme a tabela de detalhes.
  5. Sucesso responde HTTP 200.
Como chamar
curl -sS -X GET "http://localhost:8080/identity/users?search=admin" \ -H "Authorization: Bearer $TOKEN" \ -H "X-Tenant: admin"

Detalhes

Parâmetros
CampoOndeTipoObrigatórioDescriçãoExemplo
searchquerystringNãoNome ou e-mail.admin
Corpo de exemplo

Sem corpo.

Resposta de exemplo
[ { "id": "00000000-0000-0000-0000-000000000002", "email": "admin@glautec.local", "name": "Administrador", "isActive": true, "roles": [ "Admin" ], "permissions": [ "projects.read" ], "createdAt": "2026-09-01T12:00:00Z" } ]
POST/identity/users

Criar usuário

Cria uma conta e atribui papéis.

URL: http://localhost:8080/identity/usersSucesso: 200Permissão no token: users.create

Instrução

  1. Chame POST em http://localhost:8080/identity/users.
  2. Envie Authorization: Bearer glt_… e X-Tenant: admin.
  3. O token precisa incluir a permissão users.create.
  4. Envie application/json com os campos da tabela de detalhes.
  5. Sucesso responde HTTP 200.
Como chamar
curl -sS -X POST "http://localhost:8080/identity/users" \ -H "Authorization: Bearer $TOKEN" \ -H "X-Tenant: admin" \ -H "Content-Type: application/json" \ --data-binary '{ "email": "api.teste@glautec.local", "name": "Usuário API", "password": "Senha@12345", "roleIds": [ "00000000-0000-0000-0000-000000000010" ] }'

Detalhes

Parâmetros
CampoOndeTipoObrigatórioDescriçãoExemplo
emailcorpostringSim
namecorpostringSim
passwordcorpostringSimMínimo 8 caracteres.
roleIdscorpouuid[]Sim
Corpo de exemplo
{ "email": "api.teste@glautec.local", "name": "Usuário API", "password": "Senha@12345", "roleIds": [ "00000000-0000-0000-0000-000000000010" ] }
Resposta de exemplo

Sem corpo de resposta.

/identity/users/{id}

GET/identity/users/{id}

Obter usuário

Detalhe da conta.

URL: http://localhost:8080/identity/users/{id}Sucesso: 200Permissão no token: users.read

Instrução

  1. Chame GET em http://localhost:8080/identity/users/{id}.
  2. Envie Authorization: Bearer glt_… e X-Tenant: admin.
  3. O token precisa incluir a permissão users.read.
  4. Sucesso responde HTTP 200.
Como chamar
curl -sS -X GET "http://localhost:8080/identity/users/00000000-0000-0000-0000-000000000002" \ -H "Authorization: Bearer $TOKEN" \ -H "X-Tenant: admin"

Detalhes

Parâmetros
CampoOndeTipoObrigatórioDescriçãoExemplo
idcaminhouuidSim
Corpo de exemplo

Sem corpo.

Resposta de exemplo

Sem corpo de resposta.

PUT/identity/users/{id}

Atualizar usuário

Altera nome, e-mail e status.

URL: http://localhost:8080/identity/users/{id}Sucesso: 200Permissão no token: users.update

Instrução

  1. Chame PUT em http://localhost:8080/identity/users/{id}.
  2. Envie Authorization: Bearer glt_… e X-Tenant: admin.
  3. O token precisa incluir a permissão users.update.
  4. Envie application/json com os campos da tabela de detalhes.
  5. Sucesso responde HTTP 200.
Como chamar
curl -sS -X PUT "http://localhost:8080/identity/users/00000000-0000-0000-0000-000000000002" \ -H "Authorization: Bearer $TOKEN" \ -H "X-Tenant: admin" \ -H "Content-Type: application/json" \ --data-binary '{ "email": "api.teste@glautec.local", "name": "Usuário API", "isActive": true }'

Detalhes

Parâmetros
CampoOndeTipoObrigatórioDescriçãoExemplo
idcaminhouuidSim
emailcorpostringSim
namecorpostringSim
isActivecorpobooleanSim
passwordcorpostringNãoOpcional. Se enviado, troca a senha.
Corpo de exemplo
{ "email": "api.teste@glautec.local", "name": "Usuário API", "isActive": true }
Resposta de exemplo

Sem corpo de resposta.

DELETE/identity/users/{id}

Excluir usuário

Remove a conta.

URL: http://localhost:8080/identity/users/{id}Sucesso: 204Permissão no token: users.delete

Instrução

  1. Chame DELETE em http://localhost:8080/identity/users/{id}.
  2. Envie Authorization: Bearer glt_… e X-Tenant: admin.
  3. O token precisa incluir a permissão users.delete.
  4. Sucesso responde HTTP 204.
Como chamar
curl -sS -X DELETE "http://localhost:8080/identity/users/00000000-0000-0000-0000-000000000002" \ -H "Authorization: Bearer $TOKEN" \ -H "X-Tenant: admin"

Detalhes

Parâmetros
CampoOndeTipoObrigatórioDescriçãoExemplo
idcaminhouuidSim
Corpo de exemplo

Sem corpo.

Resposta de exemplo

Sem corpo de resposta.

/identity/users/{id}/roles

PUT/identity/users/{id}/roles

Atribuir papéis

Substitui os papéis do usuário.

URL: http://localhost:8080/identity/users/{id}/rolesSucesso: 200Permissão no token: roles.assign

Instrução

  1. Chame PUT em http://localhost:8080/identity/users/{id}/roles.
  2. Envie Authorization: Bearer glt_… e X-Tenant: admin.
  3. O token precisa incluir a permissão roles.assign.
  4. Envie application/json com os campos da tabela de detalhes.
  5. Sucesso responde HTTP 200.
Como chamar
curl -sS -X PUT "http://localhost:8080/identity/users/00000000-0000-0000-0000-000000000002/roles" \ -H "Authorization: Bearer $TOKEN" \ -H "X-Tenant: admin" \ -H "Content-Type: application/json" \ --data-binary '{ "roleIds": [ "00000000-0000-0000-0000-000000000010" ] }'

Detalhes

Parâmetros
CampoOndeTipoObrigatórioDescriçãoExemplo
idcaminhouuidSim
roleIdscorpouuid[]Sim
Corpo de exemplo
{ "roleIds": [ "00000000-0000-0000-0000-000000000010" ] }
Resposta de exemplo

Sem corpo de resposta.

/identity/roles

GET/identity/roles

Listar papéis

Papéis e suas permissões.

URL: http://localhost:8080/identity/rolesSucesso: 200Permissão no token: roles.read

Instrução

  1. Chame GET em http://localhost:8080/identity/roles.
  2. Envie Authorization: Bearer glt_… e X-Tenant: admin.
  3. O token precisa incluir a permissão roles.read.
  4. Sucesso responde HTTP 200.
Como chamar
curl -sS -X GET "http://localhost:8080/identity/roles" \ -H "Authorization: Bearer $TOKEN" \ -H "X-Tenant: admin"

Detalhes

Esta rota não tem parâmetros.

Corpo de exemplo

Sem corpo.

Resposta de exemplo
[ { "id": "00000000-0000-0000-0000-000000000010", "name": "Admin", "description": "Acesso total ao sistema", "isSystem": true, "permissions": [ "projects.read" ] } ]

/identity/permissions

GET/identity/permissions

Listar permissões

Catálogo de permissões do sistema.

URL: http://localhost:8080/identity/permissionsSucesso: 200Permissão no token: permissions.read

Instrução

  1. Chame GET em http://localhost:8080/identity/permissions.
  2. Envie Authorization: Bearer glt_… e X-Tenant: admin.
  3. O token precisa incluir a permissão permissions.read.
  4. Sucesso responde HTTP 200.
Como chamar
curl -sS -X GET "http://localhost:8080/identity/permissions" \ -H "Authorization: Bearer $TOKEN" \ -H "X-Tenant: admin"

Detalhes

Esta rota não tem parâmetros.

Corpo de exemplo

Sem corpo.

Resposta de exemplo
[ { "id": "00000000-0000-0000-0000-000000000020", "code": "projects.read", "name": "Listar projetos", "module": "projects" } ]

Assistente

/ai/conversations

GET/ai/conversations

Listar conversas

Histórico de conversas do usuário autenticado com o assistente.

URL: http://localhost:8080/ai/conversationsSucesso: 200Permissão no token: ai.read

Instrução

  1. Chame GET em http://localhost:8080/ai/conversations.
  2. Envie Authorization: Bearer glt_… e X-Tenant: admin.
  3. O token precisa incluir a permissão ai.read.
  4. Sucesso responde HTTP 200.
Como chamar
curl -sS -X GET "http://localhost:8080/ai/conversations" \ -H "Authorization: Bearer $TOKEN" \ -H "X-Tenant: admin"

Detalhes

Esta rota não tem parâmetros.

Corpo de exemplo

Sem corpo.

Resposta de exemplo
[ { "id": "00000000-0000-0000-0000-000000000030", "title": "Clientes da Unisagrado", "createdAt": "2026-09-14T15:00:00Z" } ]

/ai/conversations/{id}

GET/ai/conversations/{id}

Obter conversa

Mensagens da conversa, na ordem, para retomar o contexto.

URL: http://localhost:8080/ai/conversations/{id}Sucesso: 200Permissão no token: ai.read

Instrução

  1. Chame GET em http://localhost:8080/ai/conversations/{id}.
  2. Envie Authorization: Bearer glt_… e X-Tenant: admin.
  3. O token precisa incluir a permissão ai.read.
  4. Sucesso responde HTTP 200.
Como chamar
curl -sS -X GET "http://localhost:8080/ai/conversations/{id}" \ -H "Authorization: Bearer $TOKEN" \ -H "X-Tenant: admin"

Detalhes

Parâmetros
CampoOndeTipoObrigatórioDescriçãoExemplo
idcaminhouuidSim
Corpo de exemplo

Sem corpo.

Resposta de exemplo
{ "id": "00000000-0000-0000-0000-000000000030", "title": "Clientes da Unisagrado", "messages": [ { "id": "00000000-0000-0000-0000-000000000031", "role": "user", "content": "Quais clientes temos?", "createdAt": "2026-09-14T15:00:00Z" } ] }
DELETE/ai/conversations/{id}

Excluir conversa

Remove a conversa e as mensagens.

URL: http://localhost:8080/ai/conversations/{id}Sucesso: 204Permissão no token: ai.read

Instrução

  1. Chame DELETE em http://localhost:8080/ai/conversations/{id}.
  2. Envie Authorization: Bearer glt_… e X-Tenant: admin.
  3. O token precisa incluir a permissão ai.read.
  4. Sucesso responde HTTP 204.
Como chamar
curl -sS -X DELETE "http://localhost:8080/ai/conversations/{id}" \ -H "Authorization: Bearer $TOKEN" \ -H "X-Tenant: admin"

Detalhes

Parâmetros
CampoOndeTipoObrigatórioDescriçãoExemplo
idcaminhouuidSim
Corpo de exemplo

Sem corpo.

Resposta de exemplo

Sem corpo de resposta.

/ai/conversations/messages

POST/ai/conversations/messages

Perguntar

Envia uma pergunta. Sem conversationId abre conversa nova. O assistente busca nos dados vetorizados e guarda o histórico.

URL: http://localhost:8080/ai/conversations/messagesSucesso: 200Permissão no token: ai.read

Instrução

  1. Chame POST em http://localhost:8080/ai/conversations/messages.
  2. Envie Authorization: Bearer glt_… e X-Tenant: admin.
  3. O token precisa incluir a permissão ai.read.
  4. Envie application/json com os campos da tabela de detalhes.
  5. Sucesso responde HTTP 200.
Como chamar
curl -sS -X POST "http://localhost:8080/ai/conversations/messages" \ -H "Authorization: Bearer $TOKEN" \ -H "X-Tenant: admin" \ -H "Content-Type: application/json" \ --data-binary '{ "content": "Quais tarefas do cliente Unisagrado?" }'

Detalhes

Parâmetros
CampoOndeTipoObrigatórioDescriçãoExemplo
contentcorpostringSim
conversationIdcorpouuidNão
Corpo de exemplo
{ "content": "Quais tarefas do cliente Unisagrado?" }
Resposta de exemplo
{ "id": "00000000-0000-0000-0000-000000000030", "title": "Quais tarefas do cliente Unisagrado?", "messages": [] }

Scripts de teste

Gere um script com as operações escolhidas. Leituras são o padrão. Escritas usam payloads de exemplo.

Como usar o script

Crie um token em Tokens de API, cole o valor glt_ abaixo, escolha as operações e baixe o arquivo. O script captura o primeiro id das listagens e reutiliza nas demais chamadas. DELETE fica por último.

$ErrorActionPreference = "Stop" # Testes da API pública do Glautec CRM. # 1. Cole o token glt_ em $Token. # 2. Ajuste $Gateway e $Tenant se preciso. # 3. Execute: powershell -File .\glautec-api-tests.ps1 # Leituras tentam capturar o primeiro id. Escritas usam esses ids. # DELETE roda por último e remove o recurso do id capturado. $Gateway = "http://localhost:8080" $Tenant = "admin" $Token = "glt_SEU_TOKEN" $ProjectId = "00000000-0000-0000-0000-000000000001" $UserId = "00000000-0000-0000-0000-000000000002" $TaskId = "00000000-0000-0000-0000-000000000003" $StatusId = "00000000-0000-0000-0000-000000000004" $TodoId = "00000000-0000-0000-0000-000000000005" $AttachmentId = "00000000-0000-0000-0000-000000000006" $TypeId = "00000000-0000-0000-0000-000000000007" $RoleId = "00000000-0000-0000-0000-000000000010" $FolderId = "00000000-0000-0000-0000-000000000030" $FileId = "00000000-0000-0000-0000-000000000031" $ClientId = "00000000-0000-0000-0000-000000000040" $Headers = @{ Authorization = "Bearer $Token"; "X-Tenant" = $Tenant } function Read-GlautecId { param($Content) if (-not $Content) { return $null } $parsed = $Content | ConvertFrom-Json if ($parsed -is [System.Array] -and $parsed.Count -gt 0) { return $parsed[0].id } if ($parsed.items -and $parsed.items.Count -gt 0) { return $parsed.items[0].id } if ($parsed.id) { return $parsed.id } return $null } function Invoke-Glautec { param([string]$Method, [string]$Path, $Body, [switch]$Form) $url = "$Gateway$Path" Write-Host "" Write-Host "== $Method $Path ==" $params = @{ Uri = $url; Method = $Method; Headers = $Headers; UseBasicParsing = $true } if ($Form) { $params.Form = $Body } elseif ($null -ne $Body) { $params.ContentType = "application/json"; $params.Body = $Body } try { $response = Invoke-WebRequest @params } catch { if ($_.ErrorDetails.Message) { Write-Host $_.ErrorDetails.Message } throw "Falha em $Method $Path : $($_.Exception.Message)" } Write-Host "HTTP $([int]$response.StatusCode)" if ($response.Content) { $response.Content } return $response } Write-Host "Gateway: $Gateway Tenant: $Tenant" # GET /ai/conversations — Listar conversas Invoke-Glautec -Method GET -Path "/ai/conversations" # GET /clients/clients — Listar clientes $captured = Invoke-Glautec -Method GET -Path "/clients/clients" $found = Read-GlautecId $captured.Content if ($found) { $ClientId = $found; Write-Host "ClientId=$found" } # GET /crm/automations — Listar automações Invoke-Glautec -Method GET -Path "/crm/automations" # GET /crm/projects — Listar projetos $captured = Invoke-Glautec -Method GET -Path "/crm/projects" $found = Read-GlautecId $captured.Content if ($found) { $ProjectId = $found; Write-Host "ProjectId=$found" } # GET /crm/tasks — Listar tarefas $captured = Invoke-Glautec -Method GET -Path "/crm/tasks?projectId=$ProjectId" $found = Read-GlautecId $captured.Content if ($found) { $TaskId = $found; Write-Host "TaskId=$found" } # GET /files/files — Listar arquivos Invoke-Glautec -Method GET -Path "/files/files" # GET /files/folders — Listar pastas Invoke-Glautec -Method GET -Path "/files/folders" # GET /identity/auth/me — Usuário autenticado Invoke-Glautec -Method GET -Path "/identity/auth/me" # GET /identity/permissions — Listar permissões Invoke-Glautec -Method GET -Path "/identity/permissions" # GET /identity/roles — Listar papéis $captured = Invoke-Glautec -Method GET -Path "/identity/roles" $found = Read-GlautecId $captured.Content if ($found) { $RoleId = $found; Write-Host "RoleId=$found" } # GET /identity/users — Listar usuários $captured = Invoke-Glautec -Method GET -Path "/identity/users" $found = Read-GlautecId $captured.Content if ($found) { $UserId = $found; Write-Host "UserId=$found" } # GET /ai/conversations/{id} — Obter conversa Invoke-Glautec -Method GET -Path "/ai/conversations/{id}" # GET /clients/clients/{id} — Obter cliente Invoke-Glautec -Method GET -Path "/clients/clients/$ClientId" # GET /crm/automations/{id} — Obter automação Invoke-Glautec -Method GET -Path "/crm/automations/{id}" # GET /crm/projects/{id} — Obter projeto Invoke-Glautec -Method GET -Path "/crm/projects/$ProjectId" # GET /crm/projects/{id}/shares — Listar compartilhamentos Invoke-Glautec -Method GET -Path "/crm/projects/$ProjectId/shares" # GET /crm/projects/{projectId}/extra-field-types — Listar campos extras $captured = Invoke-Glautec -Method GET -Path "/crm/projects/$ProjectId/extra-field-types" $found = Read-GlautecId $captured.Content if ($found) { $TypeId = $found; Write-Host "TypeId=$found" } # GET /crm/projects/{projectId}/statuses — Listar status $captured = Invoke-Glautec -Method GET -Path "/crm/projects/$ProjectId/statuses" $found = Read-GlautecId $captured.Content if ($found) { $StatusId = $found; Write-Host "StatusId=$found" } # GET /crm/tasks/{id} — Obter tarefa Invoke-Glautec -Method GET -Path "/crm/tasks/$TaskId" # GET /crm/tasks/{id}/attachments — Listar arquivos $captured = Invoke-Glautec -Method GET -Path "/crm/tasks/$TaskId/attachments" $found = Read-GlautecId $captured.Content if ($found) { $AttachmentId = $found; Write-Host "AttachmentId=$found" } # GET /crm/tasks/{id}/todos — Listar to-dos $captured = Invoke-Glautec -Method GET -Path "/crm/tasks/$TaskId/todos" $found = Read-GlautecId $captured.Content if ($found) { $TodoId = $found; Write-Host "TodoId=$found" } # GET /files/files/{id} — Obter arquivo Invoke-Glautec -Method GET -Path "/files/files/$FileId" # GET /files/files/{id}/content — Baixar arquivo Invoke-Glautec -Method GET -Path "/files/files/$FileId/content" # GET /identity/users/{id} — Obter usuário Invoke-Glautec -Method GET -Path "/identity/users/$UserId" # GET /crm/projects/{projectId}/statuses/{id} — Obter status Invoke-Glautec -Method GET -Path "/crm/projects/$ProjectId/statuses/$StatusId" # GET /crm/tasks/{id}/attachments/{attachmentId}/file — Baixar arquivo Invoke-Glautec -Method GET -Path "/crm/tasks/$AttachmentId/attachments/$AttachmentId/file" Write-Host "" Write-Host "Todos os testes passaram."