API REST
Base URL
http://localhost:8080/apiEm 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.htmlAutenticação
JWT (Usuário)
POST /auth/login
Content-Type: application/json
{
"email": "usuario@empresa.com",
"password": "suaSenha"
}Resposta:
{
"accessToken": "eyJ...",
"refreshToken": "eyJ...",
"user": { "id": "...", "email": "...", "firstName": "..." },
"roles": ["USER"]
}Use o accessToken no header de todas as requisições:
Authorization: Bearer eyJ...Refresh de token
Quando o accessToken expirar (erro 401), use o refreshToken para obter um novo par:
POST /auth/refresh
Content-Type: application/json
{
"refreshToken": "eyJ..."
}API Key (Sistema externo)
X-API-Key: sua-api-keyHeader de tenant
Sempre inclua o tenant nas requisições autenticadas:
X-Tenant-ID: slug-do-tenantPrincipais endpoints
Os endpoints seguem o padrão de prefixo abaixo. Todos os caminhos são relativos à base /api.
| Prefixo | Escopo | Auth |
|---|---|---|
/auth | Autenticação / sessão | Sem auth (exceto /me) |
/admin/* | Operações administrativas | JWT (SUPER_ADMIN ou ADMIN) |
/a/* | Operações de tenant | JWT + X-Tenant-ID: <slug> |
Autenticação
| Método | Endpoint | Descrição |
|---|---|---|
| POST | /auth/login | Login com email/senha |
| POST | /auth/refresh | Renovar token |
| GET | /auth/me | Dados do usuário logado |
| GET | /auth/me/tenants | Tenants do usuário |
| POST | /auth/logout | Invalidar sessão |
Resposta do login:
{
"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étodo | Endpoint | Descrição |
|---|---|---|
| GET | /a/definitions | Listar definições do tenant |
| GET | /a/definitions/{key} | Detalhe + startFormKey |
| GET | /a/definitions/{key}/variables | Variáveis de instância da definição |
| POST | /a/instances | Iniciar instância (BPMN ou CMMN) |
| GET | /a/instances | Listar instâncias ativas |
| GET | /a/instances/{id} | Detalhe + variáveis |
| DELETE | /a/instances/{id} | Cancelar instância |
| PATCH | /a/instances/{id}/suspend | Suspender instância |
| PATCH | /a/instances/{id}/activate | Reativar instância |
| GET | /a/instances/{id}/diagram | SVG/XML do diagrama com atividades marcadas |
| GET | /a/instances/failed-jobs | Jobs com falha do tenant |
| POST | /a/instances/failed-jobs/{jobId}/retry | Retry de job |
Histórico de instâncias
| Método | Endpoint | Descrição |
|---|---|---|
| GET | /a/history/instances | Instâncias concluídas |
| GET | /a/history/instances/{id} | Detalhe da instância concluída |
| GET | /a/history/instances/{id}/activities | Atividades da instância |
Tarefas
| Método | Endpoint | Descrição |
|---|---|---|
| GET | /a/tasks | Listar tarefas do usuário |
| GET | /a/tasks/{id} | Detalhe + formulário |
| POST | /a/tasks/{id}/claim | Assumir tarefa |
| POST | /a/tasks/{id}/complete | Concluir tarefa |
| POST | /a/tasks/{id}/unclaim | Devolver tarefa ao grupo |
| POST | /a/tasks/{id}/delegate | Delegar |
| GET | /a/tasks/{id}/comments | Listar comentários |
| POST | /a/tasks/{id}/comments | Adicionar 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étodo | Endpoint | Descrição |
|---|---|---|
| GET | /a/forms | Listar todos os formulários |
| POST | /a/forms | Criar 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}/versions | Listar 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}/publish | Publicar uma versão |
| GET | /a/forms/datasources | Listar fontes de dados |
| POST | /a/forms/datasources | Criar fonte de dados |
| POST | /a/forms/datasources/{key}/execute | Executar fonte de dados |
Decision Tables
| Método | Endpoint | Descrição |
|---|---|---|
| GET | /a/decisions | Listar decisions do tenant |
| POST | /a/decisions | Deploy 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}/evaluate | Testar com inputs |
| DELETE | /a/decisions/{key} | Remover |
Administração (requer Admin ou Super Admin)
| Método | Endpoint | Descrição |
|---|---|---|
| GET | /admin/users | Listar usuários |
| POST | /admin/users | Criar usuário |
| PUT | /admin/users/{id} | Atualizar usuário |
| DELETE | /admin/users/{id} | Desativar usuário |
| GET | /admin/tenants | Listar tenants |
| POST | /admin/tenants | Criar tenant |
| PUT | /admin/tenants/{id} | Atualizar tenant |
| PATCH | /admin/tenants/{id}/suspend | Suspender tenant |
| PATCH | /admin/tenants/{id}/reactivate | Reativar tenant |
| GET | /admin/tenants/{id}/members | Listar membros do tenant |
| POST | /admin/tenants/{id}/members | Adicionar membro |
| DELETE | /admin/tenants/{id}/members/{membershipId} | Remover membro |
| GET | /admin/definitions | Listar definições (BPMN/CMMN) |
| POST | /admin/definitions/deploy | Deploy de arquivo BPMN/CMMN |
| GET | /admin/definitions/{key}/versions | Histórico de versões |
| POST | /admin/definitions/{key}/versions/{versionId}/publish | Publicar versão |
| GET | /admin/definitions/{key}/versions/{versionId}/xml | Exportar XML |
| GET | /admin/dmn-templates | Listar templates DMN (SUPER_ADMIN) |
| POST | /admin/dmn-templates | Criar 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,descResposta paginada:
{
"content": [...],
"totalElements": 45,
"totalPages": 3,
"number": 0,
"size": 20
}Erros
Todos os erros seguem o formato:
{
"status": 400,
"error": "Bad Request",
"message": "Descrição do problema",
"timestamp": "2026-04-15T10:30:00"
}| Status | Significado |
|---|---|
| 400 | Dados inválidos na requisição |
| 401 | Não autenticado (token ausente ou expirado) |
| 403 | Sem permissão |
| 404 | Recurso não encontrado |
| 409 | Conflito (ex.: e-mail já cadastrado) |
| 500 | Erro interno do servidor |