{"openapi":"3.1.0","info":{"title":"MCP Proxy Manager","version":"0.1.0"},"servers":[{"url":"","description":"Direct API endpoint"}],"paths":{"/":{"get":{"summary":"Root","description":"Root endpoint that returns HTML with metadata for x402scan and other crawlers.\nIncludes Open Graph tags, Twitter Cards, and standard meta tags with logo/icon.","operationId":"root__get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/health":{"get":{"summary":"Health Check","description":"Health check endpoint that returns 200 OK only when:\n1. The server is running\n2. The default vibe agent proxy exists and is running\n\nReturns:\n    Dict containing server status and default vibe agent proxy status\n    Returns 500 error if default proxy is not found or not running","operationId":"health_check_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/vibe-agents":{"get":{"tags":["Vibe-agent"],"summary":"Get All Vibe Agents","description":"Get the current global vibe_agents dict as a list, matching /mcp-servers format, with agent_name field included.\nIf status != 'running' (including empty string), fetch all CustomPrompt agents and return them in the same format.\nIf status == 'ready', return only agents that have been downloaded (zip exists).\nSupports pagination with limit and page.","operationId":"get_all_vibe_agents_vibe_agents_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"status","in":"query","required":false,"schema":{"type":"string","description":"Agent status filter","default":"running","title":"Status"},"description":"Agent status filter"},{"name":"search","in":"query","required":false,"schema":{"type":"string","description":"Search string to filter agents","default":"","title":"Search"},"description":"Search string to filter agents"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","description":"Number of agents per page","default":50,"title":"Limit"},"description":"Number of agents per page"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","description":"Page number for pagination","default":1,"title":"Page"},"description":"Page number for pagination"},{"name":"category_ids","in":"query","required":false,"schema":{"type":"string","description":"Filter agents by category ids, comma separated","default":"","title":"Category Ids"},"description":"Filter agents by category ids, comma separated"},{"name":"agent_type","in":"query","required":false,"schema":{"type":"string","description":"Filter agents by type","default":"-1","title":"Agent Type"},"description":"Filter agents by type"},{"name":"is_public","in":"query","required":false,"schema":{"type":"boolean","description":"Filter agents by public status","default":false,"title":"Is Public"},"description":"Filter agents by public status"},{"name":"category","in":"query","required":false,"schema":{"type":"string","description":"List agents by category","default":"","title":"Category"},"description":"List agents by category"},{"name":"ids","in":"query","required":false,"schema":{"type":"string","description":"Filter agents by ids, comma separated","default":"","title":"Ids"},"description":"Filter agents by ids, comma separated"},{"name":"contract_addresses","in":"query","required":false,"schema":{"type":"string","description":"Agent contract addresses","default":"","title":"Contract Addresses"},"description":"Agent contract addresses"},{"name":"creator","in":"query","required":false,"schema":{"type":"string","description":"Filter agents by creator","default":"","title":"Creator"},"description":"Filter agents by creator"},{"name":"excluded_ids","in":"query","required":false,"schema":{"type":"string","description":"Filter agents by excluded ids, comma separated","default":"","title":"Excluded Ids"},"description":"Filter agents by excluded ids, comma separated"},{"name":"device","in":"query","required":false,"schema":{"type":"string","description":"Filter agents by device","default":"","title":"Device"},"description":"Filter agents by device"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","additionalProperties":true},"title":"Response Get All Vibe Agents Vibe Agents Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/vibe-agent/{agent_id}":{"get":{"tags":["Vibe-agent"],"summary":"Get Vibe Agent By Id","description":"Get details for a single Vibe agent by its ID, using the processor for correct format.","operationId":"get_vibe_agent_by_id_vibe_agent__agent_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","title":"Agent Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Vibe Agent By Id Vibe Agent  Agent Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Vibe-agent"],"summary":"Vibe Agent Remove","description":"Remove a Vibe agent completely: stop if running, delete zip and folder, update stopped agents file.","operationId":"vibe_agent_remove_vibe_agent__agent_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","title":"Agent Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Vibe Agent Remove Vibe Agent  Agent Id  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/vibe-agent/{agent_id}/download":{"put":{"tags":["Vibe-agent"],"summary":"Download Vibe Agent Zip","description":"Download the agent's zip file from ethfs and save it to @vibe_agents directory.","operationId":"download_vibe_agent_zip_vibe_agent__agent_id__download_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","title":"Agent Id"}},{"name":"user_wallet","in":"query","required":false,"schema":{"type":"string","description":"User wallet address","default":"","title":"User Wallet"},"description":"User wallet address"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Download Vibe Agent Zip Vibe Agent  Agent Id  Download Put"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/vibe-agent/{agent_id}/stop-download":{"put":{"tags":["Vibe-agent"],"summary":"Stop Download Vibe Agent Zip","operationId":"stop_download_vibe_agent_zip_vibe_agent__agent_id__stop_download_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","title":"Agent Id"}},{"name":"user_wallet","in":"query","required":false,"schema":{"type":"string","description":"User wallet address","default":"","title":"User Wallet"},"description":"User wallet address"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Stop Download Vibe Agent Zip Vibe Agent  Agent Id  Stop Download Put"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/vibe-agent/{agent_id}/start":{"post":{"tags":["Vibe-agent"],"summary":"Vibe Agent Start","description":"Execute a Vibe agent by its ID.\n- If SERVER_MODE is True: Requires JWT authentication with valid wallet\n- If SERVER_MODE is False: No authentication required, wallet will be None\nBearer token will be shown in Swagger UI for this endpoint.","operationId":"vibe_agent_start_vibe_agent__agent_id__start_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","title":"Agent Id"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body Request"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/vibe-agent/{agent_id}/stop":{"post":{"tags":["Vibe-agent"],"summary":"Vibe Agent Stop","description":"Stop a running Vibe agent by its ID and save to stopped agents file.\nRequires JWT authentication if SERVER_MODE is True.","operationId":"vibe_agent_stop_vibe_agent__agent_id__stop_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","title":"Agent Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Vibe Agent Stop Vibe Agent  Agent Id  Stop Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/vibe-agent/{agent_id}/dependencies":{"get":{"tags":["Vibe-agent"],"summary":"Get Vibe Agent Dependencies","description":"Get all dependencies (sub-agents) for a given Vibe agent by its ID.\nReturns a list of agent dicts (full data for each dependency).","operationId":"get_vibe_agent_dependencies_vibe_agent__agent_id__dependencies_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","title":"Agent Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","additionalProperties":true},"title":"Response Get Vibe Agent Dependencies Vibe Agent  Agent Id  Dependencies Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/agent-router/available":{"get":{"tags":["Agent-router"],"summary":"Agent Router Available","description":"Endpoint to check if agent-router is available (listening on the default port).\nIf a valid Bearer token is provided, it will also return the authenticated wallet.\nReturns {\"container_id\": str, \"pid\": int, \"host_port\": int, \"wallet\": str (optional)}","operationId":"agent_router_available_agent_router_available_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Agent Router Available Agent Router Available Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/events":{"get":{"summary":"Event Stream","description":"SSE endpoint for real-time events","operationId":"event_stream_events_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/vibe-agents/check-updated":{"get":{"tags":["Vibe-agent"],"summary":"Vibe Agent Updated Checking","description":"Endpoint to check if vibe agents (in vibe_agents) have a new version (using vibe_agents_processor.check_vibe_agent_updated).\nReturns a dict (agent id → { 'old': old_version, 'new': new_version }) if versions differ.","operationId":"vibe_agent_updated_checking_vibe_agents_check_updated_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Vibe Agent Updated Checking Vibe Agents Check Updated Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/vibe-agent/{agent_id}/force-update":{"put":{"tags":["Vibe-agent"],"summary":"Agent Force Update","description":"Force update (re-download) the agent zip for the given agent_id.\nThis will always fetch the latest version from the source, regardless of local cache.","operationId":"agent_force_update_vibe_agent__agent_id__force_update_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","title":"Agent Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Agent Force Update Vibe Agent  Agent Id  Force Update Put"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/vibe-agents/top-creators":{"get":{"tags":["Vibe-agent"],"summary":"Get Top Creators","description":"Get top creators by agent count.","operationId":"get_top_creators_vibe_agents_top_creators_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","description":"Number of top creators to return","default":10,"title":"Limit"},"description":"Number of top creators to return"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{},"title":"Response Get Top Creators Vibe Agents Top Creators Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/vibe-agents/podman-stats":{"get":{"tags":["Vibe-agent"],"summary":"Get Podman Stats","description":"Get podman stats.","operationId":"get_podman_stats_vibe_agents_podman_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{},"type":"array","title":"Response Get Podman Stats Vibe Agents Podman Stats Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/vibe-agents/sync-data":{"post":{"tags":["Vibe-agent"],"summary":"Sync Vibe Agents Data","description":"Sync vibe agents data from API to SQLite database.","operationId":"sync_vibe_agents_data_vibe_agents_sync_data_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"agent_ids","in":"query","required":false,"schema":{"type":"string","description":"agent_ids for filters","default":"","title":"Agent Ids"},"description":"agent_ids for filters"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Sync Vibe Agents Data Vibe Agents Sync Data Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/vibe-agents/cleanup-resources":{"post":{"tags":["Vibe-agent"],"summary":"Cleanup Resources","description":"Clean up resources for vibe agents.","operationId":"cleanup_resources_vibe_agents_cleanup_resources_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Cleanup Resources Vibe Agents Cleanup Resources Post"}}}}},"security":[{"HTTPBearer":[]}]}},"/vibe-agents/pull-image":{"post":{"tags":["Vibe-agent"],"summary":"Pull Image","description":"Pull image of vibe agents.","operationId":"pull_image_vibe_agents_pull_image_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body Request"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Pull Image Vibe Agents Pull Image Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/agent-router/prompt":{"post":{"tags":["Agent-router"],"summary":"Agent Router Prompt","description":"Proxy endpoint: forwards the entire HTTP request with a JSON body to the specified target URL.\nHandles both streaming (SSE) and non-streaming responses.\nRequires authentication and checks for a running agent router container for the wallet.","operationId":"agent_router_prompt_agent_router_prompt_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":false,"schema":{"type":"string","description":"Target URL to proxy to (e.g., http://localhost:65534/anything)","title":"Url"},"description":"Target URL to proxy to (e.g., http://localhost:65534/anything)"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/challenge":{"get":{"tags":["Authentication"],"summary":"Get Challenge","operationId":"get_challenge_auth_challenge_get","parameters":[{"name":"wallet","in":"query","required":true,"schema":{"type":"string","description":"Wallet address","title":"Wallet"},"description":"Wallet address"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChallengeResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/token-by-api-key":{"post":{"tags":["Authentication"],"summary":"Login For Access Token By Api Key","description":"Exchange a valid API key (x-api-key header) for a JWT access token.\nCalls Service A to validate and resolve the wallet associated with the API key.","operationId":"login_for_access_token_by_api_key_auth_token_by_api_key_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenResponse"}}}}}}},"/auth/token":{"post":{"tags":["Authentication"],"summary":"Login For Access Token","operationId":"login_for_access_token_auth_token_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/verify":{"post":{"tags":["Authentication"],"summary":"Verify Access Token","operationId":"verify_access_token_auth_verify_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenVerifyRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenVerifyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/validate_jwt":{"get":{"tags":["Authentication"],"summary":"Validate Jwt","description":"Endpoint for Nginx auth_request to validate JWT in Authorization header.\nReturns 200 if valid, 401 if invalid.","operationId":"validate_jwt_validate_jwt_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/agent-router/start":{"post":{"tags":["Agent-router"],"summary":"Agent Router Start","description":"Start the agent router with wallet authentication.\nRequires JWT authentication if SERVER_MODE is True.\nReturns container ID, PID, and host port if successful.","operationId":"agent_router_start_agent_router_start_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Agent Router Start Agent Router Start Post"}}}}},"security":[{"HTTPBearer":[]}]}},"/agent-mount/download":{"get":{"tags":["Agent Mount Storage"],"summary":"Download Agent Mount Zip","description":"Endpoint to download the agent's mounting folder as a zip file.\nRequires authentication. agent_id is provided as a query parameter.\nOnly available in SERVER_MODE.","operationId":"download_agent_mount_zip_agent_mount_download_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"agent_id","in":"query","required":true,"schema":{"type":"string","title":"Agent Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/agent-mount/upload":{"post":{"tags":["Agent Mount Storage"],"summary":"Upload Agent Mount Zip","description":"Endpoint to upload a zip file and extract it to the agent's mounting folder.\nRequires authentication. agent_id is provided as a query parameter.\nOnly available in SERVER_MODE.","operationId":"upload_agent_mount_zip_agent_mount_upload_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"agent_id","in":"query","required":true,"schema":{"type":"string","title":"Agent Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_agent_mount_zip_agent_mount_upload_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/podman/count":{"get":{"tags":["Podman"],"summary":"Podman Count","description":"Return the number of running podman containers (requires authentication).","operationId":"podman_count_podman_count_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/agents":{"get":{"tags":["Agent-AI"],"summary":"Get Agents","description":"Get list of available agents with clean agent names.\nEach agent has an 'agent' field (without number prefix) for easy usage.","operationId":"get_agents_agents_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/v1/prompt":{"post":{"tags":["Agent-AI"],"summary":"Agent Ai Prompt","description":"Simplified agent chat endpoint that automatically handles:\n1. Agent router initialization\n2. Agent discovery by agent identifier\n3. Agent status checking and starting\n4. Forwarding to the actual chat endpoint\n\nThis endpoint provides a cleaner interface compared to the full manual flow.\nAgent identifier is read from the request body.","operationId":"agent_ai_prompt_v1_prompt_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/agent-ai/status":{"post":{"tags":["Agent-AI"],"summary":"Agent Ai Status","description":"Get the current status of an agent by agent identifier.\nReturns agent metadata and current running status.\nAgent identifier is read from the request body.","operationId":"agent_ai_status_agent_ai_status_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/ip-info":{"get":{"tags":["IP-Info"],"summary":"Print Ip Info","operationId":"print_ip_info_ip_info_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/prompt":{"post":{"tags":["Agent-AI-V3"],"summary":"Agent Ai Prompt V3","description":"AI Agent Unified API v3\nCombines both v1 (effect agents) and v2 (external EternalAI API) flows.\n\nRoutes based on agent identifier:\n- If agent is 'generate-image', 'edit-image', or 'generate-video': Use v2 flow (external API)\n- Otherwise: Use v1 flow (effect agents with streaming)\n\nAgent identifier is read from the request body.","operationId":"agent_ai_prompt_v3_prompt_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/v2/prompt":{"post":{"tags":["Agent-AI-V2"],"summary":"Agent Ai Prompt V2","description":"AI Agent Chat API v2 (Non-streaming)\nCalls external EternalAI API for image/video generation/editing without streaming.\nAlways counts as one request for API key usage tracking.\nAgent identifier is read from the request body.","operationId":"agent_ai_prompt_v2_v2_prompt_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/uncensored-video":{"post":{"tags":["Agent-AI-V3-Simplified"],"summary":"Uncensored Video Endpoint","description":"Uncensored Video Generation API\nHandles both text-to-video and image-to-video generation.\n\nRequired body parameters:\n- Other parameters depend on the type (messages for new, image + prompt for edit)","operationId":"uncensored_video_endpoint_uncensored_video_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/uncensored-ai/uncensored-video":{"post":{"tags":["Agent-AI-V3-Simplified"],"summary":"Uncensored Video Endpoint V2","description":"Uncensored Video Generation API (Alternative endpoint)\nSame as /uncensored-video but with /uncensored-ai prefix.\nHandles both text-to-video and image-to-video generation.","operationId":"uncensored_video_endpoint_v2_uncensored_ai_uncensored_video_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/uncensored-image":{"post":{"tags":["Agent-AI-V3-Simplified"],"summary":"Uncensored Image Endpoint","description":"Uncensored Image Generation API\nHandles both new image generation and image editing.\n\nRequired body parameters:\n- type: \"new\" for new image generation (uncensored-imagine), \"edit\" for image editing (uncensored-reimagine)\n- Other parameters depend on the type (messages for new, image + prompt for edit)\n- lora_config: Optional dict with LoRA configuration (if provided, uses internal feed-data API)","operationId":"uncensored_image_endpoint_uncensored_image_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/uncensored-ai/uncensored-image":{"post":{"tags":["Agent-AI-V3-Simplified"],"summary":"Uncensored Image Endpoint V2","description":"Uncensored Image Generation API (Alternative endpoint)\nSame as /uncensored-image but with /uncensored-ai prefix.\nHandles both new image generation and image editing.","operationId":"uncensored_image_endpoint_v2_uncensored_ai_uncensored_image_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/uncensored-chat":{"post":{"tags":["Agent-AI-V3-Simplified"],"summary":"Uncensored Chat Endpoint","description":"Uncensored Chat endpoint with x402 payment support.\n\nAuthentication flow (handled by conditional_require_payment middleware):\n1. Has X-PAYMENT header → x402 payment verification\n2. Has x-api-key header → Bypass payment (traditional API key)\n3. Neither → 402 Payment Required (won't reach this function)\n\nIf this function is reached, the request is already authenticated by middleware.","operationId":"uncensored_chat_endpoint_uncensored_chat_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/uncensored-podcast":{"post":{"tags":["Agent-AI-V3-Simplified"],"summary":"Uncensored Podcast Endpoint","description":"Uncensored Podcast Generation API\nGenerates AI podcasts from topics.\n\nRequired body parameters:\n- topic: The topic/prompt for podcast generation (required)\n- specification: Optional configuration object\n  - style: \"monologue\" or \"dialogue\" (default: \"monologue\")\n  - length: 60, 90, 120, or 180 seconds (default: 60)\n  - language: Language code like \"en-US\", \"vi-VN\" etc (default: \"en-US\")\n  - voices: Optional array of voice configurations","operationId":"uncensored_podcast_endpoint_uncensored_podcast_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/result/uncensored-video":{"get":{"tags":["Agent-AI-V3-Simplified"],"summary":"Uncensored Video Result Endpoint","description":"Get Uncensored Video Generation Result\nGets the result/status of a video generation request.\n\nQuery parameters:\n- request_id: Request ID from previous video generation (required)","operationId":"uncensored_video_result_endpoint_result_uncensored_video_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/uncensored-ai/result/uncensored-video":{"get":{"tags":["Agent-AI-V3-Simplified"],"summary":"Uncensored Video Result Endpoint V2","description":"Get Uncensored Video Generation Result (Alternative endpoint)\nSame as /result/uncensored-video but with /uncensored-ai prefix.\nGets the result/status of a video generation request.","operationId":"uncensored_video_result_endpoint_v2_uncensored_ai_result_uncensored_video_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/result/uncensored-image":{"get":{"tags":["Agent-AI-V3-Simplified"],"summary":"Uncensored Image Result Endpoint","description":"Get Uncensored Image Generation Result\nGets the result/status of an image generation request.\n\nQuery parameters:\n- request_id: Request ID from previous image generation (required)\n  - Old format (UUID): aab247eb-7cbc-403a-afed-2f4aeb368b52\n  - New format (LoRA, 32-char hex): 22f097aa8eb9f26c5d897fc1685ecf80","operationId":"uncensored_image_result_endpoint_result_uncensored_image_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"tags":["Agent-AI-V3-Simplified"],"summary":"Uncensored Image Result Endpoint","description":"Get Uncensored Image Generation Result\nGets the result/status of an image generation request.\n\nQuery parameters:\n- request_id: Request ID from previous image generation (required)\n  - Old format (UUID): aab247eb-7cbc-403a-afed-2f4aeb368b52\n  - New format (LoRA, 32-char hex): 22f097aa8eb9f26c5d897fc1685ecf80","operationId":"uncensored_image_result_endpoint_result_uncensored_image_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/uncensored-ai/result/uncensored-image":{"get":{"tags":["Agent-AI-V3-Simplified"],"summary":"Uncensored Image Result Endpoint V2","description":"Get Uncensored Image Generation Result (Alternative endpoint)\nSame as /result/uncensored-image but with /uncensored-ai prefix.\nGets the result/status of an image generation request.","operationId":"uncensored_image_result_endpoint_v2_uncensored_ai_result_uncensored_image_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"tags":["Agent-AI-V3-Simplified"],"summary":"Uncensored Image Result Endpoint V2","description":"Get Uncensored Image Generation Result (Alternative endpoint)\nSame as /result/uncensored-image but with /uncensored-ai prefix.\nGets the result/status of an image generation request.","operationId":"uncensored_image_result_endpoint_v2_uncensored_ai_result_uncensored_image_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/result/uncensored-podcast":{"get":{"tags":["Agent-AI-V3-Simplified"],"summary":"Uncensored Podcast Result Endpoint","description":"Get Uncensored Podcast Generation Result\nGets the result/status of a podcast generation request.\n\nQuery parameters:\n- request_id: Request ID from previous podcast generation (required)","operationId":"uncensored_podcast_result_endpoint_result_uncensored_podcast_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/result":{"get":{"tags":["Agent-AI-V2"],"summary":"Agent Ai Get Result V2","description":"AI Agent Get Result API v2\nGets the result/status of an image/video/podcast generation request using request_id and agent.\nQuery parameters:\n- request_id: Request ID from previous generation\n- agent: Type of generation ('uncensored-imagine', 'uncensored-reimagine', 'uncensored-video', 'podcasts')","operationId":"agent_ai_get_result_v2_result_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]},{"HTTPBearer":[]}]}},"/edit-image/effects":{"get":{"tags":["AI-Templates"],"summary":"Get Image Effect Templates Endpoint","description":"Get Image Effect Templates\n\nFetches available image effect templates from EternalAI API.\n\nQuery parameters:\n- category: Optional filter by category (e.g., \"NSFW\", \"SFW\")\n- is_nsfw: Optional filter by NSFW status (true/false)\n- tag: Optional filter by tag\n\nReturns:\nArray of image effect template objects:\n[\n    {\n        \"id\": \"Remove clothes\",\n        \"effect_id\": \"a1b2c3d4e5f6g7h8i9j0k1l2\",\n        \"prompt\": \"Make nude completely. Keep everything else unchanged\",\n        \"videoURL\": null,\n        \"is_nsfw\": true,\n        \"category\": \"NSFW\",\n        \"tag\": \"Remove clothes\",\n        \"sourceImageURL\": \"https://...\",\n        \"imageURL\": \"https://...\",\n        \"note\": \"Should be a woman\",\n        \"trigger_words\": [\"remove_clothes\", \"lightning\"]\n    },\n    ...\n]","operationId":"get_image_effect_templates_endpoint_edit_image_effects_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"}},{"name":"is_nsfw","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Nsfw"}},{"name":"tag","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tag"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/edit-image/effect/{effect_id}":{"get":{"tags":["AI-Templates"],"summary":"Get Image Effect Detail Endpoint","description":"Get Image Effect Detail by Effect ID\n\nFetches a single image effect template by effect_id.\n\nPath parameters:\n- effect_id: Encoded effect ID (hex string)\n\nReturns:\nSingle image effect template object:\n{\n    \"id\": \"Remove clothes\",\n    \"effect_id\": \"a1b2c3d4e5f6g7h8i9j0k1l2\",\n    \"prompt\": \"Make nude completely. Keep everything else unchanged\",\n    \"videoURL\": null,\n    \"is_nsfw\": true,\n    \"category\": \"NSFW\",\n    \"tag\": \"Remove clothes\",\n    \"sourceImageURL\": \"https://...\",\n    \"imageURL\": \"https://...\",\n    \"note\": \"Should be a woman\",\n    \"trigger_words\": [\"remove_clothes\", \"lightning\"]\n}","operationId":"get_image_effect_detail_endpoint_edit_image_effect__effect_id__get","parameters":[{"name":"effect_id","in":"path","required":true,"schema":{"type":"string","title":"Effect Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/uncensored-ai/edit-image/effects":{"get":{"tags":["AI-Templates"],"summary":"Get Image Effect Templates Endpoint V2","description":"Get Image Effect Templates (Alternative endpoint)\nSame as /edit-image/effects but with /uncensored-ai prefix.","operationId":"get_image_effect_templates_endpoint_v2_uncensored_ai_edit_image_effects_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"}},{"name":"is_nsfw","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Nsfw"}},{"name":"tag","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tag"}},{"name":"effect_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Effect Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/uncensored-ai/edit-image/effect/{effect_id}":{"get":{"tags":["AI-Templates"],"summary":"Get Image Effect Detail Endpoint V2","description":"Get Image Effect Detail by Effect ID (Alternative endpoint)\nSame as /edit-image/effect/{effect_id} but with /uncensored-ai prefix.","operationId":"get_image_effect_detail_endpoint_v2_uncensored_ai_edit_image_effect__effect_id__get","parameters":[{"name":"effect_id","in":"path","required":true,"schema":{"type":"string","title":"Effect Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/video/effects":{"get":{"tags":["AI-Templates"],"summary":"Get Video Effect Templates Endpoint","description":"Get Video Effect Templates\n\nFetches available video effect templates from EternalAI API.\n\nQuery parameters:\n- category: Optional filter by category (e.g., \"NSFW\", \"SFW\")\n- is_nsfw: Optional filter by NSFW status (true/false)\n- tag: Optional filter by tag\n\nReturns:\nArray of video effect template objects:\n[\n    {\n        \"id\": \"Undress\",\n        \"effect_id\": \"x1y2z3a4b5c6d7e8f9g0h1i2\",\n        \"prompt\": \"quickly undress to reveal all her tits then use her hands to knead her tits\",\n        \"videoURL\": \"https://storage.googleapis.com/eternal-ai/effects-19-11/videos/Undress/output.mp4\",\n        \"is_nsfw\": true,\n        \"category\": \"NSFW\",\n        \"tag\": \"Undress\",\n        \"sourceImageURL\": \"https://...\",\n        \"imageURL\": null,\n        \"note\": \" \",\n        \"trigger_words\": [\"nsfw\"]\n    },\n    ...\n]","operationId":"get_video_effect_templates_endpoint_video_effects_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"}},{"name":"is_nsfw","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Nsfw"}},{"name":"tag","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tag"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/effects/{effect_id}":{"get":{"tags":["AI-Templates"],"summary":"Get Effect Detail Endpoint","description":"Get Video Effect Detail by Effect ID\n\nFetches a single video effect template by effect_id.\n\nPath parameters:\n- effect_id: Encoded effect ID (hex string)\n\nReturns:\nSingle video effect template object:\n{\n    \"id\": \"Undress\",\n    \"effect_id\": \"x1y2z3a4b5c6d7e8f9g0h1i2\",\n    \"prompt\": \"quickly undress to reveal all her tits then use her hands to knead her tits\",\n    \"videoURL\": \"https://storage.googleapis.com/eternal-ai/effects-19-11/videos/Undress/output.mp4\",\n    \"is_nsfw\": true,\n    \"category\": \"NSFW\",\n    \"tag\": \"Undress\",\n    \"sourceImageURL\": \"https://...\",\n    \"imageURL\": null,\n    \"note\": \" \",\n    \"trigger_words\": [\"nsfw\"]\n}","operationId":"get_effect_detail_endpoint_effects__effect_id__get","parameters":[{"name":"effect_id","in":"path","required":true,"schema":{"type":"string","title":"Effect Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/uncensored-ai/video/effects":{"get":{"tags":["AI-Templates"],"summary":"Get Video Effect Templates Endpoint V2","description":"Get Video Effect Templates (Alternative endpoint)\nSame as /video/effects but with /uncensored-ai prefix.","operationId":"get_video_effect_templates_endpoint_v2_uncensored_ai_video_effects_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"}},{"name":"is_nsfw","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Nsfw"}},{"name":"tag","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tag"}},{"name":"effect_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Effect Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/uncensored-ai/video/effect/{effect_id}":{"get":{"tags":["AI-Templates"],"summary":"Get Effect Detail Endpoint V2","description":"Get Video Effect Detail by Effect ID (Alternative endpoint)\nSame as /video/effect/{effect_id} but with /uncensored-ai prefix.","operationId":"get_effect_detail_endpoint_v2_uncensored_ai_video_effect__effect_id__get","parameters":[{"name":"effect_id","in":"path","required":true,"schema":{"type":"string","title":"Effect Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/effects":{"get":{"tags":["AI-Templates"],"summary":"Get All Effect Templates Endpoint","description":"Get All Effect Templates (Image + Video)\n\nFetches all effect templates from EternalAI API with pagination.\n\nQuery parameters:\n- page: Page number for pagination (default: 1)\n- limit: Number of results per page (default: 100)\n- effect_type: Optional filter by type (\"image\" or \"video\"). If None, returns both.\n- category: Optional filter by category (e.g., \"NSFW\", \"SFW\")\n- is_nsfw: Optional filter by NSFW status (true/false)\n- tag: Optional filter by tag\n- order_type: Optional filter by order type (e.g., \"asc\", \"desc\")\n\nReturns:\nArray of effect template objects (both image and video):\n[\n    {\n        \"id\": \"Snow Mood Video\",\n        \"effect_id\": \"536e6f77204d6f6f6420566964656f\",\n        \"prompt\": \"...\",\n        \"videoURL\": \"...\",\n        \"is_nsfw\": false,\n        \"category\": \"SFW\",\n        \"tag\": \"Weather\",\n        \"sourceImageURL\": \"...\",\n        \"imageURL\": null,\n        \"note\": \"...\",\n        \"trigger_words\": [\"snow\", \"mood\"]\n    },\n    ...\n]","operationId":"get_all_effect_templates_endpoint_effects_get","parameters":[{"name":"page","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":1,"title":"Page"}},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":100,"title":"Limit"}},{"name":"effect_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Effect Type"}},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"}},{"name":"is_nsfw","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Nsfw"}},{"name":"order_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Order Type"}},{"name":"tag","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tag"}},{"name":"show_full_fields","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":false,"title":"Show Full Fields"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/uncensored-ai/effects":{"get":{"tags":["AI-Templates"],"summary":"Get All Effect Templates Endpoint V2","description":"Get All Effect Templates (Alternative endpoint)\nSame as /effects but with /uncensored-ai prefix.","operationId":"get_all_effect_templates_endpoint_v2_uncensored_ai_effects_get","parameters":[{"name":"page","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":1,"title":"Page"}},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":100,"title":"Limit"}},{"name":"effect_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Effect Type"}},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"}},{"name":"is_nsfw","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Nsfw"}},{"name":"order_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Order Type"}},{"name":"tag","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tag"}},{"name":"show_full_fields","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":false,"title":"Show Full Fields"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/effect_template":{"get":{"tags":["AI-Templates"],"summary":"Get Effect Templates Endpoint","description":"Get Effect Templates (Legacy - redirects to Image templates)\n\nThis endpoint is kept for backward compatibility.\nUse /image/effect_template for image templates.\nUse /video/effect_template for video templates.","operationId":"get_effect_templates_endpoint_effect_template_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"}},{"name":"is_nsfw","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Nsfw"}},{"name":"tag","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tag"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/x402/client-request":{"post":{"tags":["X402-Client"],"summary":"X402 Client Request","description":"X402 Client Proxy API\n\nDecrypts user's private key and makes authenticated x402 requests.\n\nRequest body:\n{\n    \"encrypted_private_key\": \"base64_encoded_encrypted_pk\",\n    \"base_url\": \"https://api.example.com\",\n    \"endpoint_path\": \"/v1/resource\",\n    \"method\": \"GET|POST|PUT|DELETE\",  // optional, default: GET\n    \"request_body\": {...},  // optional, for POST/PUT\n    \"headers\": {...},  // optional, additional headers\n    \"network\": \"base-sepolia\"  // optional, default: base-sepolia\n}\n\nResponse:\n{\n    \"success\": true,\n    \"status_code\": 200,\n    \"response_data\": {...},\n    \"payment_info\": {\n        \"transaction_hash\": \"0x...\",\n        \"payment_verified\": true\n    },\n    \"error\": null\n}","operationId":"x402_client_request_x402_client_request_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/generate-image/effects":{"get":{"tags":["AI-Templates"],"summary":"Get Generate Image Effect Templates Endpoint","description":"Get Generate Image Effect Templates (Agents)\n\nFetches available image generation effect templates (agents) from EternalAI API.\nAPI automatically filters by type=image.\n\nQuery parameters:\n- page: Page number for pagination (default: 1)\n- limit: Number of results per page (default: 200)\n- search: Optional search query string\n- network_id: Network ID filter (default: 1)\n\nReturns:\nArray of simplified image generation agent objects with only required fields:\n[\n    {\n        \"id\": int,\n        \"name\": str,\n        \"image_url\": str,\n        \"description\": str,\n        \"lora_config\": dict | None  # Extracted from model_config.lora_config\n    },\n    ...\n]","operationId":"get_generate_image_effect_templates_endpoint_generate_image_effects_get","parameters":[{"name":"page","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":1,"title":"Page"}},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":200,"title":"Limit"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}},{"name":"network_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":1,"title":"Network Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/uncensored-ai/generate-image/effects":{"get":{"tags":["AI-Templates"],"summary":"Get Generate Image Effect Templates Endpoint V2","description":"Get Generate Image Effect Templates (Alternative endpoint)\nSame as /generate-image/effects but with /uncensored-ai prefix.","operationId":"get_generate_image_effect_templates_endpoint_v2_uncensored_ai_generate_image_effects_get","parameters":[{"name":"page","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":1,"title":"Page"}},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":200,"title":"Limit"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}},{"name":"network_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":1,"title":"Network Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/generate":{"post":{"tags":["Agent-AI-V3-Simplified"],"summary":"Transform Endpoint","description":"Transform API - Unified Image & Video Transformation\n\nSimplifies the image/video transformation by accepting minimal parameters.\nAutomatically fetches effect details and constructs the appropriate payload\nfor either image or video transformation based on the effect type.\n\nRequired body parameters:\n- images: Array of strings (base64 encoded images or URLs) [REQUIRED]\n- effect_id: String - The encoded effect ID [REQUIRED]\n\nExample request:\n{\n    \"images\": [\n        \"https://cdn.eternalai.org/effects-19-11/images/bikini/input.jpg\",\n        \"data:image/jpeg;base64,/9j/4AAQSkZJRg...\"\n    ],\n    \"effect_id\": \"a1b2c3d4e5f6g7h8i9j0k1l2\"\n}\n\nThe API will:\n1. Fetch effect details using effect_id\n2. Determine if it's image or video transformation based on effect_type\n3. Construct appropriate payload with prompts, loras, and model_id\n4. Forward to /uncensored-image or /uncensored-video endpoint\n\nReturns:\nSame response format as /uncensored-image or /uncensored-video","operationId":"transform_endpoint_generate_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/uncensored-ai/generate":{"post":{"tags":["Agent-AI-V3-Simplified"],"summary":"Transform Endpoint V2","description":"Transform API (Alternative endpoint)\nSame as /transform but with /uncensored-ai prefix.\n\nUnified Image & Video Transformation with simplified payload.","operationId":"transform_endpoint_v2_uncensored_ai_generate_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/poll-result/{request_id}":{"get":{"tags":["Agent-AI-V3-Simplified"],"summary":"Poll Result Endpoint","description":"Poll Result API\n\nPolls result for a request_id by trying both image and video agents.\nReturns the first successful result found.\n\nPath parameters:\n- request_id: Request ID from previous image/video generation (required)\n\nReturns:\nSimplified result object with only essential fields:\n{\n    \"request_id\": str,\n    \"status\": str,\n    \"progress\": int,\n    \"created_at\": str,\n    \"updated_at\": str,\n    \"prompt\": str,\n    \"magic_prompt\": str,\n    \"result_url\": str,  // URL to final result (image or video)\n    \"source_image\": str,\n    \"source_image_url\": str,\n    \"source_image_link\": str,\n    \"log\": str,\n    \"feed_id\": str,  // Only for video\n    \"is_magic_prompt\": bool,  // Only for video\n    \"agent_type\": str  // \"image\" or \"video\" - indicates which agent returned the result\n}","operationId":"poll_result_endpoint_poll_result__request_id__get","parameters":[{"name":"request_id","in":"path","required":true,"schema":{"type":"string","description":"Request ID to poll result for","title":"Request Id"},"description":"Request ID to poll result for"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/uncensored-ai/poll-result/{request_id}":{"get":{"tags":["Agent-AI-V3-Simplified"],"summary":"Poll Result Endpoint V2","description":"Poll Result API (Alternative endpoint)\nSame as /poll-result/{request_id} but with /uncensored-ai prefix.\n\nPolls result for a request_id by trying both image and video agents.","operationId":"poll_result_endpoint_v2_uncensored_ai_poll_result__request_id__get","parameters":[{"name":"request_id","in":"path","required":true,"schema":{"type":"string","description":"Request ID to poll result for","title":"Request Id"},"description":"Request ID to poll result for"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/poll-result":{"get":{"tags":["Agent-AI-V3-Simplified"],"summary":"Poll Result Query Endpoint","description":"Poll Result API (Query param version)\nSame as /poll-result/{request_id} but accepts request_id as a query parameter.\n\nExample: /poll-result?request_id=0093c994-bcbe-4c20-b1f9-443943ae82e3\n\nPolls result for a request_id by trying both image and video agents.","operationId":"poll_result_query_endpoint_poll_result_get","parameters":[{"name":"request_id","in":"query","required":true,"schema":{"type":"string","description":"Request ID to poll result for","title":"Request Id"},"description":"Request ID to poll result for"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/base/generate":{"post":{"tags":["Agent-AI-V3-Simplified"],"summary":"Base Generate Endpoint","description":"Base Generate API - Simple Image & Video Generation\n\nBasic image/video generation without effect templates or model configurations.\nUser provides their own prompt and specifies the type (image or video).\n\nRequired body parameters:\n- images: Array of strings (base64 encoded images or URLs) [REQUIRED]\n- prompt: String - User's custom prompt for transformation [REQUIRED]\n- type: String - Type of generation: \"image\" or \"video\" [REQUIRED]\n\nOptional body parameters:\n- duration: Integer - Desired video duration in seconds (only used when type=\"video\")\n\nExample request for image:\n{\n    \"images\": [\n        \"https://cdn.eternalai.org/effects-19-11/images/bikini/input.jpg\"\n    ],\n    \"prompt\": \"Make the person wear a red dress\",\n    \"type\": \"image\",\n    \"model_id\": \"optional-model-id\"  // optional\n}\n\nExample request for video:\n{\n    \"images\": [\n        \"https://cdn.eternalai.org/effects-19-11/images/bikini/input.jpg\"\n    ],\n    \"prompt\": \"The person waves their hand and smiles\",\n    \"type\": \"video\",\n    \"model_id\": \"optional-model-id\"  // optional\n}\n\nThe API will:\n1. Validate prompt, images, and type parameters\n2. Build basic payload with user's prompt\n3. Forward to /uncensored-image or /uncensored-video endpoint\n\nReturns:\nSame response format as /uncensored-image or /uncensored-video","operationId":"base_generate_endpoint_base_generate_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/uncensored-ai/base/generate":{"post":{"tags":["Agent-AI-V3-Simplified"],"summary":"Base Generate Endpoint V2","description":"Base Generate API (Alternative endpoint)\nSame as /base/generate but with /uncensored-ai prefix.\n\nSimple Image & Video Generation with user's custom prompt.","operationId":"base_generate_endpoint_v2_uncensored_ai_base_generate_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/creative-ai/image":{"post":{"tags":["Agent-AI-V3-Simplified"],"summary":"Creative Image Endpoint","description":"Creative Image Generation API (Alternative endpoint)\nSame as /uncensored-image but with /creative-ai prefix.\nHandles both new image generation and image editing.\nAgent names should NOT contain 'uncensored-' prefix (e.g., 'imagine' instead of 'uncensored-imagine').","operationId":"creative_image_endpoint_creative_ai_image_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/creative-ai/video":{"post":{"tags":["Agent-AI-V3-Simplified"],"summary":"Creative Video Endpoint","description":"Creative Video Generation API (Alternative endpoint)\nSame as /uncensored-video but with /creative-ai prefix.\nHandles both text-to-video and image-to-video generation.\nAgent names should NOT contain 'uncensored-' prefix (e.g., 'video' instead of 'uncensored-video').","operationId":"creative_video_endpoint_creative_ai_video_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/creative-ai/edit-image/effects":{"get":{"tags":["AI-Templates"],"summary":"Creative Get Image Effect Templates Endpoint","description":"Get Image Effect Templates (Alternative endpoint)\nSame as /edit-image/effects but with /creative-ai prefix.","operationId":"creative_get_image_effect_templates_endpoint_creative_ai_edit_image_effects_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"}},{"name":"is_nsfw","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Nsfw"}},{"name":"tag","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tag"}},{"name":"effect_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Effect Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/creative-ai/edit-image/effect/{effect_id}":{"get":{"tags":["AI-Templates"],"summary":"Creative Get Image Effect Detail Endpoint","description":"Get Image Effect Detail by Effect ID (Alternative endpoint)\nSame as /edit-image/effect/{effect_id} but with /creative-ai prefix.","operationId":"creative_get_image_effect_detail_endpoint_creative_ai_edit_image_effect__effect_id__get","parameters":[{"name":"effect_id","in":"path","required":true,"schema":{"type":"string","title":"Effect Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/creative-ai/video/effects":{"get":{"tags":["AI-Templates"],"summary":"Creative Get Video Effect Templates Endpoint","description":"Get Video Effect Templates (Alternative endpoint)\nSame as /video/effects but with /creative-ai prefix.","operationId":"creative_get_video_effect_templates_endpoint_creative_ai_video_effects_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"}},{"name":"is_nsfw","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Nsfw"}},{"name":"tag","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tag"}},{"name":"effect_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Effect Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/creative-ai/video/effect/{effect_id}":{"get":{"tags":["AI-Templates"],"summary":"Creative Get Effect Detail Endpoint","description":"Get Video Effect Detail by Effect ID (Alternative endpoint)\nSame as /video/effect/{effect_id} but with /creative-ai prefix.","operationId":"creative_get_effect_detail_endpoint_creative_ai_video_effect__effect_id__get","parameters":[{"name":"effect_id","in":"path","required":true,"schema":{"type":"string","title":"Effect Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/creative-ai/effects":{"get":{"tags":["AI-Templates"],"summary":"Creative Get All Effect Templates Endpoint","description":"Get All Effect Templates (Alternative endpoint)\nSame as /effects but with /creative-ai prefix.","operationId":"creative_get_all_effect_templates_endpoint_creative_ai_effects_get","parameters":[{"name":"page","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":1,"title":"Page"}},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":100,"title":"Limit"}},{"name":"effect_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Effect Type"}},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"}},{"name":"is_nsfw","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Nsfw"}},{"name":"order_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Order Type"}},{"name":"tag","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tag"}},{"name":"show_full_fields","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":false,"title":"Show Full Fields"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/creative-ai/generate-image/effects":{"get":{"tags":["AI-Templates"],"summary":"Creative Get Generate Image Effect Templates Endpoint","description":"Get Generate Image Effect Templates (Alternative endpoint)\nSame as /generate-image/effects but with /creative-ai prefix.","operationId":"creative_get_generate_image_effect_templates_endpoint_creative_ai_generate_image_effects_get","parameters":[{"name":"page","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":1,"title":"Page"}},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":200,"title":"Limit"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}},{"name":"network_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":1,"title":"Network Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/creative-ai/generate":{"post":{"tags":["Agent-AI-V3-Simplified"],"summary":"Creative Transform Endpoint","description":"Transform API (Alternative endpoint)\nSame as /generate but with /creative-ai prefix.\n\nUnified Image & Video Transformation with simplified payload.\nAgent names should NOT contain 'uncensored-' prefix (e.g., 'imagine' instead of 'uncensored-imagine').","operationId":"creative_transform_endpoint_creative_ai_generate_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/creative-ai/poll-result/{request_id}":{"get":{"tags":["Agent-AI-V3-Simplified"],"summary":"Creative Poll Result Endpoint","description":"Poll Result API (Alternative endpoint)\nSame as /poll-result/{request_id} but with /creative-ai prefix.\n\nPolls result for a request_id by trying both image and video agents.","operationId":"creative_poll_result_endpoint_creative_ai_poll_result__request_id__get","parameters":[{"name":"request_id","in":"path","required":true,"schema":{"type":"string","description":"Request ID to poll result for","title":"Request Id"},"description":"Request ID to poll result for"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/creative-ai/poll-result":{"get":{"tags":["Agent-AI-V3-Simplified"],"summary":"Creative Poll Result Query Endpoint","description":"Poll Result API (Alternative endpoint with query param)\nSame as /creative-ai/poll-result/{request_id} but accepts request_id as a query parameter.\n\nExample: /creative-ai/poll-result?request_id=0093c994-bcbe-4c20-b1f9-443943ae82e3\n\nPolls result for a request_id by trying both image and video agents.","operationId":"creative_poll_result_query_endpoint_creative_ai_poll_result_get","parameters":[{"name":"request_id","in":"query","required":true,"schema":{"type":"string","description":"Request ID to poll result for","title":"Request Id"},"description":"Request ID to poll result for"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/creative-ai/base/generate":{"post":{"tags":["Agent-AI-V3-Simplified"],"summary":"Creative Base Generate Endpoint","description":"Base Generate API (Alternative endpoint)\nSame as /base/generate but with /creative-ai prefix.\n\nSimple Image & Video Generation with user's custom prompt.\nAgent names should NOT contain 'uncensored-' prefix (e.g., 'imagine' instead of 'uncensored-imagine').","operationId":"creative_base_generate_endpoint_creative_ai_base_generate_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/creative-ai/result/image":{"get":{"tags":["Agent-AI-V3-Simplified"],"summary":"Creative Image Result Endpoint","description":"Get Creative Image Generation Result (Alternative endpoint)\nSame as /result/uncensored-image but with /creative-ai prefix.\nGets the result/status of an image generation request.","operationId":"creative_image_result_endpoint_creative_ai_result_image_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"tags":["Agent-AI-V3-Simplified"],"summary":"Creative Image Result Endpoint","description":"Get Creative Image Generation Result (Alternative endpoint)\nSame as /result/uncensored-image but with /creative-ai prefix.\nGets the result/status of an image generation request.","operationId":"creative_image_result_endpoint_creative_ai_result_image_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/creative-ai/result/video":{"get":{"tags":["Agent-AI-V3-Simplified"],"summary":"Creative Video Result Endpoint","description":"Get Creative Video Generation Result (Alternative endpoint)\nSame as /result/uncensored-video but with /creative-ai prefix.\nGets the result/status of a video generation request.","operationId":"creative_video_result_endpoint_creative_ai_result_video_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/content/safety-check":{"post":{"tags":["Content-Safety"],"summary":"Content Safety Check Endpoint","description":"Content Safety Check API\n\nChecks if prompt and images are safe using EternalAI content moderation.\n\nRequired body parameters:\n- prompt: Text prompt to check (required)\n- images: Array of image URLs to check (optional)\n\nExample request:\n{\n    \"prompt\": \"remove clothes\",\n    \"images\": [\"https://i.ibb.co/wN6kzhqQ/IMG-3718.png\"]\n}\n\nReturns:\n{\n    \"is_safe\": bool,\n    \"reason\": str,\n    \"details\": dict\n}","operationId":"content_safety_check_endpoint_content_safety_check_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/chat/completions":{"post":{"summary":"Chat Completions Proxy","description":"Proxy /v1/chat/completions to an upstream provider.\nCurrently hardcoded to EternalAI smart-agent API and no longer depends on MongoDB.","operationId":"chat_completions_proxy_v1_chat_completions_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/balance":{"get":{"summary":"Get Balance","description":"Get diamond_balance for the authenticated API key.\nAccepts API key via x-api-key header or Authorization: Bearer <api_key>.","operationId":"get_balance_v1_balance_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/wallet":{"get":{"summary":"Get Wallet","description":"Get wallet address derived from API key.\nAccepts API key via x-api-key header or Authorization: Bearer <api_key>.","operationId":"get_wallet_v1_wallet_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/internal/x402-payment":{"post":{"tags":["Internal"],"summary":"Internal X402 Payment","description":"**INTERNAL API - X402 Payment Charge (Production)**\n\nActually charges x402 payment using x402HttpxClient with random private key.\nThis API makes real payment transactions on-chain.\n\n**Request Body:**\n```json\n{\n    \"agent\": \"chat\" | \"image\" | \"video\",  // Required\n    \"type\": \"new\" | \"edit\",               // Optional, default: \"new\"\n    \"messages\": [...],                     // Optional, for compatibility\n    \"prompt\": \"...\",                       // Optional\n    \"plan\": \"basic\" | \"advanced\" | \"ultimate\"  // Optional for dynamic pricing\n}\n```\n\n**Response:**\n```json\n{\n    \"success\": true,\n    \"agent\": \"chat\",\n    \"type\": \"new\",\n    \"payment_charged\": true,\n    \"payment_method\": \"x402\",\n    \"wallet\": \"0x...\",\n    \"transaction_hash\": \"0x...\",\n    \"amount_paid\": \"$0.029\"\n}\n```\n\n**Note:** This API uses private keys from environment variable X402_PRIVATE_KEYS (comma-separated).\nExample: X402_PRIVATE_KEYS='0xkey1,0xkey2,0xkey3'","operationId":"internal_x402_payment_internal_x402_payment_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/subscription/prompt":{"post":{"tags":["Agent-Subscription"],"summary":"Agent Subscription Prompt","description":"AI Agent API for Subscription Users (TK1 Token)\nSupports both v1 (vibe agents) and v2 (external EternalAI API) flows.\n\nRoutes based on agent identifier:\n- If agent is 'uncensored-imagine', 'uncensored-reimagine', or 'uncensored-video': Use v2 flow (external API)\n- Otherwise: Use v1 flow (vibe agents with streaming)\n\nAgent identifier is read from the request body.\nRequires TK1 token in authorization header.","operationId":"agent_subscription_prompt_subscription_prompt_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/agent/reviews":{"get":{"tags":["Vibe Agent Metadata"],"summary":"Api Get Agent Reviews","description":"Endpoint to get the list of reviews for a given agent.","operationId":"api_get_agent_reviews_agent_reviews_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"agent_id","in":"query","required":true,"schema":{"type":"string","description":"Agent ID to get reviews for","title":"Agent Id"},"description":"Agent ID to get reviews for"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/agent/review":{"post":{"tags":["Vibe Agent Metadata"],"summary":"Api Post Agent Review","description":"Endpoint to post a review for a given agent.","operationId":"api_post_agent_review_agent_review_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReviewRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/vibe-agent/{agent_id}/dependency":{"get":{"tags":["Vibe-agent"],"summary":"Api Check Agent Dependency","description":"Endpoint to check if agent A depends on agent B.\nReturns: {\"success\": True, \"depends\": True/False}","operationId":"api_check_agent_dependency_vibe_agent__agent_id__dependency_get","parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","title":"Agent Id"}},{"name":"dependency_id","in":"query","required":true,"schema":{"type":"string","description":"Agent B ID to check dependency","title":"Dependency Id"},"description":"Agent B ID to check dependency"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/notifier/notify":{"post":{"tags":["Notifier"],"summary":"Notify","description":"Admin endpoint to send notifications\nRequires admin secret key in query parameter if server mode","operationId":"notify_notifier_notify_post","parameters":[{"name":"key","in":"query","required":true,"schema":{"type":"string","description":"Notifier secret key","title":"Key"},"description":"Notifier secret key"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/notifier/send-noti-sse":{"post":{"tags":["Notifier"],"summary":"Send Notification Sse","description":"Admin endpoint to send SSE notifications\nRequires admin secret key in query parameter if server mode","operationId":"send_notification_sse_notifier_send_noti_sse_post","parameters":[{"name":"key","in":"query","required":true,"schema":{"type":"string","description":"Notifier secret key","title":"Key"},"description":"Notifier secret key"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/job-manager-settings":{"get":{"tags":["Job-Setting"],"summary":"Get Job Manager Settings","description":"Get current job manager settings from environment variables.","operationId":"get_job_manager_settings_job_manager_settings_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobManagerSettings"}}}}}},"put":{"tags":["Job-Setting"],"summary":"Update Job Manager Settings","description":"Update job manager settings in environment variables.","operationId":"update_job_manager_settings_job_manager_settings_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobManagerSettings"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobManagerSettings"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/llm-settings":{"get":{"tags":["LLM-Setting"],"summary":"Get Llm Settings","description":"Get current LLM settings from environment variables.","operationId":"get_llm_settings_llm_settings_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LLMSettings"}}}}}},"post":{"tags":["LLM-Setting"],"summary":"Update Llm Settings","description":"Update LLM settings in environment variables.","operationId":"update_llm_settings_llm_settings_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LLMSettings"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LLMSettings"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/safety-check":{"post":{"summary":"Safety Check","operationId":"safety_check_safety_check_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v2/character/create":{"post":{"summary":"Create Character","description":"Create a character from text description.\nRequires x-api-key header for authentication and diamond deduction.","operationId":"create_character_v2_character_create_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/character/poll-result/{character_id}":{"get":{"summary":"Get Character","description":"Get character info by ID (poll result).","operationId":"get_character_v2_character_poll_result__character_id__get","parameters":[{"name":"character_id","in":"path","required":true,"schema":{"type":"integer","title":"Character Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/characters":{"get":{"summary":"List Characters","description":"List all characters with pagination.","operationId":"list_characters_v2_characters_get","parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"title":"Page"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/poll-result/{request_id}":{"get":{"summary":"V2 Poll Result","description":"Poll result for image/video generation. Tries image first, then video.","operationId":"v2_poll_result_v2_poll_result__request_id__get","parameters":[{"name":"request_id","in":"path","required":true,"schema":{"type":"string","title":"Request Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/generate":{"post":{"summary":"V2 Generate Endpoint","description":"Effect-based transformation. images must be character IDs.","operationId":"v2_generate_endpoint_v2_generate_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/base/generate":{"post":{"summary":"V2 Base Generate Endpoint","description":"Simple generation with custom prompt. images must be character IDs.","operationId":"v2_base_generate_endpoint_v2_base_generate_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/effects":{"get":{"tags":["AI-Templates"],"summary":"V2 Get All Effect Templates","description":"Get All Effect Templates (Image + Video)\n\nFetches all effect templates from EternalAI API with pagination and filters.","operationId":"v2_get_all_effect_templates_v2_effects_get","parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","description":"Page number for pagination","default":1,"title":"Page"},"description":"Page number for pagination"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","description":"Number of results per page","default":100,"title":"Limit"},"description":"Number of results per page"},{"name":"effect_type","in":"query","required":false,"schema":{"type":"string","description":"Filter by type: 'image' or 'video'","title":"Effect Type"},"description":"Filter by type: 'image' or 'video'"},{"name":"category","in":"query","required":false,"schema":{"type":"string","description":"Filter by category, e.g. 'NSFW', 'SFW'","title":"Category"},"description":"Filter by category, e.g. 'NSFW', 'SFW'"},{"name":"is_nsfw","in":"query","required":false,"schema":{"type":"boolean","description":"Filter by NSFW status","title":"Is Nsfw"},"description":"Filter by NSFW status"},{"name":"order_type","in":"query","required":false,"schema":{"type":"string","description":"Order type: 'asc' or 'desc'","title":"Order Type"},"description":"Order type: 'asc' or 'desc'"},{"name":"tag","in":"query","required":false,"schema":{"type":"string","description":"Filter by tag","title":"Tag"},"description":"Filter by tag"},{"name":"show_full_fields","in":"query","required":false,"schema":{"type":"boolean","description":"Show all fields","default":false,"title":"Show Full Fields"},"description":"Show all fields"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_upload_agent_mount_zip_agent_mount_upload_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_agent_mount_zip_agent_mount_upload_post"},"ChallengeResponse":{"properties":{"challenge":{"type":"string","title":"Challenge"}},"type":"object","required":["challenge"],"title":"ChallengeResponse"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"JobManagerSettings":{"properties":{"enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Enabled"},"readme_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Readme Url"},"output_file":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Output File"},"max_repos":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Repos"}},"type":"object","title":"JobManagerSettings","description":"Settings for the job manager."},"LLMSettings":{"properties":{"api_base_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Base Url"},"api_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Key"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model"}},"type":"object","title":"LLMSettings"},"NotificationRequest":{"properties":{"event_type":{"type":"string","title":"Event Type","description":"Event type as string"},"data":{"additionalProperties":true,"type":"object","title":"Data","description":"Event data"}},"type":"object","required":["event_type","data"],"title":"NotificationRequest"},"ReviewRequest":{"properties":{"agent_id":{"type":"string","title":"Agent Id","description":"Agent ID to review"},"comment":{"type":"string","title":"Comment","description":"Review comment"},"rating":{"type":"integer","title":"Rating","description":"Rating (1-5)"},"user_wallet":{"type":"string","title":"User Wallet","description":"User wallet address"}},"type":"object","required":["agent_id","comment","rating","user_wallet"],"title":"ReviewRequest"},"TokenRequest":{"properties":{"signature":{"type":"string","title":"Signature"},"wallet":{"type":"string","title":"Wallet"},"challenge":{"type":"string","title":"Challenge"}},"type":"object","required":["signature","wallet","challenge"],"title":"TokenRequest"},"TokenResponse":{"properties":{"access_token":{"type":"string","title":"Access Token"},"token_type":{"type":"string","title":"Token Type","default":"bearer"}},"type":"object","required":["access_token"],"title":"TokenResponse"},"TokenVerifyRequest":{"properties":{"token":{"type":"string","title":"Token"}},"type":"object","required":["token"],"title":"TokenVerifyRequest"},"TokenVerifyResponse":{"properties":{"valid":{"type":"boolean","title":"Valid"},"wallet":{"type":"string","title":"Wallet"},"detail":{"type":"string","title":"Detail"}},"type":"object","required":["valid"],"title":"TokenVerifyResponse"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}},"securitySchemes":{"HTTPBearer":{"type":"http","scheme":"bearer"}}}}