Skip to content

API REST

Base URL

http://localhost:8080/api

Em produção, substitua pelo domínio da sua instância.

Documentação interativa (Swagger)

Acesse a documentação OpenAPI 3.1 gerada automaticamente:

http://localhost:8080/swagger-ui.html

Autenticação

JWT (Usuário)

http
POST /auth/login
Content-Type: application/json

{
  "email": "usuario@empresa.com",
  "password": "suaSenha"
}

Resposta:

json
{
  "accessToken": "eyJ...",
  "refreshToken": "eyJ...",
  "user": { "id": "...", "email": "...", "firstName": "..." },
  "roles": ["USER"]
}

Use o accessToken no header de todas as requisições:

http
Authorization: Bearer eyJ...

Refresh de token

Quando o accessToken expirar (erro 401), use o refreshToken para obter um novo par:

http
POST /auth/refresh
Content-Type: application/json

{
  "refreshToken": "eyJ..."
}

API Key (Sistema externo)

http
X-API-Key: sua-api-key

Header de tenant

Sempre inclua o tenant nas requisições autenticadas:

http
X-Tenant-ID: slug-do-tenant

Principais endpoints

Os endpoints seguem o padrão de prefixo abaixo. Todos os caminhos são relativos à base /api.

PrefixoEscopoAuth
/authAutenticação / sessãoSem auth (exceto /me)
/admin/*Operações administrativasJWT (SUPER_ADMIN ou ADMIN)
/a/*Operações de tenantJWT + X-Tenant-ID: <slug>

Autenticação

MétodoEndpointDescrição
POST/auth/loginLogin com email/senha
POST/auth/refreshRenovar token
GET/auth/meDados do usuário logado
GET/auth/me/tenantsTenants do usuário
POST/auth/logoutInvalidar sessão

Resposta do login:

json
{
  "accessToken": "eyJ...",
  "refreshToken": "eyJ...",
  "user": { "id": "...", "email": "...", "firstName": "..." },
  "roles": ["USER"],
  "tenants": [
    { "id": "uuid", "slug": "empresa-abc", "name": "Empresa ABC" }
  ]
}

O campo tenants lista os tenants aos quais o usuário pertence. Use o slug como valor do header X-Tenant-ID.

Processos e instâncias

MétodoEndpointDescrição
GET/a/definitionsListar definições do tenant
GET/a/definitions/{key}Detalhe + startFormKey
GET/a/definitions/{key}/variablesVariáveis de instância da definição
POST/a/instancesIniciar instância (BPMN ou CMMN)
GET/a/instancesListar instâncias ativas
GET/a/instances/{id}Detalhe + variáveis
DELETE/a/instances/{id}Cancelar instância
PATCH/a/instances/{id}/suspendSuspender instância
PATCH/a/instances/{id}/activateReativar instância
GET/a/instances/{id}/diagramSVG/XML do diagrama com atividades marcadas
GET/a/instances/failed-jobsJobs com falha do tenant
POST/a/instances/failed-jobs/{jobId}/retryRetry de job

Histórico de instâncias

MétodoEndpointDescrição
GET/a/history/instancesInstâncias concluídas
GET/a/history/instances/{id}Detalhe da instância concluída
GET/a/history/instances/{id}/activitiesAtividades da instância

Tarefas

MétodoEndpointDescrição
GET/a/tasksListar tarefas do usuário
GET/a/tasks/{id}Detalhe + formulário
POST/a/tasks/{id}/claimAssumir tarefa
POST/a/tasks/{id}/completeConcluir tarefa
POST/a/tasks/{id}/unclaimDevolver tarefa ao grupo
POST/a/tasks/{id}/delegateDelegar
GET/a/tasks/{id}/commentsListar comentários
POST/a/tasks/{id}/commentsAdicionar comentário

As respostas de listagem e detalhe de tarefas incluem formVersionId para buscar a versão exata do formulário via GET /a/forms/{key}/versions/by-id/{versionId}.

Formulários

MétodoEndpointDescrição
GET/a/formsListar todos os formulários
POST/a/formsCriar formulário
GET/a/forms/{key}Detalhe do formulário
PUT/a/forms/{key}Salvar formulário (cria nova versão)
DELETE/a/forms/{key}Remover formulário
GET/a/forms/{key}/versionsListar versões
GET/a/forms/{key}/versions/{num}Versão por número
GET/a/forms/{key}/versions/by-id/{versionId}Versão por UUID
POST/a/forms/{key}/publishPublicar uma versão
GET/a/forms/datasourcesListar fontes de dados
POST/a/forms/datasourcesCriar fonte de dados
POST/a/forms/datasources/{key}/executeExecutar fonte de dados

Decision Tables

MétodoEndpointDescrição
GET/a/decisionsListar decisions do tenant
POST/a/decisionsDeploy de arquivo .dmn
POST/a/decisions/from-template/{key}Clonar de template global
GET/a/decisions/{key}Detalhes
PUT/a/decisions/{key}Atualizar regras (nova versão)
POST/a/decisions/{key}/evaluateTestar com inputs
DELETE/a/decisions/{key}Remover

Administração (requer Admin ou Super Admin)

MétodoEndpointDescrição
GET/admin/usersListar usuários
POST/admin/usersCriar usuário
PUT/admin/users/{id}Atualizar usuário
DELETE/admin/users/{id}Desativar usuário
GET/admin/tenantsListar tenants
POST/admin/tenantsCriar tenant
PUT/admin/tenants/{id}Atualizar tenant
PATCH/admin/tenants/{id}/suspendSuspender tenant
PATCH/admin/tenants/{id}/reactivateReativar tenant
GET/admin/tenants/{id}/membersListar membros do tenant
POST/admin/tenants/{id}/membersAdicionar membro
DELETE/admin/tenants/{id}/members/{membershipId}Remover membro
GET/admin/definitionsListar definições (BPMN/CMMN)
POST/admin/definitions/deployDeploy de arquivo BPMN/CMMN
GET/admin/definitions/{key}/versionsHistórico de versões
POST/admin/definitions/{key}/versions/{versionId}/publishPublicar versão
GET/admin/definitions/{key}/versions/{versionId}/xmlExportar XML
GET/admin/dmn-templatesListar templates DMN (SUPER_ADMIN)
POST/admin/dmn-templatesCriar template DMN
PUT/admin/dmn-templates/{key}Atualizar template DMN
DELETE/admin/dmn-templates/{key}Remover template DMN

Paginação

Endpoints de listagem aceitam parâmetros de paginação:

GET /admin/users?page=0&size=20&sort=criadoEm,desc

Resposta paginada:

json
{
  "content": [...],
  "totalElements": 45,
  "totalPages": 3,
  "number": 0,
  "size": 20
}

Erros

Todos os erros seguem o formato:

json
{
  "status": 400,
  "error": "Bad Request",
  "message": "Descrição do problema",
  "timestamp": "2026-04-15T10:30:00"
}
StatusSignificado
400Dados inválidos na requisição
401Não autenticado (token ausente ou expirado)
403Sem permissão
404Recurso não encontrado
409Conflito (ex.: e-mail já cadastrado)
500Erro interno do servidor

Flowi Agentic — Plataforma de Gestão de Processos com IA