{"openapi":"3.1.0","info":{"title":"Nexus AI Gateway","description":"\nOpenAI-compatible LLM gateway with intelligent model routing.\n\n## Quick Start\n\n**1. Send a message (auto-selects best model):**\n```bash\ncurl -X POST http://localhost:8080/v1/chat/completions \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"messages\": [{\"role\": \"user\", \"content\": \"Hello!\"}], \"stream\": false}'\n```\n\n**2. Use a specific model:**\n```bash\ncurl -X POST http://localhost:8080/v1/chat/completions \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"model\": \"deepseek-r1\", \"messages\": [{\"role\": \"user\", \"content\": \"Solve x^2=4\"}], \"stream\": false}'\n```\n\n**3. Multi-turn conversation:**\n```bash\n# Send full message history each request (stateless API)\ncurl -X POST http://localhost:8080/v1/chat/completions \\\n  -d '{\"messages\": [{\"role\": \"user\", \"content\": \"Hi\"}, {\"role\": \"assistant\", \"content\": \"Hello!\"}, {\"role\": \"user\", \"content\": \"Follow up\"}]}'\n```\n\n## Key Features\n\n- **42 models** from DeepSeek, Qwen, Llama, NVIDIA, Gemma, Kimi, GLM\n- **Intelligent routing** - auto-selects best model for code, math, general tasks\n- **Stateless API** - frontend manages conversation history\n- **Streaming** - real-time token delivery via SSE\n        ","contact":{"name":"Nexus AI","url":"https://api.tokenfactory.nebius.com/"},"license":{"name":"MIT"},"version":"2.0.0"},"paths":{"/v1/chat/completions":{"post":{"tags":["Chat"],"summary":"Create chat completion","description":"Send messages to an AI model and get a response.\n\n## Stateless API\nThis is a stateless endpoint. For multi-turn conversations, send the **full message history** with each request.\nYour frontend manages conversation state.\n\n## Model Selection\n- **`model: \"auto\"`** (default) - Intelligent routing selects the best model based on your request\n- **`model: \"deepseek-r1\"`** - Use a specific model (see GET /v1/models for list)\n\n## Routing Logic\nWhen using `auto`, the system analyzes your message and routes to:\n- **R-CODE** → Code models (qwen3-coder) for programming tasks\n- **R-REASON** → Reasoning models (deepseek-r1) for math/logic\n- **R-GENERAL** → General models for conversation\n- **R-JSON** → Structured output models for JSON requests\n\n## Streaming\nSet `stream: true` to receive Server-Sent Events (SSE) for real-time token delivery.\n\n**SSE Event Types:**\n- `delta` - Content token\n- `thinking` - Reasoning token (for reasoning models)\n- `usage` - Token usage stats\n- `done` - Completion finished\n- `router` - Final routing info","operationId":"chat_completions_v1_chat_completions_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatCompletionRequest"},"examples":{"simple":{"summary":"Simple message","description":"Basic single message with auto routing","value":{"messages":[{"role":"user","content":"Hello!"}],"model":"auto","stream":false}},"multi_turn":{"summary":"Multi-turn conversation","description":"Send full history for context","value":{"messages":[{"role":"user","content":"My name is Alice"},{"role":"assistant","content":"Nice to meet you, Alice!"},{"role":"user","content":"What's my name?"}],"model":"auto","stream":false}},"code":{"summary":"Code generation","description":"Generate code with specific model","value":{"messages":[{"role":"user","content":"Write a Python quicksort function"}],"model":"qwen3-coder-480b","stream":false,"temperature":0.1}},"streaming":{"summary":"Streaming response","description":"Real-time token streaming","value":{"messages":[{"role":"user","content":"Tell me a short story"}],"model":"auto","stream":true}},"reasoning":{"summary":"Math/reasoning","description":"Complex reasoning task","value":{"messages":[{"role":"user","content":"Solve: x² - 5x + 6 = 0"}],"model":"deepseek-r1","stream":false,"temperature":0.1}}}}},"required":true},"responses":{"200":{"description":"Successful completion","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatCompletionResponse"},"examples":{"auto_routing":{"summary":"Auto-routed response","value":{"id":"chatcmpl-abc123","object":"chat.completion","model":"zai-org/GLM-4.5","router":{"mode":"AUTO","route_id":"R-GENERAL","selected_model":"glm-4.5","selected_provider_model_id":"zai-org/GLM-4.5","confidence":0.92,"reasons":["general_conversation"]},"choices":[{"index":0,"message":{"role":"assistant","content":"Hello! How can I help you today?"},"finish_reason":"stop"}],"usage":{"prompt_tokens":10,"completion_tokens":12,"total_tokens":22}}},"code_response":{"summary":"Code generation response","value":{"id":"chatcmpl-def456","object":"chat.completion","model":"Qwen/Qwen3-Coder-480B-A35B-Instruct","router":{"mode":"AUTO","route_id":"R-CODE","selected_model":"qwen3-coder-480b","selected_provider_model_id":"Qwen/Qwen3-Coder-480B-A35B-Instruct","confidence":0.86,"reasons":["code_keywords_detected"]},"choices":[{"index":0,"message":{"role":"assistant","content":"```python\ndef sort_list(lst):\n    return sorted(lst)\n```"},"finish_reason":"stop"}],"usage":{"prompt_tokens":15,"completion_tokens":30,"total_tokens":45}}}}},"text/event-stream":{"example":"event: delta\ndata: {\"content\": \"Hello\", \"reasoning\": false}\n\nevent: done\ndata: {\"finish_reason\": \"stop\"}\n\nevent: router\ndata: {\"mode\": \"AUTO\", \"selected_model\": \"glm-4.5\"}"}}},"400":{"description":"Bad request - messages required"},"500":{"description":"Internal server error"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/chat/title":{"post":{"tags":["Chat"],"summary":"Generate conversation title","description":"Generate a short, descriptive title for a conversation based on its messages.\n\n**Use case:** Call this after the first user + assistant exchange to auto-generate a conversation title.\n\n**How it works:**\n- Uses a fast, lightweight model (llama-3.1-8b) for quick title generation\n- Extracts the main topic from the conversation\n- Returns a concise title (3-7 words)","operationId":"generate_title_v1_chat_title_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TitleGenerationRequest"},"examples":{"code_question":{"summary":"Code-related conversation","value":{"messages":[{"role":"user","content":"How do I sort a list in Python?"},{"role":"assistant","content":"You can use sorted() or list.sort()..."}]}},"general":{"summary":"General conversation","value":{"messages":[{"role":"user","content":"What's the best way to learn a new language?"},{"role":"assistant","content":"Immersion and consistent practice are key..."}]}}}}},"required":true},"responses":{"200":{"description":"Title generated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TitleGenerationResponse"},"example":{"title":"Python List Sorting Methods"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/embeddings":{"post":{"tags":["Utilities"],"summary":"Generate embeddings","description":"Convert text into numerical vectors for semantic search and similarity.\n\n**Available models:**\n- `qwen3-embedding-8b` - High quality multilingual (default)\n- `bge-en-icl` - English optimized\n- `bge-multilingual` - 100+ languages\n- `e5-mistral-7b` - Lightweight\n\n**Use cases:**\n- Semantic search\n- Document similarity\n- Clustering\n- Recommendations","operationId":"embeddings_v1_embeddings_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmbeddingsRequest"},"examples":{"single":{"summary":"Single text","value":{"input":["Hello world"],"model":"qwen3-embedding-8b"}},"multiple":{"summary":"Multiple texts","value":{"input":["Hello","World","How are you?"],"model":"qwen3-embedding-8b"}}}}},"required":true},"responses":{"200":{"description":"Embeddings generated","content":{"application/json":{"schema":{},"example":{"data":[{"embedding":[0.1,-0.2,0.3],"index":0}],"model":"Qwen/Qwen3-Embedding-8B","usage":{"prompt_tokens":5,"total_tokens":5}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/models":{"get":{"tags":["Models & Routing"],"summary":"List available models","description":"Get the complete model catalog with capabilities and configuration.\n\n**Model Categories:**\n- **DeepSeek** - Reasoning and code (deepseek-r1, deepseek-v3)\n- **Qwen** - General, code, and embeddings (qwen3-coder-480b, qwen3-235b-thinking)\n- **Llama** - Meta's models (llama-3.3-70b)\n- **NVIDIA** - Nemotron models\n- **Google** - Gemma models\n- **Others** - Kimi, GLM, Hermes\n\n**Capability Scores (0-1):**\n- `reasoning` - Logic and problem solving\n- `code` - Code generation quality\n- `json` - Structured output\n- `tool` - Function calling\n- `multilingual` - Language support\n- `vision` - Image understanding","operationId":"models_list_v1_models_get","responses":{"200":{"description":"Model catalog","content":{"application/json":{"schema":{},"example":{"models":[{"canonical_id":"deepseek-r1","provider_model_id":"deepseek-ai/DeepSeek-R1-0528","aliases":["deepseek-r1"],"modalities":["text"],"flavors":["base"],"context_limit_soft":64000,"context_limit_hard":128000,"capabilities":{"reasoning":0.98,"code":0.88,"json":0.85,"tool":0.8,"multilingual":0.8,"vision":0.0},"notes":["DeepSeek R1 - Superior reasoning"]}]}}}}}}},"/v1/health":{"get":{"tags":["Utilities"],"summary":"Health check","description":"Check API connectivity with a minimal model test.\n\nTests a fast model with a simple prompt to verify:\n- API key is valid\n- Nebius connection works\n- Models are responding\n\n**Response codes:**\n- `200` - Healthy\n- `503` - Unhealthy (check error message)","operationId":"health_check_v1_health_get","responses":{"200":{"description":"API is healthy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthResponse"},"example":{"status":"healthy","timestamp":"2026-01-12T16:30:00.000000","test_model":"llama-3.1-8b","latency_ms":450,"total_models":40}}}},"503":{"description":"API is unhealthy","content":{"application/json":{"example":{"status":"unhealthy","error":"Connection timeout","api_key_set":true}}}}}}},"/v1/vision/analyze":{"post":{"tags":["Vision"],"summary":"Analyze vehicle photo for damage","description":"Analyze a vehicle photo using the Qwen 2.5 VL 72B vision model.\n\n**Default behavior:** Uses a KFZ damage analysis system prompt that returns structured JSON\nwith damage type, location, severity, and estimated repair costs in TÜV format.\n\n**Custom prompts:** Override `system_prompt` and `user_prompt` for other vision tasks.\n\n**Input:** Base64-encoded JPEG or PNG image.\n**Output:** Model's analysis response (JSON string for damage analysis).","operationId":"vision_analyze_v1_vision_analyze_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VisionAnalyzeRequest"},"examples":{"damage_analysis":{"summary":"KFZ damage analysis","value":{"image_base64":"/9j/4AAQSkZJRgABAQ...","user_prompt":"Analysiere dieses Fahrzeugfoto.","temperature":0.1,"max_tokens":1500}},"custom_prompt":{"summary":"Custom vision analysis","value":{"image_base64":"/9j/4AAQSkZJRgABAQ...","system_prompt":"Describe what you see in this image.","user_prompt":"What is in this photo?","temperature":0.3,"max_tokens":500}}}}},"required":true},"responses":{"200":{"description":"Analysis complete","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VisionAnalyzeResponse"}}}},"500":{"description":"Vision model error"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/router/plan":{"post":{"tags":["Models & Routing"],"summary":"Preview routing decision","description":"Preview which model would be selected for a request **without** making the actual API call.\n\nUseful for:\n- Debugging routing behavior\n- Understanding model selection logic\n- Testing before sending actual requests\n\n**Routes:**\n| Route | Description | Example Models |\n|-------|-------------|----------------|\n| R-CODE | Code generation, debugging | qwen3-coder-480b, qwen3-coder-30b |\n| R-REASON | Math, logic, complex reasoning | deepseek-r1, qwen3-235b-thinking |\n| R-JSON | Structured JSON output | qwen3-coder-480b, glm-4.5 |\n| R-GENERAL | General conversation | llama-3.3-70b, glm-4.5 |\n| R-FASTCHEAP | Simple queries, classification | llama-3.1-8b, gpt-oss-20b |\n| R-LONGCTX | Long document analysis | qwen3-235b-thinking, kimi-k2 |\n| R-VISION | Image understanding | qwen2.5-vl-72b |","operationId":"plan_v1_router_plan_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RouterPlanRequest"},"examples":{"code":{"summary":"Code generation","value":{"messages":[{"role":"user","content":"Write a Python function to sort a list"}]}},"math":{"summary":"Math problem","value":{"messages":[{"role":"user","content":"Solve x² - 5x + 6 = 0"}]}},"general":{"summary":"General question","value":{"messages":[{"role":"user","content":"What's the weather like?"}]}},"json":{"summary":"JSON output","value":{"messages":[{"role":"user","content":"Return a JSON with name and age fields"}]}}}}},"required":true},"responses":{"200":{"description":"Routing decision","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RouterPlanResponse"},"examples":{"code":{"summary":"Code request routing","value":{"route_id":"R-CODE","confidence":0.86,"candidates":["qwen3-coder-480b","qwen3-coder-30b","deepseek-r1"],"recommended_params":{"temperature":0.2,"top_p":0.9},"notes":["code_keywords_detected"]}},"general":{"summary":"General chat routing","value":{"route_id":"R-GENERAL","confidence":0.75,"candidates":["llama-3.3-70b","kimi-k2-instruct","glm-4.5"],"recommended_params":{"temperature":0.5,"top_p":0.9},"notes":["short_simple_query"]}}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/chat":{"post":{"tags":["Chat"],"summary":"Unified Chat","description":"Unified chat endpoint - single entry point for all NEXUS chat.\n\nThe Main Router automatically decides:\n- **Department route**: For marketing/brand tasks → specialized agent workflows\n- **LLM route**: For code/reasoning/general questions → direct model response\n\n## Examples\n\n**Marketing request** (routes to department):\n```json\n{\"message\": \"Create an Instagram post about summer vibes\"}\n```\n\n**Code request** (routes to LLM):\n```json\n{\"message\": \"Write a Python function to sort a list\"}\n```\n\n## Event Types (streaming)\n\n**Department events:**\n- `department_start`, `department_thinking`, `department_decision`\n- `agent_start`, `agent_message`, `agent_end`\n- `tool_call`, `card`\n\n**LLM events:**\n- `llm_start`, `llm_chunk`, `llm_end`\n\n**Block events:**\n- `block` - UI component to render","operationId":"unified_chat_api_chat_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__api__chat__ChatRequest"}}},"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/campaign":{"post":{"tags":["Chat"],"summary":"Campaign Chat","description":"Direct campaign endpoint - bypasses router, goes straight to LangGraph workflow.\n\nUse this when the user explicitly wants to create/manage a campaign.\nThis endpoint always uses LangGraph mode for full HIL (Human-in-the-Loop) workflows.\n\n## Flow\n1. New request → Starts LangGraph campaign workflow\n2. Resume → Pass `workflow_id` in context to continue existing workflow\n\n## HIL Stages\nThe workflow pauses after each stage for user approval:\n- research → user selects trend\n- strategy → user approves plan\n- image → user approves visuals\n- copy → user edits captions\n- review → user confirms quality\n- schedule → user confirms timing\n\n## Examples\n\n**Start new campaign:**\n```json\n{\"message\": \"Create a summer vibes campaign for Instagram\"}\n```\n\n**Resume existing workflow:**\n```json\n{\n    \"message\": \"I approve this strategy\",\n    \"context\": {\"workflow_id\": \"wf_user123_20260119_140000\"}\n}\n```\n\n**Resume with selection:**\n```json\n{\n    \"message\": \"\",\n    \"context\": {\n        \"workflow_id\": \"wf_user123_20260119_140000\",\n        \"user_input\": {\"selected_trend\": \"trend_option_2\"}\n    }\n}\n```","operationId":"campaign_chat_api_chat_campaign_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__api__chat__ChatRequest"}}},"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/routes":{"get":{"tags":["Chat"],"summary":"Get Available Routes","description":"Get available routing options.\n\nReturns the departments and LLM routes that the Main Router can use.","operationId":"get_available_routes_api_chat_routes_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/chat/classify":{"post":{"tags":["Chat"],"summary":"Classify Only","description":"Classify a message without executing it.\n\nUseful for debugging routing decisions.","operationId":"classify_only_api_chat_classify_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__api__chat__ChatRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/chat":{"post":{"tags":["Brand Studio"],"summary":"Brand Chat","description":"Brand studio chat endpoint (LEGACY).\n\n**DEPRECATED:** Use `/api/chat` instead for the unified Main Router experience.\n\nThis endpoint uses the old orchestrator. For the new architecture:\n- `/api/chat` - Unified entry point with Main Router\n- `/api/brand/v2/chat` - Direct department access\n\nSupports both streaming (SSE) and non-streaming responses.\nAutomatically uses vision model when images are attached.","operationId":"brand_chat_api_brand_chat_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandChatRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/v2/chat":{"post":{"tags":["Brand Studio"],"summary":"Department Chat","description":"Department-based chat endpoint.\n\n**NOTE:** For unified routing, prefer `/api/chat` which uses the Main Router\nto automatically decide between departments and direct LLM calls.\n\nThis endpoint goes directly to the Marketing Department.\n\nEvent types:\n- department_start: Department begins handling request\n- department_thinking: Lead is deciding how to handle\n- department_decision: Lead chose agent or manager\n- manager_start/step/end: Manager workflow events\n- agent_start/message/end: Agent execution events\n- tool_call: Tool being executed\n- card: Preview card generated\n- department_end: Department finished","operationId":"department_chat_api_brand_v2_chat_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandChatRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/init":{"get":{"tags":["Brand Studio"],"summary":"Get Init","description":"App initialization endpoint.\n\nReturns user info, brand profile, connected platforms, onboarding status, and stats.\nCalled on app startup to bootstrap the UI.","operationId":"get_init_api_brand_init_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/profile":{"get":{"tags":["Brand Studio"],"summary":"Get Profile","description":"Get current brand profile.\n\nReturns 404 if no brand profile exists.","operationId":"get_profile_api_brand_profile_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandProfileResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Brand Studio"],"summary":"Update Profile","description":"Update brand profile.\n\nSupports partial updates - only include fields you want to change.\nCreates a new profile if one doesn't exist.","operationId":"update_profile_api_brand_profile_put","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandProfileUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandProfileResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/onboarding/status":{"get":{"tags":["Brand Studio"],"summary":"Get Onboarding Status","description":"Get current onboarding status.\n\nReturns completion status for each onboarding step.","operationId":"get_onboarding_status_api_brand_onboarding_status_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnboardingStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/onboarding/complete":{"post":{"tags":["Brand Studio"],"summary":"Complete Onboarding Step","description":"Mark an onboarding step as complete.\n\nPrerequisites are enforced:\n- connect_platforms requires brand_profile\n- first_post requires brand_profile\n- complete requires all previous steps","operationId":"complete_onboarding_step_api_brand_onboarding_complete_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnboardingCompleteRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnboardingCompleteResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/agent/{agent_id}":{"post":{"tags":["Brand Studio"],"summary":"Run Isolated Agent","description":"Execute a single agent in isolation (no handoffs, no iteration loops).\n\nUsed for:\n- UI-triggered single agent actions (e.g., regenerate image)\n- Manual iteration control from frontend\n- Testing individual agents\n\nSupported agents: campaign, research, brand, content, analytics, scheduler, review","operationId":"run_isolated_agent_api_brand_agent__agent_id__post","parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","title":"Agent Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IsolatedAgentRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/iteration":{"post":{"tags":["Brand Studio"],"summary":"Run Iteration Loop","description":"Run Content→Review iteration loop on a content piece.\n\nThe loop continues until:\n- Review Agent approves (score >= 8)\n- Maximum 20 iterations reached\n- Review Agent provides no iteration_prompt\n\nReturns streaming events showing the iteration progress.","operationId":"run_iteration_loop_api_brand_iteration_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IterationLoopRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/campaign/{campaign_id}/state":{"get":{"tags":["Brand Studio"],"summary":"Get Campaign State","description":"Get current campaign state by replaying all events.\n\nUses event sourcing to reconstruct the current state of a campaign\nincluding all content pieces, iterations, and review scores.","operationId":"get_campaign_state_api_brand_campaign__campaign_id__state_get","parameters":[{"name":"campaign_id","in":"path","required":true,"schema":{"type":"integer","title":"Campaign Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CampaignStateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/chat/with-iteration":{"post":{"tags":["Brand Studio"],"summary":"Brand Chat With Iteration","description":"Brand studio chat with automatic Content→Review iteration enabled.\n\nSame as /chat but when Content Agent generates images, the orchestrator\nwill automatically run iteration loops to improve quality.","operationId":"brand_chat_with_iteration_api_brand_chat_with_iteration_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandChatRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/jobs":{"post":{"tags":["Brand Studio"],"summary":"Create Job","description":"Create a new pipeline job.\n\nJobs represent background pipeline executions that can be:\n- Paused and resumed\n- Redirected with new instructions\n- Reconnected after page refresh\n\nReturns the created job. Use GET /jobs/{id}/stream to receive events.","operationId":"create_job_api_brand_jobs_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateJobRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Brand Studio"],"summary":"List Jobs","description":"List jobs for the current user.\n\nCan filter by status: pending, running, paused, waiting, completed, cancelled, failed","operationId":"list_jobs_api_brand_jobs_get","parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":20,"title":"Limit"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/jobs/{job_id}":{"get":{"tags":["Brand Studio"],"summary":"Get Job","description":"Get a specific job by ID.","operationId":"get_job_api_brand_jobs__job_id__get","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/jobs/{job_id}/stream":{"get":{"tags":["Brand Studio"],"summary":"Stream Job","description":"SSE stream for job events with reconnection support.\n\nUse `after_event_id` to catch up after reconnection - returns missed events\nfirst, then continues with live stream.\n\nEvent types:\n- job_started: Job has begun execution\n- agent_start: An agent is starting\n- agent_message: Streaming text from agent\n- tool_call: Agent is calling a tool\n- card: Preview card generated\n- handoff: Pipeline is handing off to next agent\n- job_paused: Job was paused (by user request)\n- job_redirected: Job direction changed\n- job_completed: Pipeline finished successfully\n- job_failed: Pipeline failed with error","operationId":"stream_job_api_brand_jobs__job_id__stream_get","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}},{"name":"after_event_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"After Event Id"}},{"name":"session_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/jobs/{job_id}/pause":{"post":{"tags":["Brand Studio"],"summary":"Pause Job Endpoint","description":"Pause a running job.\n\nThe job will stop at the next safe checkpoint (typically after a tool call).\nUse POST /jobs/{id}/resume to continue.","operationId":"pause_job_endpoint_api_brand_jobs__job_id__pause_post","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/jobs/{job_id}/resume":{"post":{"tags":["Brand Studio"],"summary":"Resume Job Endpoint","description":"Resume a paused job.\n\nOptionally provide additional context via `newMessage`.\nReturns the updated job. Use GET /jobs/{id}/stream to receive events.","operationId":"resume_job_endpoint_api_brand_jobs__job_id__resume_post","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/ResumeJobRequest"},{"type":"null"}],"title":"Request"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/jobs/{job_id}/redirect":{"post":{"tags":["Brand Studio"],"summary":"Redirect Job Endpoint","description":"Redirect a running or paused job with new instructions.\n\nUse this when you want to change direction mid-pipeline:\n\"I don't like this approach, go a completely different way.\"\n\nThe job will:\n1. Stop current execution\n2. Re-classify the new direction to find the right agent\n3. Continue with previous context preserved","operationId":"redirect_job_endpoint_api_brand_jobs__job_id__redirect_post","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RedirectJobRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/jobs/{job_id}/cancel":{"post":{"tags":["Brand Studio"],"summary":"Cancel Job Endpoint","description":"Cancel a job.","operationId":"cancel_job_endpoint_api_brand_jobs__job_id__cancel_post","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/jobs/{job_id}/events":{"get":{"tags":["Brand Studio"],"summary":"Get Job Events Endpoint","description":"Get events for a job (for catch-up after reconnection).\n\nUse `after_id` to get only events after a specific event ID.","operationId":"get_job_events_endpoint_api_brand_jobs__job_id__events_get","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}},{"name":"after_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"After Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobEventsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/sessions":{"post":{"tags":["Brand Studio"],"summary":"Create Session","description":"Create a new chat session.\n\nSessions persist conversation history across page refreshes.","operationId":"create_session_api_brand_sessions_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSessionRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SessionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Brand Studio"],"summary":"List Sessions","description":"List chat sessions for the current user.","operationId":"list_sessions_api_brand_sessions_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":20,"title":"Limit"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SessionListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/sessions/{session_id}/history":{"get":{"tags":["Brand Studio"],"summary":"Get Session History","description":"Get message history for a chat session.\n\nReturns messages in chronological order (oldest first).\nUse for restoring chat UI after page refresh.","operationId":"get_session_history_api_brand_sessions__session_id__history_get","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SessionHistoryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/images":{"post":{"tags":["Brand Studio"],"summary":"Save Image","description":"Save a generated image to the database.\n\nCalled by frontend after receiving base64 image from chat stream.\nAllows images to be retrieved later without regeneration.","operationId":"save_image_api_brand_images_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SaveImageRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneratedImageResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Brand Studio"],"summary":"List Images","description":"List generated images for the current user.\n\nFilter by campaign, content piece, approval status, or archived status.\nBase64 data is NOT included in list response (use GET /images/{id} for full data).","operationId":"list_images_api_brand_images_get","parameters":[{"name":"campaign_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Campaign Id"}},{"name":"content_piece_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content Piece Id"}},{"name":"approved","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Approved"}},{"name":"archived","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Archived"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneratedImageListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/images/{image_id}":{"get":{"tags":["Brand Studio"],"summary":"Get Image","description":"Get a specific image with full base64 data.\n\nReturns the complete image data for rendering.","operationId":"get_image_api_brand_images__image_id__get","parameters":[{"name":"image_id","in":"path","required":true,"schema":{"type":"integer","title":"Image Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneratedImageDetailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Brand Studio"],"summary":"Delete Image","description":"Permanently delete an image.\n\nThis is a hard delete - the image cannot be recovered.\nUse PATCH /images/{id}/archive for soft delete.","operationId":"delete_image_api_brand_images__image_id__delete","parameters":[{"name":"image_id","in":"path","required":true,"schema":{"type":"integer","title":"Image 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/brand/images/{image_id}/approve":{"patch":{"tags":["Brand Studio"],"summary":"Approve Image","description":"Mark an image as approved.","operationId":"approve_image_api_brand_images__image_id__approve_patch","parameters":[{"name":"image_id","in":"path","required":true,"schema":{"type":"integer","title":"Image 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/brand/images/{image_id}/archive":{"patch":{"tags":["Brand Studio"],"summary":"Archive Image","description":"Archive an image (soft delete).","operationId":"archive_image_api_brand_images__image_id__archive_patch","parameters":[{"name":"image_id","in":"path","required":true,"schema":{"type":"integer","title":"Image 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/brand/campaigns":{"get":{"tags":["Campaigns"],"summary":"List Campaigns","description":"List campaigns with filtering and pagination.\n\nFilters:\n- status: draft, active, paused, completed\n- type: promo, evergreen, seasonal","operationId":"list_campaigns_api_brand_campaigns_get","parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by status","title":"Status"},"description":"Filter by status"},{"name":"type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by type","title":"Type"},"description":"Filter by type"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Maximum number of items to return (1-100)","default":20,"title":"Limit"},"description":"Maximum number of items to return (1-100)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Number of items to skip","default":0,"title":"Offset"},"description":"Number of items to skip"},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CampaignListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Campaigns"],"summary":"Create Campaign","description":"Create a new campaign.\n\nRequired: name, type, platforms\nOptional: description, goal, cadence, timingMode, startDate, endDate\n\nTimebound campaigns require start and end dates.","operationId":"create_campaign_api_brand_campaigns_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CampaignCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CampaignResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/campaigns/{campaign_id}":{"get":{"tags":["Campaigns"],"summary":"Get Campaign","description":"Get a single campaign with full details.","operationId":"get_campaign_api_brand_campaigns__campaign_id__get","parameters":[{"name":"campaign_id","in":"path","required":true,"schema":{"type":"integer","title":"Campaign Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CampaignResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Campaigns"],"summary":"Update Campaign","description":"Update a campaign.\n\nSupports partial updates - only include fields you want to change.\nCannot change type once set.","operationId":"update_campaign_api_brand_campaigns__campaign_id__put","parameters":[{"name":"campaign_id","in":"path","required":true,"schema":{"type":"integer","title":"Campaign 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/CampaignUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CampaignResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Campaigns"],"summary":"Delete Campaign","description":"Soft delete a campaign.\n\nCannot delete active campaigns - must pause first.\nAssociated posts become orphaned (campaign_id set to null).","operationId":"delete_campaign_api_brand_campaigns__campaign_id__delete","parameters":[{"name":"campaign_id","in":"path","required":true,"schema":{"type":"integer","title":"Campaign 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/brand/campaigns/{campaign_id}/pause":{"post":{"tags":["Campaigns"],"summary":"Pause Campaign","description":"Pause an active campaign.\n\nValid transitions: active -> paused","operationId":"pause_campaign_api_brand_campaigns__campaign_id__pause_post","parameters":[{"name":"campaign_id","in":"path","required":true,"schema":{"type":"integer","title":"Campaign Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CampaignResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/campaigns/{campaign_id}/resume":{"post":{"tags":["Campaigns"],"summary":"Resume Campaign","description":"Resume a paused campaign or activate a draft.\n\nValid transitions: draft -> active, paused -> active","operationId":"resume_campaign_api_brand_campaigns__campaign_id__resume_post","parameters":[{"name":"campaign_id","in":"path","required":true,"schema":{"type":"integer","title":"Campaign Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CampaignResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/campaigns/{campaign_id}/complete":{"post":{"tags":["Campaigns"],"summary":"Complete Campaign","description":"Mark a campaign as completed.\n\nValid transitions: active -> completed, paused -> completed\nCompleted is a terminal state.","operationId":"complete_campaign_api_brand_campaigns__campaign_id__complete_post","parameters":[{"name":"campaign_id","in":"path","required":true,"schema":{"type":"integer","title":"Campaign Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CampaignResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/posts":{"get":{"tags":["Posts"],"summary":"List Posts","description":"List posts with filtering and pagination.\n\nFilters:\n- status: draft, scheduled, published, failed\n- platform: instagram, tiktok, linkedin, twitter, facebook\n- campaignId: Filter by campaign\n- scheduledAfter/scheduledBefore: Date range filters","operationId":"list_posts_api_brand_posts_get","parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by status","title":"Status"},"description":"Filter by status"},{"name":"platform","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by platform","title":"Platform"},"description":"Filter by platform"},{"name":"campaignId","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter by campaign","title":"Campaignid"},"description":"Filter by campaign"},{"name":"scheduledAfter","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Filter posts scheduled after this date","title":"Scheduledafter"},"description":"Filter posts scheduled after this date"},{"name":"scheduledBefore","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Filter posts scheduled before this date","title":"Scheduledbefore"},"description":"Filter posts scheduled before this date"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Maximum number of items to return (1-100)","default":20,"title":"Limit"},"description":"Maximum number of items to return (1-100)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Number of items to skip","default":0,"title":"Offset"},"description":"Number of items to skip"},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Posts"],"summary":"Create Post","description":"Create a new post.\n\nRequired: content, platform\nOptional: campaignId, title, hashtags, media, scheduledAt","operationId":"create_post_api_brand_posts_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/posts/{post_id}":{"get":{"tags":["Posts"],"summary":"Get Post","description":"Get a single post with full details.","operationId":"get_post_api_brand_posts__post_id__get","parameters":[{"name":"post_id","in":"path","required":true,"schema":{"type":"integer","title":"Post Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Posts"],"summary":"Update Post","description":"Update a post.\n\nSupports partial updates - only include fields you want to change.","operationId":"update_post_api_brand_posts__post_id__put","parameters":[{"name":"post_id","in":"path","required":true,"schema":{"type":"integer","title":"Post 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/PostUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Posts"],"summary":"Delete Post","description":"Delete a post.\n\nCannot delete published posts.","operationId":"delete_post_api_brand_posts__post_id__delete","parameters":[{"name":"post_id","in":"path","required":true,"schema":{"type":"integer","title":"Post 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/brand/posts/{post_id}/approve":{"post":{"tags":["Posts"],"summary":"Approve Post","description":"Approve a post for publishing.\n\nSets brand_approved = true.","operationId":"approve_post_api_brand_posts__post_id__approve_post","parameters":[{"name":"post_id","in":"path","required":true,"schema":{"type":"integer","title":"Post Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/posts/{post_id}/schedule":{"post":{"tags":["Posts"],"summary":"Schedule Post","description":"Schedule a post for publishing.\n\nSets scheduledAt and status = scheduled.","operationId":"schedule_post_api_brand_posts__post_id__schedule_post","parameters":[{"name":"post_id","in":"path","required":true,"schema":{"type":"integer","title":"Post 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/PostScheduleRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/posts/{post_id}/publish":{"post":{"tags":["Posts"],"summary":"Publish Post","description":"Publish a post immediately.\n\nIn a real implementation, this would trigger the actual publishing\nto the connected platform.","operationId":"publish_post_api_brand_posts__post_id__publish_post","parameters":[{"name":"post_id","in":"path","required":true,"schema":{"type":"integer","title":"Post Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/posts/{post_id}/duplicate":{"post":{"tags":["Posts"],"summary":"Duplicate Post","description":"Create a copy of a post.\n\nThe duplicate is created with status = draft.","operationId":"duplicate_post_api_brand_posts__post_id__duplicate_post","parameters":[{"name":"post_id","in":"path","required":true,"schema":{"type":"integer","title":"Post Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/calendar":{"get":{"tags":["Calendar"],"summary":"Get Calendar","description":"Get calendar view for a date range.\n\nReturns posts grouped by day with upcoming posts list.","operationId":"get_calendar_api_brand_calendar_get","parameters":[{"name":"startDate","in":"query","required":true,"schema":{"type":"string","description":"Start date (YYYY-MM-DD)","title":"Startdate"},"description":"Start date (YYYY-MM-DD)"},{"name":"endDate","in":"query","required":true,"schema":{"type":"string","description":"End date (YYYY-MM-DD)","title":"Enddate"},"description":"End date (YYYY-MM-DD)"},{"name":"platform","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by platform","title":"Platform"},"description":"Filter by platform"},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CalendarResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/calendar/optimal-times":{"get":{"tags":["Calendar"],"summary":"Get Optimal Times","description":"Get AI-suggested optimal posting times for a platform on a specific date.\n\nReturns time slots with engagement scores and reasons.","operationId":"get_optimal_times_api_brand_calendar_optimal_times_get","parameters":[{"name":"platform","in":"query","required":true,"schema":{"type":"string","description":"Platform to get optimal times for","title":"Platform"},"description":"Platform to get optimal times for"},{"name":"date","in":"query","required":true,"schema":{"type":"string","description":"Date (YYYY-MM-DD)","title":"Date"},"description":"Date (YYYY-MM-DD)"},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OptimalTimesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/calendar/bulk-schedule":{"post":{"tags":["Calendar"],"summary":"Bulk Schedule","description":"Schedule multiple posts at once.\n\nValidates each post and detects scheduling conflicts.\nReturns count of successful schedules and any failures.","operationId":"bulk_schedule_api_brand_calendar_bulk_schedule_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkScheduleRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkScheduleResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/assets":{"get":{"tags":["Assets"],"summary":"List Assets","description":"List assets with filtering and pagination.\n\nSorted by upload date (newest first).","operationId":"list_assets_api_brand_assets_get","parameters":[{"name":"type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by type (image, video, document)","title":"Type"},"description":"Filter by type (image, video, document)"},{"name":"tag","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by tag","title":"Tag"},"description":"Filter by tag"},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search in filename and caption","title":"Search"},"description":"Search in filename and caption"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Maximum number of items to return (1-100)","default":20,"title":"Limit"},"description":"Maximum number of items to return (1-100)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Number of items to skip","default":0,"title":"Offset"},"description":"Number of items to skip"},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Assets"],"summary":"Upload Asset","description":"Upload a new asset.\n\nSupported types:\n- Images: JPEG, PNG, GIF, WebP (max 50 MB)\n- Videos: MP4, MOV (max 500 MB)\n- Documents: PDF (max 10 MB)","operationId":"upload_asset_api_brand_assets_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_asset_api_brand_assets_post"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/assets/{asset_id}":{"get":{"tags":["Assets"],"summary":"Get Asset","description":"Get asset details.","operationId":"get_asset_api_brand_assets__asset_id__get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"integer","title":"Asset Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Assets"],"summary":"Update Asset","description":"Update asset metadata.\n\nCan update caption, altText, and tags.","operationId":"update_asset_api_brand_assets__asset_id__put","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"integer","title":"Asset 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/AssetUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Assets"],"summary":"Delete Asset","description":"Delete an asset.\n\nAssets in use by posts cannot be deleted.","operationId":"delete_asset_api_brand_assets__asset_id__delete","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"integer","title":"Asset Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetDeleteResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/packs":{"get":{"tags":["Content Packs"],"summary":"List Packs","description":"List available content packs.\n\nPacks are templates that can be used to quickly create posts.","operationId":"list_packs_api_brand_packs_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by category","title":"Category"},"description":"Filter by category"},{"name":"platform","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by supported platform","title":"Platform"},"description":"Filter by supported platform"},{"name":"industry","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by industry","title":"Industry"},"description":"Filter by industry"},{"name":"featured","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Filter featured packs only","title":"Featured"},"description":"Filter featured packs only"},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search in name and description","title":"Search"},"description":"Search in name and description"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Maximum number of items to return (1-100)","default":20,"title":"Limit"},"description":"Maximum number of items to return (1-100)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Number of items to skip","default":0,"title":"Offset"},"description":"Number of items to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentPackListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/packs/{pack_id}":{"get":{"tags":["Content Packs"],"summary":"Get Pack","description":"Get pack details with templates.","operationId":"get_pack_api_brand_packs__pack_id__get","parameters":[{"name":"pack_id","in":"path","required":true,"schema":{"type":"integer","title":"Pack Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentPackDetailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/packs/slug/{slug}":{"get":{"tags":["Content Packs"],"summary":"Get Pack By Slug","description":"Get pack details by slug.","operationId":"get_pack_by_slug_api_brand_packs_slug__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentPackDetailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/packs/{pack_id}/use":{"post":{"tags":["Content Packs"],"summary":"Use Pack","description":"Use a content pack to create posts from its templates.\n\nVariables in templates (e.g., {{product_name}}) are replaced with\nprovided values.","operationId":"use_pack_api_brand_packs__pack_id__use_post","parameters":[{"name":"pack_id","in":"path","required":true,"schema":{"type":"integer","title":"Pack 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/UsePackRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UsePackResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/analytics/overview":{"get":{"tags":["Analytics"],"summary":"Get Overview","description":"Get analytics overview for a time period.\n\nReturns aggregate metrics with period-over-period change.","operationId":"get_overview_api_brand_analytics_overview_get","parameters":[{"name":"period","in":"query","required":false,"schema":{"type":"string","description":"Time period: 7d, 30d, 90d","default":"30d","title":"Period"},"description":"Time period: 7d, 30d, 90d"},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalyticsOverview"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/analytics/posts/{post_id}":{"get":{"tags":["Analytics"],"summary":"Get Post Analytics","description":"Get detailed analytics for a specific post.","operationId":"get_post_analytics_api_brand_analytics_posts__post_id__get","parameters":[{"name":"post_id","in":"path","required":true,"schema":{"type":"integer","title":"Post Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostAnalytics"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/analytics/campaigns/{campaign_id}":{"get":{"tags":["Analytics"],"summary":"Get Campaign Analytics","description":"Get detailed analytics for a campaign.","operationId":"get_campaign_analytics_api_brand_analytics_campaigns__campaign_id__get","parameters":[{"name":"campaign_id","in":"path","required":true,"schema":{"type":"integer","title":"Campaign Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CampaignAnalytics"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/research/trends":{"get":{"tags":["Research"],"summary":"Get Trends","description":"Get current trending topics.\n\nReturns cached trend data from various sources.","operationId":"get_trends_api_brand_research_trends_get","parameters":[{"name":"platform","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by platform","title":"Platform"},"description":"Filter by platform"},{"name":"region","in":"query","required":false,"schema":{"type":"string","description":"Region for trends","default":"global","title":"Region"},"description":"Region for trends"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrendsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/research/hashtags/analyze":{"post":{"tags":["Research"],"summary":"Analyze Hashtags","description":"Analyze hashtag performance.\n\nReturns metrics for provided hashtags and recommendations.","operationId":"analyze_hashtags_api_brand_research_hashtags_analyze_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HashtagAnalyzeRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HashtagAnalyzeResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/research/ideas":{"post":{"tags":["Research"],"summary":"Generate Ideas","description":"Generate AI-powered content ideas.\n\nReturns content suggestions based on trends and user's brand.","operationId":"generate_ideas_api_brand_research_ideas_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IdeasRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IdeasResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/research/ideas/{idea_id}/use":{"post":{"tags":["Research"],"summary":"Mark Idea Used","description":"Mark an idea as used.","operationId":"mark_idea_used_api_brand_research_ideas__idea_id__use_post","parameters":[{"name":"idea_id","in":"path","required":true,"schema":{"type":"integer","title":"Idea 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/brand/platforms":{"get":{"tags":["Platforms"],"summary":"List Platforms","description":"List connected and available platforms.","operationId":"list_platforms_api_brand_platforms_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlatformListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/platforms/connect":{"post":{"tags":["Platforms"],"summary":"Connect Platform","description":"Connect a social media platform via OAuth.\n\nReceives OAuth authorization code and exchanges for access token.","operationId":"connect_platform_api_brand_platforms_connect_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectPlatformRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlatformConnectionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/platforms/disconnect":{"post":{"tags":["Platforms"],"summary":"Disconnect Platform","description":"Disconnect a social media platform.\n\nRevokes OAuth tokens and removes connection.","operationId":"disconnect_platform_api_brand_platforms_disconnect_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DisconnectPlatformRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/brand/platforms/{platform}/sync":{"post":{"tags":["Platforms"],"summary":"Sync Platform","description":"Trigger a manual sync with a connected platform.\n\nFetches latest profile info and refreshes tokens if needed.","operationId":"sync_platform_api_brand_platforms__platform__sync_post","parameters":[{"name":"platform","in":"path","required":true,"schema":{"type":"string","title":"Platform"}},{"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/geuder/webhook/whatsapp":{"post":{"tags":["Geuder"],"summary":"Whatsapp Webhook","description":"Handle incoming WhatsApp messages from Twilio.\n\nThis endpoint receives webhooks from Twilio when a WhatsApp\nmessage is sent to our number.","operationId":"whatsapp_webhook_api_geuder_webhook_whatsapp_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_whatsapp_webhook_api_geuder_webhook_whatsapp_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/geuder/simulate/whatsapp":{"post":{"tags":["Geuder"],"summary":"Simulate Whatsapp Message","description":"Simulate an incoming WhatsApp message for testing.\n\nThis endpoint mimics a Twilio webhook without requiring\nactual WhatsApp or ngrok setup. Perfect for testing the\nfull conversation flow in the dashboard.\n\nArgs:\n    request: Simulated phone number and message.\n\nReturns:\n    Processing status.","operationId":"simulate_whatsapp_message_api_geuder_simulate_whatsapp_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SimulateWhatsAppRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/geuder/conversations/stream":{"get":{"tags":["Geuder"],"summary":"Conversation Stream","description":"SSE endpoint for real-time conversation updates.\n\nReturns Server-Sent Events with:\n- type: \"new_message\" - New customer/AI/operator message\n- type: \"mode_change\" - Conversation mode changed\n- type: \"whisper\" - Whisper applied/cleared\n- type: \"connected\" - Initial connection confirmation\n\nExample event:\n```\ndata: {\"type\": \"new_message\", \"conversation_id\": \"xxx\", \"role\": \"customer\", \"content\": \"Hello\"}\n```","operationId":"conversation_stream_api_geuder_conversations_stream_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/geuder/stream/status":{"get":{"tags":["Geuder"],"summary":"Stream Status","description":"Get current SSE stream status.\n\nReturns:\n    Number of active subscribers.","operationId":"stream_status_api_geuder_stream_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/geuder/conversations":{"get":{"tags":["Geuder"],"summary":"List Conversations","description":"List all conversations.\n\nArgs:\n    phone: Filter by phone number.\n    status: Filter by status (active, closed, archived).","operationId":"list_conversations_api_geuder_conversations_get","parameters":[{"name":"phone","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/geuder/conversations/{conversation_id}":{"get":{"tags":["Geuder"],"summary":"Get Conversation","description":"Get conversation details with messages.\n\nArgs:\n    conversation_id: Conversation UUID.","operationId":"get_conversation_api_geuder_conversations__conversation_id__get","parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","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/geuder/conversations/{conversation_id}/takeover":{"post":{"tags":["Geuder"],"summary":"Takeover Conversation","description":"Operator takes over conversation.\n\nArgs:\n    conversation_id: Conversation UUID.\n    request: Takeover request with operator_id.","operationId":"takeover_conversation_api_geuder_conversations__conversation_id__takeover_post","parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TakeoverRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/geuder/conversations/{conversation_id}/handback":{"post":{"tags":["Geuder"],"summary":"Handback Conversation","description":"Hand conversation back to AI.\n\nArgs:\n    conversation_id: Conversation UUID.","operationId":"handback_conversation_api_geuder_conversations__conversation_id__handback_post","parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","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/geuder/conversations/{conversation_id}/message":{"post":{"tags":["Geuder"],"summary":"Send Operator Message","description":"Send message as operator.\n\nArgs:\n    conversation_id: Conversation UUID.\n    request: Message content.","operationId":"send_operator_message_api_geuder_conversations__conversation_id__message_post","parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/geuder/chat":{"post":{"tags":["Geuder"],"summary":"Web Chat","description":"Web chat endpoint for frontend.\n\nThis endpoint is for the /geuder customer chat page.\nIt creates/uses a web session and returns AI responses with RAG.\n\nArgs:\n    request: Chat message and optional session_id.\n\nReturns:\n    AI response with RAG sources.","operationId":"web_chat_api_geuder_chat_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__geuder__api__conversations__ChatRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/geuder/chat/stream":{"post":{"tags":["Geuder"],"summary":"Web Chat Stream","description":"Streaming web chat endpoint for frontend.\n\nThis endpoint streams AI responses token by token using SSE.\n\nArgs:\n    request: Chat message and optional session_id.\n\nReturns:\n    SSE stream with tokens and final sources.","operationId":"web_chat_stream_api_geuder_chat_stream_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__geuder__api__conversations__ChatRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/geuder/whispers/presets":{"get":{"tags":["Geuder"],"summary":"Get Presets","description":"Get all preset whispers.\n\nReturns:\n    List of preset whisper objects.","operationId":"get_presets_api_geuder_whispers_presets_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/geuder/whispers/presets/{category}":{"get":{"tags":["Geuder"],"summary":"Get Presets By Category","description":"Get preset whispers filtered by category.\n\nArgs:\n    category: Category name (sales, support, information, tone).","operationId":"get_presets_by_category_api_geuder_whispers_presets__category__get","parameters":[{"name":"category","in":"path","required":true,"schema":{"type":"string","title":"Category"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/geuder/whispers/suggest/{conversation_id}":{"get":{"tags":["Geuder"],"summary":"Suggest Whispers","description":"Get AI-suggested whispers for conversation.\n\nAnalyzes conversation context and returns relevant suggestions.\n\nArgs:\n    conversation_id: Conversation UUID.","operationId":"suggest_whispers_api_geuder_whispers_suggest__conversation_id__get","parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","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/geuder/whispers/smart/{conversation_id}":{"get":{"tags":["Geuder"],"summary":"Get Smart Suggestions","description":"Get smart whisper suggestions with product detection and upsells.\n\nAnalyzes conversation for:\n- Products mentioned (G-xxxxx codes)\n- Customer sentiment and intent\n- Conversation stage (inquiry, comparison, objection, decision, support)\n- Relevant upsell opportunities\n\nArgs:\n    conversation_id: Conversation UUID.\n    mode: Suggestion mode - 'upsell', 'support', 'close', 'auto'.\n\nReturns:\n    Smart suggestion object with:\n    - products_detected: List of products found in conversation\n    - conversation_stage: Detected stage of the conversation\n    - sentiment: Customer sentiment\n    - product_suggestions: Product-specific whispers with upsells\n    - contextual_suggestions: Stage-appropriate preset whispers\n    - smart_whisper: Primary recommended whisper action","operationId":"get_smart_suggestions_api_geuder_whispers_smart__conversation_id__get","parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}},{"name":"mode","in":"query","required":false,"schema":{"type":"string","default":"auto","title":"Mode"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/geuder/conversations/{conversation_id}/whisper":{"post":{"tags":["Geuder"],"summary":"Apply Whisper","description":"Apply whisper to conversation.\n\nArgs:\n    conversation_id: Conversation UUID.\n    request: Whisper content and type.","operationId":"apply_whisper_api_geuder_conversations__conversation_id__whisper_post","parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WhisperRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Geuder"],"summary":"Clear Whisper","description":"Clear active whisper from conversation.\n\nArgs:\n    conversation_id: Conversation UUID.","operationId":"clear_whisper_api_geuder_conversations__conversation_id__whisper_delete","parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","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/geuder/rag/ingest":{"post":{"tags":["Geuder"],"summary":"Ingest Pdfs","description":"Upload and process PDFs into vector store.\n\nArgs:\n    files: PDF files to ingest.\n\nReturns:\n    Processing summary.","operationId":"ingest_pdfs_api_geuder_rag_ingest_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_ingest_pdfs_api_geuder_rag_ingest_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/geuder/rag/ingest-directory":{"post":{"tags":["Geuder"],"summary":"Ingest Directory","description":"Ingest all PDFs from a directory.\n\nArgs:\n    directory: Path to directory with PDFs.","operationId":"ingest_directory_api_geuder_rag_ingest_directory_post","parameters":[{"name":"directory","in":"query","required":false,"schema":{"type":"string","default":"data/geuder/pdfs","title":"Directory"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/geuder/rag/status":{"get":{"tags":["Geuder"],"summary":"Get Rag Status","description":"Get RAG index status.\n\nReturns:\n    Index statistics.","operationId":"get_rag_status_api_geuder_rag_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/geuder/rag/search":{"get":{"tags":["Geuder"],"summary":"Search Rag","description":"Search RAG index.\n\nArgs:\n    query: Search query text.\n    top_k: Number of results.\n    product_code: Optional product code filter.","operationId":"search_rag_api_geuder_rag_search_get","parameters":[{"name":"query","in":"query","required":true,"schema":{"type":"string","title":"Query"}},{"name":"top_k","in":"query","required":false,"schema":{"type":"integer","default":5,"title":"Top K"}},{"name":"product_code","in":"query","required":false,"schema":{"type":"string","title":"Product Code"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/geuder/pdfs/{filename}":{"get":{"tags":["Geuder"],"summary":"Get Pdf","description":"Serve a PDF file by filename.\n\nIn production, redirects to Shopify CDN for the PDF.\nIn development, serves from local file system.\n\nArgs:\n    filename: Name of the PDF file.\n\nReturns:\n    Redirect to CDN or PDF file response.","operationId":"get_pdf_api_geuder_pdfs__filename__get","parameters":[{"name":"filename","in":"path","required":true,"schema":{"type":"string","title":"Filename"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/geuder/pdfs":{"get":{"tags":["Geuder"],"summary":"List Pdfs","description":"List all available PDFs.\n\nReturns:\n    List of PDF filenames.","operationId":"list_pdfs_api_geuder_pdfs_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/geuder/pdfs/{filename}/thumbnail":{"get":{"tags":["Geuder"],"summary":"Get Pdf Thumbnail","description":"Get a thumbnail of the first page of a PDF.\n\nRedirects to the frontend-hosted thumbnail (pre-generated and deployed).\nThumbnails are hosted on Vercel at /geuder-thumbnails/{basename}.png\n\nArgs:\n    filename: Name of the PDF file.\n    width: Thumbnail width in pixels (ignored - thumbnails are pre-generated).\n\nReturns:\n    Redirect to the thumbnail URL on the frontend.","operationId":"get_pdf_thumbnail_api_geuder_pdfs__filename__thumbnail_get","parameters":[{"name":"filename","in":"path","required":true,"schema":{"type":"string","title":"Filename"}},{"name":"width","in":"query","required":false,"schema":{"type":"integer","default":200,"title":"Width"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/geuder/voice/check-sentiment":{"post":{"tags":["Geuder"],"summary":"Check Sentiment","description":"Check if we should offer a phone call based on conversation sentiment.\n\nRules:\n- Minimum 2 turns required\n- At least one user message with negative sentiment","operationId":"check_sentiment_api_geuder_voice_check_sentiment_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SentimentCheckRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SentimentCheckResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/geuder/voice/status":{"get":{"tags":["Geuder"],"summary":"Get Voice Status","description":"Check if voice calling is properly configured.","operationId":"get_voice_status_api_geuder_voice_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/geuder/voice/active-calls":{"get":{"tags":["Geuder"],"summary":"Get Active Calls","description":"Get list of currently active calls.\n\nChecks both in-memory state AND ElevenLabs API for active calls.","operationId":"get_active_calls_api_geuder_voice_active_calls_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/geuder/voice/call":{"post":{"tags":["Geuder"],"summary":"Initiate Call With Monitoring","description":"Initiate an outbound voice call via ElevenLabs with monitoring.\n\nThe ElevenLabs agent will call the customer to help resolve their issue.\nReturns conversation_id which can be used for real-time monitoring.","operationId":"initiate_call_with_monitoring_api_geuder_voice_call_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CallRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CallResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/geuder/voice/control/{conversation_id}":{"post":{"tags":["Geuder"],"summary":"Send Call Control","description":"Send a control command to an active call via REST.\n\nAlternative to WebSocket for sending commands.","operationId":"send_call_control_api_geuder_voice_control__conversation_id__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/CallControlCommand"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/geuder/voice/call/{conversation_id}/transcripts":{"get":{"tags":["Geuder"],"summary":"Get Call Transcripts","description":"Get transcripts for a call (active or ended).","operationId":"get_call_transcripts_api_geuder_voice_call__conversation_id__transcripts_get","parameters":[{"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/geuder/voice/conversations":{"get":{"tags":["Geuder"],"summary":"Get Elevenlabs Conversations","description":"Fetch conversation history from ElevenLabs API.\n\nReturns list of past conversations with timestamps.","operationId":"get_elevenlabs_conversations_api_geuder_voice_conversations_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":20,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/geuder/voice/conversations/{conversation_id}":{"get":{"tags":["Geuder"],"summary":"Get Elevenlabs Conversation","description":"Fetch a specific conversation with full transcript from ElevenLabs.\n\nReturns the complete conversation with all messages.","operationId":"get_elevenlabs_conversation_api_geuder_voice_conversations__conversation_id__get","parameters":[{"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"}}}}}}},"/admin/gateway/accounts":{"get":{"tags":["Gateway Admin"],"summary":"List all gateway accounts","operationId":"list_accounts_admin_gateway_accounts_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"tags":["Gateway Admin"],"summary":"Create gateway account","operationId":"create_account_admin_gateway_accounts_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAccountRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/gateway/accounts/{account_id}":{"get":{"tags":["Gateway Admin"],"summary":"Get gateway account","operationId":"get_account_admin_gateway_accounts__account_id__get","parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"string","title":"Account Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["Gateway Admin"],"summary":"Update gateway account","operationId":"update_account_admin_gateway_accounts__account_id__patch","parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"string","title":"Account Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateAccountRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/gateway/keys":{"post":{"tags":["Gateway Admin"],"summary":"Generate API key for account","description":"Generate a new API key. The raw key is returned **once** -- store it safely.","operationId":"create_key_admin_gateway_keys_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateKeyRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/gateway/keys/{account_id}":{"get":{"tags":["Gateway Admin"],"summary":"List API keys for account","operationId":"list_keys_admin_gateway_keys__account_id__get","parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"string","title":"Account Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/gateway/keys/{key_id}/revoke":{"post":{"tags":["Gateway Admin"],"summary":"Revoke an API key","operationId":"revoke_key_admin_gateway_keys__key_id__revoke_post","parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","title":"Key Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/gateway/usage/{account_id}":{"get":{"tags":["Gateway Admin"],"summary":"Usage summary for account","operationId":"get_usage_admin_gateway_usage__account_id__get","parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"string","title":"Account Id"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"AnalyticsOverview":{"properties":{"period":{"type":"string","title":"Period"},"totalReach":{"type":"integer","title":"Totalreach","default":0},"reachChange":{"type":"number","title":"Reachchange","default":0.0},"totalImpressions":{"type":"integer","title":"Totalimpressions","default":0},"impressionsChange":{"type":"number","title":"Impressionschange","default":0.0},"totalEngagement":{"type":"integer","title":"Totalengagement","default":0},"engagementChange":{"type":"number","title":"Engagementchange","default":0.0},"engagementRate":{"type":"number","title":"Engagementrate","default":0.0},"engagementRateChange":{"type":"number","title":"Engagementratechange","default":0.0},"postsPublished":{"type":"integer","title":"Postspublished","default":0},"topPlatform":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Topplatform"},"topPost":{"anyOf":[{"$ref":"#/components/schemas/PostResponse"},{"type":"null"}]}},"type":"object","required":["period"],"title":"AnalyticsOverview","description":"Response for GET /api/brand/analytics/overview"},"AssetDeleteResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"message":{"type":"string","title":"Message"},"storageFreed":{"type":"integer","title":"Storagefreed"}},"type":"object","required":["success","message","storageFreed"],"title":"AssetDeleteResponse","description":"Response for DELETE /api/brand/assets/:id"},"AssetListResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/AssetResponse"},"type":"array","title":"Data"},"pagination":{"additionalProperties":true,"type":"object","title":"Pagination"},"storageUsed":{"type":"integer","title":"Storageused"},"storageLimit":{"type":"integer","title":"Storagelimit"}},"type":"object","required":["data","pagination","storageUsed","storageLimit"],"title":"AssetListResponse","description":"Response for GET /api/brand/assets"},"AssetResponse":{"properties":{"id":{"type":"integer","title":"Id"},"filename":{"type":"string","title":"Filename"},"type":{"type":"string","title":"Type"},"url":{"type":"string","title":"Url"},"thumbnailUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnailurl"},"mimeType":{"type":"string","title":"Mimetype"},"sizeBytes":{"type":"integer","title":"Sizebytes"},"width":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Width"},"height":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Height"},"durationSeconds":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Durationseconds"},"caption":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Caption"},"altText":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Alttext"},"tags":{"items":{"type":"string"},"type":"array","title":"Tags","default":[]},"usedInPostsCount":{"type":"integer","title":"Usedinpostscount","default":0},"createdAt":{"type":"string","format":"date-time","title":"Createdat"},"updatedAt":{"type":"string","format":"date-time","title":"Updatedat"}},"type":"object","required":["id","filename","type","url","mimeType","sizeBytes","createdAt","updatedAt"],"title":"AssetResponse","description":"Asset response object"},"AssetUpdate":{"properties":{"caption":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Caption"},"altText":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Alttext"},"tags":{"items":{"type":"string"},"type":"array","maxItems":20,"title":"Tags","default":[]}},"type":"object","title":"AssetUpdate","description":"Request for PUT /api/brand/assets/:id"},"Body_ingest_pdfs_api_geuder_rag_ingest_post":{"properties":{"files":{"items":{"type":"string","contentMediaType":"application/octet-stream"},"type":"array","title":"Files"}},"type":"object","required":["files"],"title":"Body_ingest_pdfs_api_geuder_rag_ingest_post"},"Body_upload_asset_api_brand_assets_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"},"caption":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Caption"},"altText":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Alttext"},"tags":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tags","description":"Comma-separated tags"}},"type":"object","required":["file"],"title":"Body_upload_asset_api_brand_assets_post"},"Body_whatsapp_webhook_api_geuder_webhook_whatsapp_post":{"properties":{"From":{"type":"string","title":"From"},"Body":{"type":"string","title":"Body"},"MessageSid":{"type":"string","title":"Messagesid"},"AccountSid":{"type":"string","title":"Accountsid"},"NumMedia":{"type":"string","title":"Nummedia","default":"0"}},"type":"object","required":["From","Body"],"title":"Body_whatsapp_webhook_api_geuder_webhook_whatsapp_post"},"BrandChatRequest":{"properties":{"message":{"type":"string","title":"Message","default":""},"sessionId":{"type":"string","title":"Sessionid"},"userId":{"type":"string","title":"Userid"},"history":{"items":{"additionalProperties":{"type":"string"},"type":"object"},"type":"array","title":"History","default":[]},"context":{"additionalProperties":true,"type":"object","title":"Context","default":{}},"stream":{"type":"boolean","title":"Stream","default":true},"images":{"items":{"$ref":"#/components/schemas/app__schemas__brand_api__ImageAttachment"},"type":"array","title":"Images","default":[]},"blockAction":{"anyOf":[{"$ref":"#/components/schemas/app__schemas__brand_api__BlockAction"},{"type":"null"}]}},"type":"object","required":["sessionId","userId"],"title":"BrandChatRequest","description":"Request to brand studio chat endpoint"},"BrandProfileResponse":{"properties":{"id":{"type":"integer","title":"Id"},"brandName":{"type":"string","title":"Brandname"},"tagline":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tagline"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"voice":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Voice"},"tone":{"items":{"type":"string"},"type":"array","title":"Tone","default":[]},"avoidWords":{"items":{"type":"string"},"type":"array","title":"Avoidwords","default":[]},"preferredHashtags":{"items":{"type":"string"},"type":"array","title":"Preferredhashtags","default":[]},"primaryColor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Primarycolor"},"secondaryColor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Secondarycolor"},"logoUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logourl"},"industry":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Industry"},"targetAudience":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Targetaudience"},"audienceDemographics":{"additionalProperties":true,"type":"object","title":"Audiencedemographics","default":{}},"competitors":{"items":{"type":"string"},"type":"array","title":"Competitors","default":[]},"activePlatforms":{"items":{"type":"string"},"type":"array","title":"Activeplatforms","default":[]},"postingFrequency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Postingfrequency"},"contentPillars":{"items":{"type":"string"},"type":"array","title":"Contentpillars","default":[]},"createdAt":{"type":"string","format":"date-time","title":"Createdat"},"updatedAt":{"type":"string","format":"date-time","title":"Updatedat"}},"type":"object","required":["id","brandName","createdAt","updatedAt"],"title":"BrandProfileResponse","description":"Full brand profile response"},"BrandProfileSummary":{"properties":{"id":{"type":"integer","title":"Id"},"brandName":{"type":"string","title":"Brandname"},"tagline":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tagline"},"voice":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Voice"},"tone":{"items":{"type":"string"},"type":"array","title":"Tone","default":[]},"primaryColor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Primarycolor"},"secondaryColor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Secondarycolor"},"logoUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logourl"},"industry":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Industry"},"activePlatforms":{"items":{"type":"string"},"type":"array","title":"Activeplatforms","default":[]}},"type":"object","required":["id","brandName"],"title":"BrandProfileSummary","description":"Brand profile summary for init response"},"BrandProfileUpdate":{"properties":{"brandName":{"anyOf":[{"type":"string","maxLength":100,"minLength":1},{"type":"null"}],"title":"Brandname"},"tagline":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Tagline"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"voice":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Voice"},"tone":{"anyOf":[{"items":{"type":"string"},"type":"array","maxItems":5},{"type":"null"}],"title":"Tone"},"avoidWords":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Avoidwords"},"preferredHashtags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Preferredhashtags"},"primaryColor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Primarycolor"},"secondaryColor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Secondarycolor"},"logoUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logourl"},"industry":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Industry"},"targetAudience":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Targetaudience"},"audienceDemographics":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Audiencedemographics"},"competitors":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Competitors"},"activePlatforms":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Activeplatforms"},"postingFrequency":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Postingfrequency"},"contentPillars":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Contentpillars"}},"type":"object","title":"BrandProfileUpdate","description":"Request body for PUT /api/brand/profile"},"BulkScheduleItem":{"properties":{"postId":{"type":"integer","title":"Postid"},"scheduledAt":{"type":"string","format":"date-time","title":"Scheduledat"}},"type":"object","required":["postId","scheduledAt"],"title":"BulkScheduleItem","description":"Single item in bulk schedule request"},"BulkScheduleRequest":{"properties":{"posts":{"items":{"$ref":"#/components/schemas/BulkScheduleItem"},"type":"array","title":"Posts"}},"type":"object","required":["posts"],"title":"BulkScheduleRequest","description":"Request for POST /api/brand/calendar/bulk-schedule"},"BulkScheduleResponse":{"properties":{"scheduled":{"type":"integer","title":"Scheduled"},"failed":{"type":"integer","title":"Failed"},"failures":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Failures","default":[]}},"type":"object","required":["scheduled","failed"],"title":"BulkScheduleResponse","description":"Response for POST /api/brand/calendar/bulk-schedule"},"CalendarDay":{"properties":{"date":{"type":"string","title":"Date"},"posts":{"items":{"$ref":"#/components/schemas/PostResponse"},"type":"array","title":"Posts","default":[]},"totalPosts":{"type":"integer","title":"Totalposts","default":0}},"type":"object","required":["date"],"title":"CalendarDay","description":"Single day in calendar response"},"CalendarResponse":{"properties":{"startDate":{"type":"string","title":"Startdate"},"endDate":{"type":"string","title":"Enddate"},"days":{"items":{"$ref":"#/components/schemas/CalendarDay"},"type":"array","title":"Days","default":[]},"upcomingPosts":{"items":{"$ref":"#/components/schemas/PostResponse"},"type":"array","title":"Upcomingposts","default":[]}},"type":"object","required":["startDate","endDate"],"title":"CalendarResponse","description":"Response for GET /api/brand/calendar"},"CallControlCommand":{"properties":{"command_type":{"type":"string","title":"Command Type"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"phone_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone Number"}},"type":"object","required":["command_type"],"title":"CallControlCommand","description":"Command to control an active call."},"CallRequest":{"properties":{"phone_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone Number"},"session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id"},"context":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Context"}},"type":"object","title":"CallRequest","description":"Request to initiate a voice call."},"CallResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"message":{"type":"string","title":"Message"},"conversation_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Conversation Id"},"call_sid":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Call Sid"}},"type":"object","required":["success","message"],"title":"CallResponse","description":"Response from call initiation."},"CampaignAnalytics":{"properties":{"campaignId":{"type":"integer","title":"Campaignid"},"totalReach":{"type":"integer","title":"Totalreach","default":0},"totalImpressions":{"type":"integer","title":"Totalimpressions","default":0},"totalEngagement":{"type":"integer","title":"Totalengagement","default":0},"avgEngagementRate":{"type":"number","title":"Avgengagementrate","default":0.0},"postsPublished":{"type":"integer","title":"Postspublished","default":0},"topPerformingPost":{"anyOf":[{"$ref":"#/components/schemas/PostResponse"},{"type":"null"}]},"platformBreakdown":{"additionalProperties":{"additionalProperties":{"type":"integer"},"type":"object"},"type":"object","title":"Platformbreakdown","default":{}}},"type":"object","required":["campaignId"],"title":"CampaignAnalytics","description":"Response for GET /api/brand/analytics/campaigns/:id"},"CampaignCreate":{"properties":{"name":{"type":"string","maxLength":150,"minLength":1,"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"type":{"type":"string","title":"Type","default":"promo"},"timingMode":{"type":"string","title":"Timingmode","default":"timebound"},"goal":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Goal"},"platforms":{"items":{"type":"string"},"type":"array","title":"Platforms","default":[]},"cadence":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Cadence"},"startDate":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Startdate"},"endDate":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Enddate"}},"type":"object","required":["name"],"title":"CampaignCreate","description":"Request for POST /api/brand/campaigns"},"CampaignListResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/CampaignResponse"},"type":"array","title":"Data"},"pagination":{"additionalProperties":true,"type":"object","title":"Pagination"}},"type":"object","required":["data","pagination"],"title":"CampaignListResponse","description":"Response for GET /api/brand/campaigns"},"CampaignResponse":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"status":{"type":"string","title":"Status"},"type":{"type":"string","title":"Type"},"timingMode":{"type":"string","title":"Timingmode"},"goal":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Goal"},"platforms":{"items":{"type":"string"},"type":"array","title":"Platforms","default":[]},"cadence":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cadence"},"startDate":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Startdate"},"endDate":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Enddate"},"postsCount":{"type":"integer","title":"Postscount","default":0},"publishedPostsCount":{"type":"integer","title":"Publishedpostscount","default":0},"totalReach":{"type":"integer","title":"Totalreach","default":0},"totalEngagement":{"type":"integer","title":"Totalengagement","default":0},"createdAt":{"type":"string","format":"date-time","title":"Createdat"},"updatedAt":{"type":"string","format":"date-time","title":"Updatedat"}},"type":"object","required":["id","name","status","type","timingMode","createdAt","updatedAt"],"title":"CampaignResponse","description":"Campaign response object"},"CampaignStateResponse":{"properties":{"campaignId":{"type":"integer","title":"Campaignid"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"goalType":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Goaltype"},"platforms":{"items":{"type":"string"},"type":"array","title":"Platforms","default":[]},"contentPieces":{"additionalProperties":{"$ref":"#/components/schemas/ContentPieceStateResponse"},"type":"object","title":"Contentpieces","default":{}},"pipelineStarted":{"type":"boolean","title":"Pipelinestarted","default":false},"pipelineCompleted":{"type":"boolean","title":"Pipelinecompleted","default":false},"currentAgent":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Currentagent"},"coherenceScore":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Coherencescore"},"coherenceFeedback":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Coherencefeedback"},"totalIterations":{"type":"integer","title":"Totaliterations","default":0},"totalToolCalls":{"type":"integer","title":"Totaltoolcalls","default":0},"agentsExecuted":{"items":{"type":"string"},"type":"array","title":"Agentsexecuted","default":[]}},"type":"object","required":["campaignId"],"title":"CampaignStateResponse","description":"Response for GET /api/brand/campaign/{id}/state"},"CampaignUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":150,"minLength":1},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"goal":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Goal"},"platforms":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Platforms"},"cadence":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Cadence"},"startDate":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Startdate"},"endDate":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Enddate"}},"type":"object","title":"CampaignUpdate","description":"Request for PUT /api/brand/campaigns/:id"},"ChatCompletionRequest":{"properties":{"messages":{"items":{"$ref":"#/components/schemas/Message"},"type":"array","minItems":1,"title":"Messages","description":"List of messages in the conversation. Send full history for multi-turn chats."},"model":{"type":"string","title":"Model","description":"Model to use. 'auto' for intelligent routing, or specify model name.","default":"auto"},"stream":{"type":"boolean","title":"Stream","description":"Enable streaming responses via Server-Sent Events","default":false},"temperature":{"type":"number","maximum":2.0,"minimum":0.0,"title":"Temperature","description":"Sampling temperature. Lower = more focused, higher = more creative.","default":0.2},"max_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Tokens","description":"Maximum tokens to generate. Leave empty for model default."},"generate_title":{"type":"boolean","title":"Generate Title","description":"Generate a conversation title based on the exchange. Returns title in response.","default":false},"tools":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Tools","description":"List of tool/function definitions the model may call (OpenAI function-calling format)."},"tool_choice":{"anyOf":[{"type":"string"},{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Tool Choice","description":"Controls tool usage: 'auto', 'none', 'required', or a specific tool spec."}},"type":"object","required":["messages"],"title":"ChatCompletionRequest","examples":[{"description":"Basic single message request with auto routing","summary":"Simple chat","value":{"messages":[{"content":"Hello!","role":"user"}],"model":"auto","stream":false}},{"description":"Continue a conversation by sending full history","summary":"Multi-turn conversation","value":{"messages":[{"content":"My name is Alice","role":"user"},{"content":"Nice to meet you, Alice!","role":"assistant"},{"content":"What's my name?","role":"user"}],"model":"auto","stream":false}},{"description":"Request code with a specific model","summary":"Code generation","value":{"messages":[{"content":"Write a Python function to sort a list","role":"user"}],"model":"qwen3-coder-480b","stream":false,"temperature":0.1}},{"description":"Get real-time token streaming","summary":"Streaming response","value":{"messages":[{"content":"Tell me a story","role":"user"}],"model":"auto","stream":true}}]},"ChatCompletionResponse":{"properties":{"id":{"type":"string","title":"Id","description":"Unique completion ID"},"object":{"type":"string","title":"Object","description":"Object type","default":"chat.completion"},"model":{"type":"string","title":"Model","description":"Model used for completion"},"router":{"$ref":"#/components/schemas/RouterInfo","description":"Routing decision details"},"choices":{"items":{"$ref":"#/components/schemas/Choice"},"type":"array","title":"Choices","description":"Completion choices"},"usage":{"$ref":"#/components/schemas/Usage","description":"Token usage statistics"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title","description":"Generated conversation title (if generate_title=true)"}},"type":"object","required":["id","model","router","choices","usage"],"title":"ChatCompletionResponse","example":{"choices":[{"finish_reason":"stop","index":0,"message":{"content":"Here's a Python function to sort a list:\n\n```python\ndef sort_list(lst):\n    return sorted(lst)\n```","role":"assistant"}}],"id":"chatcmpl-abc123","model":"Qwen/Qwen3-Coder-480B-A35B-Instruct","object":"chat.completion","router":{"confidence":0.86,"mode":"AUTO","reasons":["code_keywords_detected"],"route_id":"R-CODE","selected_model":"qwen3-coder-480b","selected_provider_model_id":"Qwen/Qwen3-Coder-480B-A35B-Instruct"},"usage":{"completion_tokens":42,"prompt_tokens":15,"total_tokens":57}}},"ChatMessageResponse":{"properties":{"id":{"type":"integer","title":"Id"},"sessionId":{"type":"string","title":"Sessionid"},"role":{"type":"string","title":"Role"},"content":{"type":"string","title":"Content"},"agentId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Agentid"},"jobId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Jobid"},"cards":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Cards","default":[]},"createdAt":{"type":"string","format":"date-time","title":"Createdat"}},"type":"object","required":["id","sessionId","role","content","createdAt"],"title":"ChatMessageResponse","description":"Chat message response object"},"Choice":{"properties":{"index":{"type":"integer","title":"Index","description":"Choice index"},"message":{"$ref":"#/components/schemas/Message","description":"Assistant's response message"},"finish_reason":{"type":"string","title":"Finish Reason","description":"Reason for completion: 'stop', 'length', 'tool_calls', etc."}},"type":"object","required":["index","message","finish_reason"],"title":"Choice"},"ConnectPlatformRequest":{"properties":{"platform":{"type":"string","title":"Platform"},"authCode":{"type":"string","title":"Authcode"},"redirectUri":{"type":"string","title":"Redirecturi"}},"type":"object","required":["platform","authCode","redirectUri"],"title":"ConnectPlatformRequest","description":"Request for POST /api/brand/platforms/connect"},"ConnectedPlatformInfo":{"properties":{"platform":{"type":"string","title":"Platform"},"username":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Username"},"displayName":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Displayname"},"avatarUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatarurl"},"isActive":{"type":"boolean","title":"Isactive","default":true},"connectedAt":{"type":"string","format":"date-time","title":"Connectedat"}},"type":"object","required":["platform","connectedAt"],"title":"ConnectedPlatformInfo","description":"Connected platform info for init response"},"ContentIdeaItem":{"properties":{"id":{"type":"integer","title":"Id"},"title":{"type":"string","title":"Title"},"angle":{"type":"string","title":"Angle"},"whyNow":{"type":"string","title":"Whynow"},"suggestedFormat":{"type":"string","title":"Suggestedformat"},"difficulty":{"type":"string","title":"Difficulty"},"used":{"type":"boolean","title":"Used","default":false}},"type":"object","required":["id","title","angle","whyNow","suggestedFormat","difficulty"],"title":"ContentIdeaItem","description":"Single content idea"},"ContentPackDetailResponse":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"type":"string","title":"Name"},"slug":{"type":"string","title":"Slug"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"category":{"type":"string","title":"Category"},"thumbnailUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnailurl"},"previewImages":{"items":{"type":"string"},"type":"array","title":"Previewimages","default":[]},"templateCount":{"type":"integer","title":"Templatecount","default":0},"platforms":{"items":{"type":"string"},"type":"array","title":"Platforms","default":[]},"industries":{"items":{"type":"string"},"type":"array","title":"Industries","default":[]},"tags":{"items":{"type":"string"},"type":"array","title":"Tags","default":[]},"isPremium":{"type":"boolean","title":"Ispremium","default":false},"isFeatured":{"type":"boolean","title":"Isfeatured","default":false},"usageCount":{"type":"integer","title":"Usagecount","default":0},"rating":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Rating"},"templates":{"items":{"$ref":"#/components/schemas/PackTemplateResponse"},"type":"array","title":"Templates","default":[]}},"type":"object","required":["id","name","slug","category"],"title":"ContentPackDetailResponse","description":"Detailed content pack with templates"},"ContentPackListResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/ContentPackResponse"},"type":"array","title":"Data"},"pagination":{"additionalProperties":true,"type":"object","title":"Pagination"}},"type":"object","required":["data","pagination"],"title":"ContentPackListResponse","description":"Response for GET /api/brand/packs"},"ContentPackResponse":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"type":"string","title":"Name"},"slug":{"type":"string","title":"Slug"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"category":{"type":"string","title":"Category"},"thumbnailUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnailurl"},"previewImages":{"items":{"type":"string"},"type":"array","title":"Previewimages","default":[]},"templateCount":{"type":"integer","title":"Templatecount","default":0},"platforms":{"items":{"type":"string"},"type":"array","title":"Platforms","default":[]},"industries":{"items":{"type":"string"},"type":"array","title":"Industries","default":[]},"tags":{"items":{"type":"string"},"type":"array","title":"Tags","default":[]},"isPremium":{"type":"boolean","title":"Ispremium","default":false},"isFeatured":{"type":"boolean","title":"Isfeatured","default":false},"usageCount":{"type":"integer","title":"Usagecount","default":0},"rating":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Rating"}},"type":"object","required":["id","name","slug","category"],"title":"ContentPackResponse","description":"Content pack response object"},"ContentPieceStateResponse":{"properties":{"pieceId":{"type":"string","title":"Pieceid"},"postText":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Posttext"},"imagePath":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Imagepath"},"imagePrompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Imageprompt"},"platform":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Platform"},"hashtags":{"items":{"type":"string"},"type":"array","title":"Hashtags","default":[]},"currentIteration":{"type":"integer","title":"Currentiteration","default":0},"latestScore":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Latestscore"},"approved":{"type":"boolean","title":"Approved","default":false},"feedbackHistory":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Feedbackhistory","default":[]},"scheduledAt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scheduledat"}},"type":"object","required":["pieceId"],"title":"ContentPieceStateResponse","description":"Response for content piece state"},"CreateAccountRequest":{"properties":{"name":{"type":"string","title":"Name","description":"Account display name"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email","description":"Contact email"},"tier":{"type":"string","title":"Tier","description":"Account tier: free/starter/pro/enterprise","default":"free"},"monthly_token_limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Monthly Token Limit","description":"Monthly token limit (null=unlimited)"}},"type":"object","required":["name"],"title":"CreateAccountRequest"},"CreateJobRequest":{"properties":{"message":{"type":"string","minLength":1,"title":"Message"},"userId":{"type":"string","title":"Userid"},"campaignId":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Campaignid"},"context":{"additionalProperties":true,"type":"object","title":"Context","default":{}},"sessionId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sessionid"},"leadAgent":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Leadagent"}},"type":"object","required":["message","userId"],"title":"CreateJobRequest","description":"Request for POST /api/brand/jobs"},"CreateKeyRequest":{"properties":{"account_id":{"type":"string","title":"Account Id","description":"Account UUID to create key for"},"name":{"type":"string","title":"Name","description":"Key name/label","default":"default"},"expires_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expires At","description":"ISO datetime expiry (null=never)"}},"type":"object","required":["account_id"],"title":"CreateKeyRequest"},"CreateSessionRequest":{"properties":{"userId":{"type":"string","title":"Userid"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"}},"type":"object","required":["userId"],"title":"CreateSessionRequest","description":"Request for POST /api/brand/sessions"},"DisconnectPlatformRequest":{"properties":{"platform":{"type":"string","title":"Platform"}},"type":"object","required":["platform"],"title":"DisconnectPlatformRequest","description":"Request for POST /api/brand/platforms/disconnect"},"EmbeddingsRequest":{"properties":{"input":{"items":{"type":"string"},"type":"array","title":"Input","description":"Text(s) to embed"},"model":{"type":"string","title":"Model","description":"Embedding model to use","default":"qwen3-embedding-8b"}},"type":"object","required":["input"],"title":"EmbeddingsRequest","example":{"input":["Hello world","How are you?"],"model":"qwen3-embedding-8b"}},"GeneratedImageDetailResponse":{"properties":{"id":{"type":"integer","title":"Id"},"userId":{"type":"string","title":"Userid"},"prompt":{"type":"string","title":"Prompt"},"style":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Style"},"model":{"type":"string","title":"Model"},"size":{"type":"string","title":"Size"},"filepath":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filepath"},"campaignId":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Campaignid"},"jobId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Jobid"},"contentPieceId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contentpieceid"},"iteration":{"type":"integer","title":"Iteration"},"parentImageId":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Parentimageid"},"approved":{"type":"boolean","title":"Approved"},"archived":{"type":"boolean","title":"Archived"},"createdAt":{"type":"string","format":"date-time","title":"Createdat"},"base64Data":{"type":"string","title":"Base64Data"},"dataUrl":{"type":"string","title":"Dataurl"}},"type":"object","required":["id","userId","prompt","model","size","iteration","approved","archived","createdAt","base64Data","dataUrl"],"title":"GeneratedImageDetailResponse","description":"Full generated image with base64 data"},"GeneratedImageListResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/GeneratedImageResponse"},"type":"array","title":"Data"},"total":{"type":"integer","title":"Total"},"pagination":{"additionalProperties":true,"type":"object","title":"Pagination"}},"type":"object","required":["data","total","pagination"],"title":"GeneratedImageListResponse","description":"Response for GET /api/brand/images"},"GeneratedImageResponse":{"properties":{"id":{"type":"integer","title":"Id"},"userId":{"type":"string","title":"Userid"},"prompt":{"type":"string","title":"Prompt"},"style":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Style"},"model":{"type":"string","title":"Model"},"size":{"type":"string","title":"Size"},"filepath":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filepath"},"campaignId":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Campaignid"},"jobId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Jobid"},"contentPieceId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contentpieceid"},"iteration":{"type":"integer","title":"Iteration"},"parentImageId":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Parentimageid"},"approved":{"type":"boolean","title":"Approved"},"archived":{"type":"boolean","title":"Archived"},"createdAt":{"type":"string","format":"date-time","title":"Createdat"}},"type":"object","required":["id","userId","prompt","model","size","iteration","approved","archived","createdAt"],"title":"GeneratedImageResponse","description":"Generated image response object"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"HashtagAnalysisItem":{"properties":{"tag":{"type":"string","title":"Tag"},"postCount":{"type":"integer","title":"Postcount"},"avgEngagement":{"type":"number","title":"Avgengagement"},"growth":{"type":"number","title":"Growth"},"difficulty":{"type":"string","title":"Difficulty"}},"type":"object","required":["tag","postCount","avgEngagement","growth","difficulty"],"title":"HashtagAnalysisItem","description":"Single hashtag analysis"},"HashtagAnalyzeRequest":{"properties":{"hashtags":{"items":{"type":"string"},"type":"array","maxItems":10,"minItems":1,"title":"Hashtags"},"platform":{"type":"string","title":"Platform"}},"type":"object","required":["hashtags","platform"],"title":"HashtagAnalyzeRequest","description":"Request for POST /api/brand/research/hashtags/analyze"},"HashtagAnalyzeResponse":{"properties":{"results":{"items":{"$ref":"#/components/schemas/HashtagAnalysisItem"},"type":"array","title":"Results","default":[]},"recommendations":{"items":{"type":"string"},"type":"array","title":"Recommendations","default":[]}},"type":"object","title":"HashtagAnalyzeResponse","description":"Response for POST /api/brand/research/hashtags/analyze"},"HealthResponse":{"properties":{"status":{"type":"string","title":"Status","description":"Health status: 'healthy' or 'unhealthy'"},"timestamp":{"type":"string","title":"Timestamp","description":"ISO timestamp of health check"},"test_model":{"type":"string","title":"Test Model","description":"Model used for health check"},"latency_ms":{"type":"integer","title":"Latency Ms","description":"Response latency in milliseconds"},"total_models":{"type":"integer","title":"Total Models","description":"Total number of available models"}},"type":"object","required":["status","timestamp","test_model","latency_ms","total_models"],"title":"HealthResponse","example":{"latency_ms":450,"status":"healthy","test_model":"llama-3.1-8b","timestamp":"2026-01-12T16:30:00.000000","total_models":40}},"IdeasRequest":{"properties":{"topic":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Topic"},"platform":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Platform"},"count":{"type":"integer","maximum":10.0,"minimum":1.0,"title":"Count","default":5}},"type":"object","title":"IdeasRequest","description":"Request for POST /api/brand/research/ideas"},"IdeasResponse":{"properties":{"ideas":{"items":{"$ref":"#/components/schemas/ContentIdeaItem"},"type":"array","title":"Ideas","default":[]}},"type":"object","title":"IdeasResponse","description":"Response for POST /api/brand/research/ideas"},"InitResponse":{"properties":{"user":{"$ref":"#/components/schemas/UserInfo"},"brandProfile":{"anyOf":[{"$ref":"#/components/schemas/BrandProfileSummary"},{"type":"null"}]},"connectedPlatforms":{"items":{"$ref":"#/components/schemas/ConnectedPlatformInfo"},"type":"array","title":"Connectedplatforms","default":[]},"onboarding":{"$ref":"#/components/schemas/OnboardingStatus"},"stats":{"$ref":"#/components/schemas/InitStats"}},"type":"object","required":["user","onboarding","stats"],"title":"InitResponse","description":"Response for GET /api/brand/init"},"InitStats":{"properties":{"totalCampaigns":{"type":"integer","title":"Totalcampaigns","default":0},"activeCampaigns":{"type":"integer","title":"Activecampaigns","default":0},"totalPosts":{"type":"integer","title":"Totalposts","default":0},"scheduledPosts":{"type":"integer","title":"Scheduledposts","default":0},"publishedPosts":{"type":"integer","title":"Publishedposts","default":0},"totalAssets":{"type":"integer","title":"Totalassets","default":0},"storageUsedBytes":{"type":"integer","title":"Storageusedbytes","default":0},"storageUsedPercent":{"type":"number","title":"Storageusedpercent","default":0.0}},"type":"object","title":"InitStats","description":"Statistics for init response"},"IsolatedAgentRequest":{"properties":{"message":{"type":"string","minLength":1,"title":"Message"},"userId":{"type":"string","title":"Userid"},"context":{"additionalProperties":true,"type":"object","title":"Context","default":{}},"images":{"items":{"$ref":"#/components/schemas/app__schemas__brand_api__ImageAttachment"},"type":"array","title":"Images","default":[]},"useVision":{"type":"boolean","title":"Usevision","default":false},"campaignId":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Campaignid"},"contentPieceId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contentpieceid"},"stream":{"type":"boolean","title":"Stream","default":true}},"type":"object","required":["message","userId"],"title":"IsolatedAgentRequest","description":"Request for POST /api/brand/agent/{agent_id}"},"IterationLoopRequest":{"properties":{"contentPieceId":{"type":"string","title":"Contentpieceid"},"imagePrompt":{"type":"string","title":"Imageprompt"},"imagePath":{"type":"string","title":"Imagepath"},"postText":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Posttext"},"userId":{"type":"string","title":"Userid"},"context":{"additionalProperties":true,"type":"object","title":"Context","default":{}},"campaignId":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Campaignid"}},"type":"object","required":["contentPieceId","imagePrompt","imagePath","userId"],"title":"IterationLoopRequest","description":"Request for POST /api/brand/iteration"},"JobEventResponse":{"properties":{"id":{"type":"integer","title":"Id"},"eventType":{"type":"string","title":"Eventtype"},"agentId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Agentid"},"data":{"additionalProperties":true,"type":"object","title":"Data","default":{}},"createdAt":{"type":"string","format":"date-time","title":"Createdat"}},"type":"object","required":["id","eventType","createdAt"],"title":"JobEventResponse","description":"Single job event"},"JobEventsResponse":{"properties":{"events":{"items":{"$ref":"#/components/schemas/JobEventResponse"},"type":"array","title":"Events"},"lastEventId":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Lasteventid"},"hasMore":{"type":"boolean","title":"Hasmore","default":false}},"type":"object","required":["events"],"title":"JobEventsResponse","description":"Response for GET /api/brand/jobs/{id}/events"},"JobListResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/JobResponse"},"type":"array","title":"Data"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["data","total"],"title":"JobListResponse","description":"Response for GET /api/brand/jobs"},"JobResponse":{"properties":{"id":{"type":"string","title":"Id"},"userId":{"type":"string","title":"Userid"},"campaignId":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Campaignid"},"status":{"type":"string","title":"Status"},"initialMessage":{"type":"string","title":"Initialmessage"},"leadAgent":{"type":"string","title":"Leadagent"},"currentAgent":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Currentagent"},"redirectCount":{"type":"integer","title":"Redirectcount","default":0},"errorMessage":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Errormessage"},"createdAt":{"type":"string","format":"date-time","title":"Createdat"},"startedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Startedat"},"pausedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Pausedat"},"completedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completedat"},"updatedAt":{"type":"string","format":"date-time","title":"Updatedat"}},"type":"object","required":["id","userId","status","initialMessage","leadAgent","createdAt","updatedAt"],"title":"JobResponse","description":"Job response object"},"Message":{"properties":{"role":{"$ref":"#/components/schemas/MessageRole","description":"The role of the message author"},"content":{"anyOf":[{"type":"string"},{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Content","description":"The content of the message. String for text, list of content parts for multimodal, or null for tool-call messages."},"tool_calls":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Tool Calls","description":"Tool calls made by the assistant (present when role=assistant and model invokes tools)."},"tool_call_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tool Call Id","description":"The ID of the tool call this message is a response to (present when role=tool)."}},"type":"object","required":["role"],"title":"Message","examples":[{"content":"Hello, how are you?","role":"user"},{"content":"I'm doing well, thank you!","role":"assistant"},{"content":"You are a helpful assistant.","role":"system"},{"content":[{"image_url":{"url":"data:image/jpeg;base64,/9j/..."},"type":"image_url"},{"text":"What do you see in this image?","type":"text"}],"role":"user"}]},"MessageRequest":{"properties":{"content":{"type":"string","title":"Content"}},"type":"object","required":["content"],"title":"MessageRequest","description":"Request body for sending operator message."},"MessageRole":{"type":"string","enum":["system","user","assistant","tool"],"title":"MessageRole"},"OnboardingCompleteRequest":{"properties":{"step":{"type":"string","title":"Step","description":"Step to mark as complete"}},"type":"object","required":["step"],"title":"OnboardingCompleteRequest","description":"Request for POST /api/brand/onboarding/complete"},"OnboardingCompleteResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"step":{"type":"string","title":"Step"},"completedAt":{"type":"string","format":"date-time","title":"Completedat"},"nextStep":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Nextstep"},"onboardingComplete":{"type":"boolean","title":"Onboardingcomplete","default":false}},"type":"object","required":["success","step","completedAt"],"title":"OnboardingCompleteResponse","description":"Response for POST /api/brand/onboarding/complete"},"OnboardingStatus":{"properties":{"completed":{"type":"boolean","title":"Completed","default":false},"completedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completedat"},"steps":{"additionalProperties":{"type":"boolean"},"type":"object","title":"Steps","default":{}}},"type":"object","title":"OnboardingStatus","description":"Onboarding status for init response"},"OnboardingStatusResponse":{"properties":{"completed":{"type":"boolean","title":"Completed","default":false},"completedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completedat"},"currentStep":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Currentstep"},"steps":{"additionalProperties":{"additionalProperties":true,"type":"object"},"type":"object","title":"Steps","default":{}}},"type":"object","title":"OnboardingStatusResponse","description":"Response for GET /api/brand/onboarding/status"},"OptimalTimeSlot":{"properties":{"time":{"type":"string","title":"Time"},"score":{"type":"number","title":"Score"},"reason":{"type":"string","title":"Reason"}},"type":"object","required":["time","score","reason"],"title":"OptimalTimeSlot","description":"Single optimal time slot"},"OptimalTimesResponse":{"properties":{"platform":{"type":"string","title":"Platform"},"date":{"type":"string","title":"Date"},"slots":{"items":{"$ref":"#/components/schemas/OptimalTimeSlot"},"type":"array","title":"Slots","default":[]}},"type":"object","required":["platform","date"],"title":"OptimalTimesResponse","description":"Response for GET /api/brand/calendar/optimal-times"},"PackTemplateResponse":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"captionTemplate":{"type":"string","title":"Captiontemplate"},"platform":{"type":"string","title":"Platform"},"postType":{"type":"string","title":"Posttype"},"hashtagSuggestions":{"items":{"type":"string"},"type":"array","title":"Hashtagsuggestions","default":[]},"sampleImageUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sampleimageurl"},"sortOrder":{"type":"integer","title":"Sortorder","default":0}},"type":"object","required":["id","name","captionTemplate","platform","postType"],"title":"PackTemplateResponse","description":"Pack template response object"},"PlatformConnectionResponse":{"properties":{"id":{"type":"integer","title":"Id"},"platform":{"type":"string","title":"Platform"},"platformUserId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Platformuserid"},"platformUsername":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Platformusername"},"platformDisplayName":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Platformdisplayname"},"platformAvatarUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Platformavatarurl"},"isActive":{"type":"boolean","title":"Isactive","default":true},"scopes":{"items":{"type":"string"},"type":"array","title":"Scopes","default":[]},"connectedAt":{"type":"string","format":"date-time","title":"Connectedat"},"lastSyncAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Lastsyncat"}},"type":"object","required":["id","platform","connectedAt"],"title":"PlatformConnectionResponse","description":"Platform connection response"},"PlatformListResponse":{"properties":{"connected":{"items":{"$ref":"#/components/schemas/PlatformConnectionResponse"},"type":"array","title":"Connected","default":[]},"available":{"items":{"type":"string"},"type":"array","title":"Available","default":[]}},"type":"object","title":"PlatformListResponse","description":"Response for GET /api/brand/platforms"},"PostAnalytics":{"properties":{"postId":{"type":"integer","title":"Postid"},"reach":{"type":"integer","title":"Reach","default":0},"impressions":{"type":"integer","title":"Impressions","default":0},"engagement":{"type":"integer","title":"Engagement","default":0},"engagementRate":{"type":"number","title":"Engagementrate","default":0.0},"likes":{"type":"integer","title":"Likes","default":0},"comments":{"type":"integer","title":"Comments","default":0},"shares":{"type":"integer","title":"Shares","default":0},"saves":{"type":"integer","title":"Saves","default":0},"clicks":{"type":"integer","title":"Clicks","default":0},"followersGained":{"type":"integer","title":"Followersgained","default":0}},"type":"object","required":["postId"],"title":"PostAnalytics","description":"Response for GET /api/brand/analytics/posts/:id"},"PostCreate":{"properties":{"content":{"type":"string","maxLength":5000,"minLength":1,"title":"Content"},"platform":{"type":"string","title":"Platform"},"title":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Title"},"hashtags":{"items":{"type":"string"},"type":"array","title":"Hashtags","default":[]},"mediaUrls":{"items":{"type":"string"},"type":"array","title":"Mediaurls","default":[]},"scheduledAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Scheduledat"},"campaignId":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Campaignid"}},"type":"object","required":["content","platform"],"title":"PostCreate","description":"Request for POST /api/brand/posts"},"PostListResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/PostResponse"},"type":"array","title":"Data"},"pagination":{"additionalProperties":true,"type":"object","title":"Pagination"}},"type":"object","required":["data","pagination"],"title":"PostListResponse","description":"Response for GET /api/brand/posts"},"PostResponse":{"properties":{"id":{"type":"integer","title":"Id"},"content":{"type":"string","title":"Content"},"platform":{"type":"string","title":"Platform"},"status":{"type":"string","title":"Status"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"hashtags":{"items":{"type":"string"},"type":"array","title":"Hashtags","default":[]},"mediaUrls":{"items":{"type":"string"},"type":"array","title":"Mediaurls","default":[]},"scheduledAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Scheduledat"},"publishedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Publishedat"},"campaignId":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Campaignid"},"campaignName":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Campaignname"},"brandApproved":{"type":"boolean","title":"Brandapproved","default":false},"brandScore":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Brandscore"},"estimatedReach":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Estimatedreach"},"createdAt":{"type":"string","format":"date-time","title":"Createdat"},"updatedAt":{"type":"string","format":"date-time","title":"Updatedat"}},"type":"object","required":["id","content","platform","status","createdAt","updatedAt"],"title":"PostResponse","description":"Post response object"},"PostScheduleRequest":{"properties":{"scheduledAt":{"type":"string","format":"date-time","title":"Scheduledat"}},"type":"object","required":["scheduledAt"],"title":"PostScheduleRequest","description":"Request for POST /api/brand/posts/:id/schedule"},"PostUpdate":{"properties":{"content":{"anyOf":[{"type":"string","maxLength":5000,"minLength":1},{"type":"null"}],"title":"Content"},"title":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Title"},"hashtags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Hashtags"},"mediaUrls":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Mediaurls"},"scheduledAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Scheduledat"},"campaignId":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Campaignid"}},"type":"object","title":"PostUpdate","description":"Request for PUT /api/brand/posts/:id"},"RedirectJobRequest":{"properties":{"newDirection":{"type":"string","minLength":1,"title":"Newdirection","description":"New instructions for the job"}},"type":"object","required":["newDirection"],"title":"RedirectJobRequest","description":"Request for POST /api/brand/jobs/{id}/redirect"},"ResumeJobRequest":{"properties":{"newMessage":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Newmessage","description":"Optional additional context"}},"type":"object","title":"ResumeJobRequest","description":"Request for POST /api/brand/jobs/{id}/resume"},"RouterInfo":{"properties":{"mode":{"type":"string","title":"Mode","description":"Routing mode: 'AUTO' or 'MODEL'"},"route_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Route Id","description":"Selected route (e.g., 'R-CODE', 'R-REASON')"},"selected_model":{"type":"string","title":"Selected Model","description":"Canonical model ID selected"},"selected_provider_model_id":{"type":"string","title":"Selected Provider Model Id","description":"Provider's model ID"},"confidence":{"type":"number","title":"Confidence","description":"Routing confidence score (0-1)"},"reasons":{"items":{"type":"string"},"type":"array","title":"Reasons","description":"Reasons for model selection"}},"type":"object","required":["mode","selected_model","selected_provider_model_id","confidence","reasons"],"title":"RouterInfo"},"RouterPlanRequest":{"properties":{"messages":{"items":{"$ref":"#/components/schemas/Message"},"type":"array","minItems":1,"title":"Messages","description":"Messages to analyze for routing"}},"type":"object","required":["messages"],"title":"RouterPlanRequest","example":{"messages":[{"content":"Write Python code to sort a list","role":"user"}]}},"RouterPlanResponse":{"properties":{"route_id":{"type":"string","title":"Route Id","description":"Selected route"},"confidence":{"type":"number","title":"Confidence","description":"Routing confidence"},"candidates":{"items":{"type":"string"},"type":"array","title":"Candidates","description":"Candidate models for this route"},"recommended_params":{"additionalProperties":true,"type":"object","title":"Recommended Params","description":"Recommended parameters"},"notes":{"items":{"type":"string"},"type":"array","title":"Notes","description":"Routing reasons"}},"type":"object","required":["route_id","confidence","candidates","recommended_params","notes"],"title":"RouterPlanResponse","example":{"candidates":["qwen3-coder-480b","qwen3-coder-30b","deepseek-r1"],"confidence":0.86,"notes":["code_keywords_detected"],"recommended_params":{"temperature":0.2,"top_p":0.9},"route_id":"R-CODE"}},"SaveImageRequest":{"properties":{"base64Data":{"type":"string","title":"Base64Data","description":"Base64 encoded image data (without data URI prefix)"},"prompt":{"type":"string","minLength":1,"title":"Prompt"},"style":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Style"},"model":{"type":"string","title":"Model","default":"flux-schnell"},"size":{"type":"string","title":"Size","default":"1024x1024"},"campaignId":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Campaignid"},"jobId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Jobid"},"contentPieceId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contentpieceid"},"iteration":{"type":"integer","title":"Iteration","default":1},"parentImageId":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Parentimageid"}},"type":"object","required":["base64Data","prompt"],"title":"SaveImageRequest","description":"Request for POST /api/brand/images - save a generated image"},"SentimentCheckRequest":{"properties":{"messages":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Messages"},"turn_count":{"type":"integer","title":"Turn Count"}},"type":"object","required":["messages","turn_count"],"title":"SentimentCheckRequest","description":"Request to check if a call should be offered."},"SentimentCheckResponse":{"properties":{"should_offer_call":{"type":"boolean","title":"Should Offer Call"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"},"confidence":{"type":"number","title":"Confidence","default":0.0}},"type":"object","required":["should_offer_call"],"title":"SentimentCheckResponse","description":"Response indicating if call should be offered."},"SessionHistoryResponse":{"properties":{"sessionId":{"type":"string","title":"Sessionid"},"messages":{"items":{"$ref":"#/components/schemas/ChatMessageResponse"},"type":"array","title":"Messages"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["sessionId","messages","total"],"title":"SessionHistoryResponse","description":"Response for GET /api/brand/sessions/{id}/history"},"SessionListResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/SessionResponse"},"type":"array","title":"Data"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["data","total"],"title":"SessionListResponse","description":"Response for GET /api/brand/sessions"},"SessionResponse":{"properties":{"id":{"type":"string","title":"Id"},"userId":{"type":"string","title":"Userid"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"lastMessage":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lastmessage"},"messageCount":{"type":"integer","title":"Messagecount","default":0},"createdAt":{"type":"string","format":"date-time","title":"Createdat"},"updatedAt":{"type":"string","format":"date-time","title":"Updatedat"}},"type":"object","required":["id","userId","createdAt","updatedAt"],"title":"SessionResponse","description":"Chat session response object"},"SimulateWhatsAppRequest":{"properties":{"phone":{"type":"string","title":"Phone"},"message":{"type":"string","title":"Message"}},"type":"object","required":["phone","message"],"title":"SimulateWhatsAppRequest","description":"Request body for simulating WhatsApp message."},"TakeoverRequest":{"properties":{"operator_id":{"type":"string","title":"Operator Id"}},"type":"object","required":["operator_id"],"title":"TakeoverRequest","description":"Request body for takeover endpoint."},"TitleGenerationRequest":{"properties":{"messages":{"items":{"$ref":"#/components/schemas/Message"},"type":"array","minItems":1,"title":"Messages","description":"Messages to generate a title from (typically first user + assistant exchange)"}},"type":"object","required":["messages"],"title":"TitleGenerationRequest","example":{"messages":[{"content":"How do I sort a list in Python?","role":"user"},{"content":"You can use the sorted() function...","role":"assistant"}]}},"TitleGenerationResponse":{"properties":{"title":{"type":"string","title":"Title","description":"Generated conversation title (3-7 words)"}},"type":"object","required":["title"],"title":"TitleGenerationResponse","example":{"title":"Python List Sorting"}},"TrendItem":{"properties":{"topic":{"type":"string","title":"Topic"},"platform":{"type":"string","title":"Platform"},"growthPercent":{"type":"number","title":"Growthpercent"},"volume":{"type":"integer","title":"Volume"},"competition":{"type":"string","title":"Competition"},"source":{"type":"string","title":"Source"}},"type":"object","required":["topic","platform","growthPercent","volume","competition","source"],"title":"TrendItem","description":"Single trend item"},"TrendsResponse":{"properties":{"trends":{"items":{"$ref":"#/components/schemas/TrendItem"},"type":"array","title":"Trends","default":[]},"updatedAt":{"type":"string","format":"date-time","title":"Updatedat"}},"type":"object","required":["updatedAt"],"title":"TrendsResponse","description":"Response for GET /api/brand/research/trends"},"UpdateAccountRequest":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"tier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tier"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"},"monthly_token_limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Monthly Token Limit"}},"type":"object","title":"UpdateAccountRequest"},"Usage":{"properties":{"prompt_tokens":{"type":"integer","title":"Prompt Tokens","description":"Tokens in the prompt"},"completion_tokens":{"type":"integer","title":"Completion Tokens","description":"Tokens in the completion"},"total_tokens":{"type":"integer","title":"Total Tokens","description":"Total tokens used"}},"type":"object","required":["prompt_tokens","completion_tokens","total_tokens"],"title":"Usage"},"UsePackRequest":{"properties":{"variables":{"additionalProperties":{"type":"string"},"type":"object","title":"Variables","default":{}},"campaignId":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Campaignid"}},"type":"object","title":"UsePackRequest","description":"Request for POST /api/brand/packs/:id/use"},"UsePackResponse":{"properties":{"postsCreated":{"type":"integer","title":"Postscreated"},"posts":{"items":{"$ref":"#/components/schemas/PostResponse"},"type":"array","title":"Posts","default":[]}},"type":"object","required":["postsCreated"],"title":"UsePackResponse","description":"Response for POST /api/brand/packs/:id/use"},"UserInfo":{"properties":{"id":{"type":"string","title":"Id"},"email":{"type":"string","title":"Email"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"avatarUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatarurl"},"subscriptionTier":{"type":"string","title":"Subscriptiontier","default":"free"}},"type":"object","required":["id","email"],"title":"UserInfo","description":"User information for init response"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"VisionAnalyzeRequest":{"properties":{"image_base64":{"type":"string","title":"Image Base64","description":"Base64-encoded image (JPEG or PNG)"},"system_prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"System Prompt","description":"Custom system prompt. If not provided, uses default KFZ damage analysis prompt."},"user_prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Prompt","description":"User prompt to accompany the image.","default":"Analysiere dieses Fahrzeugfoto."},"temperature":{"type":"number","maximum":2.0,"minimum":0.0,"title":"Temperature","default":0.1},"max_tokens":{"type":"integer","title":"Max Tokens","description":"Maximum tokens to generate","default":1500}},"type":"object","required":["image_base64"],"title":"VisionAnalyzeRequest","example":{"image_base64":"/9j/4AAQSkZJRgABAQ...","max_tokens":1500,"temperature":0.1,"user_prompt":"Analysiere dieses Fahrzeugfoto."}},"VisionAnalyzeResponse":{"properties":{"content":{"type":"string","title":"Content","description":"Model's analysis response (typically JSON)"},"model":{"type":"string","title":"Model","description":"Model used for analysis"},"usage":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Usage","description":"Token usage statistics"}},"type":"object","required":["content","model"],"title":"VisionAnalyzeResponse","example":{"content":"{\"foto_typ\": \"beschaedigung\", \"position\": \"Stossfänger vorn\", \"schaeden\": [...]}","model":"Qwen/Qwen2.5-VL-72B-Instruct","usage":{"completion_tokens":200,"prompt_tokens":500,"total_tokens":700}}},"WhisperRequest":{"properties":{"content":{"type":"string","title":"Content"},"type":{"type":"string","title":"Type","default":"custom"}},"type":"object","required":["content"],"title":"WhisperRequest","description":"Request body for applying whisper."},"app__api__chat__BlockAction":{"properties":{"blockId":{"type":"string","title":"Blockid","description":"Which block was interacted with"},"blockType":{"type":"string","title":"Blocktype","description":"Type of the block"},"actionId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Actionid","description":"For buttons: which button clicked"},"selected":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Selected","description":"For selection: which options selected"},"values":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Values","description":"For form: field values"},"newContent":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Newcontent","description":"For editable: updated content"}},"type":"object","required":["blockId","blockType"],"title":"BlockAction","description":"Block interaction from frontend."},"app__api__chat__ChatRequest":{"properties":{"message":{"type":"string","title":"Message","description":"User's message","default":""},"userId":{"type":"string","title":"Userid","description":"User identifier","default":"anonymous"},"sessionId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sessionid","description":"Session ID for history"},"history":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"History","description":"Conversation history"},"context":{"additionalProperties":true,"type":"object","title":"Context","description":"Additional context"},"images":{"anyOf":[{"items":{"$ref":"#/components/schemas/app__api__chat__ImageAttachment"},"type":"array"},{"type":"null"}],"title":"Images","description":"Image attachments"},"stream":{"type":"boolean","title":"Stream","description":"Enable streaming response","default":true},"blockAction":{"anyOf":[{"$ref":"#/components/schemas/app__api__chat__BlockAction"},{"type":"null"}],"description":"Block interaction from UI"},"use_langgraph":{"type":"boolean","title":"Use Langgraph","description":"Use LangGraph for campaign workflows","default":false}},"type":"object","title":"ChatRequest","description":"Unified chat request."},"app__api__chat__ImageAttachment":{"properties":{"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"base64":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Base64"},"mime_type":{"type":"string","title":"Mime Type","default":"image/jpeg"}},"type":"object","title":"ImageAttachment","description":"Image attachment for vision requests."},"app__geuder__api__conversations__ChatRequest":{"properties":{"message":{"type":"string","title":"Message"},"session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id"}},"type":"object","required":["message"],"title":"ChatRequest","description":"Request body for web chat endpoint."},"app__schemas__brand_api__BlockAction":{"properties":{"blockId":{"type":"string","title":"Blockid"},"blockType":{"type":"string","title":"Blocktype"},"actionId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Actionid"},"selected":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Selected"},"values":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Values"},"newContent":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Newcontent"},"postId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Postid"},"newDateTime":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Newdatetime"}},"type":"object","required":["blockId","blockType"],"title":"BlockAction","description":"Action callback from interactive UI blocks"},"app__schemas__brand_api__ImageAttachment":{"properties":{"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"base64":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Base64"},"mime_type":{"type":"string","title":"Mime Type","default":"image/jpeg"}},"type":"object","title":"ImageAttachment","description":"Image attachment for chat messages"}}},"tags":[{"name":"Chat","description":"Send messages and get AI responses."},{"name":"Models & Routing","description":"List models and preview routing decisions."},{"name":"Utilities","description":"Health checks and embeddings."},{"name":"Brand Studio","description":"Brand profile, initialization, and chat."},{"name":"Campaigns","description":"Campaign management and lifecycle."},{"name":"Posts","description":"Post creation, scheduling, and publishing."},{"name":"Calendar","description":"Calendar view and scheduling."},{"name":"Assets","description":"Media asset management."},{"name":"Content Packs","description":"Pre-built content templates."},{"name":"Analytics","description":"Performance metrics and insights."},{"name":"Research","description":"Trends, hashtags, and content ideas."},{"name":"Platforms","description":"Social platform connections."},{"name":"Geuder","description":"WhatsApp agent for Geuder medical instruments."},{"name":"Gateway Admin","description":"Admin endpoints for gateway accounts, API keys, and usage."}]}