{"message":"IoT-EDU API - Gerenciamento seguro de dispositivos IoT","version":"2.0.0","authentication":{"saml_cafe":{"endpoint":"/auth/login","description":"Inicia autenticação SAML CAFe (recomendado para instituições)","method":"GET","example":"GET /auth/login"},"cafe_oauth":{"endpoint":"/api/auth/cafe/login","description":"Inicia autenticação OAuth2 CAFe (legacy)","method":"GET","example":"GET /api/auth/cafe/login"},"google_oauth":{"endpoint":"/api/auth/login","description":"Inicia autenticação Google OAuth2","method":"GET","example":"GET /api/auth/login"},"admin_login":{"endpoint":"/api/admin/login","description":"Login administrativo via Google OAuth","method":"GET","example":"GET /api/admin/login"}},"endpoints":{"devices":{"list":{"endpoint":"/api/devices/dhcp/devices","description":"Lista todos os dispositivos cadastrados no banco de dados com paginação","method":"GET","query_params":{"page":"Número da página (padrão: 1)","per_page":"Itens por página (padrão: 20, máximo: 100)"},"example":"GET /api/devices/dhcp/devices?page=1&per_page=20"},"search":{"endpoint":"/api/devices/dhcp/devices/search","description":"Busca dispositivos por termo (nome, IP, MAC, descrição)","method":"GET","query_params":{"query":"Termo de busca"},"example":"GET /api/devices/dhcp/devices/search?query=192.168.1.100"},"by_ip":{"endpoint":"/api/devices/dhcp/devices/ip/{ipaddr}","description":"Busca dispositivo específico por endereço IP","method":"GET","example":"GET /api/devices/dhcp/devices/ip/192.168.1.100"},"by_mac":{"endpoint":"/api/devices/dhcp/devices/mac/{mac}","description":"Busca dispositivo específico por endereço MAC","method":"GET","example":"GET /api/devices/dhcp/devices/mac/00:11:22:33:44:55"},"statistics":{"endpoint":"/api/devices/dhcp/statistics","description":"Retorna estatísticas gerais dos dispositivos cadastrados","method":"GET","example":"GET /api/devices/dhcp/statistics"}},"aliases":{"list":{"endpoint":"/api/devices/aliases","description":"Lista todos os aliases do pfSense ou busca por nome","method":"GET","query_params":{"name":"Nome do alias (opcional, para busca)"},"example":"GET /api/devices/aliases?name=Bloqueados"},"get":{"endpoint":"/api/devices/aliases/{name}","description":"Obtém informações detalhadas de um alias específico","method":"GET","example":"GET /api/devices/aliases/Bloqueados"},"create":{"endpoint":"/api/devices/alias","description":"Cria um novo alias no pfSense","method":"POST","body":{"name":"Nome do alias","type":"Tipo (host, network, port, url)","address":"Endereço ou lista de endereços","descr":"Descrição (opcional)"},"example":"POST /api/devices/alias"}},"dhcp":{"servers":{"endpoint":"/api/devices/dhcp/servers","description":"Lista todos os servidores DHCP configurados no pfSense","method":"GET","example":"GET /api/devices/dhcp/servers"},"static_mapping":{"endpoint":"/api/devices/dhcp/static_mapping","description":"Lista mapeamentos estáticos DHCP do pfSense","method":"GET","query_params":{"parent_id":"ID do servidor DHCP (ex: lan)","id":"ID do mapeamento (opcional)"},"example":"GET /api/devices/dhcp/static_mapping?parent_id=lan"},"save":{"endpoint":"/api/devices/dhcp/save","description":"Sincroniza dados DHCP do pfSense com o banco de dados","method":"POST","example":"POST /api/devices/dhcp/save"},"ip_addresses":{"endpoint":"/api/devices/dhcp/ip-addresses","description":"Lista endereços IP usados e disponíveis na faixa configurada","method":"GET","example":"GET /api/devices/dhcp/ip-addresses"}},"firewall":{"rules":{"endpoint":"/api/devices/firewall/rules","description":"Lista regras de firewall do pfSense","method":"GET","example":"GET /api/devices/firewall/rules"},"apply":{"endpoint":"/api/devices/firewall/apply","description":"Aplica mudanças pendentes no firewall do pfSense","method":"POST","example":"POST /api/devices/firewall/apply"}},"pfsense":{"health":{"endpoint":"/api/firewalls/pfsense/health","description":"Verifica se o pfSense está online e acessível","method":"GET","query_params":{"current_user_id":"ID do usuário logado"},"example":"GET /api/firewalls/pfsense/health?current_user_id=1","response":{"status":"online|offline","message":"Mensagem descritiva","online":"true|false"}}},"feedback":{"create":{"endpoint":"/api/feedback/","description":"Cria feedback sobre bloqueio/liberação de dispositivo","method":"POST","body":{"dhcp_mapping_id":"ID do mapeamento DHCP","status":"blocked|unblocked","reason":"Motivo do bloqueio/liberação","feedback_by":"ID do usuário que criou o feedback"},"example":"POST /api/feedback/"},"list":{"endpoint":"/api/feedback/dhcp/{dhcp_mapping_id}","description":"Lista histórico de feedbacks de um dispositivo específico","method":"GET","example":"GET /api/feedback/dhcp/123"},"stats":{"endpoint":"/api/feedback/stats","description":"Retorna estatísticas de feedbacks (total, bloqueados, liberados)","method":"GET","example":"GET /api/feedback/stats"},"recent":{"endpoint":"/api/feedback/recent","description":"Lista feedbacks recentes","method":"GET","query_params":{"limit":"Número de resultados (padrão: 10)"},"example":"GET /api/feedback/recent?limit=20"}},"zeek":{"alerts":{"endpoint":"/api/scanners/zeek/alerts","description":"Lista alertas do Zeek salvos no banco (paginado)","method":"GET","query_params":{"user_id":"ID do usuário (opcional)","institution_id":"ID da instituição (opcional)","limit":"Itens por página","offset":"Offset para paginação"},"example":"GET /api/scanners/zeek/alerts?institution_id=1&limit=10"},"health":{"endpoint":"/api/scanners/zeek/health","description":"Verifica se a integração com Zeek está funcionando","method":"GET","query_params":{"user_id":"ID do usuário (current_user_id)","institution_id":"ID da instituição"},"example":"GET /api/scanners/zeek/health?current_user_id=1","response":{"success":"true|false","status":"healthy|unhealthy","message":"Mensagem descritiva","configured":"true|false"}},"sse_alerts":{"endpoint":"/api/scanners/zeek/sse/alerts","description":"Stream SSE de alertas do Zeek em tempo real","method":"GET","query_params":{"user_id":"ID do usuário","institution_id":"ID da instituição"},"example":"GET /api/scanners/zeek/sse/alerts?institution_id=1"}},"incidents":{"list":{"endpoint":"/api/incidents/","description":"Lista incidentes de segurança detectados pelo Zeek","method":"GET","query_params":{"status":"Filtrar por status (pending, processed, etc.)","severity":"Filtrar por severidade (low, medium, high, critical)","limit":"Número máximo de resultados","offset":"Offset para paginação"},"example":"GET /api/incidents/?status=pending&severity=high&limit=50"},"stream":{"endpoint":"/api/incidents/stream","description":"Stream Server-Sent Events (SSE) de novos incidentes em tempo real","method":"GET","example":"GET /api/incidents/stream","note":"Retorna eventos SSE contínuos quando novos incidentes são detectados"},"stats":{"endpoint":"/api/incidents/stats/summary","description":"Retorna estatísticas resumidas dos incidentes","method":"GET","example":"GET /api/incidents/stats/summary"},"unprocessed":{"endpoint":"/api/incidents/unprocessed","description":"Lista incidentes não processados (pendentes de análise)","method":"GET","example":"GET /api/incidents/unprocessed"}},"admin":{"users":{"endpoint":"/api/users","description":"Lista todos os usuários do sistema (requer permissão ADMIN ou SUPERUSER)","method":"GET","example":"GET /api/users"},"users_stats":{"endpoint":"/api/users/stats","description":"Retorna estatísticas de usuários (total, por permissão, ativos/inativos)","method":"GET","example":"GET /api/users/stats"},"institutions":{"endpoint":"/api/institutions","description":"Lista todas as instituições cadastradas (requer permissão SUPERUSER)","method":"GET","example":"GET /api/institutions"},"admin_info":{"endpoint":"/api/info","description":"Retorna informações do administrador logado (email, permissão, instituição)","method":"GET","example":"GET /api/info"}},"auth_status":{"endpoint":"/auth/status","description":"Verifica status da autenticação atual do usuário","method":"GET","example":"GET /auth/status"}},"documentation":"/docs"}