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 simples
  • GET /health/runtime — readiness com DB + Redis
  • POST /auth/login — devolve JWT + perfis + perms

Endpoints autenticados

  • GET /auth/municipios — lista municipios do usuario
  • POST /auth/switch-tenant — emite JWT para outro municipio
  • POST /auth/logout — bump sessionVersion (invalida tokens antigos)
  • GET /core/municipioscore.municipio.ler
  • GET /core/secretariascore.secretaria.ler
  • GET /core/perfiscore.perfil.ler
  • PUT /core/perfis/:id/permissoescore.perfil.gerenciar (bumpa permissionVersion)
  • GET /core/usuarioscore.usuario.ler
  • GET /core/auditoriacore.auditoria.ler

Headers

  • Authorization: Bearer <JWT> — obrigatorio em rotas privadas
  • x-request-id — devolvido em todo response para correlacao

Codigos de erro comuns

  • AUTH_INVALID_CREDENTIALS (401)
  • AUTH_REQUIRED (401)
  • SESSION_REVOKED (401) — sessionVersion subiu
  • PERMISSIONS_REVOKED (401) — permissionVersion do perfil subiu
  • SESSION_STORE_UNAVAILABLE (503) — Redis offline em fail_closed
  • FORBIDDEN (403) — falta permissao
  • TENANT_REQUIRED (401) — JWT sem municipio
  • AUTH_NO_TENANT_ACCESS (403) — switch para tenant sem vinculo
  • VALIDATION_ERROR (422)
  • NOT_FOUND (404)