{"openapi":"3.0.3","info":{"title":"Élleva API","version":"1.0.0","description":"API REST do ÉLLEVA ERP Condominial. Auth: Bearer JWT (de /auth/login) ou X-API-Key."},"servers":[{"url":"https://elleva.app.br/api"}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT"},"apiKey":{"type":"apiKey","in":"header","name":"X-API-Key"}}},"security":[{"bearerAuth":[]},{"apiKey":[]}],"paths":{"/health":{"get":{"summary":"Saúde da API","security":[],"responses":{"200":{"description":"ok"}}}},"/metrics":{"get":{"summary":"Métricas agregadas","security":[],"responses":{"200":{"description":"ok"}}}},"/auth/login":{"post":{"summary":"Login (retorna JWT)","security":[],"responses":{"200":{"description":"token"},"401":{"description":"credenciais inválidas"}}}},"/condos":{"get":{"summary":"Lista condomínios","responses":{"200":{"description":"ok"}}}},"/store/bootstrap":{"get":{"summary":"Hidrata todas as coleções do tenant atual","responses":{"200":{"description":"collections"}}}},"/store/{collection}":{"post":{"summary":"Cria/atualiza documento (dispara notificação)","parameters":[{"name":"collection","in":"path","required":true,"schema":{"type":"string","enum":["comunicados","enquetes","classificados","noticias","alertas","atas","correspondencias","ocorrencias","prestadores","moradores","unidades","lancamentos","areas","reservas","acessos","assembleias","audit","veiculos","pets","documentos","manutencoes","patrimonio","advertencias","multas","recursos","bolsao","mensagens","assinaturas","filhos","acessos_menores","convidados","dispositivos","eventos_dispositivos","leads"]}}],"responses":{"200":{"description":"ok"}}}},"/store/{collection}/{id}":{"delete":{"summary":"Remove documento","responses":{"200":{"description":"ok"}}}},"/users":{"get":{"summary":"Lista usuários do tenant","responses":{"200":{"description":"ok"}}},"post":{"summary":"Cria usuário","responses":{"201":{"description":"ok"}}}},"/settings":{"get":{"summary":"Configurações (segredos mascarados)","responses":{"200":{"description":"ok"}}},"put":{"summary":"Atualiza configurações","responses":{"200":{"description":"ok"}}}},"/integrations/whatsapp/health":{"get":{"summary":"Status do OminiConnect","responses":{"200":{"description":"ok"}}}},"/integrations/whatsapp/send":{"post":{"summary":"Envia mensagem WhatsApp","responses":{"200":{"description":"ok"}}}},"/integrations/pay/cobranca":{"post":{"summary":"Cria cobrança OminiPay","responses":{"200":{"description":"ok"}}}},"/auth/mfa/verify":{"post":{"summary":"Confirma código MFA (6 dígitos) e emite JWT; trust_device=true emite device_token de 30 dias","responses":{"200":{"description":"ok"},"401":{"description":"código inválido"}}}},"/auth/mfa/resend":{"post":{"summary":"Reenvia código MFA (rate-limit 60s)","responses":{"200":{"description":"ok"},"429":{"description":"aguarde"}}}},"/auth/profile":{"get":{"summary":"Dados de contato do usuário autenticado","responses":{"200":{"description":"ok"}}},"put":{"summary":"Atualiza nome/e-mail/telefone/senha","responses":{"200":{"description":"ok"}}}},"/auth/devices":{"get":{"summary":"Dispositivos confiáveis (trust 30 dias) do usuário","responses":{"200":{"description":"ok"}}}},"/access/validate":{"post":{"summary":"Validação de acesso por hardware (X-Device-Key ou X-API-Key). Body: {device_id, credential_type, credential, area, tenant}. Resposta: {allow, reason, profile}","responses":{"200":{"description":"ok"},"401":{"description":"chave inválida"}}}},"/integrations/devices":{"post":{"summary":"Cria chave individual de dispositivo (admin). Retorna device_key UMA vez","responses":{"200":{"description":"ok"}}},"get":{"summary":"Lista chaves de dispositivo (mascaradas)","responses":{"200":{"description":"ok"}}}},"/integrations/heartbeat":{"post":{"summary":"Ping do dispositivo (X-Device-Key) — marca online no painel","responses":{"200":{"description":"ok"}}}},"/integrations/events":{"post":{"summary":"Ingestão de evento bruto do dispositivo {device_id, type, payload}","responses":{"200":{"description":"ok"}}}},"/integrations/webhooks":{"get":{"summary":"Assinaturas de webhook de saída (HMAC SHA-256)","responses":{"200":{"description":"ok"}}},"put":{"summary":"Substitui lista de webhooks [{url, secret, events[]}]","responses":{"200":{"description":"ok"}}}},"/integrations/deliveries":{"get":{"summary":"Histórico de entregas de webhook","responses":{"200":{"description":"ok"}}}},"/notifications/events":{"get":{"summary":"Catálogo de eventos disponíveis","responses":{"200":{"description":"ok"}}}},"/notifications/feed":{"get":{"summary":"Notificações in-app do usuário","responses":{"200":{"description":"ok"}}}},"/notifications/test":{"post":{"summary":"Dispara evento de teste","responses":{"200":{"description":"ok"}}}},"/simulate":{"get":{"summary":"Motor \"vivo\" (cron ou cliente)","responses":{"200":{"description":"ok"}}}}},"request_id":"EVA-C9SN-CLPC-C8MZ"}