{"openapi":"3.1.0","info":{"title":"QueryWeaver","version":"0.1.0"},"paths":{"/signup/email":{"post":{"tags":["Authentication"],"summary":"Email Signup","description":"Handle email/password user registration.","operationId":"email_signup_signup_email_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailSignupRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/login/email":{"post":{"tags":["Authentication"],"summary":"Email Login","description":"Handle email/password user login.","operationId":"email_login_login_email_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailLoginRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/login/google":{"get":{"tags":["Authentication"],"summary":"Google.Login","description":"Initiate Google OAuth login flow.\n\nArgs:\n    request (Request): The incoming request.\n\nReturns:\n    RedirectResponse: The redirect response to the Google OAuth endpoint.","operationId":"google_login_login_google_get","responses":{"307":{"description":"Successful Response"}}}},"/login/google/authorized":{"get":{"tags":["Authentication"],"summary":"Google Authorized","description":"Handle Google OAuth callback and user authorization.\n\nArgs:\n    request (Request): The incoming request.\n\nReturns:\n    RedirectResponse: The redirect response after handling the callback.","operationId":"google_authorized_login_google_authorized_get","responses":{"307":{"description":"Successful Response"}}}},"/login/google/callback":{"get":{"tags":["Authentication"],"summary":"Google Callback Compat","description":"Handle Google OAuth callback redirect for compatibility.","operationId":"google_callback_compat_login_google_callback_get","responses":{"307":{"description":"Successful Response"}}}},"/login/github":{"get":{"tags":["Authentication"],"summary":"Github.Login","description":"Handle GitHub OAuth login redirect.","operationId":"github_login_login_github_get","responses":{"307":{"description":"Successful Response"}}}},"/login/github/authorized":{"get":{"tags":["Authentication"],"summary":"Github Authorized","description":"Handle GitHub OAuth authorization callback.","operationId":"github_authorized_login_github_authorized_get","responses":{"307":{"description":"Successful Response"}}}},"/login/github/callback":{"get":{"tags":["Authentication"],"summary":"Github Callback Compat","description":"Handle GitHub OAuth callback redirect for compatibility.","operationId":"github_callback_compat_login_github_callback_get","responses":{"307":{"description":"Successful Response"}}}},"/auth-status":{"get":{"tags":["Authentication"],"summary":"Auth Status","description":"Check authentication status for the React app.\n\nReturns:\n    JSONResponse: Authentication status with user info if authenticated","operationId":"auth_status_auth_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/logout":{"get":{"tags":["Authentication"],"summary":"Logout","description":"Handle user logout and delete session cookies.\n\nSupports both GET and POST methods for backward compatibility:\n- GET: For direct navigation (bookmarks, links, old clients)\n- POST: For programmatic logout from the app","operationId":"logout_logout_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"tags":["Authentication"],"summary":"Logout","description":"Handle user logout and delete session cookies.\n\nSupports both GET and POST methods for backward compatibility:\n- GET: For direct navigation (bookmarks, links, old clients)\n- POST: For programmatic logout from the app","operationId":"logout_logout_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/graphs":{"get":{"tags":["Graphs & Databases","mcp_tool"],"summary":"List Graphs","description":"List all available graphs/databases for the authenticated user.\nRequires authentication.","operationId":"list_databases","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"401":{"description":"Unauthorized - Please log in or provide a valid API token"}}},"post":{"tags":["Graphs & Databases"],"summary":"Load Graph","description":"This route is used to load the graph data into the database.\nIt expects either:\n- A JSON payload (application/json)\n- A File upload (multipart/form-data)\n- An XML payload (application/xml or text/xml)","operationId":"load_graph_graphs_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_load_graph_graphs_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"401":{"description":"Unauthorized - Please log in or provide a valid API token"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/graphs/{graph_id}/data":{"get":{"tags":["Graphs & Databases","mcp_tool"],"summary":"Get Graph Data","description":"Return all nodes and edges for the specified database schema.\nRequires authentication.\n\n    args:\n        graph_id (str): The ID of the graph to query (the database name).","operationId":"database_schema","parameters":[{"name":"graph_id","in":"path","required":true,"schema":{"type":"string","title":"Graph Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"401":{"description":"Unauthorized - Please log in or provide a valid API token"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/graphs/{graph_id}":{"post":{"tags":["Graphs & Databases","mcp_tool"],"summary":"Query Graph","description":"Query the Database with the given graph_id and chat_data.\nRequires authentication.\n\n    Args:\n        graph_id (str): The ID of the graph to query.\n        chat_data (ChatRequest): The chat data containing user queries and context.","operationId":"query_database","parameters":[{"name":"graph_id","in":"path","required":true,"schema":{"type":"string","title":"Graph Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"401":{"description":"Unauthorized - Please log in or provide a valid API token"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Graphs & Databases"],"summary":"Delete Graph","description":"Delete the specified graph (namespaced to the user).\n\nThis will attempt to delete the FalkorDB graph belonging to the\nauthenticated user. The graph id used by the client is stripped of\nnamespace and will be namespaced using the user's id from the request\nstate.","operationId":"delete_graph_graphs__graph_id__delete","parameters":[{"name":"graph_id","in":"path","required":true,"schema":{"type":"string","title":"Graph Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"401":{"description":"Unauthorized - Please log in or provide a valid API token"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/graphs/{graph_id}/confirm":{"post":{"tags":["Graphs & Databases"],"summary":"Confirm Destructive Operation","description":"Handle user confirmation for destructive SQL operations.\nRequires authentication.","operationId":"confirm_destructive_operation_graphs__graph_id__confirm_post","parameters":[{"name":"graph_id","in":"path","required":true,"schema":{"type":"string","title":"Graph Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfirmRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"401":{"description":"Unauthorized - Please log in or provide a valid API token"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/graphs/{graph_id}/refresh":{"post":{"tags":["Graphs & Databases"],"summary":"Refresh Graph Schema","description":"Manually refresh the graph schema from the database.\nThis endpoint allows users to manually trigger a schema refresh\nif they suspect the graph is out of sync with the database.\nStreams progress steps as a sequence of JSON messages.","operationId":"refresh_graph_schema_graphs__graph_id__refresh_post","parameters":[{"name":"graph_id","in":"path","required":true,"schema":{"type":"string","title":"Graph Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"401":{"description":"Unauthorized - Please log in or provide a valid API token"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/graphs/{graph_id}/user-rules":{"get":{"tags":["Graphs & Databases"],"summary":"Get Graph User Rules","description":"Get user rules for the specified graph.","operationId":"get_graph_user_rules_graphs__graph_id__user_rules_get","parameters":[{"name":"graph_id","in":"path","required":true,"schema":{"type":"string","title":"Graph Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"401":{"description":"Unauthorized - Please log in or provide a valid API token"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Graphs & Databases"],"summary":"Update Graph User Rules","description":"Update user rules for the specified graph.","operationId":"update_graph_user_rules_graphs__graph_id__user_rules_put","parameters":[{"name":"graph_id","in":"path","required":true,"schema":{"type":"string","title":"Graph Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserRulesRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"401":{"description":"Unauthorized - Please log in or provide a valid API token"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/database":{"post":{"tags":["Database Connection","mcp_tool"],"summary":"Connect Database","description":"Accepts a JSON payload with a database URL and attempts to connect.\nSupports both PostgreSQL and MySQL databases.\nStreams progress steps as a sequence of JSON messages separated by a delimiter.\nRequires authentication.","operationId":"connect_database","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DatabaseConnectionRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"401":{"description":"Unauthorized - Please log in or provide a valid API token"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/tokens/generate":{"post":{"tags":["API Tokens"],"summary":"Generate Token","description":"Generate a new API token for the authenticated user","operationId":"generate_token_tokens_generate_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenListItem"}}}},"401":{"description":"Unauthorized - Please log in or provide a valid API token"}}}},"/tokens/list":{"get":{"tags":["API Tokens"],"summary":"List Tokens","description":"List all tokens for the authenticated user","operationId":"list_tokens_tokens_list_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenListResponse"}}}},"401":{"description":"Unauthorized - Please log in or provide a valid API token"}}}},"/tokens/{token_id}":{"delete":{"tags":["API Tokens"],"summary":"Delete Token","description":"Delete a specific token for the authenticated user","operationId":"delete_token_tokens__token_id__delete","parameters":[{"name":"token_id","in":"path","required":true,"schema":{"type":"string","title":"Token Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"401":{"description":"Unauthorized - Please log in or provide a valid API token"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/settings/validate-api-key":{"post":{"tags":["Settings"],"summary":"Validate Api Key","description":"Validate an AI provider API key by making a simple test request.\nThis endpoint does not store the key, it only validates it.\nSupports: openai, google, anthropic","operationId":"validate_api_key_settings_validate_api_key_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidateKeyRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"401":{"description":"Unauthorized - Please log in or provide a valid API token"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/version":{"get":{"tags":["Meta"],"summary":"Get Version","description":"Public endpoint returning the application name and version.","operationId":"get_version_version_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"type":"string"},"type":"object","title":"Response Get Version Version Get"}}}}}}}},"components":{"schemas":{"Body_load_graph_graphs_post":{"properties":{"data":{"$ref":"#/components/schemas/GraphData"},"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","title":"Body_load_graph_graphs_post"},"ChatRequest":{"properties":{"chat":{"items":{"type":"string"},"type":"array","title":"Chat"},"result":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Result"},"instructions":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Instructions"},"custom_api_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Custom Api Key"},"custom_model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Custom Model"},"use_user_rules":{"type":"boolean","title":"Use User Rules","default":true},"use_memory":{"type":"boolean","title":"Use Memory","default":true}},"type":"object","required":["chat"],"title":"ChatRequest","description":"Chat request model.\n\nArgs:\n    BaseModel (_type_): _description_"},"ConfirmRequest":{"properties":{"sql_query":{"type":"string","title":"Sql Query"},"confirmation":{"type":"string","title":"Confirmation","default":""},"chat":{"items":{},"type":"array","title":"Chat","default":[]},"custom_api_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Custom Api Key"},"custom_model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Custom Model"},"use_memory":{"type":"boolean","title":"Use Memory","default":false}},"type":"object","required":["sql_query"],"title":"ConfirmRequest","description":"Confirmation request model.\n\nArgs:\n    BaseModel (_type_): _description_"},"DatabaseConnectionRequest":{"properties":{"url":{"type":"string","title":"Url"}},"type":"object","required":["url"],"title":"DatabaseConnectionRequest","description":"Database connection request model.\n\nArgs:\n    BaseModel (_type_): _description_"},"EmailLoginRequest":{"properties":{"email":{"type":"string","title":"Email"},"password":{"type":"string","title":"Password"}},"type":"object","required":["email","password"],"title":"EmailLoginRequest","description":"_summary_\n\nArgs:\n    BaseModel (_type_): _description_"},"EmailSignupRequest":{"properties":{"firstName":{"type":"string","title":"Firstname"},"lastName":{"type":"string","title":"Lastname"},"email":{"type":"string","title":"Email"},"password":{"type":"string","title":"Password"}},"type":"object","required":["firstName","lastName","email","password"],"title":"EmailSignupRequest","description":"_summary_\n\nArgs:\n    BaseModel (_type_): _description_"},"GraphData":{"properties":{"database":{"type":"string","title":"Database"}},"type":"object","required":["database"],"title":"GraphData","description":"Graph data model.\n\nArgs:\n    BaseModel (_type_): _description_"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"TokenListItem":{"properties":{"token_id":{"type":"string","title":"Token Id"},"created_at":{"type":"integer","title":"Created At"}},"type":"object","required":["token_id","created_at"],"title":"TokenListItem","description":"Response model for token list items"},"TokenListResponse":{"properties":{"tokens":{"items":{"$ref":"#/components/schemas/TokenListItem"},"type":"array","title":"Tokens"}},"type":"object","required":["tokens"],"title":"TokenListResponse","description":"Response model for token list"},"UserRulesRequest":{"properties":{"user_rules":{"type":"string","title":"User Rules"}},"type":"object","required":["user_rules"],"title":"UserRulesRequest","description":"User rules request model."},"ValidateKeyRequest":{"properties":{"api_key":{"type":"string","title":"Api Key"},"vendor":{"type":"string","title":"Vendor","default":"openai"},"model":{"type":"string","title":"Model","default":"gpt-3.5-turbo"}},"type":"object","required":["api_key"],"title":"ValidateKeyRequest","description":"Request model for API key validation."},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}