{"openapi":"3.1.0","info":{"title":"GhostBuscas API","version":"0.1.0","description":"API interna da plataforma. Mutação exige cookie de sessão e cabeçalho Origin do próprio app."},"servers":[{"url":"/"}],"components":{"securitySchemes":{"session":{"type":"apiKey","in":"cookie","name":"better-auth.session_token"}},"schemas":{"Error":{"type":"object","required":["ok","code","message"],"properties":{"ok":{"const":false},"code":{"type":"string"},"message":{"type":"string"},"fieldErrors":{"type":"object","additionalProperties":{"type":"string"}}}},"ToolStatus":{"type":"string","enum":["AVAILABLE","REQUIRES_AUTH","REQUIRES_AUTHORIZATION","PENDING_CONFIG","UNAVAILABLE","DISABLED"]},"ToolMode":{"type":"string","enum":["LIVE_API"]},"Tool":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"shortName":{"type":"string"},"description":{"type":"string"},"aliases":{"type":"array","items":{"type":"string"}},"status":{"$ref":"#/components/schemas/ToolStatus"},"mode":{"$ref":"#/components/schemas/ToolMode"},"category":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"}}},"requiredRole":{"type":["string","null"],"enum":["USER","OPERATOR","ADMIN",null]},"officialUrl":{"type":["string","null"]}}},"ExecuteSuccess":{"type":"object","properties":{"ok":{"const":true},"executedAt":{"type":"string","format":"date-time"},"source":{"type":"object","properties":{"name":{"type":"string"},"url":{"type":["string","null"]},"kind":{"const":"external"}}},"result":{"type":"object","properties":{"headline":{"type":"string"},"tone":{"enum":["positive","negative","neutral"]},"sections":{"type":"array"},"images":{"type":"array"},"notes":{"type":"array","items":{"type":"string"}}}}}}}},"paths":{"/api/catalog":{"get":{"summary":"Lista ou pesquisa o catálogo de ferramentas","parameters":[{"name":"q","in":"query","schema":{"type":"string","maxLength":80}},{"name":"status","in":"query","description":"Lista separada por vírgula","schema":{"type":"string"}}],"responses":{"200":{"description":"Catálogo ou resultados agrupados por categoria","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/api/tools/{slug}/execute":{"post":{"summary":"Executa uma ferramenta","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"string"}}}}},"responses":{"200":{"description":"Resultado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExecuteSuccess"}}}},"401":{"description":"Não autenticado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Sem permissão ou origem inválida","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Ferramenta ou registro não encontrado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Configuração pendente ou desativada","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Dados inválidos","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Limite de uso atingido (cabeçalho Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Falha do provedor","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Temporariamente indisponível","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"Tempo esgotado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/account":{"delete":{"summary":"Exclui a própria conta","security":[{"session":[]}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["password","confirm"],"properties":{"password":{"type":"string"},"confirm":{"const":"EXCLUIR"}}}}}},"responses":{"200":{"description":"Conta excluída","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Não autenticado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Sem permissão ou origem inválida","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Dados inválidos","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/account/history":{"get":{"summary":"Histórico mínimo do usuário (sem parâmetros de consulta)","security":[{"session":[]}],"responses":{"200":{"description":"Itens","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Não autenticado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"summary":"Apaga todo o histórico do usuário","security":[{"session":[]}],"responses":{"200":{"description":"Quantidade removida","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Não autenticado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Sem permissão ou origem inválida","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Dados inválidos","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/account/preferences":{"put":{"summary":"Atualiza preferências","security":[{"session":[]}],"responses":{"200":{"description":"Preferências","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Não autenticado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Sem permissão ou origem inválida","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Dados inválidos","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/privacy/requests":{"post":{"summary":"Registra solicitação de direitos do titular (LGPD art. 18)","responses":{"201":{"description":"Criada","content":{"application/json":{"schema":{"type":"object"}}}},"422":{"description":"Dados inválidos","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Limite","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/admin/tools/{slug}":{"patch":{"summary":"Edita ferramenta (ADMIN)","security":[{"session":[]}],"responses":{"200":{"description":"Atualizada","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Não autenticado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Sem permissão ou origem inválida","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Dados inválidos","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/admin/providers/{key}":{"patch":{"summary":"Edita parâmetros não secretos do provedor (ADMIN)","security":[{"session":[]}],"responses":{"200":{"description":"Atualizado","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Não autenticado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Sem permissão ou origem inválida","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Dados inválidos","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/admin/users/{id}":{"patch":{"summary":"Altera papel do usuário (ADMIN)","security":[{"session":[]}],"responses":{"200":{"description":"Atualizado","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Não autenticado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Sem permissão ou origem inválida","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Dados inválidos","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/admin/requests/{id}":{"patch":{"summary":"Atualiza solicitação de titular (ADMIN)","security":[{"session":[]}],"responses":{"200":{"description":"Atualizada","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Não autenticado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Sem permissão ou origem inválida","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Dados inválidos","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/health":{"get":{"summary":"Estado do serviço","responses":{"200":{"description":"Saudável","content":{"application/json":{"schema":{"type":"object"}}}},"503":{"description":"Banco indisponível","content":{"application/json":{"schema":{"type":"object"}}}}}}}}}