{"openapi":"3.1.0","info":{"title":"Crow Backend - Multi-Tenant SaaS","version":"0.1.0"},"paths":{"/api/organizations/me":{"get":{"tags":["organizations"],"summary":"Get My Organization","description":"Get organization for current user","operationId":"get_my_organization_api_organizations_me_get","parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/organizations/initialize":{"post":{"tags":["organizations"],"summary":"Initialize Organization","description":"Initialize organization in database on first login","operationId":"initialize_organization_api_organizations_initialize_post","parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrganizationInitializeRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/products/":{"get":{"tags":["products"],"summary":"Get Product","description":"Get the single product for the organization (product ID is org_id)","operationId":"get_product_api_products__get","parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/products/mcp-presets":{"get":{"tags":["products"],"summary":"Get Mcp Presets","description":"Get available MCP server presets","operationId":"get_mcp_presets_api_products_mcp_presets_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/products/resolve-key":{"get":{"tags":["products"],"summary":"Resolve Api Key","description":"Resolve an API key (service_key) to a product_id.\nUsed by @usecrow/mcp to auto-discover the product from CROW_API_KEY.","operationId":"resolve_api_key_api_products_resolve_key_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/products/{product_id}":{"get":{"tags":["products"],"summary":"Get Product By Id","description":"Get single product details by ID (product ID is organization name)","operationId":"get_product_by_id_api_products__product_id__get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/products/{product_id}/connection":{"get":{"tags":["products"],"summary":"Get Connection","description":"Get API connection details for a product","operationId":"get_connection_api_products__product_id__connection_get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["products"],"summary":"Update Connection","description":"Update API connection details for a product","operationId":"update_connection_api_products__product_id__connection_put","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIConnectionUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["products"],"summary":"Delete Connection","description":"Remove API connection from a product","operationId":"delete_connection_api_products__product_id__connection_delete","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/products/{product_id}/endpoint-configs":{"get":{"tags":["products"],"summary":"Get Endpoint Configs","description":"Get all subdomain endpoint configurations for a product","operationId":"get_endpoint_configs_api_products__product_id__endpoint_configs_get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["products"],"summary":"Update Endpoint Configs","description":"Replace all subdomain endpoint configurations","operationId":"update_endpoint_configs_api_products__product_id__endpoint_configs_put","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Request"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["products"],"summary":"Merge Endpoint Configs","description":"Bulk merge subdomain endpoint configurations.\n\nAdds new subdomains and updates existing ones without deleting any.\nUse this to bulk-import subdomains from an external system.\n\nRequest body:\n{\n    \"configs\": {\n        \"workspace1\": {\n            \"api_base_url\": \"https://workspace1.example.com\",\n            \"api_auth_config\": { \"auth_type\": \"bearer\", \"token\": \"sk-abc123\" }\n        },\n        \"workspace2\": { ... }\n    }\n}","operationId":"merge_endpoint_configs_api_products__product_id__endpoint_configs_patch","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Request"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/products/{product_id}/endpoint-configs/{subdomain}":{"put":{"tags":["products"],"summary":"Upsert Endpoint Config","description":"Create or update a single subdomain endpoint configuration","operationId":"upsert_endpoint_config_api_products__product_id__endpoint_configs__subdomain__put","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"subdomain","in":"path","required":true,"schema":{"type":"string","title":"Subdomain"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Config"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["products"],"summary":"Delete Endpoint Config","description":"Delete a single subdomain endpoint configuration","operationId":"delete_endpoint_config_api_products__product_id__endpoint_configs__subdomain__delete","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"subdomain","in":"path","required":true,"schema":{"type":"string","title":"Subdomain"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/products/{product_id}/name":{"put":{"tags":["products"],"summary":"Update Product Name","description":"Update product/agent name\n\nThis is the display name shown in the widget and dashboard.","operationId":"update_product_name_api_products__product_id__name_put","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductNameRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/products/{product_id}/initial-suggestions":{"put":{"tags":["products"],"summary":"Update Initial Suggestions","description":"Update initial suggestion buttons shown at the start of new conversations.\n\nEach suggestion has a label (button text) and message (sent when clicked).\nSet to None or empty list to disable initial suggestions.","operationId":"update_initial_suggestions_api_products__product_id__initial_suggestions_put","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InitialSuggestionsRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["products"],"summary":"Get Initial Suggestions","description":"Get initial suggestion buttons for a product","operationId":"get_initial_suggestions_api_products__product_id__initial_suggestions_get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/products/{product_id}/tool-suggestable":{"put":{"tags":["products"],"summary":"Update Tool Suggestable","description":"Update whether a tool is suggestable as a quick action button.\n\nSets suggestable and suggestion_label on the tool in both all_tools and selected_tools.","operationId":"update_tool_suggestable_api_products__product_id__tool_suggestable_put","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolSuggestableRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/products/{product_id}/show-thinking":{"put":{"tags":["products"],"summary":"Update Show Thinking","description":"Update whether to show AI thinking/reasoning to users in the widget","operationId":"update_show_thinking_api_products__product_id__show_thinking_put","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShowThinkingRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/products/{product_id}/suggest-actions-enabled":{"put":{"tags":["products"],"summary":"Update Suggest Actions Enabled","description":"Toggle whether the agent can show suggested action buttons to users","operationId":"update_suggest_actions_enabled_api_products__product_id__suggest_actions_enabled_put","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuggestActionsEnabledRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/products/{product_id}/code-mode-enabled":{"put":{"tags":["products"],"summary":"Update Code Mode Enabled","description":"Toggle whether the agent runs in code mode (JS sandbox with execute_code meta-tool)","operationId":"update_code_mode_enabled_api_products__product_id__code_mode_enabled_put","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CodeModeEnabledRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/products/{product_id}/persist-anonymous-conversations":{"put":{"tags":["products"],"summary":"Update Persist Anonymous Conversations","description":"Update whether to persist anonymous user conversations across page refreshes.\n\nWhen enabled (default): Anonymous conversation IDs are stored in localStorage\nand restored on page refresh, maintaining conversation history.\n\nWhen disabled: Conversations are only persisted during navigation within the app.\nA page refresh will start a fresh conversation.","operationId":"update_persist_anonymous_conversations_api_products__product_id__persist_anonymous_conversations_put","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PersistAnonymousConversationsRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/products/{product_id}/page-context-enabled":{"put":{"tags":["products"],"summary":"Update Page Context Enabled","description":"Update whether to send page context (URL path and custom context) to the AI.\n\nWhen enabled (default): The widget sends the current page path and any custom\ncontext set via setContext() to the AI, allowing contextual awareness.\n\nWhen disabled: No page context is sent to the AI.","operationId":"update_page_context_enabled_api_products__product_id__page_context_enabled_put","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PageContextEnabledRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/products/{product_id}/model-temperature":{"put":{"tags":["products"],"summary":"Update Model Temperature","description":"Update LLM temperature (0-2) for this product's agent.","operationId":"update_model_temperature_api_products__product_id__model_temperature_put","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelTemperatureRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/products/{product_id}/model":{"put":{"tags":["products"],"summary":"Update Model","description":"Update AI model selection for this product's agent.","operationId":"update_model_api_products__product_id__model_put","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/products/{product_id}/model-selection":{"put":{"tags":["products"],"summary":"Update Model Selection","description":"Update model selection settings for a product.","operationId":"update_model_selection_api_products__product_id__model_selection_put","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelSelectionUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/products/{product_id}/extended-thinking":{"put":{"tags":["products"],"summary":"Update Extended Thinking","description":"Enable/disable extended thinking for Claude models.","operationId":"update_extended_thinking_api_products__product_id__extended_thinking_put","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExtendedThinkingRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/products/{product_id}/prompt-full-override":{"put":{"tags":["products"],"summary":"Update Prompt Full Override","description":"Enable/disable full system prompt override (skip default Crow guardrails).","operationId":"update_prompt_full_override_api_products__product_id__prompt_full_override_put","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PromptFullOverrideRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/products/{product_id}/rag-settings":{"put":{"tags":["products"],"summary":"Update Rag Settings","description":"Update RAG (Retrieval-Augmented Generation) settings for a product.\n\n- rag_k: Number of documents to retrieve (1-20)\n- rag_threshold: Minimum similarity score (0-1). \n  NULL means no filtering - all retrieved docs are passed to the LLM.","operationId":"update_rag_settings_api_products__product_id__rag_settings_put","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RAGSettingsRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["products"],"summary":"Get Rag Settings","description":"Get RAG (Retrieval-Augmented Generation) settings for a product.","operationId":"get_rag_settings_api_products__product_id__rag_settings_get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/products/{product_id}/tool-settings":{"get":{"tags":["products"],"summary":"Get Tool Settings","description":"Get tool retrieval settings for a product.","operationId":"get_tool_settings_api_products__product_id__tool_settings_get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["products"],"summary":"Update Tool Settings","description":"Update tool retrieval settings for a product.\n\n- tool_retrieval_k: Number of tools to retrieve per query (1-100)","operationId":"update_tool_settings_api_products__product_id__tool_settings_put","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolSettingsRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/products/{product_id}/tool-consent-settings":{"get":{"tags":["products"],"summary":"Get Tool Consent Settings","description":"Get tool consent settings for a product.","operationId":"get_tool_consent_settings_api_products__product_id__tool_consent_settings_get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["products"],"summary":"Update Tool Consent Settings","description":"Update tool consent settings for a product.","operationId":"update_tool_consent_settings_api_products__product_id__tool_consent_settings_put","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolConsentSettingsRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/products/{product_id}/welcome-message":{"put":{"tags":["products"],"summary":"Update Welcome Message","description":"Update the welcome message shown when the chat widget opens.\n\nSet to a string to use a custom message, or null to use the SDK default.","operationId":"update_welcome_message_api_products__product_id__welcome_message_put","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WelcomeMessageRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/products/{product_id}/system-prompt":{"post":{"tags":["products"],"summary":"Update System Prompt","description":"Update AI agent system prompt/instructions\n\nThis prompt customizes how the AI agent behaves and responds to users.","operationId":"update_system_prompt_api_products__product_id__system_prompt_post","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SystemPromptRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/products/{product_id}/verbosity":{"put":{"tags":["products"],"summary":"Update Verbosity","description":"Update AI agent response style/verbosity settings\n\nControls how verbose or concise the agent's responses are.\nOptions: 'concise', 'balanced', 'detailed', or 'custom' (with custom instructions).","operationId":"update_verbosity_api_products__product_id__verbosity_put","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerbosityRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["products"],"summary":"Get Verbosity","description":"Get AI agent response style/verbosity settings","operationId":"get_verbosity_api_products__product_id__verbosity_get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/products/{product_id}/browser-agent":{"get":{"tags":["products"],"summary":"Get Browser Agent Config","description":"Get browser agent configuration\n\nReturns:\n    - enabled: Whether browser_use tool is available\n    - instructions: Custom instructions injected into browser agent system prompt","operationId":"get_browser_agent_config_api_products__product_id__browser_agent_get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["products"],"summary":"Update Browser Agent Config","description":"Update browser agent configuration\n\n- enabled: Enable/disable the browser_use tool\n- instructions: Custom instructions injected into browser agent system prompt","operationId":"update_browser_agent_config_api_products__product_id__browser_agent_put","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrowserAgentConfigRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/products/{product_id}/screen-context":{"get":{"tags":["products"],"summary":"Get Screen Context Config","description":"Get screen context (whatsOnScreen) configuration","operationId":"get_screen_context_config_api_products__product_id__screen_context_get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["products"],"summary":"Update Screen Context Config","description":"Update screen context (whatsOnScreen) configuration","operationId":"update_screen_context_config_api_products__product_id__screen_context_put","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScreenContextConfigRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/products/{product_id}/page-navigation":{"get":{"tags":["products"],"summary":"Get Page Navigation Config","description":"Get page navigation configuration","operationId":"get_page_navigation_config_api_products__product_id__page_navigation_get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["products"],"summary":"Update Page Navigation Config","description":"Update page navigation configuration","operationId":"update_page_navigation_config_api_products__product_id__page_navigation_put","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PageNavigationConfigRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/products/{product_id}/website":{"post":{"tags":["products"],"summary":"Ingest Website","description":"Ingest website content into product's knowledge base\n\nReturns job_id for polling ingestion status.\nScrapes the website, extracts text content, and adds to vector store.","operationId":"ingest_website_api_products__product_id__website_post","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebsiteRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["products"],"summary":"Delete Website","description":"Delete all chunks for a website filename from the knowledge base.\n\nRemoves ALL document_ids matching the filename (handles duplicates from\nmultiple ingestions of the same URL). Also clears website_url if no\nwebsite documents remain.","operationId":"delete_website_api_products__product_id__website_delete","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteWebsiteRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/products/{product_id}/upload-jobs/{job_id}/status":{"get":{"tags":["products"],"summary":"Get Upload Status","description":"Get status of an upload job\n\nPoll this endpoint to check upload progress.\nReturns status, progress percentage, and current page (for multimodal).","operationId":"get_upload_status_api_products__product_id__upload_jobs__job_id__status_get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/products/{product_id}/upload-url":{"get":{"tags":["products"],"summary":"Get Upload Url","description":"Get S3 presigned URL for uploading large files\n\nUse this for files > 4.5MB to bypass Vercel's body size limit.","operationId":"get_upload_url_api_products__product_id__upload_url_get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"filename","in":"query","required":true,"schema":{"type":"string","title":"Filename"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/products/{product_id}/files":{"post":{"tags":["products"],"summary":"Upload File","description":"Upload a document to product's knowledge base (direct upload for small files < 4.5MB)\n\nReturns job_id for polling upload status.\nFor files > 4.5MB, use GET /upload-url and POST /files/from-s3 instead.","operationId":"upload_file_api_products__product_id__files_post","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_file_api_products__product_id__files_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/products/{product_id}/files/from-s3":{"post":{"tags":["products"],"summary":"Upload File From S3","description":"Upload a document from S3 to product's knowledge base (for large files > 4.5MB)\n\nReturns job_id for polling upload status.\nAfter uploading file to S3 via presigned URL, call this endpoint to process it.","operationId":"upload_file_from_s3_api_products__product_id__files_from_s3_post","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/S3FileRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/products/{product_id}/files/{document_id}":{"delete":{"tags":["products"],"summary":"Delete File","description":"Delete a document from product's knowledge base\n\nRemoves all chunks for this document from the vector store.","operationId":"delete_file_api_products__product_id__files__document_id__delete","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"document_id","in":"path","required":true,"schema":{"type":"string","title":"Document Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/products/{product_id}/smart-documents":{"post":{"tags":["products"],"summary":"Upload Smart Document","description":"Upload a pre-processed markdown document with domain tagging.\n\nThis is the smart ingestion path for Phase 0 pre-processed documents.\nUses section-aware chunking and tags chunks with a knowledge domain.\n\n- file: Enriched markdown file (.md)\n- domain: Knowledge domain tag (e.g., 'fortinet_vpn', 'cisco_vpn')","operationId":"upload_smart_document_api_products__product_id__smart_documents_post","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_smart_document_api_products__product_id__smart_documents_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/products/{product_id}/knowledge-manifest":{"post":{"tags":["products"],"summary":"Upload Knowledge Manifest","description":"Upload or update the knowledge manifest for a product.\n\nThe manifest describes all knowledge domains, their cases, and example\nutterances. Used by the intent router to classify user messages.","operationId":"upload_knowledge_manifest_api_products__product_id__knowledge_manifest_post","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["products"],"summary":"Get Knowledge Manifest","description":"Get the current knowledge manifest for a product.","operationId":"get_knowledge_manifest_api_products__product_id__knowledge_manifest_get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/products/{product_id}/openapi":{"post":{"tags":["products"],"summary":"Upload Openapi Spec","description":"Upload and parse OpenAPI specification\n\nParses the OpenAPI spec and extracts all available tools/functions.\nStores them in all_tools for user selection later.","operationId":"upload_openapi_spec_api_products__product_id__openapi_post","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpenAPIRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["products"],"summary":"Delete Openapi Spec","description":"Delete OpenAPI specification and clear OpenAPI tools\n\nRemoves the OpenAPI spec and clears OpenAPI tools, but preserves client tools.","operationId":"delete_openapi_spec_api_products__product_id__openapi_delete","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/products/{product_id}/testing-auth":{"put":{"tags":["products"],"summary":"Update Testing Auth Config","description":"Update testing-only authentication configuration.\n\nThis is separate from runtime auth and used only to test endpoints\nbefore enabling them.","operationId":"update_testing_auth_config_api_products__product_id__testing_auth_put","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestingAuthConfigUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["products"],"summary":"Get Testing Auth Config","description":"Get current testing auth configuration (without exposing the token).","operationId":"get_testing_auth_config_api_products__product_id__testing_auth_get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/products/{product_id}/openapi/test-endpoint":{"post":{"tags":["products"],"summary":"Test Openapi Endpoint","description":"Test a single OpenAPI endpoint with LLM-generated test suite.\n\n1. Load openapi_spec and find the operation\n2. Call LLM to generate test suite (basic, typical, worst-case)\n3. Execute tests sequentially with testing_auth_config\n4. Store and return the result","operationId":"test_openapi_endpoint_api_products__product_id__openapi_test_endpoint_post","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestEndpointRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/products/{product_id}/openapi/test-all-endpoints":{"post":{"tags":["products"],"summary":"Test All Openapi Endpoints","description":"Test all OpenAPI endpoints sequentially.\n\nReturns results for each endpoint as they complete.","operationId":"test_all_openapi_endpoints_api_products__product_id__openapi_test_all_endpoints_post","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/products/{product_id}/openapi/skip-endpoint-test":{"post":{"tags":["products"],"summary":"Skip Endpoint Test","description":"Mark endpoint as skipped with user acknowledgment.\n\nUse this when an endpoint cannot be safely tested (e.g., POST endpoints\nthat create data, or when testing auth is not available).","operationId":"skip_endpoint_test_api_products__product_id__openapi_skip_endpoint_test_post","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SkipEndpointTestRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/products/{product_id}/openapi/acknowledge-warning":{"post":{"tags":["products"],"summary":"Acknowledge Endpoint Warning","description":"Acknowledge that endpoint has large responses but user wants to enable anyway.\n\nThis converts a 'passed_with_warning' status to allow the endpoint to be selected.","operationId":"acknowledge_endpoint_warning_api_products__product_id__openapi_acknowledge_warning_post","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcknowledgeWarningRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/products/{product_id}/openapi/test-results":{"get":{"tags":["products"],"summary":"Get Endpoint Test Results","description":"Get current test results for all endpoints.","operationId":"get_endpoint_test_results_api_products__product_id__openapi_test_results_get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/products/{product_id}/client-tools":{"post":{"tags":["products"],"summary":"Upload Client Tools","description":"Upload client-side tools in OpenAI function format\n\nThese tools execute in the user's browser, not on the server.\nAccepts an array of tool definitions in OpenAI function calling format.","operationId":"upload_client_tools_api_products__product_id__client_tools_post","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientToolsRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["products"],"summary":"Delete Client Tools","description":"Delete all client-side tools\n\nRemoves tools with source: \"client\" but preserves OpenAPI tools.","operationId":"delete_client_tools_api_products__product_id__client_tools_delete","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/products/{product_id}/client-tools/{tool_name}":{"put":{"tags":["products"],"summary":"Upsert Single Client Tool","description":"Add or update a single client-side tool by name.\n\nIf a tool with the given name already exists and has source \"client\", its\nfields are updated in-place (only non-None fields from the request body are\napplied). If no such tool exists, a new one is appended. Raises 400 if a\nnon-client tool (e.g. OpenAPI or MCP) already uses the same name.","operationId":"upsert_single_client_tool_api_products__product_id__client_tools__tool_name__put","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"tool_name","in":"path","required":true,"schema":{"type":"string","title":"Tool Name"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SingleClientToolRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["products"],"summary":"Delete Single Client Tool","description":"Delete a single client-side tool by name.\n\nRaises 404 if no client tool with the given name exists.","operationId":"delete_single_client_tool_api_products__product_id__client_tools__tool_name__delete","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"tool_name","in":"path","required":true,"schema":{"type":"string","title":"Tool Name"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/products/{product_id}/selected-tools":{"put":{"tags":["products"],"summary":"Update Selected Tools","description":"Update user-selected tools\n\nValidates that tool names exist in all_tools, then stores the selected\ntools in OpenAI function format ready for chat endpoint.\n\nFor OpenAPI tools, logs warnings for untested endpoints but allows them\nto be enabled (testing is optional).","operationId":"update_selected_tools_api_products__product_id__selected_tools_put","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SelectedToolsRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/products/{product_id}/tool-description":{"put":{"tags":["products"],"summary":"Update Tool Description","description":"Update the description of a single tool in all_tools (and selected_tools if present).","operationId":"update_tool_description_api_products__product_id__tool_description_put","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateToolDescriptionRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/products/{product_id}/tool-display-name":{"put":{"tags":["products"],"summary":"Update Tool Display Name","description":"Update the display name of a single tool in all_tools (and selected_tools if present).\nThe display_name is used as a human-friendly label in the chat widget.\nSend an empty string to clear the display name.","operationId":"update_tool_display_name_api_products__product_id__tool_display_name_put","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateToolDisplayNameRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/products/{product_id}/always-on-tools":{"get":{"tags":["products"],"summary":"Get Always On Tools","description":"Get the list of always-on tools for a product.\n\nAlways-on tools are always available to the agent regardless of\nsemantic similarity filtering.","operationId":"get_always_on_tools_api_products__product_id__always_on_tools_get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["products"],"summary":"Update Always On Tools","description":"Update the list of always-on tools for a product.\n\nAlways-on tools bypass semantic similarity filtering and are always\navailable to the agent. They must be a subset of selected_tools.","operationId":"update_always_on_tools_api_products__product_id__always_on_tools_put","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AlwaysOnToolsRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/products/{product_id}/mcp-servers":{"get":{"tags":["products"],"summary":"List Mcp Servers","description":"List configured MCP servers for a product\n\nReturns all MCP servers with their discovered tools.","operationId":"list_mcp_servers_api_products__product_id__mcp_servers_get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["products"],"summary":"Add Mcp Server","description":"Add an MCP server to product\n\nValidates connection and discovers available tools before saving.\nCan use a preset ID or custom configuration.","operationId":"add_mcp_server_api_products__product_id__mcp_servers_post","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/McpServerRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/products/{product_id}/mcp-servers/test":{"post":{"tags":["products"],"summary":"Test Mcp Connection","description":"Test an MCP server connection without saving it\n\nAttempts to connect to the MCP server and discover tools.\nReturns success with tools list, or error if connection fails.","operationId":"test_mcp_connection_api_products__product_id__mcp_servers_test_post","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/McpServerRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/products/{product_id}/mcp-servers/{server_name}":{"delete":{"tags":["products"],"summary":"Remove Mcp Server","description":"Remove an MCP server from product","operationId":"remove_mcp_server_api_products__product_id__mcp_servers__server_name__delete","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"server_name","in":"path","required":true,"schema":{"type":"string","title":"Server Name"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["products"],"summary":"Update Mcp Server","description":"Update an existing MCP server configuration","operationId":"update_mcp_server_api_products__product_id__mcp_servers__server_name__put","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"server_name","in":"path","required":true,"schema":{"type":"string","title":"Server Name"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/McpServerRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/products/{product_id}/mcp-servers/{server_name}/tools":{"get":{"tags":["products"],"summary":"Discover Mcp Tools","description":"Discover available tools from an MCP server\n\nReturns list of tools with their names, descriptions, and input schemas.","operationId":"discover_mcp_tools_api_products__product_id__mcp_servers__server_name__tools_get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"server_name","in":"path","required":true,"schema":{"type":"string","title":"Server Name"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/products/models/available":{"get":{"tags":["products"],"summary":"Get Available Models","description":"Get all supported AI models (admin-only).","operationId":"get_available_models_api_products_models_available_get","parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/products/{product_id}/widget-config":{"get":{"tags":["products"],"summary":"Get Widget Config","description":"Get widget configuration for a product (PUBLIC ENDPOINT)\n\nReturns the product's widget and copilot style configurations.\nThis endpoint is called by the widget/copilot on initialization to fetch\ncustom styles stored in the database.\n\nThe response includes:\n- productId: The product identifier\n- agentName: Display name for the AI agent\n- widgetStyles: Custom styling for the floating widget\n- copilotStyles: Custom styling for the copilot sidebar\n\nWhen a non-English `language` query param is provided, the welcome message\nis translated on the fly using a fast LLM call (Haiku).","operationId":"get_widget_config_api_products__product_id__widget_config_get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"language","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ISO 639-1 language code for welcome message translation","title":"Language"},"description":"ISO 639-1 language code for welcome message translation"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/products/{product_id}/resolve-agent":{"post":{"tags":["products"],"summary":"Resolve Agent","description":"Resolve which agent mode to show for a verified user (PUBLIC ENDPOINT).\n\nReturns \"onboarding\" if the user hasn't completed onboarding yet,\notherwise returns \"default\" for the normal copilot.","operationId":"resolve_agent_api_products__product_id__resolve_agent_post","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResolveAgentRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/products/{product_id}/widget-styles":{"get":{"tags":["products"],"summary":"Get Widget Styles","description":"Get widget styles for a product (authenticated)\n\nReturns the current widget style configuration for editing in the dashboard.","operationId":"get_widget_styles_api_products__product_id__widget_styles_get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["products"],"summary":"Update Widget Styles","description":"Update widget styles for a product\n\nAccepts a partial or complete WidgetStyleConfig object.\nThe styles are stored as JSONB and merged with defaults on the client side.","operationId":"update_widget_styles_api_products__product_id__widget_styles_put","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateWidgetStylesRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/products/{product_id}/copilot-styles":{"get":{"tags":["products"],"summary":"Get Copilot Styles","description":"Get copilot styles for a product (authenticated)\n\nReturns the current copilot style configuration for editing in the dashboard.","operationId":"get_copilot_styles_api_products__product_id__copilot_styles_get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["products"],"summary":"Update Copilot Styles","description":"Update copilot styles for a product\n\nAccepts a partial or complete CopilotStyleConfig object.\nThe styles are stored as JSONB and merged with defaults on the client side.","operationId":"update_copilot_styles_api_products__product_id__copilot_styles_put","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateCopilotStylesRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/products/{product_id}/allowed-domains":{"get":{"tags":["products"],"summary":"Get Allowed Domains","description":"Get allowed domains configuration for a product (authenticated)\n\nReturns:\n- allowed_domains: List of allowed domain patterns, or null if unrestricted\n- is_restricted: Boolean indicating if domain restrictions are enabled","operationId":"get_allowed_domains_api_products__product_id__allowed_domains_get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["products"],"summary":"Update Allowed Domains","description":"Update allowed domains for a product (authenticated)\n\n- Set allowed_domains to null to allow all domains (disable restrictions)\n- Set allowed_domains to [] to block all domains\n- Set allowed_domains to [\"example.com\", \"*.example.com\"] to allow specific domains\n\nSupports wildcard subdomains: *.example.com matches sub.example.com\nLocalhost is always allowed for development.","operationId":"update_allowed_domains_api_products__product_id__allowed_domains_put","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateAllowedDomainsRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/products/{product_id}/onboarding/generate-defaults":{"post":{"tags":["products"],"summary":"Generate Onboarding Defaults","description":"Generate sensible default values for agent name, welcome message, and system prompt\nbased on the type of application the user is building.","operationId":"generate_onboarding_defaults_api_products__product_id__onboarding_generate_defaults_post","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnboardingDefaultsRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/products/{product_id}/onboarding":{"get":{"tags":["products"],"summary":"Get Onboarding Config","description":"Get onboarding agent configuration for a product.","operationId":"get_onboarding_config_api_products__product_id__onboarding_get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["products"],"summary":"Update Onboarding Config","description":"Update onboarding agent configuration for a product.","operationId":"update_onboarding_config_api_products__product_id__onboarding_put","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateOnboardingRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/products/{product_id}/server-side-mcp":{"post":{"tags":["products"],"summary":"Save Server Side Mcp","description":"Save server-side MCP configuration for a product.\n\nEnforces mutual exclusivity: clears OpenAPI spec, OpenAPI tools,\napi_base_url, api_auth_config, and selected_tools when saving.","operationId":"save_server_side_mcp_api_products__product_id__server_side_mcp_post","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServerSideMcpRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["products"],"summary":"Delete Server Side Mcp","description":"Disconnect server-side MCP configuration.\n\nClears the server_side_mcp config and removes server_side_mcp tools\nfrom all_tools and selected_tools.","operationId":"delete_server_side_mcp_api_products__product_id__server_side_mcp_delete","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/products/{product_id}/server-side-mcp/test":{"post":{"tags":["products"],"summary":"Test Server Side Mcp","description":"Test a server-side MCP connection.\n\nAccepts optional inline config in body for pre-save testing.\nIf no body is provided, reads config from the server_side_mcp column.\nDoes NOT persist tools — use /sync for that.","operationId":"test_server_side_mcp_api_products__product_id__server_side_mcp_test_post","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/ServerSideMcpRequest"},{"type":"null"}],"title":"Request"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/products/{product_id}/server-side-mcp/sync":{"post":{"tags":["products"],"summary":"Sync Server Side Mcp Tools","description":"Sync tools from the server-side MCP server into all_tools.\n\nConnects to the configured MCP server, discovers tools, and stores\nthem in all_tools with source: \"server_side_mcp\". Clears selected_tools\nso the user can re-select.","operationId":"sync_server_side_mcp_tools_api_products__product_id__server_side_mcp_sync_post","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/products/{product_id}/actions/":{"get":{"tags":["actions"],"summary":"List Actions","description":"List all actions for a product","operationId":"list_actions_api_products__product_id__actions__get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Action"},"title":"Response List Actions Api Products  Product Id  Actions  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["actions"],"summary":"Create Action","description":"Create a new action for a product","operationId":"create_action_api_products__product_id__actions__post","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Product Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActionCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Action"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/products/{product_id}/actions/{action_id}":{"get":{"tags":["actions"],"summary":"Get Action","description":"Get a single action","operationId":"get_action_api_products__product_id__actions__action_id__get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Product Id"}},{"name":"action_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Action Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Action"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["actions"],"summary":"Update Action","description":"Update an action","operationId":"update_action_api_products__product_id__actions__action_id__put","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Product Id"}},{"name":"action_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Action Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActionUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Action"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["actions"],"summary":"Delete Action","description":"Delete an action","operationId":"delete_action_api_products__product_id__actions__action_id__delete","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Product Id"}},{"name":"action_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Action Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/chatbot/products/{product_id}/upload":{"post":{"tags":["documents"],"summary":"Upload Document","description":"Upload document to product's knowledge base from S3","operationId":"upload_document_api_chatbot_products__product_id__upload_post","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UploadRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/chatbot/products/{product_id}/documents":{"get":{"tags":["documents"],"summary":"List Documents","description":"List all documents uploaded to a product's knowledge base","operationId":"list_documents_api_chatbot_products__product_id__documents_get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/chatbot/products/{product_id}/ingest-website":{"post":{"tags":["documents"],"summary":"Ingest Website","description":"Ingest website content into product's knowledge base","operationId":"ingest_website_api_chatbot_products__product_id__ingest_website_post","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebsiteIngestRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/chat/message":{"post":{"tags":["chat"],"summary":"Chat Message","description":"Unified chat endpoint - Supports both anonymous and verified users.\n\nFor VERIFIED users (identity_token provided):\n- JWT is verified using product's verification_secret\n- User data is upserted to product_users table\n- Conversation is persisted using PostgresSaver\n- Returns conversation_id for future reference\n\nFor ANONYMOUS users (no identity_token):\n- Conversation persisted to database via shared anonymous product_user\n- Chat memory uses MemorySaver (in-memory, session-only)\n- Returns conversation_id for tracking","operationId":"chat_message_api_chat_message_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatMessageRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/chat/tool-result":{"post":{"tags":["chat"],"summary":"Submit Tool Result","description":"Submit the result of a client-side tool execution.\n\nWhen the agent calls a client-side tool, the widget executes it and sends\nthe result back here. This sends the result as a follow-up message so the\nagent can see what happened and respond accordingly.","operationId":"submit_tool_result_api_chat_tool_result_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolResultRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/chat/conversations":{"get":{"tags":["chat"],"summary":"List Conversations","description":"List all conversations for a verified user.\n\nRequires valid identity_token to identify the user.\nReturns conversations sorted by most recently updated.","operationId":"list_conversations_api_chat_conversations_get","parameters":[{"name":"product_id","in":"query","required":true,"schema":{"type":"string","description":"Product ID","title":"Product Id"},"description":"Product ID"},{"name":"identity_token","in":"query","required":true,"schema":{"type":"string","description":"JWT identity token","title":"Identity Token"},"description":"JWT identity token"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"$ref":"#/components/schemas/ConversationResponse"}},"title":"Response List Conversations Api Chat Conversations Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["chat"],"summary":"Create Conversation","description":"Create a new conversation for a verified user.\n\nUse this when user clicks \"New Chat\" in the widget.\nReturns the new conversation_id.","operationId":"create_conversation_api_chat_conversations_post","parameters":[{"name":"product_id","in":"query","required":true,"schema":{"type":"string","description":"Product ID","title":"Product Id"},"description":"Product ID"},{"name":"identity_token","in":"query","required":true,"schema":{"type":"string","description":"JWT identity token","title":"Identity Token"},"description":"JWT identity token"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"string"},"title":"Response Create Conversation Api Chat Conversations Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/chat/conversations/{conversation_id}/history":{"get":{"tags":["chat"],"summary":"Get Conversation History","description":"Get message history for a conversation.\n\nFetches the stored messages from the LangGraph checkpointer.\nRequires valid identity_token to verify user owns the conversation.","operationId":"get_conversation_history_api_chat_conversations__conversation_id__history_get","parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","title":"Conversation Id"}},{"name":"product_id","in":"query","required":true,"schema":{"type":"string","description":"Product ID","title":"Product Id"},"description":"Product ID"},{"name":"identity_token","in":"query","required":true,"schema":{"type":"string","description":"JWT identity token","title":"Identity Token"},"description":"JWT identity token"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"$ref":"#/components/schemas/MessageHistoryItem"}},"title":"Response Get Conversation History Api Chat Conversations  Conversation Id  History Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/chat/conversations/{conversation_id}/claim":{"post":{"tags":["chat"],"summary":"Claim Anonymous Conversation","description":"Claim an anonymous conversation for a verified user after mid-chat identify().\n\nThis preserves the active thread when a user authenticates during an existing\nanonymous conversation by transferring ownership from the product's shared\nanonymous user to the verified product_user.","operationId":"claim_anonymous_conversation_api_chat_conversations__conversation_id__claim_post","parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","title":"Conversation Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClaimConversationRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/chat/conversations/{conversation_id}/history/anonymous":{"get":{"tags":["chat"],"summary":"Get Anonymous Conversation History","description":"Get message history for an anonymous conversation.\n\nUnlike the authenticated endpoint, this only requires:\n- product_id: To verify the conversation belongs to this product's anonymous user\n- conversation_id: The conversation to fetch\n\nSecurity: Validates conversation belongs to the anonymous product_user for this product.","operationId":"get_anonymous_conversation_history_api_chat_conversations__conversation_id__history_anonymous_get","parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","title":"Conversation Id"}},{"name":"product_id","in":"query","required":true,"schema":{"type":"string","description":"Product ID","title":"Product Id"},"description":"Product ID"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"$ref":"#/components/schemas/MessageHistoryItem"}},"title":"Response Get Anonymous Conversation History Api Chat Conversations  Conversation Id  History Anonymous Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/chat/conversations/{conversation_id}/messages":{"post":{"tags":["chat"],"summary":"Add Message To Conversation","description":"Add a message to a conversation without triggering the LLM.\n\nUsed for ask_user interactions where the browser agent asks a question\nand the user responds - these should be persisted in chat history.\n\nMessages are stored in the conversation_auxiliary_messages table.","operationId":"add_message_to_conversation_api_chat_conversations__conversation_id__messages_post","parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","title":"Conversation Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddMessageRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/chat/health":{"get":{"tags":["chat"],"summary":"Chat Health","description":"Health check for chat endpoint","operationId":"chat_health_api_chat_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/landing_page/":{"post":{"tags":["landing_page"],"summary":"Create Landing Page Request","description":"Public endpoint to capture landing page requests.\nNo authentication required - anyone can submit.\n\nArgs:\n    request_data: Contains email_id and request text\n    \nReturns:\n    Success response with the created request ID","operationId":"create_landing_page_request_api_landing_page__post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LandingPageRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LandingPageResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/landing_page/test":{"get":{"tags":["landing_page"],"summary":"Test Endpoint","description":"Simple test endpoint to verify the route is working","operationId":"test_endpoint_api_landing_page_test_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/feedback":{"post":{"tags":["feedback"],"summary":"Submit Feedback","description":"Submit user feedback","operationId":"submit_feedback_api_feedback_post","parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeedbackRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/oauth/notion/authorize":{"get":{"tags":["oauth"],"summary":"Notion Authorize","description":"Initiate Notion MCP OAuth with DCR","operationId":"notion_authorize_api_oauth_notion_authorize_get","parameters":[{"name":"product_id","in":"query","required":true,"schema":{"type":"string","title":"Product Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/oauth/notion/callback":{"get":{"tags":["oauth"],"summary":"Notion Callback","description":"Handle Notion OAuth callback","operationId":"notion_callback_api_oauth_notion_callback_get","parameters":[{"name":"code","in":"query","required":false,"schema":{"type":"string","title":"Code"}},{"name":"state","in":"query","required":false,"schema":{"type":"string","title":"State"}},{"name":"error","in":"query","required":false,"schema":{"type":"string","title":"Error"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/oauth/notion/status/{product_id}":{"get":{"tags":["oauth"],"summary":"Notion Status","description":"Check if Notion is connected","operationId":"notion_status_api_oauth_notion_status__product_id__get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/oauth/notion/{product_id}":{"delete":{"tags":["oauth"],"summary":"Notion Disconnect","description":"Disconnect Notion from a product","operationId":"notion_disconnect_api_oauth_notion__product_id__delete","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/billing/plans":{"get":{"tags":["billing"],"summary":"Get Plans","description":"Get available plans and their limits.\n\nReturns pricing information for display in the UI.\nValues are in millicents (1000 millicents = 1 cent = $0.01).\nFrontend converts to credits for display: millicents / 100 = credits shown.","operationId":"get_plans_api_billing_plans_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/billing/create-checkout-session":{"post":{"tags":["billing"],"summary":"Create Checkout","description":"Create a Stripe Checkout session for plan upgrade.\n\nReturns a URL to redirect the user to Stripe's hosted checkout page.","operationId":"create_checkout_api_billing_create_checkout_session_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCheckoutRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCheckoutResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/billing/create-portal-session":{"post":{"tags":["billing"],"summary":"Create Portal","description":"Create a Stripe Customer Portal session.\n\nAllows customers to manage their subscription (update payment method,\ncancel, view invoices, etc.)","operationId":"create_portal_api_billing_create_portal_session_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePortalRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePortalResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/webhooks/stripe":{"post":{"tags":["billing"],"summary":"Stripe Webhook","description":"Handle Stripe webhook events.\n\nIMPORTANT: This endpoint must:\n1. Receive raw body (not parsed JSON)\n2. Verify the Stripe signature\n3. Return 200 quickly (within 5-10 seconds)\n\nEvents handled:\n- checkout.session.completed: User completed payment\n- customer.subscription.updated: Plan changed\n- customer.subscription.deleted: Subscription canceled\n- invoice.payment_failed: Payment failed","operationId":"stripe_webhook_api_webhooks_stripe_post","parameters":[{"name":"Stripe-Signature","in":"header","required":true,"schema":{"type":"string","title":"Stripe-Signature"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/billing/status/{product_id}":{"get":{"tags":["billing"],"summary":"Get Billing Status","description":"Get current billing status for a product.\n\nReturns current plan, usage, limits, and subscription status.\nValues are in millicents (1000 millicents = 1 cent = $0.01).","operationId":"get_billing_status_api_billing_status__product_id__get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/billing/change-plan":{"post":{"tags":["billing"],"summary":"Change Plan Endpoint","description":"Change subscription plan (upgrade or downgrade between paid plans).\n\nUse this for:\n- Hobby → Standard or Pro (upgrade)\n- Standard → Pro (upgrade)\n- Pro → Standard or Hobby (downgrade)\n- Standard → Hobby (downgrade)\n\nFor Free → Paid, use /billing/create-checkout-session instead.\nFor Paid → Free, use /billing/cancel-subscription instead.","operationId":"change_plan_endpoint_api_billing_change_plan_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChangePlanRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChangePlanResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/billing/cancel-subscription":{"post":{"tags":["billing"],"summary":"Cancel Subscription Endpoint","description":"Cancel subscription (downgrade to free plan).\n\nBy default, cancels at the end of the billing period so the user\nkeeps access until then. Set cancel_at_period_end=False for immediate\ncancellation.","operationId":"cancel_subscription_endpoint_api_billing_cancel_subscription_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CancelSubscriptionRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CancelSubscriptionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/billing/reactivate-subscription":{"post":{"tags":["billing"],"summary":"Reactivate Subscription Endpoint","description":"Reactivate a subscription that was scheduled for cancellation.\n\nOnly works if the subscription was canceled with cancel_at_period_end=True\nand the billing period hasn't ended yet.","operationId":"reactivate_subscription_endpoint_api_billing_reactivate_subscription_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReactivateSubscriptionRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/get_crow_token":{"get":{"tags":["crow-identity"],"summary":"Get Crow Token","description":"Generate a Crow identity JWT for the authenticated user.\n\nThis endpoint:\n1. Verifies the user is authenticated via Clerk\n2. Reads verification_secret from .env\n3. Creates a JWT payload with user info\n4. Signs it with the secret\n5. Returns the token for use with window.crow('identify', ...)","operationId":"get_crow_token_api_get_crow_token_get","parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CrowTokenResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["crow-identity"],"summary":"Get Crow Token With User Info","description":"Generate a Crow identity JWT with user info from request body.\n\nUse this endpoint when you want to pass user info explicitly\n(since Clerk JWT may not contain email/name by default).\n\nThe frontend can pass the user info from Clerk's useUser() hook.\n\nUses verification_secret from .env to sign the JWT.","operationId":"get_crow_token_with_user_info_api_get_crow_token_post","parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CrowTokenRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CrowTokenResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/products/{product_id}/workflows":{"post":{"tags":["workflows"],"summary":"Create Workflow","description":"Create a new workflow for a product","operationId":"create_workflow_api_products__product_id__workflows_post","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["workflows"],"summary":"List Workflows","description":"List all workflows for a product","operationId":"list_workflows_api_products__product_id__workflows_get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/workflows/{workflow_id}":{"get":{"tags":["workflows"],"summary":"Get Workflow","description":"Get a specific workflow","operationId":"get_workflow_api_workflows__workflow_id__get","parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","title":"Workflow Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["workflows"],"summary":"Update Workflow","description":"Update a workflow","operationId":"update_workflow_api_workflows__workflow_id__put","parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","title":"Workflow Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["workflows"],"summary":"Delete Workflow","description":"Delete a workflow","operationId":"delete_workflow_api_workflows__workflow_id__delete","parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","title":"Workflow Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/analytics/products/{product_id}/traces":{"get":{"tags":["analytics"],"summary":"Get Product Traces","description":"Get all traces for a product, organized by user type and conversation.\n\nReturns:\n    - authenticated_users: Dict of users with their conversations and traces\n    - anonymous_sessions: Dict of anonymous sessions with their traces\n    - summary: Counts of users, sessions, and total conversations","operationId":"get_product_traces_api_analytics_products__product_id__traces_get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"description":"Maximum traces to fetch","default":100,"title":"Limit"},"description":"Maximum traces to fetch"},{"name":"from_timestamp","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ISO timestamp to filter from","title":"From Timestamp"},"description":"ISO timestamp to filter from"},{"name":"to_timestamp","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ISO timestamp to filter to","title":"To Timestamp"},"description":"ISO timestamp to filter to"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/analytics/products/{product_id}/users/{user_id}/traces":{"get":{"tags":["analytics"],"summary":"Get User Traces","description":"Get all traces for a specific authenticated user within a product.\n\nArgs:\n    product_id: The product UUID\n    user_id: The user's ID (from JWT, URL-encoded if needed)\n\nReturns:\n    User's conversations and traces","operationId":"get_user_traces_api_analytics_products__product_id__users__user_id__traces_get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"description":"Maximum traces to fetch","default":50,"title":"Limit"},"description":"Maximum traces to fetch"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/analytics/products/{product_id}/conversations/{conversation_id}/traces":{"get":{"tags":["analytics"],"summary":"Get Conversation Traces","description":"Get all traces for a specific conversation.\n\nArgs:\n    product_id: The product UUID\n    conversation_id: The conversation/session ID\n\nReturns:\n    Conversation's traces","operationId":"get_conversation_traces_api_analytics_products__product_id__conversations__conversation_id__traces_get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","title":"Conversation Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"description":"Maximum traces to fetch","default":50,"title":"Limit"},"description":"Maximum traces to fetch"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/analytics/products/{product_id}/metrics":{"get":{"tags":["analytics"],"summary":"Get Product Metrics","description":"Get aggregate metrics for a product: conversation count, unique users,\ncost trends, tool usage, RAG effectiveness, and time series data.","operationId":"get_product_metrics_api_analytics_products__product_id__metrics_get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"from_timestamp","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ISO timestamp to filter from","title":"From Timestamp"},"description":"ISO timestamp to filter from"},{"name":"to_timestamp","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ISO timestamp to filter to","title":"To Timestamp"},"description":"ISO timestamp to filter to"},{"name":"granularity","in":"query","required":false,"schema":{"type":"string","description":"Time series granularity: 'day' or 'week'","default":"day","title":"Granularity"},"description":"Time series granularity: 'day' or 'week'"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/analytics/products/{product_id}/conversations":{"get":{"tags":["analytics"],"summary":"Get Conversations","description":"Get a flat list of conversations for a product with preview information.\n\nReturns a paginated list of conversations with preview info suitable for\nthe left panel of the chat logs view.\n\nArgs:\n    product_id: The product UUID\n    limit: Maximum number of conversations (default 50, max 100)\n    offset: Pagination offset\n    user_type: Filter by 'authenticated' or 'anonymous'\n    from_timestamp: Filter conversations from this time\n    to_timestamp: Filter conversations until this time\n    search: Search in message content\n\nReturns:\n    {\n        \"conversations\": [ConversationPreview, ...],\n        \"total_count\": int,\n        \"filters_applied\": dict\n    }","operationId":"get_conversations_api_analytics_products__product_id__conversations_get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"description":"Maximum conversations to return","default":50,"title":"Limit"},"description":"Maximum conversations to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Offset for pagination","default":0,"title":"Offset"},"description":"Offset for pagination"},{"name":"user_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by user type: 'authenticated', 'anonymous', or None for all","title":"User Type"},"description":"Filter by user type: 'authenticated', 'anonymous', or None for all"},{"name":"from_timestamp","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ISO timestamp to filter from","title":"From Timestamp"},"description":"ISO timestamp to filter from"},{"name":"to_timestamp","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ISO timestamp to filter to","title":"To Timestamp"},"description":"ISO timestamp to filter to"},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search term to filter by message content","title":"Search"},"description":"Search term to filter by message content"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/analytics/products/{product_id}/conversations/{conversation_id}/messages":{"get":{"tags":["analytics"],"summary":"Get Conversation Messages","description":"Get parsed chat messages for a specific conversation.\n\nReturns the full chat thread with messages parsed from LangChain format,\nincluding tool calls and their results. Also returns metadata and raw traces.\n\nArgs:\n    product_id: The product UUID\n    conversation_id: The conversation/session ID\n\nReturns:\n    {\n        \"conversation_id\": str,\n        \"messages\": [ChatMessage, ...],\n        \"metadata\": {...},\n        \"traces\": [raw traces for Traces tab]\n    }","operationId":"get_conversation_messages_api_analytics_products__product_id__conversations__conversation_id__messages_get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","title":"Conversation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/analytics/products/{product_id}/insights/process":{"post":{"tags":["analytics"],"summary":"Process Insights","description":"Trigger processing of unprocessed conversations.\nRuns summarization via BackgroundTasks for non-blocking response.","operationId":"process_insights_api_analytics_products__product_id__insights_process_post","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"description":"Max conversations to process","default":50,"title":"Limit"},"description":"Max conversations to process"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/analytics/products/{product_id}/insights/metrics":{"get":{"tags":["analytics"],"summary":"Get Insights Metrics","description":"Get aggregate metrics computed from conversation_insights (Supabase).\nReturns overview stats and time series for the Insights dashboard.","operationId":"get_insights_metrics_api_analytics_products__product_id__insights_metrics_get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"from_timestamp","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ISO timestamp to filter from","title":"From Timestamp"},"description":"ISO timestamp to filter from"},{"name":"to_timestamp","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ISO timestamp to filter to","title":"To Timestamp"},"description":"ISO timestamp to filter to"},{"name":"granularity","in":"query","required":false,"schema":{"type":"string","description":"Time series granularity: 'day' or 'week'","default":"day","title":"Granularity"},"description":"Time series granularity: 'day' or 'week'"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/analytics/products/{product_id}/insights/conversations":{"get":{"tags":["analytics"],"summary":"Get Insight Conversations","description":"Get enriched conversation list with summaries, topics, and sentiment.","operationId":"get_insight_conversations_api_analytics_products__product_id__insights_conversations_get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"topic","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by topic","title":"Topic"},"description":"Filter by topic"},{"name":"sentiment","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by sentiment","title":"Sentiment"},"description":"Filter by sentiment"},{"name":"user_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by user type: 'authenticated' or 'anonymous'","title":"User Type"},"description":"Filter by user type: 'authenticated' or 'anonymous'"},{"name":"has_friction","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Filter to conversations with friction signals","title":"Has Friction"},"description":"Filter to conversations with friction signals"},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search in first message and summary","title":"Search"},"description":"Search in first message and summary"},{"name":"from_timestamp","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter conversations from this time","title":"From Timestamp"},"description":"Filter conversations from this time"},{"name":"to_timestamp","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter conversations until this time","title":"To Timestamp"},"description":"Filter conversations until this time"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/analytics/products/{product_id}/insights/topics":{"get":{"tags":["analytics"],"summary":"Get Topic Distribution","description":"Get topic distribution across all processed conversations.","operationId":"get_topic_distribution_api_analytics_products__product_id__insights_topics_get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/analytics/products/{product_id}/insights/status":{"get":{"tags":["analytics"],"summary":"Get Insights Status","description":"Get processing status for a product's conversations.","operationId":"get_insights_status_api_analytics_products__product_id__insights_status_get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/analytics/products/{product_id}/insights/cluster":{"post":{"tags":["analytics"],"summary":"Trigger Clustering","description":"Trigger full clustering pipeline: embed → cluster → label.\nRuns in background.","operationId":"trigger_clustering_api_analytics_products__product_id__insights_cluster_post","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/analytics/products/{product_id}/insights/clusters":{"get":{"tags":["analytics"],"summary":"Get Clusters","description":"Get latest clustering results with representative conversations.","operationId":"get_clusters_api_analytics_products__product_id__insights_clusters_get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/analytics/products/{product_id}/insights/clusters/{cluster_id}/conversations":{"get":{"tags":["analytics"],"summary":"Get Cluster Conversations","description":"Get conversations in a specific cluster.","operationId":"get_cluster_conversations_api_analytics_products__product_id__insights_clusters__cluster_id__conversations_get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"cluster_id","in":"path","required":true,"schema":{"type":"string","title":"Cluster Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/analytics/products/{product_id}/insights/detect-friction":{"post":{"tags":["analytics"],"summary":"Detect Friction","description":"Trigger friction detection on processed conversations.","operationId":"detect_friction_api_analytics_products__product_id__insights_detect_friction_post","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/analytics/products/{product_id}/insights/friction":{"get":{"tags":["analytics"],"summary":"Get Friction Overview","description":"Get friction overview: breakdown by type, severity, and trend.","operationId":"get_friction_overview_api_analytics_products__product_id__insights_friction_get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/analytics/products/{product_id}/insights/friction/conversations":{"get":{"tags":["analytics"],"summary":"Get Friction Conversations","description":"Get conversations with friction signals, filterable by type and severity.","operationId":"get_friction_conversations_api_analytics_products__product_id__insights_friction_conversations_get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"signal_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signal Type"}},{"name":"severity","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Severity"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/analytics/products/{product_id}/signals":{"get":{"tags":["analytics"],"summary":"List Signal Definitions","description":"List all signal definitions (builtin + custom) for a product.","operationId":"list_signal_definitions_api_analytics_products__product_id__signals_get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["analytics"],"summary":"Create Signal Definition","description":"Create a custom signal definition.","operationId":"create_signal_definition_api_analytics_products__product_id__signals_post","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSignalRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/analytics/products/{product_id}/signals/{signal_id}":{"put":{"tags":["analytics"],"summary":"Update Signal Definition","description":"Update a custom signal definition.","operationId":"update_signal_definition_api_analytics_products__product_id__signals__signal_id__put","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"signal_id","in":"path","required":true,"schema":{"type":"string","title":"Signal Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateSignalRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["analytics"],"summary":"Delete Signal Definition","description":"Delete a custom signal definition and its associated friction_signals.","operationId":"delete_signal_definition_api_analytics_products__product_id__signals__signal_id__delete","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"signal_id","in":"path","required":true,"schema":{"type":"string","title":"Signal Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/analytics/products/{product_id}/signals/overview":{"get":{"tags":["analytics"],"summary":"Get Signals Overview","description":"Unified signals overview: counts for all signals, severity breakdown, trend.","operationId":"get_signals_overview_api_analytics_products__product_id__signals_overview_get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/analytics/products/{product_id}/signals/conversations":{"get":{"tags":["analytics"],"summary":"Get Signal Conversations","description":"Get conversations matching signals, with optional filters.","operationId":"get_signal_conversations_api_analytics_products__product_id__signals_conversations_get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"signal_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signal Type"}},{"name":"signal_definition_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signal Definition Id"}},{"name":"severity","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Severity"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/analytics/products/{product_id}/signals/{signal_id}/evaluate":{"post":{"tags":["analytics"],"summary":"Evaluate Signal","description":"Re-evaluate all conversations for a specific signal (runs in background).","operationId":"evaluate_signal_api_analytics_products__product_id__signals__signal_id__evaluate_post","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"signal_id","in":"path","required":true,"schema":{"type":"string","title":"Signal Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/analytics/products/{product_id}/insights/backfill":{"post":{"tags":["analytics"],"summary":"Backfill Insights","description":"Backfill historical conversations for processing.\n\nFetches ALL conversations from Langfuse for this product (paginated),\ninserts pending rows for any that aren't already in conversation_insights,\nthen the background worker picks them up automatically.\n\nThis does NOT re-process already-completed conversations.","operationId":"backfill_insights_api_analytics_products__product_id__insights_backfill_post","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"from_timestamp","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ISO timestamp — only backfill conversations after this date","title":"From Timestamp"},"description":"ISO timestamp — only backfill conversations after this date"},{"name":"to_timestamp","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ISO timestamp — only backfill conversations before this date","title":"To Timestamp"},"description":"ISO timestamp — only backfill conversations before this date"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/analytics/products/{product_id}/dashboard/concentrix":{"get":{"tags":["analytics"],"summary":"Get Concentrix Dashboard","description":"Get all metrics for the Concentrix SolvNow AI Performance Dashboard.\nReturns overview stats, trends, domain breakdown, escalation reasons, and recent conversations.","operationId":"get_concentrix_dashboard_api_analytics_products__product_id__dashboard_concentrix_get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"from_timestamp","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ISO timestamp start","title":"From Timestamp"},"description":"ISO timestamp start"},{"name":"to_timestamp","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ISO timestamp end","title":"To Timestamp"},"description":"ISO timestamp end"},{"name":"cost_per_ticket","in":"query","required":false,"schema":{"type":"number","description":"Average cost per human-handled ticket in USD","default":5.0,"title":"Cost Per Ticket"},"description":"Average cost per human-handled ticket in USD"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/public/concentrix/{product_id}/dashboard":{"get":{"tags":["public-concentrix"],"summary":"Public Dashboard","description":"Get all dashboard metrics for the SolvNow AI Performance Dashboard.\nReturns overview stats, trends, domain breakdown, escalation reasons, and outcomes.","operationId":"public_dashboard_api_public_concentrix__product_id__dashboard_get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","description":"Number of days to look back","default":30,"title":"Days"},"description":"Number of days to look back"},{"name":"cost_per_ticket","in":"query","required":false,"schema":{"type":"number","description":"Average cost per human-handled ticket in USD","default":5.0,"title":"Cost Per Ticket"},"description":"Average cost per human-handled ticket in USD"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/public/concentrix/{product_id}/conversations":{"get":{"tags":["public-concentrix"],"summary":"Public Conversations","description":"List conversations with summaries, outcomes, and metadata.\nFilterable by outcome, domain, and sentiment.","operationId":"public_conversations_api_public_concentrix__product_id__conversations_get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"outcome","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by outcome: resolved, escalated, abandoned, failed","title":"Outcome"},"description":"Filter by outcome: resolved, escalated, abandoned, failed"},{"name":"domain","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by routed domain","title":"Domain"},"description":"Filter by routed domain"},{"name":"sentiment","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by sentiment: positive, neutral, negative, frustrated","title":"Sentiment"},"description":"Filter by sentiment: positive, neutral, negative, frustrated"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/public/concentrix/{product_id}/conversations/{conversation_id}":{"get":{"tags":["public-concentrix"],"summary":"Public Conversation Detail","description":"Get full conversation detail including transcript, tool calls, citations,\nand outcome analysis. Same depth as the Activity page conversation view.","operationId":"public_conversation_detail_api_public_concentrix__product_id__conversations__conversation_id__get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","title":"Conversation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/public/concentrix/{product_id}/conversations/{conversation_id}/analysis":{"get":{"tags":["public-concentrix"],"summary":"Public Conversation Analysis","description":"Deep analysis of a single conversation — what went right, what went wrong,\nand what would prevent escalation next time. Computed on first request, cached after.","operationId":"public_conversation_analysis_api_public_concentrix__product_id__conversations__conversation_id__analysis_get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","title":"Conversation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/public/concentrix/{product_id}/improvements":{"get":{"tags":["public-concentrix"],"summary":"Public Improvements","description":"Aggregated improvement suggestions based on escalation and failure patterns.\nIdentifies knowledge gaps and ranks fixes by estimated impact.","operationId":"public_improvements_api_public_concentrix__product_id__improvements_get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","description":"Number of days to analyze","default":30,"title":"Days"},"description":"Number of days to analyze"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/experiments":{"get":{"tags":["experiments"],"summary":"List Experiments","description":"List all experiments for a product","operationId":"list_experiments_api_experiments_get","parameters":[{"name":"product_id","in":"query","required":true,"schema":{"type":"string","description":"Product ID to list experiments for","title":"Product Id"},"description":"Product ID to list experiments for"},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"$ref":"#/components/schemas/ExperimentListItem"}},"title":"Response List Experiments Api Experiments Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["experiments"],"summary":"Create Experiment","description":"Create a new experiment","operationId":"create_experiment_api_experiments_post","parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateExperimentRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExperimentResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/experiments/{experiment_id}":{"get":{"tags":["experiments"],"summary":"Get Experiment","description":"Get experiment with test cases and latest run status","operationId":"get_experiment_api_experiments__experiment_id__get","parameters":[{"name":"experiment_id","in":"path","required":true,"schema":{"type":"string","title":"Experiment Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExperimentResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["experiments"],"summary":"Update Experiment","description":"Update experiment name","operationId":"update_experiment_api_experiments__experiment_id__put","parameters":[{"name":"experiment_id","in":"path","required":true,"schema":{"type":"string","title":"Experiment Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateExperimentRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Update Experiment Api Experiments  Experiment Id  Put"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["experiments"],"summary":"Delete Experiment","description":"Delete experiment (cascades to test cases and runs)","operationId":"delete_experiment_api_experiments__experiment_id__delete","parameters":[{"name":"experiment_id","in":"path","required":true,"schema":{"type":"string","title":"Experiment Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"boolean"},"title":"Response Delete Experiment Api Experiments  Experiment Id  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/experiments/{experiment_id}/cases":{"post":{"tags":["experiments"],"summary":"Create Test Case","description":"Add a test case to an experiment","operationId":"create_test_case_api_experiments__experiment_id__cases_post","parameters":[{"name":"experiment_id","in":"path","required":true,"schema":{"type":"string","title":"Experiment Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateTestCaseRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestCaseResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/experiments/{experiment_id}/cases/{case_id}":{"put":{"tags":["experiments"],"summary":"Update Test Case","description":"Update a test case","operationId":"update_test_case_api_experiments__experiment_id__cases__case_id__put","parameters":[{"name":"experiment_id","in":"path","required":true,"schema":{"type":"string","title":"Experiment Id"}},{"name":"case_id","in":"path","required":true,"schema":{"type":"string","title":"Case Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateTestCaseRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestCaseResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["experiments"],"summary":"Delete Test Case","description":"Delete a test case","operationId":"delete_test_case_api_experiments__experiment_id__cases__case_id__delete","parameters":[{"name":"experiment_id","in":"path","required":true,"schema":{"type":"string","title":"Experiment Id"}},{"name":"case_id","in":"path","required":true,"schema":{"type":"string","title":"Case Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"boolean"},"title":"Response Delete Test Case Api Experiments  Experiment Id  Cases  Case Id  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/experiments/{experiment_id}/cases/reorder":{"put":{"tags":["experiments"],"summary":"Reorder Test Cases","description":"Reorder test cases by providing list of IDs in desired order","operationId":"reorder_test_cases_api_experiments__experiment_id__cases_reorder_put","parameters":[{"name":"experiment_id","in":"path","required":true,"schema":{"type":"string","title":"Experiment Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReorderTestCasesRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"boolean"},"title":"Response Reorder Test Cases Api Experiments  Experiment Id  Cases Reorder Put"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/experiments/{experiment_id}/run":{"post":{"tags":["experiments"],"summary":"Start Experiment Run","description":"Start a new run of an experiment.\n\nCreates run and result records, then spawns background task to execute prompts.\nReturns immediately with run_id for polling.\n\nArgs:\n    dry_run: If True, tools will capture what WOULD be called without executing","operationId":"start_experiment_run_api_experiments__experiment_id__run_post","parameters":[{"name":"experiment_id","in":"path","required":true,"schema":{"type":"string","title":"Experiment Id"}},{"name":"dry_run","in":"query","required":false,"schema":{"type":"boolean","description":"If true, tools will not be executed (captures intent only)","default":false,"title":"Dry Run"},"description":"If true, tools will not be executed (captures intent only)"},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Start Experiment Run Api Experiments  Experiment Id  Run Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/experiments/{experiment_id}/runs/{run_id}":{"get":{"tags":["experiments"],"summary":"Get Run Status","description":"Get the status and results of a run","operationId":"get_run_status_api_experiments__experiment_id__runs__run_id__get","parameters":[{"name":"experiment_id","in":"path","required":true,"schema":{"type":"string","title":"Experiment Id"}},{"name":"run_id","in":"path","required":true,"schema":{"type":"string","title":"Run Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExperimentRunResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/experiments/{experiment_id}/cases/{case_id}/run":{"post":{"tags":["experiments"],"summary":"Run Single Test Case","description":"Run a single test case independently.\n\nCreates a mini run with just this one test case. Use this when you want to run\nan individual test case without running the entire experiment.","operationId":"run_single_test_case_api_experiments__experiment_id__cases__case_id__run_post","parameters":[{"name":"experiment_id","in":"path","required":true,"schema":{"type":"string","title":"Experiment Id"}},{"name":"case_id","in":"path","required":true,"schema":{"type":"string","title":"Case Id"}},{"name":"dry_run","in":"query","required":false,"schema":{"type":"boolean","description":"If true, tools will not be executed (captures intent only)","default":false,"title":"Dry Run"},"description":"If true, tools will not be executed (captures intent only)"},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Run Single Test Case Api Experiments  Experiment Id  Cases  Case Id  Run Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/experiments/{experiment_id}/runs/{run_id}/cases/{case_id}/rerun":{"post":{"tags":["experiments"],"summary":"Rerun Single Test Case","description":"Re-run a single test case within an existing run.\n\nUseful for retrying failed prompts without rerunning the entire experiment.","operationId":"rerun_single_test_case_api_experiments__experiment_id__runs__run_id__cases__case_id__rerun_post","parameters":[{"name":"experiment_id","in":"path","required":true,"schema":{"type":"string","title":"Experiment Id"}},{"name":"run_id","in":"path","required":true,"schema":{"type":"string","title":"Run Id"}},{"name":"case_id","in":"path","required":true,"schema":{"type":"string","title":"Case Id"}},{"name":"dry_run","in":"query","required":false,"schema":{"type":"boolean","description":"If true, tools will not be executed (captures intent only)","default":false,"title":"Dry Run"},"description":"If true, tools will not be executed (captures intent only)"},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Rerun Single Test Case Api Experiments  Experiment Id  Runs  Run Id  Cases  Case Id  Rerun Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/gradium/tts":{"post":{"tags":["gradium"],"summary":"Synthesize Speech","operationId":"synthesize_speech_api_gradium_tts_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GradiumTTSRequestWithAuth"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/user/me":{"get":{"tags":["user"],"summary":"Get My Profile","description":"Get the authenticated user's profile.\n\nReturns the user information extracted from the verified JWT.\nThis demonstrates how a customer's API can identify the user\nfrom the forwarded identity_token.","operationId":"get_my_profile_api_user_me_get","parameters":[{"name":"product_id","in":"query","required":true,"schema":{"type":"string","description":"Product ID","title":"Product Id"},"description":"Product ID"},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","description":"Bearer <identity_token>","title":"Authorization"},"description":"Bearer <identity_token>"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserProfile"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/user/conversations":{"get":{"tags":["user"],"summary":"Get My Conversations","description":"Get the authenticated user's conversations.\n\nReturns a list of conversations for the verified user,\nsorted by most recently updated.","operationId":"get_my_conversations_api_user_conversations_get","parameters":[{"name":"product_id","in":"query","required":true,"schema":{"type":"string","description":"Product ID","title":"Product Id"},"description":"Product ID"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","description":"Maximum number of conversations to return","default":10,"title":"Limit"},"description":"Maximum number of conversations to return"},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","description":"Bearer <identity_token>","title":"Authorization"},"description":"Bearer <identity_token>"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConversationsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/user/conversations/{conversation_id}":{"get":{"tags":["user"],"summary":"Get Conversation Detail","description":"Get details for a specific conversation.\n\nVerifies the user owns the conversation before returning details.","operationId":"get_conversation_detail_api_user_conversations__conversation_id__get","parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","title":"Conversation Id"}},{"name":"product_id","in":"query","required":true,"schema":{"type":"string","description":"Product ID","title":"Product Id"},"description":"Product ID"},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","description":"Bearer <identity_token>","title":"Authorization"},"description":"Bearer <identity_token>"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/browser-use/start":{"post":{"tags":["browser-use"],"summary":"Start Session","description":"Start a new browser-use session.\n\nValidates that the product has browser_use enabled, then creates\na session for orchestrating the browser automation.","operationId":"start_session_api_browser_use_start_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrowserUseStartRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrowserUseStartResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/browser-use/step":{"post":{"tags":["browser-use"],"summary":"Process Step","description":"Process one step of browser automation.\n\nClient submits the current browser state, server makes LLM decision\nand returns the action to execute.","operationId":"process_step_api_browser_use_step_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrowserUseStepRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrowserUseStepResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/browser-use/end":{"post":{"tags":["browser-use"],"summary":"End Session","description":"End a browser-use session early (e.g., user cancellation).","operationId":"end_session_api_browser_use_end_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrowserUseEndRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/captures":{"post":{"tags":["admin"],"summary":"Create Capture","description":"Create a new page capture from the Chrome extension.\n\nThis endpoint:\n1. Decodes the base64 screenshot\n2. Uploads it to Supabase storage\n3. Creates a database record with the capture data","operationId":"create_capture_api_admin_captures_post","parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCaptureRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CaptureResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["admin"],"summary":"List Captures","description":"List all captures for a product.\n\nReturns captures sorted by created_at descending (newest first).","operationId":"list_captures_api_admin_captures_get","parameters":[{"name":"product_id","in":"query","required":true,"schema":{"type":"string","description":"Product ID to filter captures","title":"Product Id"},"description":"Product ID to filter captures"},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by status (pending, processed, archived)","title":"Status"},"description":"Filter by status (pending, processed, archived)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Max number of captures to return","default":50,"title":"Limit"},"description":"Max number of captures to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Number of captures to skip","default":0,"title":"Offset"},"description":"Number of captures to skip"},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CaptureListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/captures/{capture_id}":{"get":{"tags":["admin"],"summary":"Get Capture","description":"Get a single capture by ID.","operationId":"get_capture_api_admin_captures__capture_id__get","parameters":[{"name":"capture_id","in":"path","required":true,"schema":{"type":"string","title":"Capture Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CaptureResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["admin"],"summary":"Delete Capture","description":"Delete a capture and its screenshot from storage.","operationId":"delete_capture_api_admin_captures__capture_id__delete","parameters":[{"name":"capture_id","in":"path","required":true,"schema":{"type":"string","title":"Capture Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/captures/{capture_id}/status":{"patch":{"tags":["admin"],"summary":"Update Capture Status","description":"Update the status of a capture.\n\nValid statuses: pending, processed, archived","operationId":"update_capture_status_api_admin_captures__capture_id__status_patch","parameters":[{"name":"capture_id","in":"path","required":true,"schema":{"type":"string","title":"Capture Id"}},{"name":"status","in":"query","required":true,"schema":{"type":"string","description":"New status","title":"Status"},"description":"New status"},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/captures/{capture_id}/generate-context":{"post":{"tags":["admin"],"summary":"Generate Context","description":"Generate context for a capture using vision LLM.\n\nThis endpoint:\n1. Fetches the capture data (screenshot + DOM)\n2. Sends to GPT-4o with vision capabilities\n3. Returns structured context with workflows and questions","operationId":"generate_context_api_admin_captures__capture_id__generate_context_post","parameters":[{"name":"capture_id","in":"path","required":true,"schema":{"type":"string","title":"Capture Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateContextResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/captures/{capture_id}/generate-intents":{"post":{"tags":["admin"],"summary":"Generate Intents","description":"Generate intent-to-action mappings for a capture using vision LLM.\n\nThis endpoint:\n1. Fetches the capture data (screenshot + DOM)\n2. Sends to GPT-4o with vision capabilities\n3. Returns structured intent mappings","operationId":"generate_intents_api_admin_captures__capture_id__generate_intents_post","parameters":[{"name":"capture_id","in":"path","required":true,"schema":{"type":"string","title":"Capture Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateIntentsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/page-intents/bulk-save":{"post":{"tags":["admin"],"summary":"Bulk Save Intents","description":"Bulk save all intent data for a page (element labels, intent actions, vocabulary).\n\nThis replaces any existing data for the same product_id + url_pattern.","operationId":"bulk_save_intents_api_admin_page_intents_bulk_save_post","parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkSaveIntentsRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/processed-url-patterns":{"get":{"tags":["admin"],"summary":"List Processed Url Patterns","description":"Return the set of URL patterns that have intent data saved.\nUsed by the training list page to derive capture status from actual data\nrather than a manually-maintained status field.","operationId":"list_processed_url_patterns_api_admin_processed_url_patterns_get","parameters":[{"name":"product_id","in":"query","required":true,"schema":{"type":"string","description":"Product ID","title":"Product Id"},"description":"Product ID"},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/page-intents":{"get":{"tags":["admin"],"summary":"List Page Intents","description":"List all intent-to-action mappings for a product (optionally filtered by URL pattern).","operationId":"list_page_intents_api_admin_page_intents_get","parameters":[{"name":"product_id","in":"query","required":true,"schema":{"type":"string","description":"Product ID","title":"Product Id"},"description":"Product ID"},{"name":"url_pattern","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by URL pattern","title":"Url Pattern"},"description":"Filter by URL pattern"},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["admin"],"summary":"Create Page Intent","description":"Create a new intent-to-action mapping.","operationId":"create_page_intent_api_admin_page_intents_post","parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateIntentActionRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/page-intents/{intent_id}":{"get":{"tags":["admin"],"summary":"Get Page Intent","description":"Get a single intent-to-action mapping by ID.","operationId":"get_page_intent_api_admin_page_intents__intent_id__get","parameters":[{"name":"intent_id","in":"path","required":true,"schema":{"type":"string","title":"Intent Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["admin"],"summary":"Update Page Intent","description":"Update an existing intent-to-action mapping.","operationId":"update_page_intent_api_admin_page_intents__intent_id__put","parameters":[{"name":"intent_id","in":"path","required":true,"schema":{"type":"string","title":"Intent Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateIntentActionRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["admin"],"summary":"Delete Page Intent","description":"Delete an intent-to-action mapping.","operationId":"delete_page_intent_api_admin_page_intents__intent_id__delete","parameters":[{"name":"intent_id","in":"path","required":true,"schema":{"type":"string","title":"Intent Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/element-labels":{"get":{"tags":["admin"],"summary":"List Element Labels","description":"List all element labels for a product.","operationId":"list_element_labels_api_admin_element_labels_get","parameters":[{"name":"product_id","in":"query","required":true,"schema":{"type":"string","description":"Product ID","title":"Product Id"},"description":"Product ID"},{"name":"url_pattern","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by URL pattern","title":"Url Pattern"},"description":"Filter by URL pattern"},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["admin"],"summary":"Create Element Label","description":"Create or update an element label.","operationId":"create_element_label_api_admin_element_labels_post","parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateElementLabelRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/vocabulary":{"get":{"tags":["admin"],"summary":"List Vocabulary","description":"List all vocabulary mappings for a product.","operationId":"list_vocabulary_api_admin_vocabulary_get","parameters":[{"name":"product_id","in":"query","required":true,"schema":{"type":"string","description":"Product ID","title":"Product Id"},"description":"Product ID"},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["admin"],"summary":"Create Vocabulary","description":"Create a vocabulary mapping.","operationId":"create_vocabulary_api_admin_vocabulary_post","parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateVocabularyRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/vocabulary/{vocab_id}":{"delete":{"tags":["admin"],"summary":"Delete Vocabulary","description":"Delete a vocabulary mapping.","operationId":"delete_vocabulary_api_admin_vocabulary__vocab_id__delete","parameters":[{"name":"vocab_id","in":"path","required":true,"schema":{"type":"string","title":"Vocab Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/product-routes":{"get":{"tags":["admin"],"summary":"List Product Routes","description":"List all product intent routes for a product.\n\nThese are the Layer 1 routes that tell the main agent which pages\ncan handle which user intents, enabling smart handoff to browser_use.","operationId":"list_product_routes_api_admin_product_routes_get","parameters":[{"name":"product_id","in":"query","required":true,"schema":{"type":"string","description":"Product ID","title":"Product Id"},"description":"Product ID"},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/product-routes/{route_id}":{"get":{"tags":["admin"],"summary":"Get Product Route","description":"Get a single product intent route by ID.","operationId":"get_product_route_api_admin_product_routes__route_id__get","parameters":[{"name":"route_id","in":"path","required":true,"schema":{"type":"string","title":"Route Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/page-intents/generate-summary":{"post":{"tags":["admin"],"summary":"Generate Page Summary","description":"Generate a verbose natural-language page summary from intent mappings.\n\nThis summary is injected into the main agent's system prompt so it knows\nwhat each page can do and when to hand off to browser_use.\n\nUses gpt-4o-mini (text task, not vision).","operationId":"generate_page_summary_api_admin_page_intents_generate_summary_post","parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateSummaryRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/batch-generate-and-save":{"post":{"tags":["admin"],"summary":"Batch Generate And Save","description":"Batch generate intents + page summaries and auto-save for multiple captures.\n\nFor each capture:\n1. Generate intent mappings via vision LLM\n2. Generate page summary for main agent handoff\n3. Bulk save (element labels, intents, vocabulary, product route)\n4. Mark capture as \"processed\"\n\nStreams progress as newline-delimited JSON (NDJSON) so the UI can show live updates.\n\nSkips captures that already have \"processed\" status unless force=True.","operationId":"batch_generate_and_save_api_admin_batch_generate_and_save_post","parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BatchGenerateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/auto-populate-navigation":{"post":{"tags":["admin"],"summary":"Auto Populate Navigation","description":"Read all product_intent_routes for a product and merge them into the\nproduct's page_navigation_config.  Existing manually-added routes\n(matched by path) are preserved.  New routes are tagged with\nsource=\"auto-discovered\".  Also sets page_navigation_enabled = true.","operationId":"auto_populate_navigation_api_admin_auto_populate_navigation_post","parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutoPopulateNavRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/generate-app-knowledge":{"post":{"tags":["admin"],"summary":"Generate App Knowledge","description":"Aggregate all trained page data for a product and generate a comprehensive\napp knowledge document using the LLM. Returns the markdown content.","operationId":"generate_app_knowledge_api_admin_generate_app_knowledge_post","parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateAppKnowledgeRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/products/{product_id}/recorded-workflows":{"post":{"tags":["recorded-workflows"],"summary":"Create Recorded Workflow","description":"Create a new recorded workflow for a product","operationId":"create_recorded_workflow_api_products__product_id__recorded_workflows_post","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecordedWorkflowCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["recorded-workflows"],"summary":"List Recorded Workflows","description":"List all recorded workflows for a product","operationId":"list_recorded_workflows_api_products__product_id__recorded_workflows_get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/recorded-workflows/{workflow_id}":{"get":{"tags":["recorded-workflows"],"summary":"Get Recorded Workflow","description":"Get a specific recorded workflow","operationId":"get_recorded_workflow_api_recorded_workflows__workflow_id__get","parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","title":"Workflow Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["recorded-workflows"],"summary":"Update Recorded Workflow","description":"Update a recorded workflow","operationId":"update_recorded_workflow_api_recorded_workflows__workflow_id__put","parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","title":"Workflow Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecordedWorkflowUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["recorded-workflows"],"summary":"Delete Recorded Workflow","description":"Delete a recorded workflow","operationId":"delete_recorded_workflow_api_recorded_workflows__workflow_id__delete","parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","title":"Workflow Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/envoy/stream":{"post":{"tags":["envoy"],"summary":"Stream Llm","description":"Proxy LLM calls to Claude API.\n\n- Validates the envoy API key\n- Injects the mcp-builder system prompt (server-side)\n- Forwards to Anthropic's Messages API\n- Streams the response back","operationId":"stream_llm_api_envoy_stream_post","parameters":[{"name":"x-envoy-key","in":"header","required":true,"schema":{"type":"string","title":"X-Envoy-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/envoy/v1/messages":{"post":{"tags":["envoy"],"summary":"Stream Llm V1","description":"Alias for /stream — Claude Agent SDK sets ANTHROPIC_BASE_URL and appends /v1/messages.","operationId":"stream_llm_v1_api_envoy_v1_messages_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/envoy/v1/messages/count_tokens":{"post":{"tags":["envoy"],"summary":"Count Tokens","description":"Proxy token counting to Anthropic. Claude Code uses this for context management.","operationId":"count_tokens_api_envoy_v1_messages_count_tokens_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/envoy/save":{"post":{"tags":["envoy"],"summary":"Save Mcp Server","description":"Save generated MCP server code.\n\nCreates a new version row in hosted_mcp_servers.\nEach save = a new version (versions are never overwritten).","operationId":"save_mcp_server_api_envoy_save_post","parameters":[{"name":"x-envoy-key","in":"header","required":true,"schema":{"type":"string","title":"X-Envoy-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SaveRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/envoy/deploy":{"post":{"tags":["envoy"],"summary":"Deploy Mcp Server","description":"Deploy the latest saved MCP server version.\n\nKicks off async deployment (writes files, starts supervisor process,\nhealth checks, auto-wires MCP config). Returns immediately.","operationId":"deploy_mcp_server_api_envoy_deploy_post","parameters":[{"name":"x-envoy-key","in":"header","required":true,"schema":{"type":"string","title":"X-Envoy-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/envoy/server":{"get":{"tags":["envoy"],"summary":"Get Latest Server","description":"Fetch the latest MCP server code.\n\nUsed by 'envoy fix' to get the current version before patching.","operationId":"get_latest_server_api_envoy_server_get","parameters":[{"name":"x-envoy-key","in":"header","required":true,"schema":{"type":"string","title":"X-Envoy-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/envoy/versions":{"get":{"tags":["envoy"],"summary":"List Versions","description":"List all MCP server versions for this product.","operationId":"list_versions_api_envoy_versions_get","parameters":[{"name":"x-envoy-key","in":"header","required":true,"schema":{"type":"string","title":"X-Envoy-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/envoy/generate-key":{"post":{"tags":["envoy"],"summary":"Generate Envoy Key","description":"Generate or rotate an Envoy API key for a product.\n\nRequires Clerk JWT auth (dashboard call).","operationId":"generate_envoy_key_api_envoy_generate_key_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/envoy/key":{"get":{"tags":["envoy"],"summary":"Get Envoy Key","description":"Get the current Envoy API key for a product (masked).\n\nRequires Clerk JWT auth (dashboard call).","operationId":"get_envoy_key_api_envoy_key_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/envoy/dashboard-status":{"get":{"tags":["envoy"],"summary":"Get Dashboard Status","description":"Get Envoy deployment status for the dashboard.\n\nRequires Clerk JWT auth (dashboard call).\nReturns latest hosted_mcp_servers info + whether envoy key exists.","operationId":"get_dashboard_status_api_envoy_dashboard_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/envoy/hosted-mcp/{product_id}/{path}":{"post":{"tags":["envoy"],"summary":"Proxy Hosted Mcp","description":"Reverse proxy to a hosted MCP server running inside the container.\n\nRoutes:\n    /api/envoy/hosted-mcp/{product_id}/mcp → http://localhost:{port}/mcp","operationId":"proxy_hosted_mcp_api_envoy_hosted_mcp__product_id___path__post","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"path","in":"path","required":true,"schema":{"type":"string","title":"Path"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["envoy"],"summary":"Proxy Hosted Mcp","description":"Reverse proxy to a hosted MCP server running inside the container.\n\nRoutes:\n    /api/envoy/hosted-mcp/{product_id}/mcp → http://localhost:{port}/mcp","operationId":"proxy_hosted_mcp_api_envoy_hosted_mcp__product_id___path__post","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"path","in":"path","required":true,"schema":{"type":"string","title":"Path"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["envoy"],"summary":"Proxy Hosted Mcp","description":"Reverse proxy to a hosted MCP server running inside the container.\n\nRoutes:\n    /api/envoy/hosted-mcp/{product_id}/mcp → http://localhost:{port}/mcp","operationId":"proxy_hosted_mcp_api_envoy_hosted_mcp__product_id___path__post","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"path","in":"path","required":true,"schema":{"type":"string","title":"Path"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["envoy"],"summary":"Proxy Hosted Mcp","description":"Reverse proxy to a hosted MCP server running inside the container.\n\nRoutes:\n    /api/envoy/hosted-mcp/{product_id}/mcp → http://localhost:{port}/mcp","operationId":"proxy_hosted_mcp_api_envoy_hosted_mcp__product_id___path__post","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"path","in":"path","required":true,"schema":{"type":"string","title":"Path"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"options":{"tags":["envoy"],"summary":"Proxy Hosted Mcp","description":"Reverse proxy to a hosted MCP server running inside the container.\n\nRoutes:\n    /api/envoy/hosted-mcp/{product_id}/mcp → http://localhost:{port}/mcp","operationId":"proxy_hosted_mcp_api_envoy_hosted_mcp__product_id___path__post","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}},{"name":"path","in":"path","required":true,"schema":{"type":"string","title":"Path"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/mb-demo/classify":{"post":{"tags":["mb-demo"],"summary":"Classify","operationId":"classify_api_mb_demo_classify_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClassifyRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClassifyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/health":{"get":{"summary":"Health","description":"Health check endpoint","operationId":"health_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/studio/platform":{"get":{"summary":"Gradium Platform Demo","description":"Serve the Gradium navigation demo shell.","operationId":"gradium_platform_demo_studio_platform_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/studio/platform/api-keys":{"get":{"summary":"Gradium Platform Api Keys Demo","description":"Serve the Gradium API keys demo page.","operationId":"gradium_platform_api_keys_demo_studio_platform_api_keys_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}}},"components":{"schemas":{"APIConnectionUpdate":{"properties":{"api_base_url":{"type":"string","title":"Api Base Url"},"auth_type":{"type":"string","enum":["none","bearer","api_key","basic","jwt_forward"],"title":"Auth Type"},"auth_config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Auth Config"}},"type":"object","required":["api_base_url","auth_type"],"title":"APIConnectionUpdate","description":"Model for updating API connection details"},"AcknowledgeWarningRequest":{"properties":{"endpoint_name":{"type":"string","title":"Endpoint Name"}},"type":"object","required":["endpoint_name"],"title":"AcknowledgeWarningRequest","description":"Request to acknowledge a size warning for an endpoint"},"Action":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"product_id":{"type":"string","format":"uuid","title":"Product Id"},"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"method":{"type":"string","title":"Method"},"path":{"type":"string","title":"Path"},"parameters":{"additionalProperties":true,"type":"object","title":"Parameters"},"suggestable":{"type":"boolean","title":"Suggestable","default":false},"suggestion_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Suggestion Label"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","product_id","name","description","method","path","parameters","created_at"],"title":"Action","description":"Action model"},"ActionCreate":{"properties":{"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"method":{"type":"string","enum":["GET","POST","PUT","PATCH","DELETE"],"title":"Method"},"path":{"type":"string","title":"Path"},"parameters":{"additionalProperties":true,"type":"object","title":"Parameters"}},"type":"object","required":["name","description","method","path","parameters"],"title":"ActionCreate","description":"Model for creating a new action"},"ActionUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"method":{"anyOf":[{"type":"string","enum":["GET","POST","PUT","PATCH","DELETE"]},{"type":"null"}],"title":"Method"},"path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Path"},"parameters":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Parameters"},"suggestable":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Suggestable"},"suggestion_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Suggestion Label"}},"type":"object","title":"ActionUpdate","description":"Model for updating an action"},"AddMessageRequest":{"properties":{"product_id":{"type":"string","title":"Product Id"},"conversation_id":{"type":"string","title":"Conversation Id"},"role":{"type":"string","title":"Role"},"content":{"type":"string","title":"Content"},"identity_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Identity Token"}},"type":"object","required":["product_id","conversation_id","role","content"],"title":"AddMessageRequest","description":"Request to add a message to conversation history without triggering LLM"},"AlwaysOnToolsRequest":{"properties":{"tool_names":{"items":{"type":"string"},"type":"array","title":"Tool Names"}},"type":"object","required":["tool_names"],"title":"AlwaysOnToolsRequest","description":"Request model for setting always-on tools"},"AnimationsConfig":{"properties":{"duration":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Duration"},"easing":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Easing"}},"type":"object","title":"AnimationsConfig","description":"Animation configuration"},"AutoPopulateNavRequest":{"properties":{"product_id":{"type":"string","title":"Product Id"}},"type":"object","required":["product_id"],"title":"AutoPopulateNavRequest","description":"Request to auto-populate page_navigation_config from product_intent_routes."},"BatchGenerateRequest":{"properties":{"product_id":{"type":"string","title":"Product Id"},"capture_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Capture Ids"},"force":{"type":"boolean","title":"Force","default":false}},"type":"object","required":["product_id"],"title":"BatchGenerateRequest","description":"Request to batch-generate intents and save for multiple captures."},"Body_upload_file_api_products__product_id__files_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"},"enable_multimodal":{"type":"boolean","title":"Enable Multimodal","default":false}},"type":"object","required":["file"],"title":"Body_upload_file_api_products__product_id__files_post"},"Body_upload_smart_document_api_products__product_id__smart_documents_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"},"domain":{"type":"string","title":"Domain"}},"type":"object","required":["file","domain"],"title":"Body_upload_smart_document_api_products__product_id__smart_documents_post"},"BrowserAgentConfigRequest":{"properties":{"enabled":{"type":"boolean","title":"Enabled"},"instructions":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Instructions"}},"type":"object","required":["enabled"],"title":"BrowserAgentConfigRequest","description":"Request model for updating browser agent settings"},"BrowserState":{"properties":{"url":{"type":"string","title":"Url"},"title":{"type":"string","title":"Title"},"content":{"type":"string","title":"Content"},"header":{"type":"string","title":"Header"},"footer":{"type":"string","title":"Footer"}},"type":"object","required":["url","title","content","header","footer"],"title":"BrowserState","description":"Browser state from the client."},"BrowserUseEndRequest":{"properties":{"session_id":{"type":"string","title":"Session Id"},"product_id":{"type":"string","title":"Product Id"}},"type":"object","required":["session_id","product_id"],"title":"BrowserUseEndRequest","description":"Request to end a browser-use session early."},"BrowserUseStartRequest":{"properties":{"product_id":{"type":"string","title":"Product Id"},"task":{"type":"string","title":"Task"}},"type":"object","required":["product_id","task"],"title":"BrowserUseStartRequest","description":"Request to start a browser-use session."},"BrowserUseStartResponse":{"properties":{"session_id":{"type":"string","title":"Session Id"},"max_steps":{"type":"integer","title":"Max Steps"}},"type":"object","required":["session_id","max_steps"],"title":"BrowserUseStartResponse","description":"Response from starting a browser-use session."},"BrowserUseStepRequest":{"properties":{"session_id":{"type":"string","title":"Session Id"},"product_id":{"type":"string","title":"Product Id"},"browser_state":{"$ref":"#/components/schemas/BrowserState"},"action_result":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Action Result"}},"type":"object","required":["session_id","product_id","browser_state"],"title":"BrowserUseStepRequest","description":"Request to process one step of browser automation."},"BrowserUseStepResponse":{"properties":{"done":{"type":"boolean","title":"Done"},"success":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Success"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"action":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Action"},"step":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Step"},"reflection":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Reflection"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"},"needs_user_input":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Needs User Input"},"question":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Question"}},"type":"object","required":["done"],"title":"BrowserUseStepResponse","description":"Response from processing a step."},"BulkSaveIntentsRequest":{"properties":{"product_id":{"type":"string","title":"Product Id"},"url_pattern":{"type":"string","title":"Url Pattern"},"page_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Page Name"},"source_capture_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Capture Id"},"element_labels":{"additionalProperties":{"type":"string"},"type":"object","title":"Element Labels"},"intent_actions":{"items":{"$ref":"#/components/schemas/IntentActionResponse"},"type":"array","title":"Intent Actions"},"vocabulary":{"items":{"$ref":"#/components/schemas/VocabularyMappingResponse"},"type":"array","title":"Vocabulary"},"page_summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Page Summary"},"rolled_up_intents":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Rolled Up Intents"}},"type":"object","required":["product_id","url_pattern","element_labels","intent_actions","vocabulary"],"title":"BulkSaveIntentsRequest","description":"Request to bulk save all intent data for a page."},"CancelSubscriptionRequest":{"properties":{"product_id":{"type":"string","title":"Product Id"},"cancel_at_period_end":{"type":"boolean","title":"Cancel At Period End","default":true}},"type":"object","required":["product_id"],"title":"CancelSubscriptionRequest","description":"Request to cancel subscription"},"CancelSubscriptionResponse":{"properties":{"subscription_id":{"type":"string","title":"Subscription Id"},"status":{"type":"string","title":"Status"},"message":{"type":"string","title":"Message"},"cancel_at":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Cancel At"}},"type":"object","required":["subscription_id","status","message"],"title":"CancelSubscriptionResponse","description":"Response after canceling subscription"},"CaptureListResponse":{"properties":{"captures":{"items":{"$ref":"#/components/schemas/CaptureResponse"},"type":"array","title":"Captures"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["captures","total"],"title":"CaptureListResponse","description":"Response for listing captures."},"CaptureResponse":{"properties":{"id":{"type":"string","title":"Id"},"product_id":{"type":"string","title":"Product Id"},"url":{"type":"string","title":"Url"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"simplified_dom":{"type":"string","title":"Simplified Dom"},"screenshot_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Screenshot Url"},"screenshot_urls":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Screenshot Urls"},"viewport_width":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Viewport Width"},"viewport_height":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Viewport Height"},"captured_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Captured At"},"created_at":{"type":"string","title":"Created At"},"status":{"type":"string","title":"Status"}},"type":"object","required":["id","product_id","url","title","simplified_dom","screenshot_url","viewport_width","viewport_height","captured_at","created_at","status"],"title":"CaptureResponse","description":"Response for a single capture."},"ChangePlanRequest":{"properties":{"product_id":{"type":"string","title":"Product Id"},"plan":{"type":"string","enum":["hobby","standard","pro"],"title":"Plan"}},"type":"object","required":["product_id","plan"],"title":"ChangePlanRequest","description":"Request to change subscription plan"},"ChangePlanResponse":{"properties":{"subscription_id":{"type":"string","title":"Subscription Id"},"new_plan":{"type":"string","title":"New Plan"},"status":{"type":"string","title":"Status"},"current_period_end":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Current Period End"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"}},"type":"object","required":["subscription_id","new_plan","status"],"title":"ChangePlanResponse","description":"Response after changing plan"},"ChatMessageRequest":{"properties":{"product_id":{"type":"string","title":"Product Id"},"message":{"type":"string","title":"Message"},"conversation_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Conversation Id"},"identity_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Identity Token"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model"},"user_timezone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Timezone"},"user_local_time":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Local Time"},"page_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Page Path"},"context":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Context"},"agent_mode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Agent Mode"},"subdomain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subdomain"},"language":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Language"}},"type":"object","required":["product_id","message"],"title":"ChatMessageRequest"},"ClaimConversationRequest":{"properties":{"product_id":{"type":"string","title":"Product Id"},"identity_token":{"type":"string","title":"Identity Token"}},"type":"object","required":["product_id","identity_token"],"title":"ClaimConversationRequest"},"ClassifyRequest":{"properties":{"message":{"type":"string","title":"Message"}},"type":"object","required":["message"],"title":"ClassifyRequest"},"ClassifyResponse":{"properties":{"category":{"type":"string","title":"Category"}},"type":"object","required":["category"],"title":"ClassifyResponse"},"ClientToolsRequest":{"properties":{"tools":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Tools"}},"type":"object","required":["tools"],"title":"ClientToolsRequest","description":"Request model for uploading client-side tools in OpenAI function format"},"CodeModeEnabledRequest":{"properties":{"code_mode_enabled":{"type":"boolean","title":"Code Mode Enabled"}},"type":"object","required":["code_mode_enabled"],"title":"CodeModeEnabledRequest"},"ColorsConfig":{"properties":{"primary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Primary"},"background":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Background"},"text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Text"},"border":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Border"},"botBubble":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Botbubble"},"botText":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bottext"},"userBubble":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Userbubble"},"userText":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Usertext"},"userBorder":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Userborder"},"messagesBackground":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Messagesbackground"},"bubbleBackground":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bubblebackground"},"bubbleBorder":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bubbleborder"},"bubbleIcon":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bubbleicon"}},"type":"object","title":"ColorsConfig","description":"Color configuration shared between widget and copilot"},"Conversation":{"properties":{"id":{"type":"string","title":"Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"created_at":{"type":"string","title":"Created At"},"updated_at":{"type":"string","title":"Updated At"}},"type":"object","required":["id","created_at","updated_at"],"title":"Conversation"},"ConversationResponse":{"properties":{"id":{"type":"string","title":"Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"created_at":{"type":"string","title":"Created At"},"updated_at":{"type":"string","title":"Updated At"}},"type":"object","required":["id","created_at","updated_at"],"title":"ConversationResponse"},"ConversationsResponse":{"properties":{"conversations":{"items":{"$ref":"#/components/schemas/Conversation"},"type":"array","title":"Conversations"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["conversations","total"],"title":"ConversationsResponse"},"CopilotBrandingConfig":{"properties":{"showPoweredBy":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Showpoweredby"},"poweredByText":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Poweredbytext"}},"type":"object","title":"CopilotBrandingConfig","description":"Branding configuration for copilot"},"CopilotDimensionsConfig":{"properties":{"width":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Width"},"headerHeight":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Headerheight"},"borderRadius":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Borderradius"},"padding":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Padding"}},"type":"object","title":"CopilotDimensionsConfig","description":"Copilot dimension configuration"},"CopilotPositionConfig":{"properties":{"side":{"anyOf":[{"type":"string","enum":["left","right"]},{"type":"null"}],"title":"Side"}},"type":"object","title":"CopilotPositionConfig","description":"Copilot position configuration"},"CopilotStyleConfig":{"properties":{"colors":{"anyOf":[{"$ref":"#/components/schemas/ColorsConfig"},{"type":"null"}]},"typography":{"anyOf":[{"$ref":"#/components/schemas/TypographyConfig"},{"type":"null"}]},"animations":{"anyOf":[{"$ref":"#/components/schemas/AnimationsConfig"},{"type":"null"}]},"dimensions":{"anyOf":[{"$ref":"#/components/schemas/CopilotDimensionsConfig"},{"type":"null"}]},"position":{"anyOf":[{"$ref":"#/components/schemas/CopilotPositionConfig"},{"type":"null"}]},"branding":{"anyOf":[{"$ref":"#/components/schemas/CopilotBrandingConfig"},{"type":"null"}]}},"type":"object","title":"CopilotStyleConfig","description":"Complete copilot style configuration.\n\nAll fields are optional - only specified fields override defaults."},"CreateCaptureRequest":{"properties":{"product_id":{"type":"string","title":"Product Id"},"url":{"type":"string","title":"Url"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"simplified_dom":{"type":"string","title":"Simplified Dom"},"screenshot_base64":{"type":"string","title":"Screenshot Base64"},"screenshots_base64":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Screenshots Base64"},"viewport_width":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Viewport Width"},"viewport_height":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Viewport Height"},"captured_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Captured At"}},"type":"object","required":["product_id","url","simplified_dom","screenshot_base64"],"title":"CreateCaptureRequest","description":"Request to create a new page capture from the Chrome extension."},"CreateCheckoutRequest":{"properties":{"product_id":{"type":"string","title":"Product Id"},"plan":{"type":"string","enum":["hobby","standard","pro"],"title":"Plan"},"customer_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Customer Email"}},"type":"object","required":["product_id","plan"],"title":"CreateCheckoutRequest","description":"Request to create a checkout session"},"CreateCheckoutResponse":{"properties":{"checkout_url":{"type":"string","title":"Checkout Url"},"session_id":{"type":"string","title":"Session Id"}},"type":"object","required":["checkout_url","session_id"],"title":"CreateCheckoutResponse","description":"Response with checkout URL"},"CreateElementLabelRequest":{"properties":{"product_id":{"type":"string","title":"Product Id"},"url_pattern":{"type":"string","title":"Url Pattern"},"element_index":{"type":"integer","title":"Element Index"},"label":{"type":"string","title":"Label"},"source_capture_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Capture Id"}},"type":"object","required":["product_id","url_pattern","element_index","label"],"title":"CreateElementLabelRequest","description":"Request to create element labels."},"CreateExperimentRequest":{"properties":{"product_id":{"type":"string","title":"Product Id"},"name":{"type":"string","title":"Name"}},"type":"object","required":["product_id","name"],"title":"CreateExperimentRequest"},"CreateIntentActionRequest":{"properties":{"product_id":{"type":"string","title":"Product Id"},"url_pattern":{"type":"string","title":"Url Pattern"},"page_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Page Name"},"intent_patterns":{"items":{"type":"string"},"type":"array","title":"Intent Patterns"},"actions":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Actions"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"condition":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Condition"},"source_capture_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Capture Id"}},"type":"object","required":["product_id","url_pattern","intent_patterns","actions"],"title":"CreateIntentActionRequest","description":"Request to create an intent-to-action mapping."},"CreatePortalRequest":{"properties":{"product_id":{"type":"string","title":"Product Id"}},"type":"object","required":["product_id"],"title":"CreatePortalRequest","description":"Request to create a portal session"},"CreatePortalResponse":{"properties":{"portal_url":{"type":"string","title":"Portal Url"}},"type":"object","required":["portal_url"],"title":"CreatePortalResponse","description":"Response with portal URL"},"CreateSignalRequest":{"properties":{"display_name":{"type":"string","title":"Display Name"},"description":{"type":"string","title":"Description"}},"type":"object","required":["display_name","description"],"title":"CreateSignalRequest"},"CreateTestCaseRequest":{"properties":{"prompt":{"type":"string","title":"Prompt"},"sort_order":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sort Order","default":0},"evaluator_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Evaluator Type"},"expected_output":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expected Output"},"evaluation_criteria":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Evaluation Criteria"}},"type":"object","required":["prompt"],"title":"CreateTestCaseRequest"},"CreateVocabularyRequest":{"properties":{"product_id":{"type":"string","title":"Product Id"},"term":{"type":"string","title":"Term"},"canonical":{"type":"string","title":"Canonical"},"url_pattern":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url Pattern"}},"type":"object","required":["product_id","term","canonical"],"title":"CreateVocabularyRequest","description":"Request to create a vocabulary mapping."},"CrowTokenRequest":{"properties":{"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"first_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Name"},"last_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Name"}},"type":"object","title":"CrowTokenRequest","description":"User info to include in the Crow JWT"},"CrowTokenResponse":{"properties":{"token":{"type":"string","title":"Token"}},"type":"object","required":["token"],"title":"CrowTokenResponse","description":"Response containing the Crow JWT"},"DeleteWebsiteRequest":{"properties":{"filename":{"type":"string","title":"Filename"}},"type":"object","required":["filename"],"title":"DeleteWebsiteRequest"},"ExperimentListItem":{"properties":{"id":{"type":"string","title":"Id"},"product_id":{"type":"string","title":"Product Id"},"name":{"type":"string","title":"Name"},"created_at":{"type":"string","title":"Created At"},"updated_at":{"type":"string","title":"Updated At"},"test_case_count":{"type":"integer","title":"Test Case Count"},"latest_run_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Latest Run Status"}},"type":"object","required":["id","product_id","name","created_at","updated_at","test_case_count"],"title":"ExperimentListItem"},"ExperimentResponse":{"properties":{"id":{"type":"string","title":"Id"},"product_id":{"type":"string","title":"Product Id"},"name":{"type":"string","title":"Name"},"created_at":{"type":"string","title":"Created At"},"updated_at":{"type":"string","title":"Updated At"},"test_cases":{"items":{"$ref":"#/components/schemas/TestCaseResponse"},"type":"array","title":"Test Cases"},"latest_run":{"anyOf":[{"$ref":"#/components/schemas/ExperimentRunResponse"},{"type":"null"}]}},"type":"object","required":["id","product_id","name","created_at","updated_at","test_cases"],"title":"ExperimentResponse"},"ExperimentRunResponse":{"properties":{"id":{"type":"string","title":"Id"},"experiment_id":{"type":"string","title":"Experiment Id"},"status":{"type":"string","title":"Status"},"started_at":{"type":"string","title":"Started At"},"completed_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Completed At"},"total_cases":{"type":"integer","title":"Total Cases"},"completed_cases":{"type":"integer","title":"Completed Cases"},"results":{"items":{"$ref":"#/components/schemas/RunResultResponse"},"type":"array","title":"Results"}},"type":"object","required":["id","experiment_id","status","started_at","total_cases","completed_cases","results"],"title":"ExperimentRunResponse"},"ExtendedThinkingRequest":{"properties":{"extended_thinking":{"type":"boolean","title":"Extended Thinking"}},"type":"object","required":["extended_thinking"],"title":"ExtendedThinkingRequest"},"FeedbackRequest":{"properties":{"message":{"type":"string","title":"Message"}},"type":"object","required":["message"],"title":"FeedbackRequest"},"GenerateAppKnowledgeRequest":{"properties":{"product_id":{"type":"string","title":"Product Id"}},"type":"object","required":["product_id"],"title":"GenerateAppKnowledgeRequest","description":"Request to generate a comprehensive app knowledge markdown document."},"GenerateContextResponse":{"properties":{"page_summary":{"type":"string","title":"Page Summary"},"element_descriptions":{"additionalProperties":{"type":"string"},"type":"object","title":"Element Descriptions"},"workflows":{"items":{"$ref":"#/components/schemas/WorkflowResponse"},"type":"array","title":"Workflows"},"ambiguities":{"items":{"type":"string"},"type":"array","title":"Ambiguities"},"questions_for_human":{"items":{"type":"string"},"type":"array","title":"Questions For Human"},"suggested_context":{"type":"string","title":"Suggested Context"}},"type":"object","required":["page_summary","element_descriptions","workflows","ambiguities","questions_for_human","suggested_context"],"title":"GenerateContextResponse","description":"Response from context generation (legacy Phase 4)."},"GenerateIntentsResponse":{"properties":{"page_purpose":{"type":"string","title":"Page Purpose"},"element_labels":{"additionalProperties":{"type":"string"},"type":"object","title":"Element Labels"},"intent_actions":{"items":{"$ref":"#/components/schemas/IntentActionResponse"},"type":"array","title":"Intent Actions"},"vocabulary":{"items":{"$ref":"#/components/schemas/VocabularyMappingResponse"},"type":"array","title":"Vocabulary"},"warnings":{"items":{"type":"string"},"type":"array","title":"Warnings"},"questions_for_human":{"items":{"type":"string"},"type":"array","title":"Questions For Human"}},"type":"object","required":["page_purpose","element_labels","intent_actions","vocabulary","warnings","questions_for_human"],"title":"GenerateIntentsResponse","description":"Response from intent mapping generation."},"GenerateSummaryRequest":{"properties":{"page_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Page Name"},"url_pattern":{"type":"string","title":"Url Pattern"},"element_labels":{"additionalProperties":{"type":"string"},"type":"object","title":"Element Labels"},"intent_actions":{"items":{"$ref":"#/components/schemas/IntentActionResponse"},"type":"array","title":"Intent Actions"},"vocabulary":{"items":{"$ref":"#/components/schemas/VocabularyMappingResponse"},"type":"array","title":"Vocabulary"}},"type":"object","required":["url_pattern","element_labels","intent_actions","vocabulary"],"title":"GenerateSummaryRequest","description":"Request to generate a page summary from intent mappings."},"GradiumTTSRequestWithAuth":{"properties":{"text":{"type":"string","maxLength":4000,"minLength":1,"title":"Text"},"voice_id":{"type":"string","title":"Voice Id","default":"YTpq7expH9539ERJ"},"output_format":{"type":"string","enum":["wav","pcm","opus","ulaw_8000","alaw_8000","pcm_8000","pcm_16000","pcm_24000"],"title":"Output Format","default":"wav"},"product_id":{"type":"string","minLength":1,"title":"Product Id"}},"type":"object","required":["text","product_id"],"title":"GradiumTTSRequestWithAuth"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"InitialSuggestionsRequest":{"properties":{"initial_suggestions":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Initial Suggestions"}},"type":"object","title":"InitialSuggestionsRequest","description":"Request model for updating initial suggestion buttons shown at conversation start"},"InputSchemaField":{"properties":{"name":{"type":"string","title":"Name"},"type":{"type":"string","enum":["string","number","bool"],"title":"Type","default":"string"},"required":{"type":"boolean","title":"Required","default":false},"default_value":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Default Value"}},"type":"object","required":["name"],"title":"InputSchemaField"},"IntentActionResponse":{"properties":{"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id"},"intents":{"items":{"type":"string"},"type":"array","title":"Intents"},"actions":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Actions"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"condition":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Condition"}},"type":"object","required":["intents","actions"],"title":"IntentActionResponse","description":"A single intent-to-action mapping."},"LandingPageRequest":{"properties":{"email_id":{"type":"string","title":"Email Id"},"request":{"type":"string","title":"Request"}},"type":"object","required":["email_id","request"],"title":"LandingPageRequest"},"LandingPageResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"message":{"type":"string","title":"Message"},"id":{"type":"string","title":"Id"}},"type":"object","required":["success","message","id"],"title":"LandingPageResponse"},"McpServerHeaderMapping":{"properties":{"header":{"type":"string","title":"Header"},"source":{"type":"string","title":"Source"}},"type":"object","required":["header","source"],"title":"McpServerHeaderMapping"},"McpServerRequest":{"properties":{"name":{"type":"string","title":"Name"},"url":{"type":"string","title":"Url"},"transport":{"type":"string","title":"Transport","default":"sse"},"headers":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Headers"},"header_mappings":{"anyOf":[{"items":{"$ref":"#/components/schemas/McpServerHeaderMapping"},"type":"array"},{"type":"null"}],"title":"Header Mappings"},"preset":{"type":"boolean","title":"Preset","default":false},"oauth_provider":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Oauth Provider"},"enabled":{"type":"boolean","title":"Enabled","default":true},"disabled_tools":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Disabled Tools"}},"type":"object","required":["name","url"],"title":"McpServerRequest"},"MessageData":{"properties":{"type":{"type":"string","title":"Type"},"content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"arguments":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Arguments"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"result":{"anyOf":[{},{"type":"null"}],"title":"Result"},"latency_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Latency Ms"},"is_client_side":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Client Side"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","required":["type"],"title":"MessageData"},"MessageHistoryItem":{"properties":{"role":{"type":"string","title":"Role"},"content":{"type":"string","title":"Content"},"thinking":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thinking"},"tool_calls":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Tool Calls"}},"type":"object","required":["role","content"],"title":"MessageHistoryItem"},"ModelRequest":{"properties":{"model":{"type":"string","title":"Model"}},"type":"object","required":["model"],"title":"ModelRequest"},"ModelSelectionUpdate":{"properties":{"model_selection_enabled":{"type":"boolean","title":"Model Selection Enabled"},"available_models":{"items":{"type":"string"},"type":"array","title":"Available Models","default":[]}},"type":"object","required":["model_selection_enabled"],"title":"ModelSelectionUpdate"},"ModelTemperatureRequest":{"properties":{"model_temperature":{"type":"number","title":"Model Temperature"}},"type":"object","required":["model_temperature"],"title":"ModelTemperatureRequest"},"OnboardingDefaultsRequest":{"properties":{"app_type":{"type":"string","maxLength":100,"title":"App Type"}},"type":"object","required":["app_type"],"title":"OnboardingDefaultsRequest"},"OnboardingStep":{"properties":{"text":{"type":"string","title":"Text"},"tool":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tool"},"tools":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tools"},"context":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Context"}},"type":"object","required":["text"],"title":"OnboardingStep"},"OpenAPIRequest":{"properties":{"openapi_spec":{"additionalProperties":true,"type":"object","title":"Openapi Spec"}},"type":"object","required":["openapi_spec"],"title":"OpenAPIRequest"},"OrganizationInitializeRequest":{"properties":{"organization_name":{"type":"string","title":"Organization Name"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},"type":"object","required":["organization_name"],"title":"OrganizationInitializeRequest"},"PageContextEnabledRequest":{"properties":{"page_context_enabled":{"type":"boolean","title":"Page Context Enabled"}},"type":"object","required":["page_context_enabled"],"title":"PageContextEnabledRequest"},"PageNavigationConfigRequest":{"properties":{"enabled":{"type":"boolean","title":"Enabled"},"routes":{"anyOf":[{"items":{"$ref":"#/components/schemas/PageNavigationRouteModel"},"type":"array"},{"type":"null"}],"title":"Routes"}},"type":"object","required":["enabled"],"title":"PageNavigationConfigRequest","description":"Request model for updating page navigation settings"},"PageNavigationRouteModel":{"properties":{"name":{"type":"string","title":"Name"},"path":{"type":"string","title":"Path"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"params":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Params"}},"type":"object","required":["name","path"],"title":"PageNavigationRouteModel","description":"A single route definition for page navigation"},"PersistAnonymousConversationsRequest":{"properties":{"persist_anonymous_conversations":{"type":"boolean","title":"Persist Anonymous Conversations"}},"type":"object","required":["persist_anonymous_conversations"],"title":"PersistAnonymousConversationsRequest"},"ProductNameRequest":{"properties":{"name":{"type":"string","title":"Name"}},"type":"object","required":["name"],"title":"ProductNameRequest"},"PromptFullOverrideRequest":{"properties":{"prompt_full_override":{"type":"boolean","title":"Prompt Full Override"}},"type":"object","required":["prompt_full_override"],"title":"PromptFullOverrideRequest"},"RAGSettingsRequest":{"properties":{"rag_k":{"type":"integer","title":"Rag K"},"rag_threshold":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Rag Threshold"}},"type":"object","required":["rag_k"],"title":"RAGSettingsRequest","description":"Request model for updating RAG retrieval settings"},"ReactivateSubscriptionRequest":{"properties":{"product_id":{"type":"string","title":"Product Id"}},"type":"object","required":["product_id"],"title":"ReactivateSubscriptionRequest","description":"Request to reactivate a subscription scheduled for cancellation"},"RecordedStep":{"properties":{"type":{"type":"string","enum":["click","input","select","keypress","navigation"],"title":"Type"},"description":{"type":"string","title":"Description","default":""},"target_text":{"type":"string","title":"Target Text","default":""},"selector_strategies":{"items":{"$ref":"#/components/schemas/SelectorStrategy"},"type":"array","title":"Selector Strategies","default":[]},"value":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Value"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"element_tag":{"type":"string","title":"Element Tag","default":""},"container_hint":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Container Hint"}},"type":"object","required":["type"],"title":"RecordedStep"},"RecordedWorkflowCreate":{"properties":{"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"steps":{"items":{"$ref":"#/components/schemas/RecordedStep"},"type":"array","title":"Steps"},"input_schema":{"items":{"$ref":"#/components/schemas/InputSchemaField"},"type":"array","title":"Input Schema","default":[]},"enabled":{"type":"boolean","title":"Enabled","default":true}},"type":"object","required":["name","steps"],"title":"RecordedWorkflowCreate"},"RecordedWorkflowUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"steps":{"anyOf":[{"items":{"$ref":"#/components/schemas/RecordedStep"},"type":"array"},{"type":"null"}],"title":"Steps"},"input_schema":{"anyOf":[{"items":{"$ref":"#/components/schemas/InputSchemaField"},"type":"array"},{"type":"null"}],"title":"Input Schema"},"enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Enabled"}},"type":"object","title":"RecordedWorkflowUpdate"},"ReorderTestCasesRequest":{"properties":{"test_case_ids":{"items":{"type":"string"},"type":"array","title":"Test Case Ids"}},"type":"object","required":["test_case_ids"],"title":"ReorderTestCasesRequest","description":"List of test case IDs in desired order"},"ResolveAgentRequest":{"properties":{"identity_token":{"type":"string","title":"Identity Token"}},"type":"object","required":["identity_token"],"title":"ResolveAgentRequest"},"RunResultResponse":{"properties":{"id":{"type":"string","title":"Id"},"test_case_id":{"type":"string","title":"Test Case Id"},"status":{"type":"string","title":"Status"},"output":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Output"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"},"latency_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Latency Ms"},"tool_calls":{"items":{"$ref":"#/components/schemas/ToolCallData"},"type":"array","title":"Tool Calls","default":[]},"messages":{"items":{"$ref":"#/components/schemas/MessageData"},"type":"array","title":"Messages","default":[]},"is_dry_run":{"type":"boolean","title":"Is Dry Run","default":false},"score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Score"},"score_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Score Label"},"score_explanation":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Score Explanation"}},"type":"object","required":["id","test_case_id","status"],"title":"RunResultResponse"},"S3FileRequest":{"properties":{"s3_key":{"type":"string","title":"S3 Key"},"filename":{"type":"string","title":"Filename"},"enable_multimodal":{"type":"boolean","title":"Enable Multimodal","default":false}},"type":"object","required":["s3_key","filename"],"title":"S3FileRequest"},"SaveRequest":{"properties":{"files":{"additionalProperties":{"type":"string"},"type":"object","title":"Files"},"analysis":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Analysis"},"tool_designs":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Tool Designs"},"header_mappings":{"anyOf":[{"items":{"additionalProperties":{"type":"string"},"type":"object"},"type":"array"},{"type":"null"}],"title":"Header Mappings"},"session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id"}},"type":"object","required":["files"],"title":"SaveRequest"},"ScreenContextConfigRequest":{"properties":{"enabled":{"type":"boolean","title":"Enabled"}},"type":"object","required":["enabled"],"title":"ScreenContextConfigRequest","description":"Request model for updating screen context settings"},"SelectedToolsRequest":{"properties":{"tool_names":{"items":{"type":"string"},"type":"array","title":"Tool Names"},"tool_settings":{"anyOf":[{"additionalProperties":{"$ref":"#/components/schemas/ToolSettings"},"type":"object"},{"type":"null"}],"title":"Tool Settings"}},"type":"object","required":["tool_names"],"title":"SelectedToolsRequest"},"SelectorStrategy":{"properties":{"type":{"type":"string","enum":["text_exact","text_contains","aria_label","placeholder","css","xpath"],"title":"Type"},"value":{"type":"string","title":"Value"},"priority":{"type":"integer","title":"Priority"}},"type":"object","required":["type","value","priority"],"title":"SelectorStrategy"},"ServerSideMcpRequest":{"properties":{"name":{"type":"string","title":"Name"},"url":{"type":"string","title":"Url"},"transport":{"type":"string","title":"Transport","default":"sse"},"headers":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Headers"},"header_mappings":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Header Mappings"}},"type":"object","required":["name","url"],"title":"ServerSideMcpRequest","description":"Request model for server-side MCP configuration (single server, mutual exclusivity with OpenAPI)"},"ShowThinkingRequest":{"properties":{"show_thinking":{"type":"boolean","title":"Show Thinking"}},"type":"object","required":["show_thinking"],"title":"ShowThinkingRequest"},"SingleClientToolRequest":{"properties":{"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"parameters":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Parameters"},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Name"}},"type":"object","required":["name"],"title":"SingleClientToolRequest","description":"Request model for adding or updating a single client-side tool"},"SkipEndpointTestRequest":{"properties":{"endpoint_name":{"type":"string","title":"Endpoint Name"},"skip_reason":{"type":"string","title":"Skip Reason"}},"type":"object","required":["endpoint_name","skip_reason"],"title":"SkipEndpointTestRequest","description":"Request to skip testing an endpoint with acknowledgment"},"SuggestActionsEnabledRequest":{"properties":{"suggest_actions_enabled":{"type":"boolean","title":"Suggest Actions Enabled"}},"type":"object","required":["suggest_actions_enabled"],"title":"SuggestActionsEnabledRequest"},"SystemPromptRequest":{"properties":{"system_prompt":{"type":"string","title":"System Prompt"}},"type":"object","required":["system_prompt"],"title":"SystemPromptRequest"},"TestCaseResponse":{"properties":{"id":{"type":"string","title":"Id"},"experiment_id":{"type":"string","title":"Experiment Id"},"prompt":{"type":"string","title":"Prompt"},"sort_order":{"type":"integer","title":"Sort Order"},"created_at":{"type":"string","title":"Created At"},"updated_at":{"type":"string","title":"Updated At"},"evaluator_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Evaluator Type"},"expected_output":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expected Output"},"evaluation_criteria":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Evaluation Criteria"}},"type":"object","required":["id","experiment_id","prompt","sort_order","created_at","updated_at"],"title":"TestCaseResponse"},"TestEndpointRequest":{"properties":{"endpoint_name":{"type":"string","title":"Endpoint Name"},"subdomain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subdomain"}},"type":"object","required":["endpoint_name"],"title":"TestEndpointRequest","description":"Request to test a specific endpoint"},"TestingAuthConfigUpdate":{"properties":{"auth_type":{"type":"string","enum":["none","bearer","api_key"],"title":"Auth Type"},"token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Token"},"header_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Header Name"}},"type":"object","required":["auth_type"],"title":"TestingAuthConfigUpdate","description":"Model for updating testing-only authentication config"},"ToolCallData":{"properties":{"name":{"type":"string","title":"Name"},"arguments":{"additionalProperties":true,"type":"object","title":"Arguments"},"status":{"type":"string","title":"Status"},"result":{"anyOf":[{},{"type":"null"}],"title":"Result"},"latency_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Latency Ms"},"is_client_side":{"type":"boolean","title":"Is Client Side","default":false},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","required":["name","arguments","status"],"title":"ToolCallData","description":"Data for a single tool call during experiment execution"},"ToolConsentSettingsRequest":{"properties":{"tool_consent_settings":{"additionalProperties":{"additionalProperties":{"type":"boolean"},"type":"object"},"type":"object","title":"Tool Consent Settings"}},"type":"object","required":["tool_consent_settings"],"title":"ToolConsentSettingsRequest","description":"Request model for updating tool consent settings"},"ToolResultRequest":{"properties":{"product_id":{"type":"string","title":"Product Id"},"conversation_id":{"type":"string","title":"Conversation Id"},"tool_call_id":{"type":"string","title":"Tool Call Id"},"tool_name":{"type":"string","title":"Tool Name"},"result":{"additionalProperties":true,"type":"object","title":"Result"},"identity_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Identity Token"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model"},"user_timezone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Timezone"},"user_local_time":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Local Time"},"consent_approved":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Consent Approved"},"tool_arguments":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Tool Arguments"},"agent_mode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Agent Mode"},"subdomain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subdomain"},"language":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Language"}},"type":"object","required":["product_id","conversation_id","tool_call_id","tool_name","result"],"title":"ToolResultRequest","description":"Request model for submitting client-side tool execution results"},"ToolSettings":{"properties":{"client_side":{"type":"boolean","title":"Client Side","default":false}},"type":"object","title":"ToolSettings"},"ToolSettingsRequest":{"properties":{"tool_retrieval_k":{"type":"integer","title":"Tool Retrieval K"}},"type":"object","required":["tool_retrieval_k"],"title":"ToolSettingsRequest","description":"Request model for updating tool retrieval settings"},"ToolSuggestableRequest":{"properties":{"tool_name":{"type":"string","title":"Tool Name"},"suggestable":{"type":"boolean","title":"Suggestable"},"suggestion_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Suggestion Label"}},"type":"object","required":["tool_name","suggestable"],"title":"ToolSuggestableRequest","description":"Request model for updating whether a tool is suggestable as a quick action"},"TypographyConfig":{"properties":{"fontFamily":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fontfamily"},"fontSize":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Fontsize"},"headerFontSize":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Headerfontsize"},"fontWeight":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Fontweight"},"lineHeight":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lineheight"},"letterSpacing":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Letterspacing"}},"type":"object","title":"TypographyConfig","description":"Typography configuration"},"UpdateAllowedDomainsRequest":{"properties":{"allowed_domains":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Allowed Domains"}},"type":"object","title":"UpdateAllowedDomainsRequest","description":"Request model for updating allowed domains"},"UpdateCopilotStylesRequest":{"properties":{"styles":{"$ref":"#/components/schemas/CopilotStyleConfig"}},"type":"object","required":["styles"],"title":"UpdateCopilotStylesRequest","description":"Request model for updating copilot styles"},"UpdateExperimentRequest":{"properties":{"name":{"type":"string","title":"Name"}},"type":"object","required":["name"],"title":"UpdateExperimentRequest"},"UpdateIntentActionRequest":{"properties":{"intent_patterns":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Intent Patterns"},"actions":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Actions"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"condition":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Condition"}},"type":"object","title":"UpdateIntentActionRequest","description":"Request to update an intent-to-action mapping."},"UpdateOnboardingRequest":{"properties":{"onboarding_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Onboarding Enabled"},"onboarding_agent_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Onboarding Agent Name"},"onboarding_system_prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Onboarding System Prompt"},"onboarding_welcome_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Onboarding Welcome Message"},"onboarding_intro_sequence":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Onboarding Intro Sequence"},"onboarding_steps":{"anyOf":[{"items":{"$ref":"#/components/schemas/OnboardingStep"},"type":"array"},{"type":"null"}],"title":"Onboarding Steps"}},"type":"object","title":"UpdateOnboardingRequest"},"UpdateSignalRequest":{"properties":{"display_name":{"type":"string","title":"Display Name"},"description":{"type":"string","title":"Description"}},"type":"object","required":["display_name","description"],"title":"UpdateSignalRequest"},"UpdateTestCaseRequest":{"properties":{"prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Prompt"},"sort_order":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sort Order"},"evaluator_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Evaluator Type"},"expected_output":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expected Output"},"evaluation_criteria":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Evaluation Criteria"}},"type":"object","title":"UpdateTestCaseRequest"},"UpdateToolDescriptionRequest":{"properties":{"tool_name":{"type":"string","title":"Tool Name"},"description":{"type":"string","title":"Description"}},"type":"object","required":["tool_name","description"],"title":"UpdateToolDescriptionRequest"},"UpdateToolDisplayNameRequest":{"properties":{"tool_name":{"type":"string","title":"Tool Name"},"display_name":{"type":"string","title":"Display Name"}},"type":"object","required":["tool_name","display_name"],"title":"UpdateToolDisplayNameRequest"},"UpdateWidgetStylesRequest":{"properties":{"styles":{"$ref":"#/components/schemas/WidgetStyleConfig"}},"type":"object","required":["styles"],"title":"UpdateWidgetStylesRequest","description":"Request model for updating widget styles"},"UploadRequest":{"properties":{"s3_presigned_url":{"type":"string","title":"S3 Presigned Url"},"filename":{"type":"string","title":"Filename"},"enable_multimodal":{"type":"boolean","title":"Enable Multimodal","default":false}},"type":"object","required":["s3_presigned_url","filename"],"title":"UploadRequest"},"UserProfile":{"properties":{"user_id":{"type":"string","title":"User Id"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"custom_attributes":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Custom Attributes"}},"type":"object","required":["user_id"],"title":"UserProfile"},"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"},"VerbosityRequest":{"properties":{"verbosity_level":{"type":"string","title":"Verbosity Level"},"verbosity_custom":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Verbosity Custom"}},"type":"object","required":["verbosity_level"],"title":"VerbosityRequest","description":"Request model for updating verbosity/response style settings"},"VocabularyMappingResponse":{"properties":{"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id"},"term":{"type":"string","title":"Term"},"canonical":{"type":"string","title":"Canonical"}},"type":"object","required":["term","canonical"],"title":"VocabularyMappingResponse","description":"A domain terminology mapping."},"WebsiteIngestRequest":{"properties":{"url":{"type":"string","title":"Url"}},"type":"object","required":["url"],"title":"WebsiteIngestRequest"},"WebsiteRequest":{"properties":{"website_url":{"type":"string","title":"Website Url"}},"type":"object","required":["website_url"],"title":"WebsiteRequest"},"WelcomeMessageRequest":{"properties":{"welcome_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Welcome Message"}},"type":"object","title":"WelcomeMessageRequest"},"WidgetBrandingConfig":{"properties":{"showPoweredBy":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Showpoweredby"},"poweredByText":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Poweredbytext"},"showLogo":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Showlogo"},"logoUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logourl"}},"type":"object","title":"WidgetBrandingConfig","description":"Branding configuration for widget"},"WidgetBubbleConfig":{"properties":{"size":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Size"},"iconSize":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Iconsize"},"background":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Background"},"border":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Border"},"iconColor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Iconcolor"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"}},"type":"object","title":"WidgetBubbleConfig","description":"Chat bubble button configuration"},"WidgetDimensionsConfig":{"properties":{"width":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Width"},"maxHeight":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Maxheight"},"borderRadius":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Borderradius"},"padding":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Padding"},"messagesMaxHeight":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Messagesmaxheight"}},"type":"object","title":"WidgetDimensionsConfig","description":"Widget dimension configuration"},"WidgetPositionConfig":{"properties":{"right":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Right"},"bottom":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Bottom"},"bubbleRight":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Bubbleright"},"bubbleBottom":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Bubblebottom"}},"type":"object","title":"WidgetPositionConfig","description":"Widget position configuration (floating mode)"},"WidgetShadowsConfig":{"properties":{"widget":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Widget"},"bubble":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bubble"}},"type":"object","title":"WidgetShadowsConfig","description":"Shadow configuration for widget"},"WidgetStyleConfig":{"properties":{"colors":{"anyOf":[{"$ref":"#/components/schemas/ColorsConfig"},{"type":"null"}]},"typography":{"anyOf":[{"$ref":"#/components/schemas/TypographyConfig"},{"type":"null"}]},"animations":{"anyOf":[{"$ref":"#/components/schemas/AnimationsConfig"},{"type":"null"}]},"dimensions":{"anyOf":[{"$ref":"#/components/schemas/WidgetDimensionsConfig"},{"type":"null"}]},"position":{"anyOf":[{"$ref":"#/components/schemas/WidgetPositionConfig"},{"type":"null"}]},"bubble":{"anyOf":[{"$ref":"#/components/schemas/WidgetBubbleConfig"},{"type":"null"}]},"shadows":{"anyOf":[{"$ref":"#/components/schemas/WidgetShadowsConfig"},{"type":"null"}]},"branding":{"anyOf":[{"$ref":"#/components/schemas/WidgetBrandingConfig"},{"type":"null"}]},"customCss":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Customcss"}},"type":"object","title":"WidgetStyleConfig","description":"Complete widget style configuration.\n\nAll fields are optional - only specified fields override defaults.\nThis allows partial updates and deep merging with defaults."},"WorkflowCreate":{"properties":{"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"steps":{"items":{"$ref":"#/components/schemas/WorkflowStep"},"type":"array","title":"Steps"},"enabled":{"type":"boolean","title":"Enabled","default":true}},"type":"object","required":["name","steps"],"title":"WorkflowCreate"},"WorkflowResponse":{"properties":{"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"steps":{"items":{"type":"string"},"type":"array","title":"Steps"}},"type":"object","required":["name","description","steps"],"title":"WorkflowResponse","description":"A workflow detected on the page."},"WorkflowStep":{"properties":{"text":{"type":"string","title":"Text"},"tool":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tool"},"context":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Context"}},"type":"object","required":["text"],"title":"WorkflowStep"},"WorkflowUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"steps":{"anyOf":[{"items":{"$ref":"#/components/schemas/WorkflowStep"},"type":"array"},{"type":"null"}],"title":"Steps"},"enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Enabled"}},"type":"object","title":"WorkflowUpdate"}}}}