API
Todo endpoint segue o padrao de resposta ApiResponse<T>. Detalhe completo em Swagger.
Padrao de resposta
// sucesso
{ "success": true, "data": {...}, "error": null, "meta": { "requestId": "...", "timestamp": "..." } }
// erro
{ "success": false, "data": null, "error": { "code": "...", "message": "...", "details": {} }, "meta": {...} }Endpoints publicos
GET /health— liveness simplesGET /health/runtime— readiness com DB + RedisPOST /auth/login— devolve JWT + perfis + perms
Endpoints autenticados
GET /auth/municipios— lista municipios do usuarioPOST /auth/switch-tenant— emite JWT para outro municipioPOST /auth/logout— bump sessionVersion (invalida tokens antigos)GET /core/municipios—core.municipio.lerGET /core/secretarias—core.secretaria.lerGET /core/perfis—core.perfil.lerPUT /core/perfis/:id/permissoes—core.perfil.gerenciar(bumpa permissionVersion)GET /core/usuarios—core.usuario.lerGET /core/auditoria—core.auditoria.ler
Headers
Authorization: Bearer <JWT>— obrigatorio em rotas privadasx-request-id— devolvido em todo response para correlacao
Codigos de erro comuns
AUTH_INVALID_CREDENTIALS(401)AUTH_REQUIRED(401)SESSION_REVOKED(401) — sessionVersion subiuPERMISSIONS_REVOKED(401) — permissionVersion do perfil subiuSESSION_STORE_UNAVAILABLE(503) — Redis offline em fail_closedFORBIDDEN(403) — falta permissaoTENANT_REQUIRED(401) — JWT sem municipioAUTH_NO_TENANT_ACCESS(403) — switch para tenant sem vinculoVALIDATION_ERROR(422)NOT_FOUND(404)